2 /************************************************************************
3 * Mailer v0.2.1-FINAL Start: 04/11/2004 *
4 * =================== Last change: 10/29/2004 *
6 * -------------------------------------------------------------------- *
7 * File : ext-admins.php *
8 * -------------------------------------------------------------------- *
9 * Short description : Administrator management *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Admin-Accountsverwaltung *
12 * -------------------------------------------------------------------- *
15 * $Tag:: 0.2.1-FINAL $ *
17 * -------------------------------------------------------------------- *
18 * Copyright (c) 2003 - 2009 by Roland Haeder *
19 * Copyright (c) 2009 - 2012 by Mailer Developer Team *
20 * For more information visit: http://mxchange.org *
22 * This program is free software; you can redistribute it and/or modify *
23 * it under the terms of the GNU General Public License as published by *
24 * the Free Software Foundation; either version 2 of the License, or *
25 * (at your option) any later version. *
27 * This program is distributed in the hope that it will be useful, *
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
30 * GNU General Public License for more details. *
32 * You should have received a copy of the GNU General Public License *
33 * along with this program; if not, write to the Free Software *
34 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
36 ************************************************************************/
38 // Some security stuff...
39 if (!defined('__SECURITY')) {
43 // Version of this extension
44 setThisExtensionVersion('0.7.8');
46 // Version history array (add more with , '0.0.1' and so on)
47 setExtensionVersionHistory(array('0.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', '0.7.6', '0.7.7', '0.7.8'));
49 // Keep this extension always active!
50 setExtensionAlwaysActive('Y');
52 switch (getExtensionMode()) {
53 case 'register': // Do stuff when installation is running
54 // SQL commands to run
55 addAdminMenuSql('admins', NULL, 'Admin-Management','Administratoren anlegen, löschen oder Passwort/E-Mail Adresse ändern.',1);
56 addAdminMenuSql('admins','admins_add','Admin hinzufügen','Neuen Admin-Account anlegen',0);
57 addAdminMenuSql('admins','admins_edit','Admin-Account ändern','Bestehende Admin-Accounts bearbeiten: E-Mail-Adresse, Passwort und/oder Login-Name ändern.',1);
60 case 'remove': // Do stuff when removing extension
61 // SQL commands to run
62 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='admins'");
63 addDropTableSql('admins_acls');
64 addDropTableSql('admins_mails');
65 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `default_acl`");
68 unregisterFilter(__FILE__, __LINE__, 'sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', true, isExtensionDryRun());
69 unregisterFilter(__FILE__, __LINE__, 'do_admin_login_done', 'RESET_ADMINS_LOGIN_FAILURES', true, isExtensionDryRun());
70 unregisterFilter(__FILE__, __LINE__, 'do_admin_login_pass', 'COUNT_ADMINS_LOGIN_FAILURE', true, isExtensionDryRun());
71 unregisterFilter(__FILE__, __LINE__, 'do_admin_login_done', 'REHASH_ADMINS_PASSWORD', true, isExtensionDryRun());
74 case 'activate': // Do stuff when admin activates this extension
75 // SQL commands to run
79 case 'deactivate': // Do stuff when admin deactivates this extension
80 // SQL commands to run
84 case 'update': // Update an extension
85 switch (getCurrentExtensionVersion()) {
86 case '0.2.0': // SQL queries for v0.2
87 addAdminMenuSql('admins','admins_contact','Admin kontaktieren','Kontaktiert einen Admin per Mail oder Nachricht (nur wenn messaging-Erweiterung installiert ist).',2);
89 // Update notes (these will be set as task text!)
90 setExtensionUpdateNotes("Fügt den Menüpunkt "Admin kontaktieren" hinzu.");
93 case '0.3.0': // SQL queries for v0.3
95 addAdminMenuSql('admins','config_admins','ACL einstellen','Richten Sie Zugriffskontrollzeilen für jeden Admin individuell ein, um ihm nur bestimmte Bereiche des Admin-Bereiches zugänglich zu machen oder zu sperren.',4);
97 // Which is the default setting when you create a new admin login?
98 addConfigAddSql('admins_default_acl', "ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
100 // Default is deny everything
101 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `default_acl` ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
103 // But allow current admin everything (THIS SHALL BE YOU!)
104 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admins` SET `default_acl`='allow' WHERE `id`=".bigintval(getCurrentAdminId())." LIMIT 1");
105 addDropTableSql('admins_acls');
106 addCreateTableSql('admins_acls', "
107 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
108 `admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
109 `action_menu` VARCHAR(255) NOT NULL DEFAULT '',
110 `what_menu` VARCHAR(255) NOT NULL DEFAULT '',
111 `access_mode` ENUM('deny','allow') NOT NULL DEFAULT 'deny',
114 'Access control lines (ACLs)');
116 // Update notes (these will be set as task text!)
117 setExtensionUpdateNotes("Sogn. ACLs werden hinzugefügt: <strong>A</strong>ccess <strong>C</strong>ontrol <strong>L</strong>ines sind zu deutsch Zugriffkontrollzeilen, mit denen Sie einstellen können, was welcher Admin machen darf oder nicht. <strong>Nur Sie haben momentan Vollzugriff auf den Adminbereich.</strong>");
120 case '0.3.1': // SQL queries for v0.3.1
121 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins_acls` CHANGE `id` `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT");
124 case '0.4.0': // SQL queries for v0.4.0
125 addDropTableSql('admins_mails');
126 addCreateTableSql('admins_mails', "
127 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
128 `admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
129 `mail_template` VARCHAR(255) NOT NULL,
132 'Mail template -> admin connection table');
133 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önnen dies (derzeit) jedoch erst, wenn einmal die Mail versendet wurde!',5)");
135 // Update notes (these will be set as task text!)
136 setExtensionUpdateNotes("Kontrollieren Sie, welche Mails welcher Admin oder alle (admin_id=0) bekommen soll oder im UserLog (admin_id=-1) verzeichnet werden soll. Standardmässig wird weiter an alle versendet.");
139 case '0.4.1': // SQL queries for v0.4.1
140 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admins_mails` WHERE mail_template LIKE '% %'");
142 // Update notes (these will be set as task text!)
143 setExtensionUpdateNotes("Admins-Mails-Tabelle geleert.");
145 case '0.4.4': // SQL queries for v0.4.4
146 // Update notes (these will be set as task text!)
147 setExtensionUpdateNotes("&admin= in &amp;admin= umgewandelt.");
150 case '0.4.5': // SQL queries for v0.4.5
151 // Update notes (these will be set as task text!)
152 setExtensionUpdateNotes("Vorbereitet auf Cache-System");
155 case '0.4.6': // SQL queries for v0.4.6
156 // Update notes (these will be set as task text!)
157 setExtensionUpdateNotes("Problem mit cache-Erweiterung gefixt. Der Admin-Bereich war permanent gesperrt.");
160 case '0.4.7': // SQL queries for v0.4.7
161 // Update notes (these will be set as task text!)
162 setExtensionUpdateNotes("Es wurde die Zeitmarke der Cache-Datei admins.cache mit berücksichtigt.");
165 case '0.4.8': // SQL queries for v0.4.8
166 // Update notes (these will be set as task text!)
167 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
170 case '0.4.9': // SQL queries for v0.4.9
171 // Update notes (these will be set as task text!)
172 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
175 case '0.5.0': // SQL queries for v0.5.0
176 // Update notes (these will be set as task text!)
177 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
180 case '0.5.1': // SQL queries for v0.5.1
181 // Update notes (these will be set as task text!)
182 setExtensionUpdateNotes("Cache wird endlich gelöscht, wenn Admin entfernt wird.");
185 case '0.5.2': // SQL queries for v0.5.2
186 // Update notes (these will be set as task text!)
187 setExtensionUpdateNotes("Löschen von Admin-Accounts repariert und HTML-Code ausgelagert in Templates.");
190 case '0.5.3': // SQL queries for v0.5.3
191 // Update notes (these will be set as task text!)
192 setExtensionUpdateNotes("Seit <strong>Patch 340</strong> überflüssige HTML-Tags entfernt.");
195 case '0.5.4': // SQL queries for v0.5.4
196 // Update notes (these will be set as task text!)
197 setExtensionUpdateNotes("IP-Nummer und Browserbezeichnung wird in Admin-Mails eingesetzt.");
200 case '0.5.5': // SQL queries for v0.5.5
201 // Update notes (these will be set as task text!)
202 setExtensionUpdateNotes("Menüpunkt Admin-Mails korregiert: SQL-Anweisung war fehlerhaft; und HTML-Code in Templates ausgelagert.");
205 case '0.5.6': // SQL queries for v0.5.6
206 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
208 // Update notes (these will be set as task text!)
209 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
212 case '0.5.7': // SQL queries for v0.5.7
213 // Update notes (these will be set as task text!)
214 setExtensionUpdateNotes("Links wegen <strong>what=admins_contct</strong> geändert.");
217 case '0.5.8': // SQL queries for v0.5.8
218 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
220 // Update notes (these will be set as task text!)
221 setExtensionUpdateNotes("Ein Punkt in der Versionsnummernliste verhinderte das 0.5.6-Update.");
224 case '0.5.9': // SQL queries for v0.5.9
225 // Update notes (these will be set as task text!)
226 setExtensionUpdateNotes("Sicherheitsupdate: SQL-Anweisungen geschützt.");
229 case '0.6.0': // SQL queries for v0.6.0
230 // Update notes (these will be set as task text!)
231 setExtensionUpdateNotes("Link in "ACL Einstellen" zum Admin-Kontaktformular korregiert.");
234 case '0.6.1': // SQL queries for v0.6.1
235 // Update notes (these will be set as task text!)
236 setExtensionUpdateNotes("Speichern von Admin-Accounts klappt wieder.");
239 case '0.6.2': // SQL queries for v0.6.2
240 // Update notes (these will be set as task text!)
241 setExtensionUpdateNotes("Bitte verschieben Sie die admins-Templates (Ordner: {?PATH?}/templates/de/emails/) in den neuen Order admins!");
244 case '0.6.3': // SQL queries for v0.6.3
245 // Update notes (these will be set as task text!)
246 setExtensionUpdateNotes("Abspeichern von Einstellungen repariert.");
249 case '0.6.4': // SQL queries for v0.6.4
250 // Update notes (these will be set as task text!)
251 setExtensionUpdateNotes("Problem mit der Rechtevererbung beseitigt: Geben Sie nun ein Hauptmenü frei (Allow), dann kann der Admin auch die Untermenüs erreichen. Zudem können Sie gezielte Untermenüs im freigegeben Hauptmenü dennoch sperren.");
254 case '0.6.5': // SQL queries for v0.6.5
255 // Update notes (these will be set as task text!)
256 setExtensionUpdateNotes("Sicherheitsupdate für die Include-Befehle.");
259 case '0.6.6': // SQL queries for v0.5.6
260 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='admins_contct' WHERE `what`='admins_contact' LIMIT 1");
262 // Update notes (these will be set as task text!)
263 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
266 case '0.6.7': // SQL queries for v0.6.7
267 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `la_mode` ENUM('global','OLD','NEW') NOT NULL DEFAULT 'global'");
269 // Update notes (these will be set as task text!)
270 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>. Beseitigung eines Fehlers <strong>HTTP_POSR_VARS</strong> beim Ändern von Administratoren.");
273 case '0.6.8': // SQL queries for v0.6.8
274 // Update notes (these will be set as task text!)
275 setExtensionUpdateNotes("<strong>setSession()</strong> mit @-Zeichen gegen ungewollte Ausgaben abgesichert.");
278 case '0.6.9': // SQL queries for v0.6.9
279 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title`='Admin-Management' WHERE `action`='admins' AND (`what`='' OR `what` IS NULL) LIMIT 1");
281 // Update notes (these will be set as task text!)
282 setExtensionUpdateNotes("Verwaltung nach Management umbenannt.");
285 case '0.7.0': // SQL queries for v0.7.0
286 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `login_failtures` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
287 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `last_failture` TIMESTAMP NULL DEFAULT NULL");
289 // Update notes (these will be set as task text!)
290 setExtensionUpdateNotes("Veraltetes Update.");
293 case '0.7.1': // SQL queries for v0.7.1
294 // Update depends on ext-sql_patches
295 addExtensionDependency('sql_patches');
298 registerFilter(__FILE__, __LINE__, 'sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', false, true, isExtensionDryRun());
300 // Update notes (these will be set as task text!)
301 setExtensionUpdateNotes("Filter hinzugefügt und ist von <strong>sql_patches</strong> abhängig.");
304 case '0.7.2': // SQL queries for v0.7.2
305 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `login_failtures`");
306 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` DROP `last_failture`");
307 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `login_failures` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
308 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `last_failure` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'");
310 // Update notes (these will be set as task text!)
311 setExtensionUpdateNotes("Schreibweise korregiert.");
314 case '0.7.3': // SQL queries for v0.7.3
315 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `expert_settings` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
316 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD `expert_warning` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
318 // Update notes (these will be set as task text!)
319 setExtensionUpdateNotes("Entwicklereinstellungen sind nun hinzugekommen.");
322 case '0.7.4': // SQL queries for v0.7.4
324 registerFilter(__FILE__, __LINE__, 'do_admin_login_done', 'RESET_ADMINS_LOGIN_FAILURES', false, true, isExtensionDryRun());
325 registerFilter(__FILE__, __LINE__, 'do_admin_login_pass', 'COUNT_ADMINS_LOGIN_FAILURE', false, true, isExtensionDryRun());
327 // Update notes (these will be set as task text!)
328 setExtensionUpdateNotes("Filter hinzugefuegt.");
331 case '0.7.5': // SQL queries for v0.7.5
333 registerFilter(__FILE__, __LINE__, 'do_admin_login_done', 'REHASH_ADMINS_PASSWORD', false, true, isExtensionDryRun());
335 // Update notes (these will be set as task text!)
336 setExtensionUpdateNotes("Filter zum Rehashen des Adminpassworts nach erfolgtem Login hinzugefügt.");
339 case '0.7.6': // SQL queries for v0.7.6
340 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` CHANGE `last_failure` `last_failure` TIMESTAMP NULL DEFAULT NULL");
342 // Update notes (these will be set as task text!)
343 setExtensionUpdateNotes("Ausgangswert ist nicht mehr 0000-00-00 00:00:00, sondern NULL.");
346 case '0.7.7': // SQL queries for v0.7.7
347 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='list_admins_acls' WHERE `what`='config_admins' LIMIT 1");
349 // Update notes (these will be set as task text!)
350 setExtensionUpdateNotes("Ausgangswert ist nicht mehr 0000-00-00 00:00:00, sondern NULL.");
353 case '0.7.8': // SQL queries for v0.7.8
354 // Update notes (these will be set as task text!)
355 setExtensionUpdateNotes("Abgekürzte Bezeichnungen können für Missverständnisse am Code sorgen. Daher wurde der Spaltenalias <strong>def_acl</strong> entfernt.");
360 case 'modify': // When the extension got modified
363 case 'test': // For testing purposes
366 case 'init': // Do stuff when extension is initialized
369 default: // Unknown extension mode
370 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));