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

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

[Event Cats] Finish duplication management, configuration management, code cleaning

File size: 9.7 KB
Line 
1<?php
2
3/*
4Plugin Name: Event Cats
5Version: 1.0.0
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/svn/extensions/event_cats
8Author: P@t, LucMorizur
9Author URI: http://www.gauchon.fr, 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
34if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
35
36// pour faciliter le debug - make debug easier :o)
37//ini_set('error_reporting', E_ALL);
38//ini_set('display_errors', true);
39
40global $conf, $prefixeTable, $ec_lists;
41
42define( // -------------------------------------------------------------------
43  'EVNTCATS_INFO_VERSION', // VERSION HISTORY :
44   '1.0.0'   // Conception (non published) version
45); // ------------------------------------------------------------------------
46define(
47  'EVNTCATS_PATH',
48   PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/'
49);
50define(
51  'EVNTCATS_TABLE',
52   $prefixeTable.'event_cats'
53);
54define(
55  'ROOT_URL',
56   get_absolute_root_url()
57);
58define(
59  'EC_AP_OK', // whether Additional Pages is installed and activated
60   (mysql_num_rows(pwg_query("
61     SELECT *
62     FROM `".PLUGINS_TABLE."`
63     WHERE `id`    = 'AdditionalPages'
64       AND `state` = 'active';
65   ")) != 0)
66);
67
68include_once(EVNTCATS_PATH.'include/evntcats_main_funcs.inc.php');
69
70class event_cats {
71// Sets the administration panel of the plugin
72  function plugin_admin_menu($menu) {
73    array_push($menu,
74      array(
75        'NAME' => 'Event Cats',
76        'URL'  => get_admin_plugin_menu_link(dirname(__FILE__).
77                  '/admin/evntcats_admin.php')
78      )
79    );
80    return $menu;
81  }
82} // End class
83
84$obj = new event_cats();
85
86// Adds the translation of "duplicate" link
87add_event_handler('loading_lang', 'ec_load_duplic_lang' );
88
89function ec_load_duplic_lang() {
90  load_language('duplic.lang', EVNTCATS_PATH);
91}
92
93// Admin help management
94add_event_handler('get_popup_help_content', 'ec_popup_help_content',
95 EVENT_HANDLER_PRIORITY_NEUTRAL, 2);
96
97function ec_popup_help_content($popup_help_content, $page) {
98  return (
99   $help_content = ($page == 'event_cats' and is_admin()) ?
100    load_language('help.html', EVNTCATS_PATH, array('return' => true)) : false
101  ) ? $popup_help_content.$help_content : $popup_help_content;
102}
103
104//----------------------------------
105
106/**
107 *
108 * auto_log_user()
109 * the function uses the value of the argument "autolog" of the posted URL, as a code
110 * to know which username has to be logged in.
111 *
112 * @param no parameter
113 * @return no return value
114 */
115
116add_event_handler('init', 'auto_log_user');
117
118function auto_log_user() {
119  global $ec_lists;
120
121  $ec_ap  = NULL;
122  $ec_cat = NULL;
123  $ec_img = NULL;
124
125  // For compatibility ; must be removed
126  if (isset($_GET['log'])) $_GET['autolog'] = $_GET['log'];
127  // For compatibility ; must be removed
128 
129  if (isset($_GET['autolog']) and (read_ec_conf('activated') == 1)) {
130    if (!is_a_guest()) {
131      $url = '';
132      foreach ($_GET as $item => $value) {
133        $url.= '&'.$item.'='.$value;
134      }
135      logout_user();
136      redirect(make_index_url().$url);
137    }
138    build_ec_lists();
139    foreach ($ec_lists['ec_table'] as $ec_entry) {
140      if ($code_exists = ($ec_entry['code'] == $_GET['autolog'])) break;
141    }
142    if ($code_exists) {
143      if (is_in($ec_entry['action'], 'ec_ok')) {
144        log_user($ec_entry['user_id'], false);
145        if (isset($_GET['ap'])) $ec_ap = $_GET['ap'];
146        if (isset($_GET['cat'])) $ec_cat = $_GET['cat'];
147        if (isset($_GET['img'])) $ec_img = $_GET['img'];
148        if ($ec_entry['forced'] == 'true') {
149          if (empty($ec_entry['arg1']) and !empty($ec_entry['arg2'])) {
150            $ec_ap = $ec_entry['arg2'];
151          }
152          elseif (!empty($ec_entry['arg1'])) {
153            $ec_cat = $ec_entry['arg1'];
154            if (!empty($ec_entry['arg2'])) $ec_img = $ec_entry['arg2'];
155          }
156        }
157        if (isset($ec_ap)) {
158          if (array_key_exists($ec_ap,$ec_lists['add_pages'])) {
159            redirect(
160             PHPWG_ROOT_PATH.'index.php?/additional_page/'.$ec_ap);
161          }
162        }
163        elseif (isset($ec_cat)) {
164          if (array_key_exists($ec_cat, $ec_lists['categories'])) {
165            if (isset($ec_img)) {
166              if (ec_image_exists($ec_cat, $ec_img)) {
167                redirect(PHPWG_ROOT_PATH.'picture.php?/'.$ec_img.'/category/'.$ec_cat);
168              }
169            }
170            redirect(PHPWG_ROOT_PATH.'index.php?/category/'.$ec_cat);
171          }
172        }
173        redirect(make_index_url());
174      }
175      else {
176        if (
177         $ec_entry['action'] == 'ec_nok' or
178         $ec_entry['action'] == 'ec_nok_ap_pb'
179        ) {
180          if ($ec_entry['action'] == 'ec_nok_ap_pb') access_denied();
181          $ec_ap = $ec_entry['arg2'];
182          if (array_key_exists($ec_ap, $ec_lists['add_pages'])) {
183            redirect(
184             PHPWG_ROOT_PATH.'index.php?/additional_page/'.$ec_ap);
185          }
186          access_denied();
187        }
188        else {
189          redirect(make_index_url());
190        }
191      }
192    }
193    else {
194      if (
195       read_ec_conf('unknown_code') == 2 and
196        array_key_exists(
197         read_ec_conf('unknown_code_ap_id'), $ec_lists['add_pages']
198        )
199       ) {
200        redirect(
201         PHPWG_ROOT_PATH.
202         'index.php?/additional_page/'.read_ec_conf('unknown_code_ap_id')
203        );
204      }
205      elseif (read_ec_conf('unknown_code') == 1 or
206       read_ec_conf('unknown_code') == 2) {
207        access_denied();
208      }
209      else {
210        redirect(make_index_url());
211      }
212    }
213  }
214}
215
216/**
217 *
218 * assign_perm_for_new_user()
219 * copies/paste groups+access+properties associations of previously connected
220 * username, to newly created username.
221 *
222 * @param no parameter
223 * @return no return value
224 */
225
226add_event_handler('register_user', 'assign_perm_for_new_user');
227
228function assign_perm_for_new_user($new_user)
229{
230  global $user;
231
232  if (!is_a_guest() and !is_admin())
233  {
234    // User access
235    $query = 'SELECT cat_id FROM '.USER_ACCESS_TABLE.' WHERE user_id = '.$user['id'].';';
236    $result = pwg_query($query);
237    $insert = array();
238    while ($row = mysql_fetch_assoc($result))
239    {
240      $insert[] = '('.$new_user['id'].','.$row['cat_id'].')';
241    }
242    if (!empty($insert))
243    {
244      pwg_query('INSERT INTO '.USER_ACCESS_TABLE.' VALUES '.implode(',', $insert).';');
245    }
246
247    // User groups
248    $query = 'SELECT group_id FROM '.USER_GROUP_TABLE.' WHERE user_id = '.$user['id'].';';
249    $result = pwg_query($query);
250    $insert = array();
251    while ($row = mysql_fetch_assoc($result))
252    {
253      $insert[] = '('.$new_user['id'].','.$row['group_id'].')';
254    }
255    if (!empty($insert))
256    {
257      pwg_query('INSERT INTO '.USER_GROUP_TABLE.' VALUES '.implode(',', $insert).';');
258    }
259
260    // User infos
261    $query = 'SELECT level FROM '.USER_INFOS_TABLE.' WHERE user_id = '.$user['id'].';';
262    $result = pwg_query($query);
263    $insert = array();
264    while ($row = mysql_fetch_assoc($result))
265    {
266      $insert[] = '('.$new_user['id'].','.$row['level'].')';
267    }
268    if (!empty($insert))
269    {
270      $query = 'UPDATE '.USER_INFOS_TABLE.' SET level = '.$user['level'].' WHERE user_id = '.$new_user['id'].';';
271      pwg_query($query);
272    }
273  }
274}
275
276/**
277 *
278 * duplicate_account_url()
279 * adds a link "Duplicate" in Identification block menu.
280 *
281 * @param no parameter
282 * @return no return value
283 */
284
285add_event_handler('blockmanager_apply', 'duplicate_account_url');
286
287function duplicate_account_url() {
288  global $lang, $template, $user;
289 
290  if (!is_admin() and !is_a_guest()) if (
291    read_ec_conf('dup_allow') == '1' or (
292      read_ec_conf('dup_allow') == '2' and
293      dup_allowed($user['id'])
294    )
295  ) {
296    $template->assign( 'U_REGISTER', get_root_url().'register.php');
297    if (
298      read_ec_conf('duplic_display') == '1' or (
299        read_ec_conf('duplic_display') == '2' and
300        !is_generic()
301      )
302    ) {
303      $lang['Register'] = l10n('Duplicate');
304      $lang['Create a new account'] = l10n('Create a new account with same properties');
305    }
306  }
307}
308
309add_event_handler('get_admin_plugin_menu_links', array(&$obj, 'plugin_admin_menu') );
310set_plugin_data($plugin['id'], $obj);
311
312?>
Note: See TracBrowser for help on using the repository browser.