Better report this instead of silent logging
[mailer.git] / inc / extensions / ext-sql_patches.php
1 <?php
2 /************************************************************************
3  * Mailer v0.2.1-FINAL                                Start: 08/21/2004 *
4  * ===================                          Last change: 12/04/2004 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : ext-sql_patches.php                              *
8  * -------------------------------------------------------------------- *
9  * Short description : SQL fixes for pro versions                       *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Ausgelagertes "Profildaten aendern"              *
12  * -------------------------------------------------------------------- *
13  * $Revision::                                                        $ *
14  * $Date::                                                            $ *
15  * $Tag:: 0.2.1-FINAL                                                 $ *
16  * $Author::                                                          $ *
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                      *
21  *                                                                      *
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.                                  *
26  *                                                                      *
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.                         *
31  *                                                                      *
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,               *
35  * MA  02110-1301  USA                                                  *
36  ************************************************************************/
37
38 // Some security stuff...
39 if (!defined('__SECURITY')) {
40         die();
41 } // END - if
42
43 // Version number
44 setThisExtensionVersion('0.9.6');
45
46 // Version history array (add more with , '0.0.1' and so on)
47 setExtensionVersionHistory(array('0.0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0.5', '0.0.6', '0.0.7', '0.0.8', '0.0.9', '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1.4', '0.1.5', '0.1.6', '0.1.7', '0.1.8', '0.1.9', '0.2.0', '0.2.1', '0.2.2', '0.2.3', '0.2.4', '0.2.5', '0.2.6', '0.2.7', '0.2.8', '0.2.9', '0.3.0', '0.3.1', '0.3.2', '0.3.3', '0.3.4', '0.3.5', '0.3.6', '0.3.7', '0.3.8', '0.3.9', '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', '0.7.9', '0.8.0', '0.8.1', '0.8.2', '0.8.3', '0.8.4', '0.8.5', '0.8.6', '0.8.7', '0.8.8', '0.8.9', '0.9.0', '0.9.1', '0.9.2', '0.9.3', '0.9.4', '0.9.5', '0.9.6'));
48
49 // Keep this extension always active!
50 setExtensionAlwaysActive('Y');
51
52 switch (getExtensionMode()) {
53         case 'register': // Do stuff when installation is running
54                 // This depends on ext-cache now
55                 addExtensionDependency('cache');
56                 break;
57
58         case 'remove': // Do stuff when removing extension
59                 // Drop tables
60                 addDropTableSql('admin_menu_las');
61                 addDropTableSql('admin_menu_las_data');
62                 addDropTableSql('admin_las_stats');
63                 addDropTableSql('dns_cache');
64                 addDropTableSql('server_name_log');
65
66                 // Delete admin menu entries
67                 addExtensionSql("DELETE LOW_PRIORITY FROM
68         `{?_MYSQL_PREFIX?}_admin_menu`
69 WHERE
70         `what`
71 IN (
72         'config_extensions',
73         'config_home',
74         'list_unconfirmed',
75         'config_refid',
76         'config_title',
77         'config_admin',
78         'config_proxy',
79         'config_session',
80         'list_filter',
81         'list_point_accounts'
82 )");
83
84                 // Delete/update member menu entries
85                 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE
86 `what`='stats2' OR
87 `what`='reflist' OR
88 (`action`='stats' AND (`what`='' OR `what` IS NULL)) OR
89 (`action`='extras' AND (`what`='' OR `what` IS NULL)) OR
90 (`action`='rals' AND (`what`='' OR `what` IS NULL)) OR
91 (`action`='account' AND (`what`='' OR `what` IS NULL)) OR
92 `action`='earn'");
93                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='main' WHERE
94 `action`='stats' OR
95 `action`='extras' OR
96 `action`='rals' OR
97 `action`='account'");
98
99                 // Remove points data
100                 unregisterExtensionPointsData('pool_payback');
101                 unregisterExtensionPointsData('mail_deleted');
102                 unregisterExtensionPointsData('admin_add_single');
103                 unregisterExtensionPointsData('admin_add_single_ref');
104                 unregisterExtensionPointsData('admin_add_all');
105                 unregisterExtensionPointsData('admin_add_all_ref');
106
107                 // Unregister filter
108                 unregisterFilter(__FILE__, __LINE__, 'member_login_check', 'RESET_USER_LOGIN_FAILURE', TRUE, isExtensionDryRun());
109                 unregisterFilter(__FILE__, __LINE__, 'add_history_entry', 'ADD_HISTORY_ENTRY', TRUE, isExtensionDryRun());
110                 unregisterFilter(__FILE__, __LINE__, 'init', 'GENERATE_FILE_SECRET_HASH', TRUE, isExtensionDryRun());
111                 unregisterFilter(__FILE__, __LINE__, 'extra_autopurge', 'SERVER_NAME_EXTRA_AUTOPURGE', TRUE, isExtensionDryRun());
112                 unregisterFilter(__FILE__, __LINE__, 'determine_menu_mode', 'DETERMINE_MENU_MODE_GENERIC', TRUE, isExtensionDryRun());
113                 break;
114
115         case 'activate': // Do stuff when admin activates this extension
116                 // SQL commands to run
117                 addExtensionSql('');
118                 break;
119
120         case 'deactivate': // Do stuff when admin deactivates this extension
121                 // SQL commands to run
122                 addExtensionSql('');
123                 break;
124
125         case 'update': // Update an extension
126                 switch (getCurrentExtensionVersion()) {
127                         case '0.0.1': // SQL queries for v0.0.1
128                                 addAdminMenuSql('setup', 'config_extensions', 'Erweitungsmanagement', 'Alle Einstellungen am Erweiterungsmanagement.', 10);
129
130                                 // Update notes (these will be set as task text!)
131                                 setExtensionUpdateNotes("Es kann nun bestimmt werden, ob vom Server gel&ouml;schte ext-xxx.php erkannt werden sollen und die verkn&uuml;pften Daten auch aus der Datenbank entfernt werden sollen.");
132                                 break;
133
134                         case '0.0.2': // SQL queries for v0.0.2
135                                 addConfigChangeSql('auto_purge', 'auto_purge', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT ' . (getOneDay()*14));
136
137                                 // Update notes (these will be set as task text!)
138                                 setExtensionUpdateNotes("In der Tabelle <strong>{?_MYSQL_PREFIX?}_config</strong> musste die Spalte <strong>auto_purge</strong> (autom. L&ouml;schen von Best&auml;tigungsmails angepasst werden (war auf dem Testsystem auf TINYINT(4) gesetzt.)");
139                                 break;
140
141                         case '0.0.3': // SQL queries for v0.0.3
142                                 addConfigAddSql('points_word', "VARCHAR(255) NOT NULL DEFAULT '{OPEN_TEMPLATE}DEFAULT_POINTS{CLOSE_TEMPLATE}'");
143
144                                 // Update notes (these will be set as task text!)
145                                 setExtensionUpdateNotes("Das Wort &quot;Punkte&quot; kann nun per Datenbank ge&auml;ndert werden. Damit k&ouml;nnen anstelle des Wortes Punkte auch Klammlose, Wernis, Primera und auch &euro; geschrieben werden.");
146                                 break;
147
148                         case '0.0.4': // SQL queries for v0.0.4
149                                 addConfigAddSql('mails_page', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 10');
150
151                                 // Update notes (these will be set as task text!)
152                                 setExtensionUpdateNotes("Anzahl Mails pro Seite in <strong>EMail-Details ansehen</strong> und <strong>EMail-Archiv</strong> hinzugef&uuml;gt.");
153                                 break;
154
155                         case '0.0.5': // SQL queries for v0.0.5
156                                 addConfigAddSql('index_home', "VARCHAR(255) NOT NULL DEFAULT 'welcome'");
157                                 addAdminMenuSql('setup','config_home','Home-Seite festlegen','Stellen Sie hier ein, welcher Men&uuml;punkt (what-welcome ist Standard) als Einstiegspunkt in das Men&uuml;system genutzt werden soll.', 5);
158
159                                 // Update notes (these will be set as task text!)
160                                 setExtensionUpdateNotes("Die what-welcome.php ist derzeit die &quot;Home&quot;-Seite (Eingangsseite). Dies kann nun per Datenbank ge&auml;ndert werden.");
161                                 break;
162
163                         case '0.0.6': // SQL queries for v0.0.6
164                                 addExtensionAddTableColumnSql('extensions', 'ext_has_css', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
165
166                                 // Update notes (these will be set as task text!)
167                                 setExtensionUpdateNotes("Es k&ouml;nnen nun SQL-Updates von einander abh&auml;ngig gemacht werden und die CSS-Datei kann per Admin-Bereich (wegen Debuggings) ein- bzw. ausgeschaltet werden.");
168                                 break;
169
170                         case '0.0.7': // SQL queries for v0.0.7
171                                 addConfigAddSql('verbose_sql', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
172
173                                 // Update notes (these will be set as task text!)
174                                 setExtensionUpdateNotes("Die SQL-Anweisungen werden bei eingeschalteter Verbose-Funktion detailiert angezeigt.");
175                                 break;
176
177                         case '0.0.8': // SQL queries for v0.0.8
178                                 addConfigAddSql('menu_blur_spacer', "VARCHAR(255) NOT NULL DEFAULT '&nbsp;<strong><big>&middot;</big></strong>&nbsp;'");
179
180                                 // Update notes (these will be set as task text!)
181                                 setExtensionUpdateNotes("Nette Mouse-Hover-Effekte eingebaut (Anleitung <strong>MENUE_HOVER.txt</strong> zum Patchen der general.css bitte lesen!)");
182                                 break;
183
184                         case '0.0.9': // SQL queries for v0.0.9
185                                 addAdminMenuSql('email','list_unconfirmed','Unbest. Mails auflisten','Schauen Sie sich hier unbest&auml;tigte Maillinks an. Bitte diesen Link nur &uuml;ber dem EMail-Archiv oder EMail-Details aufrufen, direkt aufgerufen bekommen Sie eine Fehlermeldung.', 8);
186
187                                 // Update notes (these will be set as task text!)
188                                 setExtensionUpdateNotes("Unbest&auml;tigte Maillinks k&ouml;nnen unter Email-Management -&gt; Unbest. Mails auflisten aufgelistet werden.");
189                                 break;
190
191                         case '0.1.0': // SQL queries for v0.1.0
192                                 // Update notes (these will be set as task text!)
193                                 setExtensionUpdateNotes("Soll der einmalige Ref-Bonus &uuml;ber das Referral-System (also alle oberen Refs bekommen auch etwas davon ab) oder direkt dem Werber aufgebucht werden?");
194                                 break;
195
196                         case '0.1.1': // SQL queries for v0.1.1
197                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title`='Home-/Eingangsseite', descr='Stellen Sie hier ein, welcher Men&uuml;punkt (what-welcome ist Standard) als Einstiegspunkt in das Men&uuml;system genutzt werden soll und wie die automatische Weiterleitung in der Eingangsseite funktionieren soll.' WHERE `what`='config_home' LIMIT 1");
198                                 addConfigAddSql('index_delay', 'TINYINT(3) NOT NULL DEFAULT 0');
199                                 addConfigAddSql('index_cookie', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT ' . (getOneDay() * 365));
200
201                                 // Update notes (these will be set as task text!)
202                                 setExtensionUpdateNotes("Sie k&ouml;nnen nun <a href=\"{%url=modules.php?module=admin&amp;what=config_home%}\">hier</a> die Verz&ouml;gerungszeit in der <a href=\"{%url=index.php%}\">Eingangsseite</a> einstellen.");
203                                 break;
204
205                         case '0.1.2': // SQL queries for v0.1.2
206                                 addAdminMenuSql('setup','config_refid','Standard-Ref-Id','Stellen Sie hier die Mitglieds-Id ein, die genommen werden soll, wenn der Gast n icht per Referral-Link Ihren {?mt_word?} aufgerufen hat.', 7);
207                                 addConfigAddSql('def_refid', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
208
209                                 // Update notes (these will be set as task text!)
210                                 setExtensionUpdateNotes("Standard Referral-Id kann per Admin-Bereich eingestellt werden (war vorher nur in modules.php und index.php direkt eingebbar.)");
211                                 break;
212
213                         case '0.1.3': // SQL queries for v0.1.3
214                                 addConfigAddSql('refid_target', "ENUM('register','index') NOT NULL DEFAULT 'register'");
215
216                                 // Update notes (these will be set as task text!)
217                                 setExtensionUpdateNotes("Auf welche Seite soll der Ref-Link zeigen? Eingangsseite oder Anmeldeformular?");
218                                 break;
219
220                         case '0.1.4': // SQL queries for v0.1.4
221                                 // Update notes (these will be set as task text!)
222                                 setExtensionUpdateNotes("Ung&uuml;ltiges Update (nach ext-theme.php verschoben!).");
223                                 break;
224
225                         case '0.1.5': // SQL queries for v0.1.5
226                                 addExtensionDropTableColumnSql('extensions', 'ext_has_admin');
227
228                                 // Update notes (these will be set as task text!)
229                                 setExtensionUpdateNotes("Spalte <u>ext_has_admin</u> aus der Tabelle <u>{?_MYSQL_PREFIX?}_extensions</u> entfernt, da sie keinen Sinn mehr macht.");
230                                 break;
231
232                         case '0.1.6': // SQL queries for v0.1.6
233                                 addConfigAddSql('enable_title_deco', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
234                                 addConfigAddSql('title_left', "VARCHAR(10) NOT NULL DEFAULT '[--'");
235                                 addConfigAddSql('title_middle', "VARCHAR(10) NOT NULL DEFAULT '-'");
236                                 addConfigAddSql('title_right', "VARCHAR(10) NOT NULL DEFAULT '--]'");
237                                 addConfigAddSql('enable_mod_title', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
238                                 addConfigAddSql('enable_what_title', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
239                                 addAdminMenuSql('setup','config_title','Seitentitel &auml;ndern','De-/aktivieren Sie hier die Dekorationen, sowie Modul-Titel und what-Titel im Seitentitel.', 8);
240
241                                 // Update notes (these will be set as task text!)
242                                 setExtensionUpdateNotes("Dekorationen des Seitentiteles lassen sich ein- und ausschalten und selber definieren; Modul-Titel und Titel der <strong>what</strong>-Dateien kann hinzugef&uuml;gt werden.");
243                                 break;
244
245                         case '0.1.7': // SQL queries for v0.1.7
246                                 // Update notes (these will be set as task text!)
247                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
248                                 break;
249
250                         case '0.1.8': // SQL queries for v0.1.8
251                                 // Update notes (these will be set as task text!)
252                                 setExtensionUpdateNotes("mad_count und last_mad werden nun aus der Datenbank geladen");
253                                 break;
254
255                         case '0.1.9': // SQL queries for v0.1.9
256                                 // Update notes (these will be set as task text!)
257                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
258                                 break;
259
260                         case '0.2.0': // SQL queries for v0.2.0
261                                 addExtensionChangeTableColumnSql('jackpot', 'points', 'points', 'FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000');
262
263                                 addExtensionChangeTableColumnSql('payments', 'payment', 'payment', 'FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000');
264                                 addExtensionChangeTableColumnSql('payments', 'price', 'price', 'FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000');
265
266                                 // Update notes (these will be set as task text!)
267                                 setExtensionUpdateNotes("5 Nachkommastellen implementiert");
268                                 break;
269
270                         case '0.2.1': // SQL queries for v0.2.1
271                                 addConfigAddSql('css_php', "ENUM('DIRECT','FILE','INLINE') NOT NULL DEFAULT 'FILE'");
272
273                                 // Update notes (these will be set as task text!)
274                                 setExtensionUpdateNotes("Ausgabe der CSS-Dateien entweder per css.php oder sie sind direkt eingebunden.");
275                                 break;
276
277                         case '0.2.2': // SQL queries for v0.2.2
278                                 // Update notes (these will be set as task text!)
279                                 setExtensionUpdateNotes("Erweiterung bleibt wegen integrierten Schalters immer aktiv.");
280                                 break;
281
282                         case '0.2.3': // SQL queries for v0.2.3
283                                 addConfigAddSql('guest_menu', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
284                                 addConfigAddSql('member_menu', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
285                                 addConfigAddSql('youre_here', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
286
287                                 // Update notes (these will be set as task text!)
288                                 setExtensionUpdateNotes("Gast- und Mitgliedsmen&uuml;s lassen sich getrennt voneinander abschalten.");
289                                 break;
290
291                         case '0.2.4': // SQL queries for v0.2.4
292                                 // PNG image is the default
293                                 $auto_type = 'png';
294
295                                 // Is the JPEG file found and required PHP function there?
296                                 if ((!isFileReadable(getPath() . 'theme/' . getCurrentTheme() . '/images/code_bg.png')) || (!function_exists('imagecreatefrompng'))) {
297                                         // Switch to JPEG format because PNG is not available
298                                         $auto_type = 'jpg';
299                                 } // END - if
300                                 addConfigAddSql('img_type', "ENUM('jpg','png') NOT NULL DEFAULT '" . $auto_type . "'");
301
302                                 // Update notes (these will be set as task text!)
303                                 setExtensionUpdateNotes("Generierung des Mailbest&auml;tigungscodes h&auml;ngt davon ab, ob die PHP-Funktion <u>imagecreatefromjpeg()</u> und das JPEG-Bild vorhanden sind oder nicht.");
304                                 break;
305
306                         case '0.2.5': // SQL queries for v0.2.5
307                                 // Update notes (these will be set as task text!)
308                                 setExtensionUpdateNotes("Spalten <u>max_mails</u> und <u>receive_mails</u> auf BIGINT(20) gesetzt.");
309                                 break;
310
311                         case '0.2.6': // SQL queries for v0.2.6
312                                 // Update notes (these will be set as task text!)
313                                 setExtensionUpdateNotes("Verschoben nach <strong>ext-user</strong>.");
314                                 break;
315
316                         case '0.2.7': // SQL queries for v0.2.7
317                                 addConfigAddSql('stats_limit', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 10');
318                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='config_stats' WHERE `what`='stats' LIMIT 1");
319
320                                 // Update notes (these will be set as task text!)
321                                 setExtensionUpdateNotes("<ol>
322 <li>Das Mitglied kann das derzeitige Design in sein Profil abspeichern.</li>
323 <li>Mitgliederstatistik mit Seitennavigation.</li>
324 </ol>");
325                                 break;
326
327                         case '0.2.8': // SQL queries for v0.2.8
328                                 // Update notes (these will be set as task text!)
329                                 setExtensionUpdateNotes("Nicht mehr g&uuml;ltiges Update.");
330                                 break;
331
332                         case '0.2.9': // SQL queries for v0.2.9
333                                 addConfigAddSql('mt_word', "VARCHAR(255) NOT NULL DEFAULT 'Mailtausch'");
334                                 addConfigAddSql('mt_word2', "VARCHAR(255) NOT NULL DEFAULT 'Mailtausches'");
335                                 addConfigAddSql('mt_word3', "VARCHAR(255) NOT NULL DEFAULT 'Mailtauscher'");
336
337                                 // Update notes (these will be set as task text!)
338                                 setExtensionUpdateNotes("W&ouml;rter <strong>{?mt_word?}</strong>, <strong>{?mt_word2?}</strong> und <strong>{?mt_word3?}</strong> sind austauschbar.");
339                                 break;
340
341                         case '0.3.0': // SQL queries for v0.3.0
342                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title`='{OPEN_CONFIG}POINTS{CLOSE_CONFIG}/Referral-Ebenen' WHERE `what`='config_points' LIMIT 1");
343                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title`='Mailverg&uuml;tungen...' WHERE `what`='payments' LIMIT 1");
344
345                                 // Update notes (these will be set as task text!)
346                                 setExtensionUpdateNotes("Zwei Men&uuml;punkte umbenannt.");
347                                 break;
348
349                         case '0.3.1': // SQL queries for v0.3.1
350                                 addExtensionAddTableUniqueSql('extensions', 'ext_name', '(`ext_name`)');
351                                 addExtensionAddTableUniqueSql('admins', 'login', '(`login`)');
352                                 addExtensionAddTableIndexSql('refbanner', 'visible', '(`visible`)');
353                                 addExtensionAddTableUniqueSql('refdepths', 'level', '(`level`)');
354                                 addExtensionAddTableIndexSql('refsystem', 'level', '(`level`)');
355                                 addExtensionAddTableIndexSql('pool', 'data_type', '(`data_type`)');
356                                 addExtensionAddTableUniqueSql('mod_reg', 'module', '(`module`)');
357                                 addExtensionAddTableIndexSql('admin_menu', 'action', '(`action`)');
358                                 addExtensionAddTableIndexSql('admin_menu', 'what', '(`what`)');
359                                 addExtensionAddTableIndexSql('extensions', 'ext_active', '(`ext_active`)');
360                                 addExtensionAddTableIndexSql('guest_menu', 'action', '(`action`)');
361                                 addExtensionAddTableIndexSql('guest_menu', 'what', '(`what`)');
362                                 addExtensionAddTableIndexSql('guest_menu', 'sort', '(`sort`)');
363                                 addExtensionAddTableIndexSql('guest_menu', 'visible', '(`visible`)');
364                                 addExtensionAddTableIndexSql('guest_menu', 'locked', '(`locked`)');
365                                 addExtensionAddTableIndexSql('member_menu', 'what', '(`what`)');
366                                 addExtensionAddTableIndexSql('member_menu', 'sort', '(`sort`)');
367                                 addExtensionAddTableIndexSql('member_menu', 'visible', '(`visible`)');
368                                 addExtensionAddTableIndexSql('member_menu', 'locked', '(`locked`)');
369                                 addExtensionAddTableIndexSql('cats', 'visible', '(`visible`)');
370                                 addExtensionAddTableIndexSql('cats', 'sort', '(`sort`)');
371
372                                 // Update notes (these will be set as task text!)
373                                 setExtensionUpdateNotes("Eindeutige Schl&uuml;ssel (UNIQUE) und normale Schl&uuml;ssel (INDEX) gesetzt.");
374                                 break;
375
376                         case '0.3.2': // SQL queries for v0.3.2
377                                 // Connection table between the menu system and the "logical area system"
378                                 addDropTableSql('admin_menu_las');
379                                 addCreateTableSql('admin_menu_las', "
380 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
381 `la_id` VARCHAR(255) NOT NULL DEFAULT '',
382 `la_action` VARCHAR(255) NOT NULL DEFAULT '',
383 `la_what` VARCHAR(255) NOT NULL DEFAULT '',
384 PRIMARY KEY (`id`),
385 INDEX (`la_id`),
386 INDEX (`la_action`),
387 INDEX (`la_what`)",
388                                         'Menu system -> LAS');
389
390                                 // All "logical areas" together
391                                 addDropTableSql('admin_menu_las_data');
392                                 addCreateTableSql('admin_menu_las_data', "
393 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
394 `la_id` VARCHAR(255) NOT NULL DEFAULT '',
395 `la_title` VARCHAR(255) NOT NULL DEFAULT '',
396 `la_posx` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
397 `la_posy` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
398 PRIMARY KEY (`id`),
399 UNIQUE INDEX (`la_id`),
400 INDEX (`la_posx`),
401 INDEX (`la_posy`)",
402                                         'LAS position and title data');
403
404                                 // Which menu do you like?
405                                 addConfigAddSql('admin_menu', "ENUM('NEW','OLD') NOT NULL DEFAULT 'OLD'");
406
407                                 // Insert menus
408                                 addAdminMenuSql('setup', 'config_admin', 'Adminmen&uuml;', 'Diverse Einstellungen am Adminmen&uuml; vornehmen.', 9);
409
410                                 // Update notes (these will be set as task text!)
411                                 setExtensionUpdateNotes("Logische Bereiche (Logical Areas = LAs) eingef&uuml;hrt. Dadurch wird das immer st&auml;rker anwachsende Admin-Men&uuml; in grosse Hauptgruppen unterteilt, wodurch ein Auffinden von Men&uuml;punkten verbessert wird.");
412                                 break;
413
414                         case '0.3.3': // SQL queries for v0.3.3
415                                 // Switch of the "intelligent menu sorter" when you want to have a fixed menu structure...
416                                 addConfigAddSql('admin_menu_sorter', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
417
418                                 // The statistics table
419                                 addDropTableSql('admin_las_stats');
420                                 addCreateTableSql('admin_las_stats', "
421 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
422 `admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
423 `type` ENUM('la','action','what') NOT NULL DEFAULT 'what',
424 `clicks` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
425 PRIMARY KEY (`id`),
426 INDEX (`admin_id`)",
427                                         'LAS click data');
428
429                                 // Update notes (these will be set as task text!)
430                                 setExtensionUpdateNotes("Admin-abh&auml;ngig werden nun Klicks im Admin-Men&uuml; gez&auml;hlt, die zur automatischen Anpassung des Men&uuml;s in den logischen Bereichen diennen. Dieses &quot;intelligente Unbauen&quot; k&ouml;nnen Sie auch ganz abschalten.");
431                                 break;
432
433                         case '0.3.4': // SQL queries for v0.3.4
434                                 // Update notes (these will be set as task text!)
435                                 setExtensionUpdateNotes("Veraltetes Update (what=list_user&amp;mode=noref)");
436                                 break;
437
438                         case '0.3.5': // SQL queries for v0.3.5
439                                 // List accounts with no referral
440                                 addMemberMenuSql('stats', NULL, 'Statistiken', 4);
441                                 addMemberMenuSql('stats', 'stats2', 'Framekiller-Mails', 2);
442                                 addMemberMenuSql('extras', NULL, 'Extras', 5);
443                                 addMemberMenuSql('rals', NULL, 'Rallyes', 6);
444                                 addMemberMenuSql('account', NULL, 'Ihr Account', 7);
445                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='stats',`sort`=1,`title`='Klick-Mails' WHERE `what`='stats' LIMIT 1");
446                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='extras',`sort`=3 WHERE `what`='reflinks' LIMIT 1");
447
448                                 // Update notes (these will be set as task text!)
449                                 setExtensionUpdateNotes("Mitgliedsmen&uuml; komplett umgebaut.");
450                                 break;
451
452                         case '0.3.6': // SQL queries for v0.3.6
453                                 addConfigAddSql('salt_length', 'TINYINT(3) UNSIGNED NOT NULL DEFAULT 10');
454                                 addConfigAddSql('pass_scramble', "VARCHAR(255) NOT NULL DEFAULT ''");
455                                 addExtensionChangeTableColumnSql('admins', 'password', 'password', "VARCHAR(255) NOT NULL DEFAULT ''");
456                                 addConfigAddSql('rand_no', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
457                                 addConfigAddSql('file_hash', "VARCHAR(255) NOT NULL DEFAULT ''");
458                                 addConfigAddSql('master_salt', "VARCHAR(255) NOT NULL DEFAULT ''");
459                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_config` SET `rand_no`=(ROUND(RAND() * 99999) + 100000) WHERE `config`=0 LIMIT 1");
460                                 addExtensionAddTableColumnSql('mod_reg', 'has_menu', "ENUM('Y','N') NOT NULL DEFAULT 'N'");
461                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_mod_reg` SET `has_menu`='Y' WHERE `module`='admin' OR `module`='index' OR `module`='login' LIMIT 3");
462
463                                 // Update notes (these will be set as task text!)
464                                 setExtensionUpdateNotes("Passwort-System mit Zufallshash erweitert (Schutzt gegen Dictionary-Attacks!)");
465                                 break;
466
467                         case '0.3.7': // SQL queries for v0.3.7
468                                 setExtensionUpdateNotes("Problem w&auml;hrend des Installationsvorganges behoben.");
469                                 break;
470
471                         case '0.3.8': // SQL queries for v0.3.8
472                                 addExtensionChangeTableColumnSql('admin_menu', 'descr', 'descr', 'MEDIUMTEXT NULL');
473                                 addExtensionChangeTableColumnSql('pool', 'text', 'text', 'LONGTEXT NOT NULL');
474
475                                 // Update notes (these will be set as task text!)
476                                 setExtensionUpdateNotes("Beschreibungstexte f&uuml;r Admin-Men&uuml;s k&ouml;nnen l&auml;nger sein. Diverse Fixes.");
477                                 break;
478
479                         case '0.3.9': // SQL queries for v0.3.9
480                                 // Update notes (these will be set as task text!)
481                                 setExtensionUpdateNotes("Beschreibungstexte f&uuml;r Admin-Men&uuml;s k&ouml;nnen l&auml;nger sein. Diverse Fixes.");
482                                 break;
483
484                         case '0.4.0': // SQL queries for v0.4.0
485                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title` = 'Email-Management' WHERE `action` = 'email' AND (`what`='' OR `what` IS NULL) LIMIT 1");
486
487                                 // Update notes (these will be set as task text!)
488                                 setExtensionUpdateNotes("Email-Verwaltung nach Email-Management umbenannt.");
489                                 break;
490
491                         case '0.4.1': // SQL queries for v0.4.1
492                                 addConfigAddSql('show_timings', "ENUM ('Y','N') NOT NULL DEFAULT 'Y'");
493
494                                 // Update notes (these will be set as task text!)
495                                 setExtensionUpdateNotes("Tabellen-Schl&uuml;ssel neu gesetzt und Parsing-Zeit im Footer eingeblendet.");
496                                 break;
497
498                         case '0.4.2': // SQL queries for v0.4.2
499                                 // Update notes (these will be set as task text!)
500                                 setExtensionUpdateNotes("Nicht mehr g&uuml;ltiges Update.");
501                                 break;
502
503                         case '0.4.3': // SQL queries for v0.4.3
504                                 addConfigAddSql('proxy_host', "VARCHAR(255) NOT NULL DEFAULT ''");
505                                 addConfigAddSql('proxy_port', 'INT(5) UNSIGNED NOT NULL DEFAULT 0');
506                                 addConfigAddSql('proxy_username', "VARCHAR(255) NOT NULL DEFAULT ''");
507                                 addConfigAddSql('proxy_password', "VARCHAR(255) NOT NULL DEFAULT ''");
508                                 addAdminMenuSql('setup','config_proxy','Proxy-Einstellungen','Sollte Ihr Webserver sich hinter einem Proxy befinden, so k&ouml;nnen Sie Ihren {?mt_word?} so konfigurieren, dass es z.B. Updates, Abfragen von Netzwerkupdates &uuml;ber diesen t&auml;tigt.', 15);
509
510                                 // Update notes (these will be set as task text!)
511                                 setExtensionUpdateNotes("Proxy-Einstellungen hinzugef&uuml;gt.");
512                                 break;
513
514                         case '0.4.4': // SQL queries for v0.4.4
515                                 addExtensionChangeTableColumnSql('admin_menu', 'what', 'what', 'VARCHAR(255) NULL DEFAULT NULL');
516                                 addExtensionChangeTableColumnSql('guest_menu', 'what', 'what', 'VARCHAR(255) NULL DEFAULT NULL');
517                                 addExtensionChangeTableColumnSql('member_menu', 'what', 'what', 'VARCHAR(255) NULL DEFAULT NULL');
518                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`=NULL WHERE `what`=''");
519                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_guest_menu` SET `what`=NULL WHERE `what`=''");
520                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `what`=NULL WHERE `what`=''");
521
522                                 // Make this depending on ext-menu
523                                 addExtensionDependency('menu');
524
525                                 // Update notes (these will be set as task text!)
526                                 setExtensionUpdateNotes("Schl&uuml;ssel in Admin-, Gast- und Mitgliedsmen&uuml; verbessert.");
527                                 break;
528
529                         case '0.4.5': // SQL queries for v0.4.5
530                                 addConfigAddSql('last_month', 'CHAR(2) NOT NULL DEFAULT 00');
531                                 addConfigAddSql('last_week', 'CHAR(2) NOT NULL DEFAULT 00');
532
533                                 // Update notes (these will be set as task text!)
534                                 setExtensionUpdateNotes("T&auml;glichen/w&ouml;chentlichen/monatlichen Reset verbessert.");
535                                 break;
536
537                         case '0.4.6': // SQL queries for v0.4.6
538                                 // Update notes (these will be set as task text!)
539                                 setExtensionUpdateNotes("Nicht mehr g&uuml;ltiges Update.");
540                                 break;
541
542                         case '0.4.7': // SQL queries for v0.4.7
543                                 // Update notes (these will be set as task text!)
544                                 setExtensionUpdateNotes("Veraltetes Update.");
545                                 break;
546
547                         case '0.4.8': // SQL queries for v0.4.8
548                                 // Update notes (these will be set as task text!)
549                                 setExtensionUpdateNotes("Update nach <strong>ext-task</strong> verschoben.");
550                                 break;
551
552                         case '0.4.9': // SQL queries for v0.4.9
553                                 // Update notes (these will be set as task text!)
554                                 setExtensionUpdateNotes("Nicht mehr g&uuml;ltiges Update.");
555                                 break;
556
557                         case '0.5.0': // SQL queries for v0.5.0
558                                 addExtensionDropTableIndexSql('refsystem', 'level');
559                                 addExtensionDropTableIndexSql('refsystem', 'userid');
560                                 addExtensionAddTableIndexSql('refsystem', 'userid_level', '(`userid`, `level`)');
561
562                                 // Update notes (these will be set as task text!)
563                                 setExtensionUpdateNotes("Referral-System unterst&uuml;tzt nun detailierte Referral-&Uuml;bersicht und vieles mehr.");
564                                 break;
565
566                         case '0.5.1': // SQL queries for v0.5.1
567                                 addExtensionDropTableColumnSql('member_menu', 'descr');
568
569                                 // Update notes (these will be set as task text!)
570                                 setExtensionUpdateNotes("Beschreibungsspalte von Mitgliedsmen&uuml; entfernt, welche ohnehin nicht genutzt wird.");
571                                 break;
572
573                         case '0.5.2': // SQL queries for v0.5.2
574                                 addExtensionChangeTableColumnSql('refdepths', 'percents', 'percents', 'FLOAT(8,5) UNSIGNED NOT NULL DEFAULT 0.00000');
575
576                                 // Update notes (these will be set as task text!)
577                                 setExtensionUpdateNotes("Prozents&auml;tze k&ouml;nnen nun f&uuml;nf Stellen hinter dem Komma sein.");
578                                 break;
579
580                         case '0.5.3': // SQL queries for v0.5.3
581                                 addConfigAddSql('session_save_path', "VARCHAR(255) NOT NULL DEFAULT ''");
582                                 addAdminMenuSql('setup','config_session','Session-Einstellungen','&Auml;ndern Sie hier den Speicherpfad f&uuml;r Sessiondateien (Sitzungsdateien) ab, falls die Standard-Einstellung bei Ihrem Hoster zu Problem f&uuml;hren sollte.', 16);
583
584                                 // Update notes (these will be set as task text!)
585                                 setExtensionUpdateNotes("Session-Speicherpfad konfigurierbar. Beispielsweise ist dies bei all-inkl.com n&ouml;tig.");
586                                 break;
587
588                         case '0.5.4': // SQL queries for v0.5.4
589                                 addMemberMenuSql('main', 'reflist', 'Ref-&Uuml;bersicht', 5);
590
591                                 // Update notes (these will be set as task text!)
592                                 setExtensionUpdateNotes("Ref-&Uuml;bersicht eingebaut. Diese h&auml;ngt von der Erweiterung <strong>refback</strong> ab.");
593                                 break;
594
595                         case '0.5.5': // SQL queries for v0.5.5
596                                 addConfigAddSql('show_points_unconfirmed', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
597
598                                 // Update notes (these will be set as task text!)
599                                 setExtensionUpdateNotes("Anzeige der {?POINTS?} unter den unbest&auml;tigten Mails kann nun optional abgeschaltet werden.");
600                                 break;
601
602                         case '0.5.6': // SQL queries for v0.5.6
603                                 // Update notes (these will be set as task text!)
604                                 setExtensionUpdateNotes("Nicht mehr g&uuml;ltiges Update.");
605                                 break;
606
607                         case '0.5.7': // SQL queries for v0.5.7
608                                 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `what`='list_norefs' LIMIT 1");
609
610                                 // Update notes (these will be set as task text!)
611                                 setExtensionUpdateNotes("Auflistung der Mitglieder ohne Werber nach what=list_user&amp;mode=norefs verschoben.");
612                                 break;
613
614                         case '0.5.8': // SQL queries for v0.5.8
615                                 addExtensionDropTableColumnSql('extensions', 'ext_lang_file');
616
617                                 // Update notes (these will be set as task text!)
618                                 setExtensionUpdateNotes("Sprachdateinamen werden nicht mehr in der Datenbank behalten.");
619                                 break;
620
621                         case '0.5.9': // SQL queries for v0.5.9
622                                 // Table 'filters' is vital because many functionality depends on it, so don't remove it
623                                 addCreateTableSql('filters', "
624 `filter_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
625 `filter_name` VARCHAR(50) NOT NULL DEFAULT '',
626 `filter_function` VARCHAR(100) NOT NULL DEFAULT '',
627 `filter_active` ENUM('N','Y') NOT NULL DEFAULT 'Y',
628 `filter_counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
629 PRIMARY KEY (`filter_id`),
630 UNIQUE INDEX `name_function` (`filter_name`, `filter_function`)",
631                                         'Filter system');
632
633                                 // Admin menu
634                                 addAdminMenuSql('setup','list_filter','Filter-Management', 'Zeigt alle im System registrierten Filter an und l&auml;sst diese de- bzw. wieder aktivieren.', 17);
635
636                                 // Update notes (these will be set as task text!)
637                                 setExtensionUpdateNotes("Tabellen f&uuml;r Filter-System hinzugef&uuml;gt.");
638                                 break;
639
640                         case '0.6.0': // SQL queries for v0.6.0
641                                 addConfigAddSql('update_filter_usage', "ENUM('N','Y') NOT NULL DEFAULT 'N'");
642
643                                 // Update notes (these will be set as task text!)
644                                 setExtensionUpdateNotes("Benutzungsstatistik eingebaut. Das Z&auml;hlen der Filterverwendungen sollte <strong>ausschliesslich</strong> zu Debugging-Zwecken eingesetzt werden.");
645                                 break;
646
647                         case '0.6.1': // SQL queries for v0.6.1
648                                 // Update notes (these will be set as task text!)
649                                 setExtensionUpdateNotes("Nicht mehr g&uuml;ltiges Update.");
650                                 break;
651
652                         case '0.6.2': // SQL queries for v0.6.2
653                                 // Depends on refback extension
654                                 addExtensionDependency('user');
655
656                                 // Update notes (these will be set as task text!)
657                                 setExtensionUpdateNotes("Abh&auml;ngigkeit von <u>ext-user</u> gesetzt.");
658                                 break;
659
660                         case '0.6.3': // SQL queries for v0.6.3
661                                 // Update notes (these will be set as task text!)
662                                 setExtensionUpdateNotes("Filter-Tabelle bereinigt um doppelte Eintr&auml;ge und Unique-Key auf <span class=\"bad\">filter_name</span> und <span class=\"bad\">filter_function</span> zusammen gesetzt.");
663
664                                 // Add special fix include to fix filters
665                                 addIncludeToPool('extension', 'inc/fix_filters.php');
666                                 break;
667
668                         case '0.6.4': // SQL queries for v0.6.4
669                                 // Update admin menu
670                                 addExtensionSql("UPDATE  `{?_MYSQL_PREFIX?}_admin_menu` SET `title` = REPLACE(`title`, '!POINTS!', '?POINTS?') WHERE `title` LIKE '%!POINTS!%'");
671                                 addExtensionSql("UPDATE  `{?_MYSQL_PREFIX?}_admin_menu` SET `descr` = REPLACE(`descr`, '!POINTS!', '?POINTS?') WHERE `descr` LIKE '%!POINTS!%'");
672                                 addExtensionSql("UPDATE  `{?_MYSQL_PREFIX?}_guest_menu` SET `title` = REPLACE(`title`, '!POINTS!', '?POINTS?') WHERE `title` LIKE '%!POINTS!%'");
673                                 addExtensionSql("UPDATE  `{?_MYSQL_PREFIX?}_member_menu` SET `title` = REPLACE(`title`, '!POINTS!', '?POINTS?') WHERE `title` LIKE '%!POINTS!%'");
674
675                                 // Update notes (these will be set as task text!)
676                                 setExtensionUpdateNotes("Datenbank umgestellt auf Konfigurationselemente.");
677                                 break;
678
679                         case '0.6.5': // SQL queries for v0.6.5
680                                 addConfigChangeSql('css_php', 'css_php', "ENUM('DIRECT','FILE','INLINE') NOT NULL DEFAULT 'FILE'");
681
682                                 // Update notes (these will be set as task text!)
683                                 setExtensionUpdateNotes("Ausgabe der CSS-Dateien entweder per css.php oder sie sind direkt eingebunden.");
684                                 break;
685
686                         case '0.6.6': // SQL queries for v0.6.6
687                                 addAdminMenuSql('setup', 'config_secure', 'Sicherheitseinstellungen', 'Stellen Sie ein, wie lange das Passwort eines Mitgliedes mindestens sein muss uvm.', 9);
688                                 addAdminMenuSql('setup', 'config_points', '{OPEN_CONFIG}POINTS{CLOSE_CONFIG}', 'Stellen Sie hier die Willkommensgutschrift, Referral-Gutschrift (einmalige) usw. ein.', 10);
689                                 addAdminMenuSql('email', 'email_archiv', 'E-Mail Archiv', 'Sehen Sie sich hier bereits gesendete Mails an.', 6);
690
691                                 // Update notes (these will be set as task text!)
692                                 setExtensionUpdateNotes("Die Sicherheitseinstellungen, {?POINTS?}-Einstellungen und Email-Archiv funktionieren nur, wenn diese Erweiterung installiert ist.");
693                                 break;
694
695                         case '0.6.7': // SQL queries for v0.6.7
696                                 addConfigChangeSql('index_delay', 'index_delay', 'TINYINT(3) NOT NULL DEFAULT 0');
697
698                                 // Update notes (these will be set as task text!)
699                                 setExtensionUpdateNotes("Die Weiterleitungseinstellung muss auch Werte kleiner Null akzeptieren.");
700                                 break;
701
702                         case '0.6.8': // SQL queries for v0.6.8
703                                 addExtensionChangeTableColumnSql('admin_menu', 'action', 'action', 'VARCHAR(50) NOT NULL');
704                                 addExtensionChangeTableColumnSql('admin_menu', 'what', 'what', 'VARCHAR(50) NULL DEFAULT NULL');
705                                 addExtensionChangeTableColumnSql('guest_menu', 'action', 'action', 'VARCHAR(50) NOT NULL');
706                                 addExtensionChangeTableColumnSql('admin_menu', 'what', 'what', 'VARCHAR(50) NULL DEFAULT NULL');
707                                 addExtensionChangeTableColumnSql('member_menu', 'action', 'action', 'VARCHAR(50) NOT NULL');
708                                 addExtensionChangeTableColumnSql('admin_menu', 'what', 'what', 'VARCHAR(50) NULL DEFAULT NULL');
709
710                                 // Update notes (these will be set as task text!)
711                                 setExtensionUpdateNotes("Spalten verk&uuml;rzt, damit die Schl&uuml;ssel passen.");
712                                 break;
713
714                         case '0.6.9': // SQL queries for 0.6.9
715                                 // Register filter
716                                 registerFilter(__FILE__, __LINE__, 'member_login_check', 'RESET_USER_LOGIN_FAILURE', FALSE, TRUE, isExtensionDryRun());
717
718                                 // Update notes (these will be set as task text!)
719                                 setExtensionUpdateNotes("Filter zum Zur&uuml;cksetzens des fehlgeschlagenen Mitgliederlogins hinzugef&uuml;gt (internes TODO).");
720                                 break;
721
722                         case '0.7.0': // SQL queries for 0.7.0
723                                 // Table definition
724                                 addDropTableSql('dns_cache');
725                                 addCreateTableSql('dns_cache', "
726 `hostname` VARCHAR(255) NOT NULL,
727 `ip` VARCHAR(15) NOT NULL,
728 `added` DATETIME NOT NULL,
729 PRIMARY KEY (`hostname`),
730 INDEX (`ip`)",
731                                         'Cache for DNS requests');
732
733                                 // Configuration
734                                 addConfigAddSql('dns_cache_timeout', 'BIGINT(20) NOT NULL DEFAULT ' . (60*60*24));
735
736                                 // Register filter
737                                 registerFilter(__FILE__, __LINE__, 'reset', 'CLEANUP_DNS_CACHE', FALSE, TRUE, isExtensionDryRun());
738
739                                 // Update notes (these will be set as task text!)
740                                 setExtensionUpdateNotes("IP-Resolver-Klasse hinzugef&uuml;gt, um bei der Erweiterung ext-network DNS-Anfragen einzusparen.");
741                                 break;
742
743                         case '0.7.1': // SQL queries for v0.7.1
744                                 // This update just depends on ext-timezone to make integration of an essential extension much easier
745                                 addExtensionDependency('timezone');
746
747                                 // Update notes (these will be set as task text!)
748                                 setExtensionUpdateNotes("Zeitzone ist nun mit ext-timezone konfigurierbar.");
749                                 break;
750
751                         case '0.7.2': // SQL queries for v0.7.2
752                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_task_system` SET `task_type`='MEMBER_SUPPORT' WHERE `task_type`='SUPPORT_MEMBER'");
753
754                                 // Update notes (these will be set as task text!)
755                                 setExtensionUpdateNotes("Daten an Namenskonvention angepasst.");
756                                 break;
757
758                         case '0.7.3': // SQL queries for v0.7.3
759                                 addExtensionChangeTableColumnSql('filters', 'filter_name', 'filter_name', "VARCHAR(50) NOT NULL DEFAULT ''");
760                                 addExtensionChangeTableColumnSql('filters', 'filter_function', 'filter_function', "VARCHAR(100) NOT NULL DEFAULT ''");
761
762                                 // Update notes (these will be set as task text!)
763                                 setExtensionUpdateNotes("Spalten in Filtertabelle gek&uuml;rzt (SQL-Fehler wegen zu grossem Schl&uuml;ssel).");
764                                 break;
765
766                         case '0.7.4': // SQL queries for v0.7.4
767                                 addExtensionAddTableColumnSql('pool', 'mails_sent', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
768
769                                 // Update notes (these will be set as task text!)
770                                 setExtensionUpdateNotes("Spalten in Filtertabelle gek&uuml;rzt (SQL-Fehler wegen zu grossem Schl&uuml;ssel).");
771                                 break;
772
773                         case '0.7.5': // SQL queries for v0.7.5
774                                 addConfigAddSql('last_hour', 'TINYINT(2) UNSIGNED ZEROFILL NOT NULL DEFAULT 00');
775
776                                 // Update notes (these will be set as task text!)
777                                 setExtensionUpdateNotes("Aktuelle Stunde hinzugef&uuml;gt (ist nicht konfigurierbar).");
778                                 break;
779
780                         case '0.7.6': // SQL queries for v0.7.6
781                                 addConfigChangeSql('last_month', 'last_month', 'TINYINT(2) UNSIGNED ZEROFILL NOT NULL DEFAULT 00');
782                                 addConfigChangeSql('last_week', 'last_week', 'TINYINT(2) UNSIGNED ZEROFILL NOT NULL DEFAULT 00');
783
784                                 // Update notes (these will be set as task text!)
785                                 setExtensionUpdateNotes("Spaltentyp fuer kleine Zahlen sollten auch z.B. TINYINT sein.");
786                                 break;
787
788                         case '0.7.7': // SQL queries for v0.7.7
789                                 addMemberMenuSql('earn', NULL, 'Verdienen', 2);
790                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='earn',`sort`=1 WHERE `what`='unconfirmed' LIMIT 1");
791
792                                 // Update notes (these will be set as task text!)
793                                 setExtensionUpdateNotes("Men&uuml;punkt <strong>Verdienen</strong> hinzugef&uuml;gt und <strong>Unbest&auml;tigte Mails</strong> als ersten Punkt dort hin verschoben.");
794                                 break;
795
796                         case '0.7.8': // SQL queries for v0.7.8
797                                 // Update notes (these will be set as task text!)
798                                 setExtensionUpdateNotes("Konfigurationseintr&auml;ge mit Spaltentyp <strong>ENUM</strong> werden nun immer komplett gross geschrieben.");
799                                 break;
800
801                         case '0.7.9': // SQL queries for v0.7.9
802                                 addExtensionSQL("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='list_email_max_rec' WHERE `what`='config_email' LIMIT 1");
803
804                                 // Update notes (these will be set as task text!)
805                                 setExtensionUpdateNotes("Adminscript <strong>what-config_email.php</strong> nach <strong>what-list_email_max_rec.php</strong> umbenannt.");
806                                 break;
807
808                         case '0.8.0': // SQL queries for v0.8.0
809                                 // Points account data (this table should not be dropped or else you may have to re-install a lot extensions)
810                                 addCreateTableSql('points_data', "
811 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
812 `subject` VARCHAR(255) NOT NULL DEFAULT '',
813 `column_name` VARCHAR(255) NOT NULL DEFAULT 'points',
814 `locked_mode` ENUM('LOCKED','UNLOCKED') NOT NULL DEFAULT 'LOCKED',
815 `payment_method` ENUM('DIRECT','REFERRAL') NOT NULL DEFAULT 'REFERRAL',
816 `notify_recipient` ENUM('Y','N') NOT NULL DEFAULT 'N',
817 PRIMARY KEY (`id`),
818 UNIQUE KEY (`subject`)",
819                                         'Points account data');
820
821                                 // Admin menu
822                                 addAdminMenuSql('setup', 'list_point_accounts', 'Guthabenkonten...', 'Veralten Sie hier bequem Einstellungen zu den Guthabenkonten.', 5);
823
824                                 // Update notes (these will be set as task text!)
825                                 setExtensionUpdateNotes("Tabelle <span class=\"bad\">points_data</span> erzeugt, diese soll das {?POINTS?}-Guthaben komplett lenken.");
826                                 break;
827
828                         case '0.8.1': // SQL queries for v0.8.1
829                                 addExtensionChangeTableColumnSql('refdepths', 'level', 'level', 'TINYINT(3) UNSIGNED NULL DEFAULT NULL');
830                                 addExtensionSql('UPDATE `{?_MYSQL_PREFIX?}_refdepths` SET `level`=NULL WHERE `level`=0 LIMIT 1');
831
832                                 // Update notes (these will be set as task text!)
833                                 setExtensionUpdateNotes("Level 0 ist nun auch NULL.");
834                                 break;
835
836                         case '0.8.2': // SQL queries for v0.8.2
837                                 addExtensionDropTableIndexSql('points_data', 'ext_name');
838                                 addExtensionChangeTableColumnSql('points_data', 'ext_name', 'subject', "VARCHAR(255) NOT NULL DEFAULT ''");
839                                 addExtensionAddTableColumnSql('points_data', 'notify_recipient', "ENUM('Y','N') NOT NULL DEFAULT 'N'");
840
841                                 // Register points data
842                                 registerExtensionPointsData('pool_payback', 'points', 'LOCKED', 'DIRECT');
843                                 registerExtensionPointsData('mail_deleted', 'points', 'LOCKED', 'DIRECT');
844
845                                 // Remove deprecated configuration entry
846                                 addConfigDropSql('reg_points_mode');
847
848                                 // Update notes (these will be set as task text!)
849                                 setExtensionUpdateNotes("Es sollte der Gutschriftenbetreff und nicht der Erweiterungsname gepeichert werden, zudem brauchen wir einen Konfigurationseintrag nicht mehr.");
850                                 break;
851
852                         case '0.8.3': // SQL queries for v0.8.3
853                                 addConfigAddSql('display_home_in_index', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
854
855                                 // Update notes (these will be set as task text!)
856                                 setExtensionUpdateNotes("Es kann nun die &quot;Home&quot;-Seite in <strong>index.php</strong> angezeigt werden, anstelle der Weiterleitung.");
857                                 break;
858
859                         case '0.8.4': // SQL queries for v0.8.4
860                                 addCreateTableSql('history', "
861 `history_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
862 `history_subject` VARCHAR(255) NOT NULL DEFAULT 'GENERIC',
863 `history_userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
864 `history_value` VARCHAR(255) NOT NULL DEFAULT '',
865 `history_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
866 `history_last_used` TIMESTAMP NULL DEFAULT NULL,
867 PRIMARY KEY (`history_id`),
868 INDEX `userid` (`history_userid`),
869 INDEX (`history_last_used` DESC)",
870                                         'History of used data');
871
872                                 // Register filter
873                                 registerFilter(__FILE__, __LINE__, 'add_history_entry', 'ADD_HISTORY_ENTRY', FALSE, TRUE, isExtensionDryRun());
874
875                                 // Update notes (these will be set as task text!)
876                                 setExtensionUpdateNotes("Allgemeine Historie-Tabelle hinzugef&uuml;gt.");
877                                 break;
878
879                         case '0.8.5': // SQL queries for v0.8.5
880                                 // Old-lost configuration entry
881                                 addConfigDropSql('ext_autopurge');
882
883                                 // Update notes (these will be set as task text!)
884                                 setExtensionUpdateNotes("Uralten Konfigurationseintrag entfernt.");
885                                 break;
886
887                         case '0.8.6': // SQL queries for v0.8.6
888                                 addExtensionChangeTableColumnSql('points_data', 'payment_method', 'payment_method', "ENUM('DIRECT','REFERRAL') NOT NULL DEFAULT 'REFERRAL'");
889                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_points_data` SET `payment_method`='REFERRAL' WHERE `payment_method` != 'DIRECT'");
890
891                                 // Update notes (these will be set as task text!)
892                                 setExtensionUpdateNotes("Referral/REFERRAL soll es &uuml;berall heissen (ist ein Typo nur mit einem R zu schreiben).");
893                                 break;
894
895                         case '0.8.7': // SQL queries for v0.8.7
896                                 addConfigAddSql('admin_menu_javascript', "ENUM('Y','N') NOT NULL DEFAULT 'N'");
897
898                                 // Update notes (these will be set as task text!)
899                                 setExtensionUpdateNotes("Es kann ausgew&auml;hlt werden, ob das herk&ouml;mliche JavaScrit-lose Men&uuml; oder mit JavaScript aktiv sein soll. Das herk&ouml;mliche ist erstmal Standardeinstellung, bis das JavaScript-Men&uuml; funktioniert.");
900                                 break;
901
902                         case '0.8.8': // SQL queries for v0.8.8
903                                 addExtensionDropTableIndexSql('points_data', 'subject');
904                                 addExtensionAddTableUniqueSql('points_data', 'subject', '(`subject`)');
905
906                                 // Update notes (these will be set as task text!)
907                                 setExtensionUpdateNotes("Der Wert in der Spalte <strong>subject</strong> sollte nur einmal vorkommen, damit eventuell nichts mehrfach durchfl&auuml;ft.");
908                                 break;
909
910                         case '0.8.9': // SQL queries for v0.8.9
911                                 addExtensionAddTableColumnSql('points_data', 'account_provider', "ENUM('EXTENSION', 'CUSTOM') NOT NULL DEFAULT 'EXTENSION'");
912                                 addConfigAddSql('points_remove_account', "VARCHAR(255) NOT NULL DEFAULT 'points'");
913
914                                 // Update notes (these will be set as task text!)
915                                 setExtensionUpdateNotes("&quot;Provider&quot; hinzugef&uuml;gt, welcher nur <strong>Erweiterung</strong> oder <strong>Selbstdefiniert sein kann. Es k&ouml;nnen dann auch nur selbstdefinierte gel&ouml;scht oder editiert werden, Erweiterungen k&ouml;nnen auch nur &quot;einige&quot; Eintr&auml;ge l&ouml;schen.");
916                                 break;
917
918                         case '0.9.0': // SQL queries for v0.9.0
919                                 // Register filter
920                                 registerFilter(__FILE__, __LINE__, 'init', 'GENERATE_FILE_SECRET_HASH', FALSE, TRUE, isExtensionDryRun());
921
922                                 // Register points data
923                                 registerExtensionPointsData('admin_add_single', 'points', 'LOCKED', 'DIRECT');
924                                 registerExtensionPointsData('admin_add_single_ref', 'points', 'LOCKED', 'DIRECT');
925                                 registerExtensionPointsData('admin_add_all', 'points', 'LOCKED', 'DIRECT');
926                                 registerExtensionPointsData('admin_add_all_ref', 'points', 'LOCKED', 'DIRECT');
927
928                                 // Update notes (these will be set as task text!)
929                                 setExtensionUpdateNotes("Filter zum Initialisieren von ext-sql_patches registriert und Eintr&auml;ge in <strong>{?_MYSQL_PREFIX?}_points_data</strong> hinzugef&uuml;gt.");
930                                 break;
931
932                         case '0.9.1': // SQL queries for v0.9.1
933                                 // Add admin menu
934                                 addAdminMenuSql('misc', 'list_server_name', 'Verkehrte Domains auflisten', 'Listet alle als verkehrt erkannten Domains auf.', 4);
935
936                                 // Create table
937                                 addCreateTableSql('server_name_log', "
938 `server_name_id` BIGINT (20) NOT NULL AUTO_INCREMENT,
939 `server_name` VARCHAR (255) NOT NULL DEFAULT 'invalid',
940 `server_name_remote_addr` VARCHAR (15) NOT NULL DEFAULT '0.0.0.0',
941 `server_name_ua` TINYTEXT NULL DEFAULT NULL,
942 `server_name_referrer` TINYTEXT NULL DEFAULT NULL,
943 `server_name_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
944 `server_name_counter` BIGINT (20) NOT NULL DEFAULT 1,
945 PRIMARY KEY (`server_name_id`)
946 ", 'Logging of wrong SERVER_NAME');
947
948                                 // Update notes (these will be set as task text!)
949                                 setExtensionUpdateNotes("Loggen von falschen <strong>SERVER_NAME</strong> Eintr&auml;gen hinzugef&uuml;gt.");
950                                 break;
951
952                         case '0.9.2': // SQL queries for v0.9.2
953                                 addExtensionAddTableColumnSql('server_name_log', 'server_name_remote_addr', "VARCHAR (15) NOT NULL DEFAULT '0.0.0.0'");
954                                 addExtensionAddTableColumnSql('server_name_log', 'server_name_counter', 'BIGINT (20) NOT NULL DEFAULT 0');
955                                 addExtensionAddTableColumnSql('server_name_log', 'server_name_ua', 'TINYTEXT NULL DEFAULT NULL');
956                                 addExtensionAddTableColumnSql('server_name_log', 'server_name_referrer', 'TINYTEXT NULL DEFAULT NULL');
957
958                                 // Update notes (these will be set as task text!)
959                                 setExtensionUpdateNotes("Sorry, hatte noch IP-Nummer, User-Agent, aufrufende Seite und Z&auml;hler vergessen.");
960                                 break;
961
962                         case '0.9.3': // SQL queries for v0.9.3
963                                 addConfigAddSql('ap_server_name', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
964                                 addConfigAddSql('ap_server_name_since', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT ' . (getOneDay() * 7));
965
966                                 // Register filter
967                                 registerFilter(__FILE__, __LINE__, 'extra_autopurge', 'SERVER_NAME_EXTRA_AUTOPURGE', FALSE, TRUE, isExtensionDryRun());
968
969                                 // Update notes (these will be set as task text!)
970                                 setExtensionUpdateNotes("Bereinigung von verkehrten <strong>SERVER_NAME</strong> Eintr&auml;gen hinzugef&uuml;gt.");
971                                 break;
972
973                         case '0.9.4': // SQL queries for v0.9.4
974                                 addAdminMenuSql('setup', 'list_referral_levels', 'Referral-Ebenen', 'Erlaubt das Auflisten, hinzuf&uuml;gen, &auml;ndern und l&ouml;schen von Referral-Ebenen. Seien Sie beim L&ouml;schen vorsichtig, da deren Id-Nummern zum Verkn&uuml;pfen verwendet werden. Sollten Sie also eine Ebene l&ouml;schen, in der Mitglieder {OPEN_CONFIG}POINTS{CLOSE_CONFIG} haben sollten, sind diese verloren.', 15);
975                                 addExtensionChangeTableColumnSql('refdepths', 'percents', 'percents', 'FLOAT(8,5) UNSIGNED NOT NULL DEFAULT 0.00000');
976
977                                 // Update notes (these will be set as task text!)
978                                 setExtensionUpdateNotes("Auflisten (usw.) von Referral-Ebenen ausgelagert in eigenen Men&uuml;punkt. Referral-Prozente d&uuml;rfen nun auch 5 Stellen hinter dem Komma haben.");
979                                 break;
980
981                         case '0.9.5': // SQL queries for v0.9.5
982                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `what`='list_cats' WHERE `action`='setup' AND `what`='config_cats' LIMIT 1");
983
984                                 // Update notes (these will be set as task text!)
985                                 setExtensionUpdateNotes("Men&uuml;punkt umbenannt, da &quot;config&quot; nur f&uuml;r die Konfigurationstabelle <strong>{?_MYSQL_PREFIX?}_config</strong> ist.");
986                                 break;
987
988                         case '0.9.6': // SQL queries for v0.9.6
989                                 // Register filter
990                                 registerFilter(__FILE__, __LINE__, 'determine_menu_mode', 'DETERMINE_MENU_MODE_GENERIC', FALSE, TRUE, isExtensionDryRun());
991
992                                 // Update notes (these will be set as task text!)
993                                 setExtensionUpdateNotes("Filter hinzugef&uuml;gt, der den Men&uuml;modus f&uuml;r weitere von dieser Erweiterung benutzten Module erkennen soll.");
994                                 break;
995                 } // END - switch
996                 break;
997
998         case 'modify': // When the extension got modified
999                 break;
1000
1001         case 'test': // For testing purposes
1002                 break;
1003
1004         case 'init': // Do stuff when extension is initialized
1005                 break;
1006
1007         default: // Unknown extension mode
1008                 reportBug(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));
1009                 break;
1010 } // END - switch
1011
1012 // [EOF]
1013 ?>