source: extensions/event_cats/main.inc.php @ 4553

Last change on this file since 4553 was 4553, checked in by LucMorizur, 14 years ago

[Event Cats] Add feature 1335 (possibility to display the 'Connection' link in identification block menu for generic users)

File size: 11.5 KB
Line 
1<?php
2
3/*
4Plugin Name: Event Cats
5Version: auto
6Description: A single URL can be enough to be identified, and a user can duplicate his account to create a new one getting immediately the same properties. / On peut être identifié grâce à un simple URL, et on peut dupliquer son compte pour créer un nouveau compte ayant immédiatement les mêmes propriétés.
7Plugin URI: http://piwigo.org/ext/extension_svn.php?eid=326
8Author: LucMorizur
9Author URI: http://lucmorizur.free.fr
10*/
11
12// +-----------------------------------------------------------------------+
13// | Piwigo - a PHP based picture gallery                                  |
14// +-----------------------------------------------------------------------+
15// | Copyright(C) 2008-2009 Piwigo Team                  http://piwigo.org |
16// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
17// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
18// +-----------------------------------------------------------------------+
19// | This program is free software; you can redistribute it and/or modify  |
20// | it under the terms of the GNU General Public License as published by  |
21// | the Free Software Foundation                                          |
22// |                                                                       |
23// | This program is distributed in the hope that it will be useful, but   |
24// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
25// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
26// | General Public License for more details.                              |
27// |                                                                       |
28// | You should have received a copy of the GNU General Public License     |
29// | along with this program; if not, write to the Free Software           |
30// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
31// | USA.                                                                  |
32// +-----------------------------------------------------------------------+
33
34// Keeps file coded in UTF-8 without BOM : é
35
36if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
37
38// pour faciliter le debug - make debug easier :o)
39//ini_set('error_reporting', E_ALL);
40//ini_set('display_errors', true);
41
42global $conf, $prefixeTable, $ec_lists, $ec_page;
43$ec_page = NULL;
44
45define( // -------------------------------------------------------------------
46  'EVNTCATS_INFO_VERSION', // VERSION HISTORY :
47   '1.2.0' // Add feature 1335, Possibility to display the 'Connection'
48           // link in identification block menu for generic users ;
49           // finish (?) english translation
50
51// --------------------------------------------------------------------------- => à modifier :
52                                                                               // evntcats_admin.php -> analyser un changement d'option dans la page d'options ;
53                                                                               // config.tpl         -> proposer le réglage de cette nouvelle option ;
54                                                                               // main.inc.php       -> afficher le lien si l'option le demande.
55
56// '1.1.5' // Fix bugs 1324 and 1325
57// '1.1.4' // Improve help banner
58// '1.1.3' // Better help banner management ; finalize banner texts
59// '1.1.2' // Better help banner example : some examples
60// '1.1.1' // Better help banner example ; but still no text in it
61// '1.1.0' // First bugs (1305 and 1306) corrected ;
62           // add newly created user/group association with cat/AP (was
63           // forgotten) ; begin help banner
64// '1.0.0' // Conception version
65); // ------------------------------------------------------------------------
66define(
67  'EVNTCATS_PATH',
68   PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/'
69);
70define(
71  'EVNTCATS_TABLE',
72   $prefixeTable.'event_cats'
73);
74define(
75  'ROOT_URL',
76   get_absolute_root_url()
77);
78
79include_once(EVNTCATS_PATH.'include/evntcats_main_funcs.inc.php');
80
81class event_cats {
82// Sets the administration panel of the plugin
83  function plugin_admin_menu($menu) {
84    array_push($menu,
85      array(
86        'NAME' => 'Event Cats',
87        'URL'  => get_admin_plugin_menu_link(dirname(__FILE__).
88                  '/admin/evntcats_admin.php')
89      )
90    );
91    return $menu;
92  }
93} // End class
94
95$obj = new event_cats();
96
97// Adds the translation of "duplicate" link
98load_language('duplic.lang', EVNTCATS_PATH);
99
100// Admin help management
101add_event_handler('get_popup_help_content', 'ec_popup_help_content',
102 EVENT_HANDLER_PRIORITY_NEUTRAL, 2);
103
104function ec_popup_help_content($popup_help_content, $page) {
105  return (
106   $help_content = (is_admin() and $page = 'help') ?
107    load_language($page.'.html', EVNTCATS_PATH, array('return' => true)) : false
108  ) ? $popup_help_content.$help_content : $popup_help_content;
109}
110
111//----------------------------------
112
113/**
114 *
115 * auto_log_user()
116 * the function uses the value of the argument "autolog" of the posted URL, as a code
117 * to know which username has to be logged in.
118 *
119 * @param no parameter
120 * @return no return value
121 */
122
123add_event_handler('init', 'auto_log_user');
124
125function auto_log_user() {
126  global $ec_lists, $ec_page;
127
128  $ec_ap  = NULL;
129  $ec_cat = NULL;
130  $ec_img = NULL;
131 
132  if (isset($_GET['autolog']) and (read_ec_conf('activated') == 1)) {
133    if (!is_a_guest()) {
134      $url = '';
135      foreach ($_GET as $item => $value) {
136        $url.= '&'.$item.'='.$value;
137      }
138      logout_user();
139      redirect(make_index_url().$url);
140    }
141    build_ec_lists();
142    foreach ($ec_lists['ec_table'] as $ec_entry) {
143      if ($code_exists = ($ec_entry['code'] == $_GET['autolog'])) break;
144    }
145    if ($code_exists) {
146      if (is_in($ec_entry['action'], 'ec_ok')) {
147        log_user($ec_entry['user_id'], false);
148        if (isset($_GET['ap'])) $ec_ap = $_GET['ap'];
149        if (isset($_GET['cat'])) $ec_cat = $_GET['cat'];
150        if (isset($_GET['img'])) $ec_img = $_GET['img'];
151        if ($ec_entry['forced'] == 'true') {
152          if (empty($ec_entry['arg1']) and !empty($ec_entry['arg2'])) {
153            $ec_ap = $ec_entry['arg2'];
154          }
155          elseif (!empty($ec_entry['arg1'])) {
156            $ec_cat = $ec_entry['arg1'];
157            if (!empty($ec_entry['arg2'])) $ec_img = $ec_entry['arg2'];
158          }
159        }
160        if (isset($ec_ap)) {
161          if (array_key_exists($ec_ap,$ec_lists['add_pages'])) {
162            redirect(
163             PHPWG_ROOT_PATH.'index.php?/additional_page/'.$ec_ap);
164          }
165        }
166        elseif (isset($ec_cat)) {
167          if (array_key_exists($ec_cat, $ec_lists['categories'])) {
168            if (isset($ec_img)) {
169              if (ec_image_exists($ec_cat, $ec_img)) {
170                redirect(PHPWG_ROOT_PATH.'picture.php?/'.$ec_img.'/category/'.$ec_cat);
171              }
172            }
173            $ec_page = PHPWG_ROOT_PATH.'index.php?/category/'.$ec_cat;
174            redirect($ec_page);
175          }
176        }
177        redirect(make_index_url());
178      }
179      else {
180        if (
181         $ec_entry['action'] == 'ec_nok' or
182         $ec_entry['action'] == 'ec_nok_ap_pb'
183        ) {
184          if ($ec_entry['action'] == 'ec_nok_ap_pb') access_denied();
185          $ec_ap = $ec_entry['arg2'];
186          if (array_key_exists($ec_ap, $ec_lists['add_pages'])) {
187            redirect(
188             PHPWG_ROOT_PATH.'index.php?/additional_page/'.$ec_ap);
189          }
190          access_denied();
191        }
192        else {
193          redirect(make_index_url());
194        }
195      }
196    }
197    else {
198      if (
199       read_ec_conf('unknown_code') == '2' and
200        array_key_exists(
201         read_ec_conf('unknown_code_ap_id'), $ec_lists['add_pages']
202        )
203       ) {
204        redirect(
205         PHPWG_ROOT_PATH.
206         'index.php?/additional_page/'.read_ec_conf('unknown_code_ap_id')
207        );
208      }
209      elseif (read_ec_conf('unknown_code') == '1' or
210       read_ec_conf('unknown_code') == '2') {
211        access_denied();
212      }
213      else {
214        redirect(make_index_url());
215      }
216    }
217  }
218}
219
220/**
221 *
222 * assign_perm_for_new_user()
223 * copies/paste groups+access+properties associations of previously connected
224 * username, to newly created username.
225 *
226 * @param no parameter
227 * @return no return value
228 */
229
230add_event_handler('register_user', 'assign_perm_for_new_user');
231
232function assign_perm_for_new_user($new_user) {
233  global $user;
234
235  if (!is_a_guest() and !is_admin()) if (
236    read_ec_conf('dup_allow') == '1' or (
237      read_ec_conf('dup_allow') == '2' and
238      dup_allowed($user['id'])
239    )
240  ) {
241    // User access
242    $result = pwg_query("
243      SELECT `cat_id`
244      FROM `".USER_ACCESS_TABLE."`
245      WHERE `user_id` = ".$user['id'].";
246    ");
247    $insert = array();
248    while ($row = mysql_fetch_assoc($result))
249     $insert[] = "(".$new_user['id'].",".$row['cat_id'].")";
250    if (!empty($insert)) pwg_query("
251      INSERT INTO `".USER_ACCESS_TABLE."`
252      VALUES ".implode(',', $insert).";
253    ");
254
255    // User groups
256    $result = pwg_query("
257      SELECT `group_id`
258      FROM `".USER_GROUP_TABLE."`
259      WHERE `user_id` = ".$user['id'].";
260    ");
261    $insert = array();
262    while ($row = mysql_fetch_assoc($result))
263     $insert[] = "(".$new_user['id'].",".$row['group_id'].")";
264    if (!empty($insert)) pwg_query("
265      INSERT INTO `".USER_GROUP_TABLE."`
266      VALUES ".implode(',', $insert).";
267    ");
268
269    // User infos
270    $result = pwg_query("
271      SELECT `level`
272      FROM `".USER_INFOS_TABLE."`
273      WHERE `user_id` = ".$user['id'].";
274    ");
275    $insert = array();
276    while ($row = mysql_fetch_assoc($result))
277     $insert[] = "(".$new_user['id'].",".$row['level'].")";
278    if (!empty($insert)) pwg_query("
279      UPDATE `".USER_INFOS_TABLE."`
280      SET `level` = ".$user['level']."
281      WHERE `user_id` = ".$new_user['id'].";
282    ");
283  }
284}
285
286/**
287 *
288 * duplicate_account_url()
289 * adds a link for duplicating the currently identified user in
290 * Identification block menu, in case the identifed user is granted to
291 * duplication. Displays also the connection link for generic users, if
292 * required in the configuration.
293 *
294 * @param no parameter
295 * @return no return value
296 */
297
298add_event_handler('blockmanager_apply', 'duplicate_account_url');
299
300function duplicate_account_url() {
301  global $lang, $template, $user, $ec_page;
302 
303  // Adds duplication link, if needed
304  if (!is_admin() and !is_a_guest()) if (
305    read_ec_conf('dup_allow') == '1' or (
306      read_ec_conf('dup_allow') == '2' and
307      dup_allowed($user['id'])
308    )
309  ) {
310    $template->assign('U_REGISTER', get_root_url().'register.php');
311    if (
312      read_ec_conf('duplic_display') == '1' or (
313        read_ec_conf('duplic_display') == '2' and
314        !is_generic()
315      )
316    ) {
317      $lang['Register'] = $lang['Duplicate'];
318      $lang['Create a new account'] =
319       $lang['Create a new account with same properties'];
320    }
321  }
322 
323  // Adds connection link, if needed
324  if (read_ec_conf('display_connection') == '1' and is_generic()) {
325    // Adds connection link
326    $template->assign(
327      'U_LOGIN',
328      get_root_url().'identification.php?redirect='.$_SERVER['REQUEST_URI']
329    );
330    // Removes "quick connection" fieldset (form)
331    $template->set_filenames(array(
332      'ec_no_quick_connect' =>
333      realpath(EVNTCATS_PATH.'ec_no_quick_connect.tpl')
334    ));
335    $begin = 'PLUGIN_INDEX_CONTENT_BEFORE';
336    $old_begin = $template->get_template_vars($begin);
337    $template->assign_var_from_handle($begin, 'ec_no_quick_connect');
338    $template->concat($begin, $old_begin);
339  }
340}
341
342add_event_handler(
343 'get_admin_plugin_menu_links',
344 array(&$obj, 'plugin_admin_menu')
345);
346set_plugin_data($plugin['id'], $obj);
347
348?>
Note: See TracBrowser for help on using the repository browser.