Fixes saving of settings, inconsistency fixed in config entries
[mailer.git] / inc / extensions / ext-admins.php
1 <?php
2 /************************************************************************
3  * Mailer v0.2.1-FINAL                                Start: 04/11/2004 *
4  * ===================                          Last change: 10/29/2004 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : ext-admins.php                                   *
8  * -------------------------------------------------------------------- *
9  * Short description : Administrator management                         *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Admin-Accountsverwaltung                         *
12  * -------------------------------------------------------------------- *
13  * $Revision::                                                        $ *
14  * $Date::                                                            $ *
15  * $Tag:: 0.2.1-FINAL                                                 $ *
16  * $Author::                                                          $ *
17  * Needs to be in all Files and every File needs "svn propset           *
18  * svn:keywords Date Revision" (autoprobset!) at least!!!!!!            *
19  * -------------------------------------------------------------------- *
20  * Copyright (c) 2003 - 2009 by Roland Haeder                           *
21  * For more information visit: http://www.mxchange.org                  *
22  *                                                                      *
23  * This program is free software; you can redistribute it and/or modify *
24  * it under the terms of the GNU General Public License as published by *
25  * the Free Software Foundation; either version 2 of the License, or    *
26  * (at your option) any later version.                                  *
27  *                                                                      *
28  * This program is distributed in the hope that it will be useful,      *
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
31  * GNU General Public License for more details.                         *
32  *                                                                      *
33  * You should have received a copy of the GNU General Public License    *
34  * along with this program; if not, write to the Free Software          *
35  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
36  * MA  02110-1301  USA                                                  *
37  ************************************************************************/
38
39 // Some security stuff...
40 if (!defined('__SECURITY')) {
41         die();
42 } // END - if
43
44 // Version of this extension
45 setThisExtensionVersion('0.7.3');
46
47 // Version history array (add more with , '0.1.0' and so on)
48 setExtensionVersionHistory(array('0.0', '0.1.0', '0.2.0', '0.3.0', '0.3.1', '0.4.0', '0.4.1', '0.4.2', '0.4.3', '0.4.4', '0.4.5', '0.4.6', '0.4.7', '0.4.8', '0.4.9', '0.5.0', '0.5.1', '0.5.2', '0.5.3', '0.5.4', '0.5.5', '0.5.6', '0.5.7', '0.5.8', '0.5.9', '0.6.0', '0.6.1', '0.6.2', '0.6.3', '0.6.4', '0.6.5', '0.6.6', '0.6.7', '0.6.8', '0.6.9', '0.7.0', '0.7.1', '0.7.2', '0.7.3'));
49
50 // Keep this extension always active!
51 setExtensionAlwaysActive('Y');
52
53 switch (getExtensionMode()) {
54         case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
55                 // SQL commands to run
56                 addAdminMenuSql('admins', NULL, 'Admin-Management','Administratoren anlegen, l&ouml;schen oder Passwort/E-Mail Adresse &auml;ndern.',1);
57                 addAdminMenuSql('admins','admins_add','Admin hinzuf&uuml;gen','Neuen Admin-Account anlegen',0);
58                 addAdminMenuSql('admins','admins_edit','Admin-Account &auml;ndern','Bestehende Admin-Accounts bearbeiten: E-Mail-Adresse, Passwort und/oder Login-Name &auml;ndern.',1);
59                 break;
60
61         case 'remove': // Do stuff when removing extension
62                 // SQL commands to run
63                 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='admins'");
64                 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_admins_acls`");
65                 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_admins_mails`");
66                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `default_acl`");
67
68                 // Remove filters
69                 unregisterFilter('sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', true, getExtensionDryRun());
70                 break;
71
72         case 'activate': // Do stuff when admin activates this extension
73                 // SQL commands to run
74                 addExtensionSql('');
75                 break;
76
77         case 'deactivate': // Do stuff when admin deactivates this extension
78                 // SQL commands to run
79                 addExtensionSql('');
80                 break;
81
82         case 'update': // Update an extension
83                 switch (getCurrentExtensionVersion()) {
84                         case '0.2.0': // SQL queries for v0.2
85                                 addAdminMenuSql('admins','admins_contact','Admin kontaktieren','Kontaktiert einen Admin per Mail oder Nachricht (nur wenn messaging-Erweiterung installiert ist).',2);
86
87                                 // Update notes (these will be set as task text!)
88                                 setExtensionUpdateNotes("F&uuml;gt den Men&uuml;punkt &quot;Admin kontaktieren&quot; hinzu.");
89                                 break;
90
91                         case '0.3.0': // SQL queries for v0.3
92                                 // Add admin menu
93                                 addAdminMenuSql('admins','config_admins','ACL einstellen','Richten Sie Zugriffskontrollzeilen f&uuml;r jeden Admin individuell ein, um ihm nur bestimmte Bereiche des Admin-Bereiches zug&auml;nglich zu machen oder zu sperren.',4);
94
95                                 // Which is the default setting when you create a new admin login?
96                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD admins_default_acl ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
97
98                                 // Default is deny everything
99                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD default_acl ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
100
101                                 // But allow current admin everything (THIS SHALL BE YOU!)
102                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admins` SET `default_acl`='allow' WHERE `login`='".getSession('admin_login')."' LIMIT 1");
103                                 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_admins_acls`");
104                                 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_admins_acls` (
105 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
106 `admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
107 `action_menu` VARCHAR(255) NOT NULL DEFAULT '',
108 `what_menu` VARCHAR(255) NOT NULL DEFAULT '',
109 `access_mode` ENUM('deny','allow') NOT NULL DEFAULT 'deny',
110 KEY (`admin_id`),
111 PRIMARY KEY (`id`)
112 ) TYPE={?_TABLE_TYPE?}");
113
114                                 // Update notes (these will be set as task text!)
115                                 setExtensionUpdateNotes("Sogn. ACLs werden hinzugef&uuml;gt: <strong>A</strong>ccess <strong>C</strong>ontrol <strong>L</strong>ines sind zu deutsch Zugriffkontrollzeilen, mit denen Sie einstellen k&ouml;nnen, was welcher Admin machen darf oder nicht. <strong>Nur Sie haben momentan Vollzugriff auf den Adminbereich.</strong>");
116                                 break;
117
118                         case '0.3.1': // SQL queries for v0.3.1
119                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins_acls` MODIFY id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT");
120                                 break;
121
122                         case '0.4.0': // SQL queries for v0.4.0
123                                 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_admins_mails`");
124                                 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_admins_mails` (
125 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
126 admin_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
127 mail_template VARCHAR(255) NOT NULL,
128 KEY (admin_id),
129 PRIMARY KEY (id)
130 ) TYPE={?_TABLE_TYPE?}");
131                                 addExtensionSql("INSERT INTO  `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('admins','admins_mails','Admin-Mails','Stellen Sie hier ein, welcher Admin welche Mail erhalten soll. Sie k&ouml;nnen dies (derzeit) jedoch erst, wenn einmal die Mail versendet wurde!',5)");
132
133                                 // Update notes (these will be set as task text!)
134                                 setExtensionUpdateNotes("Kontrollieren Sie, welche Mails welcher Admin oder alle (admin_id=0) bekommen soll oder im UserLog (admin_id=-1) verzeichnet werden soll. Standartm&auml;ssig wird weiter an alle versendet.");
135                                 break;
136
137                         case '0.4.1': // SQL queries for v0.4.1
138                                 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admins_mails` WHERE mail_template LIKE '% %'");
139
140                                 // Update notes (these will be set as task text!)
141                                 setExtensionUpdateNotes("Admins-Mails-Tabelle geleert.");
142
143                         case '0.4.4': // SQL queries for v0.4.4
144                                 // Update notes (these will be set as task text!)
145                                 setExtensionUpdateNotes("&amp;admin= in &amp;amp;admin= umgewandelt.");
146                                 break;
147
148                         case '0.4.5': // SQL queries for v0.4.5
149                                 // Update notes (these will be set as task text!)
150                                 setExtensionUpdateNotes("Vorbereitet auf Cache-System");
151                                 break;
152
153                         case '0.4.6': // SQL queries for v0.4.6
154                                 // Update notes (these will be set as task text!)
155                                 setExtensionUpdateNotes("Problem mit cache-Erweiterung gefixt. Der Admin-Bereich war permanent gesperrt.");
156                                 break;
157
158                         case '0.4.7': // SQL queries for v0.4.7
159                                 // Update notes (these will be set as task text!)
160                                 setExtensionUpdateNotes("Es wurde die Zeitmarke der Cache-Datei admins.cache mit ber&uuml;cksichtigt.");
161                                 break;
162
163                         case '0.4.8': // SQL queries for v0.4.8
164                                 // Update notes (these will be set as task text!)
165                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
166                                 break;
167
168                         case '0.4.9': // SQL queries for v0.4.9
169                                 // Update notes (these will be set as task text!)
170                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
171                                 break;
172
173                         case '0.5.0': // SQL queries for v0.5.0
174                                 // Update notes (these will be set as task text!)
175                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
176                                 break;
177
178                         case '0.5.1': // SQL queries for v0.5.1
179                                 // Update notes (these will be set as task text!)
180                                 setExtensionUpdateNotes("Cache wird endlich gel&oumlscht, wenn Admin entfernt wird.");
181                                 break;
182
183                         case '0.5.2': // SQL queries for v0.5.2
184                                 // Update notes (these will be set as task text!)
185                                 setExtensionUpdateNotes("L&ouml;schen von Admin-Accounts repariert und HTML-Code ausgelagert in Templates.");
186                                 break;
187
188                         case '0.5.3': // SQL queries for v0.5.3
189                                 // Update notes (these will be set as task text!)
190                                 setExtensionUpdateNotes("Seit <strong>Patch 340</strong> &uuml;berfl&uuml;ssige HTML-Tags entfernt.");
191                                 break;
192
193                         case '0.5.4': // SQL queries for v0.5.4
194                                 // Update notes (these will be set as task text!)
195                                 setExtensionUpdateNotes("IP-Nummer und Browserbezeichnung wird in Admin-Mails eingesetzt.");
196                                 break;
197
198                         case '0.5.5': // SQL queries for v0.5.5
199                                 // Update notes (these will be set as task text!)
200                                 setExtensionUpdateNotes("Men&uuml;punkt Admin-Mails korregiert: SQL-Anweisung war fehlerhaft; und HTML-Code in Templates ausgelagert.");
201                                 break;
202
203                         case '0.5.6': // SQL queries for v0.5.6
204                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
205
206                                 // Update notes (these will be set as task text!)
207                                 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
208                                 break;
209
210                         case '0.5.7': // SQL queries for v0.5.7
211                                 // Update notes (these will be set as task text!)
212                                 setExtensionUpdateNotes("Links wegen <strong>what=admins_contct</strong> ge&auml;ndert.");
213                                 break;
214
215                         case '0.5.8': // SQL queries for v0.5.8
216                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
217
218                                 // Update notes (these will be set as task text!)
219                                 setExtensionUpdateNotes("Ein Punkt in der Versionsnummernliste verhinderte das 0.5.6-Update.");
220                                 break;
221
222                         case '0.5.9': // SQL queries for v0.5.9
223                                 // Update notes (these will be set as task text!)
224                                 setExtensionUpdateNotes("Sicherheitsupdate: SQL-Anweisungen gesch&uuml;tzt.");
225                                 break;
226
227                         case '0.6.0': // SQL queries for v0.6.0
228                                 // Update notes (these will be set as task text!)
229                                 setExtensionUpdateNotes("Link in &quot;ACL Einstellen&quot; zum Admin-Kontaktformular korregiert.");
230                                 break;
231
232                         case '0.6.1': // SQL queries for v0.6.1
233                                 // Update notes (these will be set as task text!)
234                                 setExtensionUpdateNotes("Speichern von Admin-Accounts klappt wieder.");
235                                 break;
236
237                         case '0.6.2': // SQL queries for v0.6.2
238                                 // Update notes (these will be set as task text!)
239                                 setExtensionUpdateNotes("Bitte verschieben Sie die admins-Templates (Ordner: {?PATH?}/templates/de/emails/) in den neuen Order admins!");
240                                 break;
241
242                         case '0.6.3': // SQL queries for v0.6.3
243                                 // Update notes (these will be set as task text!)
244                                 setExtensionUpdateNotes("Abspeichern von Einstellungen repariert.");
245                                 break;
246
247                         case '0.6.4': // SQL queries for v0.6.4
248                                 // Update notes (these will be set as task text!)
249                                 setExtensionUpdateNotes("Problem mit der Rechtevererbung beseitigt: Geben Sie nun ein Hauptmen&uuml; frei (Allow), dann kann der Admin auch die Untermen&uuml;s erreichen. Zudem k&ouml;nnen Sie gezielte Untermen&uuml;s im freigegeben Hauptmen&uuml; dennoch sperren.");
250                                 break;
251
252                         case '0.6.5': // SQL queries for v0.6.5
253                                 // Update notes (these will be set as task text!)
254                                 setExtensionUpdateNotes("Sicherheitsupdate f&uuml;r die Include-Befehle.");
255                                 break;
256
257                         case '0.6.6': // SQL queries for v0.5.6
258                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
259
260                                 // Update notes (these will be set as task text!)
261                                 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
262                                 break;
263
264                         case '0.6.7': // SQL queries for v0.6.7
265                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD la_mode ENUM('global','OLD','NEW') NOT NULL DEFAULT 'global'");
266
267                                 // Update notes (these will be set as task text!)
268                                 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>. Beseitigung eines Fehlers <strong>HTTP_POSR_VARS</strong> beim &Auml;ndern von Administratoren.");
269                                 break;
270
271                         case '0.6.8': // SQL queries for v0.6.8
272                                 // Update notes (these will be set as task text!)
273                                 setExtensionUpdateNotes("<strong>setSession()</strong> mit @-Zeichen gegen ungewollte Ausgaben abgesichert.");
274                                 break;
275
276                         case '0.6.9': // SQL queries for v0.6.9
277                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET title = 'Admin-Management' WHERE action = 'admins' AND (`what`='' OR `what` IS NULL) LIMIT 1");
278
279                                 // Update notes (these will be set as task text!)
280                                 setExtensionUpdateNotes("Verwaltung nach Management umbenannt.");
281                                 break;
282
283                         case '0.7.0': // SQL queries for v0.7.0
284                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `login_failtures` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
285                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `last_failture` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'");
286
287                                 // Update notes (these will be set as task text!)
288                                 setExtensionUpdateNotes("Veraltetes Update.");
289                                 break;
290
291                         case '0.7.1': // SQL queries for v0.7.1
292                                 // Update depends on sql_patches
293                                 addExtensionUpdateDependency('sql_patches');
294
295                                 // Add filters
296                                 registerFilter('sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', false, true, getExtensionDryRun());
297
298                                 // Update notes (these will be set as task text!)
299                                 setExtensionUpdateNotes("Filter hinzugef&uuml;gt und ist von <strong>sql_patches</strong> abh&auml;ngig.");
300                                 break;
301
302                         case '0.7.2': // SQL queries for v0.7.2
303                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `login_failtures`");
304                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `last_failture`");
305                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `login_failures` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
306                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `last_failure` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'");
307
308                                 // Update notes (these will be set as task text!)
309                                 setExtensionUpdateNotes("Schreibweise korregiert.");
310                                 break;
311
312                         case '0.7.3': // SQL queries for v0.7.2
313                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `expert_settings` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
314                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `expert_warning` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
315
316                                 // Update notes (these will be set as task text!)
317                                 setExtensionUpdateNotes("Experten-Einstellungen sind nun hinzugekommen.");
318                                 break;
319                 } // END - switch
320                 break;
321
322         case 'modify': // When the extension got modified
323                 break;
324
325         case 'test': // For testing purposes. For details see file inc/modules/admin/what-extensions.php, arround line 305.
326                 break;
327
328         case 'init': // Do stuff when extension is initialized
329                 break;
330
331         default: // Unknown extension mode
332                 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s detected.", getExtensionMode()));
333                 break;
334 } // END - switch
335
336 // [EOF]
337 ?>