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