Index: /extensions/event_cats/maintain.inc.php
===================================================================
--- /extensions/event_cats/maintain.inc.php	(revision 3965)
+++ /extensions/event_cats/maintain.inc.php	(revision 3965)
@@ -0,0 +1,157 @@
+﻿<?php
+
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based picture gallery                                  |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008-2009 Piwigo Team                  http://piwigo.org |
+// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// ***********************************************************************
+// ** maintain.inc.php : Installation page for Piwigo plugin Event Cats **
+// ***********************************************************************
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+global $ec_conf;
+
+if (!defined('EVNTCATS_PATH'))
+ define('EVNTCATS_PATH',PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)). '/');
+
+include_once(EVNTCATS_PATH.'include/ec_conf.inc.php');
+
+function plugin_uninstall() {
+
+  global $prefixeTable, $conf, $ec_conf;
+
+  unset($ec_conf);
+	pwg_query("DELETE FROM `".CONFIG_TABLE."` WHERE `param` = 'event_cats' LIMIT 1;");
+	return pwg_query('DROP TABLE IF EXISTS `'.$prefixeTable.'event_cats`;');
+}
+
+function plugin_install() {
+
+  global $prefixeTable;
+  
+  plugin_uninstall();
+  // create table for plugin, if it doesn't exist yet
+  $q = pwg_query("
+    CREATE TABLE `".$prefixeTable."event_cats` (
+      `id`      SMALLINT(5)             UNSIGNED NOT NULL     AUTO_INCREMENT ,
+      `code`    VARCHAR(32)                               DEFAULT NULL ,
+      `user_id` SMALLINT(5)             UNSIGNED          DEFAULT NULL ,
+      `action`  ENUM('ec_ok', 'ec_nok')                   DEFAULT NULL ,
+      `arg1`    SMALLINT(5)             UNSIGNED          DEFAULT NULL ,
+      `arg2`    SMALLINT(5)             UNSIGNED          DEFAULT NULL ,
+      `forced`  ENUM('true', 'false')            NOT NULL DEFAULT 'false' ,
+      PRIMARY KEY (`id`),
+      INDEX (`code`) ,
+      INDEX (`user_id`)
+    )
+    DEFAULT CHARACTER SET utf8;
+  ");
+
+/*
+Explanations on table structure :
+
+code    : the code used as "autolog" argument. If thie code provided by the
+          visitor does not exist in the table, the administrator can choose
+          whether the visitor is redirected to the home page (nothing
+          happens) or to the "access denied" page ;
+user_id : the account concerned in following values ;
+action  : the action to perform :
+   ec_nok : code disabled : account not logged in, visitor (guest) redirected
+            to an explaining Additional Page (arg2 field). If Additional Page
+            plugin is not activated, redirection to the "access denied" page ;
+   ec_ok  : code OK, account logged in. Redirection depends on arg1 and arg2
+            values. There are four cases :
+     arg1 and arg2 are both NULL : home page ;
+     arg1 not NULL and arg2 NULL : category ;
+     arg1 NULL and arg2 not NULL : Additional Page ;
+     arg1 and arg2 both not NULL : Image page.
+            If arg1 is a valid category id, and arg2 is not a valid image id,
+            redirection to category. In all other cases where the arg1 or arg2
+            is not valid, redirection to home page.
+arg1    : (described above) ;
+arg2    : (described above) ;
+forced  : allows the administrator to impose that, for certain codes, the
+          settings specified in the database ("action", "arg1", "arg2") are
+          applied, whatever can be the arguments given in the URL.
+           
+* As a precision :
+    in the PHP code, the "action" can also have the following values, so to
+    display accurate messages in the admin page :
+  ec_nok_action_pb   : the same "code" is used in more than one entries in the
+                       DB (which is allowed) and is not always associated to
+                       the same action ('ec_ok' in one or more entries, and
+                       'ec_nok' in one or more other entries). This is
+                       confusing and makes impossible to log in using this
+                       code ;
+  ec_nok_userid_pb   : the same "code" is used in more than one entries in the
+                       DB (which is allowed) and is not always associated to
+                       the same user id. This is confusing and makes
+                       impossible to log in using this code ;
+  ec_nok_userid_miss : the user id associated to this code does not exist in
+                       the user ids table ;
+  ec_nok_ap_pb       : not valid Additional Page id -> access denied ;
+  ec_ok_forced_pb    : the same "code" is used in more than one entries in the
+                       DB (which is allowed) and the "forced" argument is
+                       "true" for at least one of these entries, which should
+                       not be possible, as a "forced" code can occur only once
+                       in the DB. User is logged in and the code behaves as a
+                       not "forced" code ;
+  ec_ok_ap_pb        : not valid Additional Page id -> home page ;
+  ec_ok_cat_pb       : not valid category id -> home page ;
+  ec_ok_img_pb       : not valid image id -> category page ;
+
+_ the two main fields are "user_id" and "code", as the main purpose of the
+  plugin, and thus of the table, is to establish a relationship between a
+  code and an account on the gallery -- a user_id. "action" is an important
+  field too, as it tells which action to perform.
+_ though, even if "action", "user_id" and "code" are important, all of them
+  can be omitted (thus can be NULL), and both "user_id" and "code" can be
+  repeated (thus are not UNIQUE). This because :
+  _ the same code can automatically log in ("autolog") the same account
+    following several ways, depending on "cat", "img", and "ap" arguments of
+    the URL ; and thus different ways can be stored in the DB ;
+  _ a "disabled" code (the user tries to "autolog", but (s)he's not allowed
+    to) does not need a corresponding "user_id", thus "user_id" can be NULL ;
+  _ "user_id" field is used to store groups ids when "code" is NULL, to
+    identify groups authorized to duplication ;
+_ "code" does not have the MySQL UNIQUE attribute, but it has to be unique
+  when the "forced" Event Cats parameter is true, which is the case when this
+  code is disabled (outdated).
+
+*/
+  pwg_query('
+   INSERT INTO '.CONFIG_TABLE.' (param,value,comment)
+   VALUES ("event_cats","0,1,0,0","Paramètres du plugin Event Cats");
+  ');
+  change_ec_conf('activated', 0);
+  return $q;
+}
+
+function plugin_activate() {
+  change_ec_conf('activated', 1);
+}
+
+function plugin_deactivate() {
+  change_ec_conf('activated', 0);
+}
+
+?>
