30339602669c45cc6dc948270ed844a48f37ecdc
[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.5');
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', '0.7.4', '0.7.5'));
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                 unregisterFilter('do_admin_login_done', 'RESET_ADMINS_LOGIN_FAILURES', true, getExtensionDryRun());
71                 unregisterFilter('do_admin_login_pass', 'COUNT_ADMINS_LOGIN_FAILURE', true, getExtensionDryRun());
72                 unregisterFilter('do_admin_login_done', 'REHASH_ADMINS_PASSWORD', true, getExtensionDryRun());
73                 break;
74
75         case 'activate': // Do stuff when admin activates this extension
76                 // SQL commands to run
77                 addExtensionSql('');
78                 break;
79
80         case 'deactivate': // Do stuff when admin deactivates this extension
81                 // SQL commands to run
82                 addExtensionSql('');
83                 break;
84
85         case 'update': // Update an extension
86                 switch (getCurrentExtensionVersion()) {
87                         case '0.2.0': // SQL queries for v0.2
88                                 addAdminMenuSql('admins','admins_contact','Admin kontaktieren','Kontaktiert einen Admin per Mail oder Nachricht (nur wenn messaging-Erweiterung installiert ist).',2);
89
90                                 // Update notes (these will be set as task text!)
91                                 setExtensionUpdateNotes("F&uuml;gt den Men&uuml;punkt &quot;Admin kontaktieren&quot; hinzu.");
92                                 break;
93
94                         case '0.3.0': // SQL queries for v0.3
95                                 // Add admin menu
96                                 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);
97
98                                 // Which is the default setting when you create a new admin login?
99                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD admins_default_acl ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
100
101                                 // Default is deny everything
102                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD default_acl ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
103
104                                 // But allow current admin everything (THIS SHALL BE YOU!)
105                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admins` SET `default_acl`='allow' WHERE `login`='".getSession('admin_login')."' LIMIT 1");
106                                 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_admins_acls`");
107                                 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_admins_acls` (
108 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
109 `admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
110 `action_menu` VARCHAR(255) NOT NULL DEFAULT '',
111 `what_menu` VARCHAR(255) NOT NULL DEFAULT '',
112 `access_mode` ENUM('deny','allow') NOT NULL DEFAULT 'deny',
113 KEY (`admin_id`),
114 PRIMARY KEY (`id`)
115 ) TYPE={?_TABLE_TYPE?}");
116
117                                 // Update notes (these will be set as task text!)
118                                 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>");
119                                 break;
120
121                         case '0.3.1': // SQL queries for v0.3.1
122                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins_acls` MODIFY id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT");
123                                 break;
124
125                         case '0.4.0': // SQL queries for v0.4.0
126                                 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_admins_mails`");
127                                 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_admins_mails` (
128 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
129 admin_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
130 mail_template VARCHAR(255) NOT NULL,
131 KEY (admin_id),
132 PRIMARY KEY (id)
133 ) TYPE={?_TABLE_TYPE?}");
134                                 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)");
135
136                                 // Update notes (these will be set as task text!)
137                                 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.");
138                                 break;
139
140                         case '0.4.1': // SQL queries for v0.4.1
141                                 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admins_mails` WHERE mail_template LIKE '% %'");
142
143                                 // Update notes (these will be set as task text!)
144                                 setExtensionUpdateNotes("Admins-Mails-Tabelle geleert.");
145
146                         case '0.4.4': // SQL queries for v0.4.4
147                                 // Update notes (these will be set as task text!)
148                                 setExtensionUpdateNotes("&amp;admin= in &amp;amp;admin= umgewandelt.");
149                                 break;
150
151                         case '0.4.5': // SQL queries for v0.4.5
152                                 // Update notes (these will be set as task text!)
153                                 setExtensionUpdateNotes("Vorbereitet auf Cache-System");
154                                 break;
155
156                         case '0.4.6': // SQL queries for v0.4.6
157                                 // Update notes (these will be set as task text!)
158                                 setExtensionUpdateNotes("Problem mit cache-Erweiterung gefixt. Der Admin-Bereich war permanent gesperrt.");
159                                 break;
160
161                         case '0.4.7': // SQL queries for v0.4.7
162                                 // Update notes (these will be set as task text!)
163                                 setExtensionUpdateNotes("Es wurde die Zeitmarke der Cache-Datei admins.cache mit ber&uuml;cksichtigt.");
164                                 break;
165
166                         case '0.4.8': // SQL queries for v0.4.8
167                                 // Update notes (these will be set as task text!)
168                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
169                                 break;
170
171                         case '0.4.9': // SQL queries for v0.4.9
172                                 // Update notes (these will be set as task text!)
173                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
174                                 break;
175
176                         case '0.5.0': // SQL queries for v0.5.0
177                                 // Update notes (these will be set as task text!)
178                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
179                                 break;
180
181                         case '0.5.1': // SQL queries for v0.5.1
182                                 // Update notes (these will be set as task text!)
183                                 setExtensionUpdateNotes("Cache wird endlich gel&oumlscht, wenn Admin entfernt wird.");
184                                 break;
185
186                         case '0.5.2': // SQL queries for v0.5.2
187                                 // Update notes (these will be set as task text!)
188                                 setExtensionUpdateNotes("L&ouml;schen von Admin-Accounts repariert und HTML-Code ausgelagert in Templates.");
189                                 break;
190
191                         case '0.5.3': // SQL queries for v0.5.3
192                                 // Update notes (these will be set as task text!)
193                                 setExtensionUpdateNotes("Seit <strong>Patch 340</strong> &uuml;berfl&uuml;ssige HTML-Tags entfernt.");
194                                 break;
195
196                         case '0.5.4': // SQL queries for v0.5.4
197                                 // Update notes (these will be set as task text!)
198                                 setExtensionUpdateNotes("IP-Nummer und Browserbezeichnung wird in Admin-Mails eingesetzt.");
199                                 break;
200
201                         case '0.5.5': // SQL queries for v0.5.5
202                                 // Update notes (these will be set as task text!)
203                                 setExtensionUpdateNotes("Men&uuml;punkt Admin-Mails korregiert: SQL-Anweisung war fehlerhaft; und HTML-Code in Templates ausgelagert.");
204                                 break;
205
206                         case '0.5.6': // SQL queries for v0.5.6
207                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
208
209                                 // Update notes (these will be set as task text!)
210                                 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
211                                 break;
212
213                         case '0.5.7': // SQL queries for v0.5.7
214                                 // Update notes (these will be set as task text!)
215                                 setExtensionUpdateNotes("Links wegen <strong>what=admins_contct</strong> ge&auml;ndert.");
216                                 break;
217
218                         case '0.5.8': // SQL queries for v0.5.8
219                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
220
221                                 // Update notes (these will be set as task text!)
222                                 setExtensionUpdateNotes("Ein Punkt in der Versionsnummernliste verhinderte das 0.5.6-Update.");
223                                 break;
224
225                         case '0.5.9': // SQL queries for v0.5.9
226                                 // Update notes (these will be set as task text!)
227                                 setExtensionUpdateNotes("Sicherheitsupdate: SQL-Anweisungen gesch&uuml;tzt.");
228                                 break;
229
230                         case '0.6.0': // SQL queries for v0.6.0
231                                 // Update notes (these will be set as task text!)
232                                 setExtensionUpdateNotes("Link in &quot;ACL Einstellen&quot; zum Admin-Kontaktformular korregiert.");
233                                 break;
234
235                         case '0.6.1': // SQL queries for v0.6.1
236                                 // Update notes (these will be set as task text!)
237                                 setExtensionUpdateNotes("Speichern von Admin-Accounts klappt wieder.");
238                                 break;
239
240                         case '0.6.2': // SQL queries for v0.6.2
241                                 // Update notes (these will be set as task text!)
242                                 setExtensionUpdateNotes("Bitte verschieben Sie die admins-Templates (Ordner: {?PATH?}/templates/de/emails/) in den neuen Order admins!");
243                                 break;
244
245                         case '0.6.3': // SQL queries for v0.6.3
246                                 // Update notes (these will be set as task text!)
247                                 setExtensionUpdateNotes("Abspeichern von Einstellungen repariert.");
248                                 break;
249
250                         case '0.6.4': // SQL queries for v0.6.4
251                                 // Update notes (these will be set as task text!)
252                                 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.");
253                                 break;
254
255                         case '0.6.5': // SQL queries for v0.6.5
256                                 // Update notes (these will be set as task text!)
257                                 setExtensionUpdateNotes("Sicherheitsupdate f&uuml;r die Include-Befehle.");
258                                 break;
259
260                         case '0.6.6': // SQL queries for v0.5.6
261                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
262
263                                 // Update notes (these will be set as task text!)
264                                 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
265                                 break;
266
267                         case '0.6.7': // SQL queries for v0.6.7
268                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD la_mode ENUM('global','OLD','NEW') NOT NULL DEFAULT 'global'");
269
270                                 // Update notes (these will be set as task text!)
271                                 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.");
272                                 break;
273
274                         case '0.6.8': // SQL queries for v0.6.8
275                                 // Update notes (these will be set as task text!)
276                                 setExtensionUpdateNotes("<strong>setSession()</strong> mit @-Zeichen gegen ungewollte Ausgaben abgesichert.");
277                                 break;
278
279                         case '0.6.9': // SQL queries for v0.6.9
280                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET title = 'Admin-Management' WHERE action = 'admins' AND (`what`='' OR `what` IS NULL) LIMIT 1");
281
282                                 // Update notes (these will be set as task text!)
283                                 setExtensionUpdateNotes("Verwaltung nach Management umbenannt.");
284                                 break;
285
286                         case '0.7.0': // SQL queries for v0.7.0
287                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `login_failtures` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
288                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `last_failture` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'");
289
290                                 // Update notes (these will be set as task text!)
291                                 setExtensionUpdateNotes("Veraltetes Update.");
292                                 break;
293
294                         case '0.7.1': // SQL queries for v0.7.1
295                                 // Update depends on sql_patches
296                                 addExtensionUpdateDependency('sql_patches');
297
298                                 // Add filters
299                                 registerFilter('sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', false, true, getExtensionDryRun());
300
301                                 // Update notes (these will be set as task text!)
302                                 setExtensionUpdateNotes("Filter hinzugef&uuml;gt und ist von <strong>sql_patches</strong> abh&auml;ngig.");
303                                 break;
304
305                         case '0.7.2': // SQL queries for v0.7.2
306                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `login_failtures`");
307                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `last_failture`");
308                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `login_failures` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
309                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `last_failure` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'");
310
311                                 // Update notes (these will be set as task text!)
312                                 setExtensionUpdateNotes("Schreibweise korregiert.");
313                                 break;
314
315                         case '0.7.3': // SQL queries for v0.7.3
316                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `expert_settings` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
317                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `expert_warning` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
318
319                                 // Update notes (these will be set as task text!)
320                                 setExtensionUpdateNotes("Experten-Einstellungen sind nun hinzugekommen.");
321                                 break;
322
323                         case '0.7.4': // SQL queries for v0.7.4
324                                 // Add filter
325                                 registerFilter('do_admin_login_done', 'RESET_ADMINS_LOGIN_FAILURES', false, true, getExtensionDryRun());
326                                 registerFilter('do_admin_login_pass', 'COUNT_ADMINS_LOGIN_FAILURE', false, true, getExtensionDryRun());
327
328                                 // Update notes (these will be set as task text!)
329                                 setExtensionUpdateNotes("Filter hinzugefuegt.");
330                                 break;
331
332                         case '0.7.5': // SQL queries for v0.7.5
333                                 registerFilter('do_admin_login_done', 'REHASH_ADMINS_PASSWORD', false, true, getExtensionDryRun());
334                                 break;
335
336                                 // Add filter
337                 } // END - switch
338                 break;
339
340         case 'modify': // When the extension got modified
341                 break;
342
343         case 'test': // For testing purposes. For details see file inc/modules/admin/what-extensions.php, arround line 305.
344                 break;
345
346         case 'init': // Do stuff when extension is initialized
347                 break;
348
349         default: // Unknown extension mode
350                 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s detected.", getExtensionMode()));
351                 break;
352 } // END - switch
353
354 // [EOF]
355 ?>