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 * 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 *
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. *
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. *
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, *
37 ************************************************************************/
39 // Some security stuff...
40 if (!defined('__SECURITY')) {
44 // Version of this extension
45 setThisExtensionVersion('0.7.5');
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'));
50 // Keep this extension always active!
51 setExtensionAlwaysActive('Y');
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öschen oder Passwort/E-Mail Adresse ändern.',1);
57 addAdminMenuSql('admins','admins_add','Admin hinzufügen','Neuen Admin-Account anlegen',0);
58 addAdminMenuSql('admins','admins_edit','Admin-Account ändern','Bestehende Admin-Accounts bearbeiten: E-Mail-Adresse, Passwort und/oder Login-Name ändern.',1);
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`");
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());
75 case 'activate': // Do stuff when admin activates this extension
76 // SQL commands to run
80 case 'deactivate': // Do stuff when admin deactivates this extension
81 // SQL commands to run
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);
90 // Update notes (these will be set as task text!)
91 setExtensionUpdateNotes("Fügt den Menüpunkt "Admin kontaktieren" hinzu.");
94 case '0.3.0': // SQL queries for v0.3
96 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);
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'");
101 // Default is deny everything
102 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_admins` ADD default_acl ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
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',
115 ) TYPE={?_TABLE_TYPE?}");
117 // Update notes (these will be set as task text!)
118 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>");
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");
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,
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önnen dies (derzeit) jedoch erst, wenn einmal die Mail versendet wurde!',5)");
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ässig wird weiter an alle versendet.");
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 '% %'");
143 // Update notes (these will be set as task text!)
144 setExtensionUpdateNotes("Admins-Mails-Tabelle geleert.");
146 case '0.4.4': // SQL queries for v0.4.4
147 // Update notes (these will be set as task text!)
148 setExtensionUpdateNotes("&admin= in &amp;admin= umgewandelt.");
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");
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.");
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ücksichtigt.");
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.");
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.");
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.");
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öscht, wenn Admin entfernt wird.");
186 case '0.5.2': // SQL queries for v0.5.2
187 // Update notes (these will be set as task text!)
188 setExtensionUpdateNotes("Löschen von Admin-Accounts repariert und HTML-Code ausgelagert in Templates.");
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> überflüssige HTML-Tags entfernt.");
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.");
201 case '0.5.5': // SQL queries for v0.5.5
202 // Update notes (these will be set as task text!)
203 setExtensionUpdateNotes("Menüpunkt Admin-Mails korregiert: SQL-Anweisung war fehlerhaft; und HTML-Code in Templates ausgelagert.");
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");
209 // Update notes (these will be set as task text!)
210 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
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ändert.");
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");
221 // Update notes (these will be set as task text!)
222 setExtensionUpdateNotes("Ein Punkt in der Versionsnummernliste verhinderte das 0.5.6-Update.");
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ützt.");
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 "ACL Einstellen" zum Admin-Kontaktformular korregiert.");
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.");
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!");
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.");
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ü frei (Allow), dann kann der Admin auch die Untermenüs erreichen. Zudem können Sie gezielte Untermenüs im freigegeben Hauptmenü dennoch sperren.");
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ür die Include-Befehle.");
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");
263 // Update notes (these will be set as task text!)
264 setExtensionUpdateNotes("Namenskonflikt zwischen den Erweiterungen <strong>admins</strong> und (kommender) <strong>contact</strong>.");
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'");
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 Ändern von Administratoren.");
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.");
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");
282 // Update notes (these will be set as task text!)
283 setExtensionUpdateNotes("Verwaltung nach Management umbenannt.");
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'");
290 // Update notes (these will be set as task text!)
291 setExtensionUpdateNotes("Veraltetes Update.");
294 case '0.7.1': // SQL queries for v0.7.1
295 // Update depends on sql_patches
296 addExtensionUpdateDependency('sql_patches');
299 registerFilter('sql_admin_extra_data', 'ADD_EXTRA_SQL_DATA', false, true, getExtensionDryRun());
301 // Update notes (these will be set as task text!)
302 setExtensionUpdateNotes("Filter hinzugefügt und ist von <strong>sql_patches</strong> abhängig.");
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'");
311 // Update notes (these will be set as task text!)
312 setExtensionUpdateNotes("Schreibweise korregiert.");
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'");
319 // Update notes (these will be set as task text!)
320 setExtensionUpdateNotes("Experten-Einstellungen sind nun hinzugekommen.");
323 case '0.7.4': // SQL queries for v0.7.4
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());
328 // Update notes (these will be set as task text!)
329 setExtensionUpdateNotes("Filter hinzugefuegt.");
332 case '0.7.5': // SQL queries for v0.7.5
333 registerFilter('do_admin_login_done', 'REHASH_ADMINS_PASSWORD', false, true, getExtensionDryRun());
340 case 'modify': // When the extension got modified
343 case 'test': // For testing purposes. For details see file inc/modules/admin/what-extensions.php, arround line 305.
346 case 'init': // Do stuff when extension is initialized
349 default: // Unknown extension mode
350 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s detected.", getExtensionMode()));