9d8e7163ab8e7adbd43f5571d0e6f85bc4218132
[mailer.git] / inc / extensions / ext-user.php
1 <?php
2 /************************************************************************
3  * Mailer v0.2.1-FINAL                                Start: 04/29/2004 *
4  * ===================                          Last change: 10/29/2004 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : ext-user.php                                     *
8  * -------------------------------------------------------------------- *
9  * Short description : Swapped out user management                      *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Ausgelagertes Mitglieder-Management              *
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.5.2');
45
46 // Version history array (add more with , '0.0.1' and so on)
47 setExtensionVersionHistory(array('0.0.0', '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'));
48
49 // Keep this extension always active!
50 setExtensionAlwaysActive('Y');
51
52 switch (getExtensionMode()) {
53         case 'register': // Do stuff when installation is running
54                 addDropTableSql('user_cats');
55                 addCreateTableSql('user_cats', "
56 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
57 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
58 `cat_id` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
59 PRIMARY KEY (`id`),
60 INDEX (`userid`),
61 INDEX (`cat_id`)",
62                         'User->category connection data');
63
64                 addDropTableSql('user_data');
65                 addCreateTableSql('user_data', "
66 `userid` BIGINT(20) NOT NULL AUTO_INCREMENT,
67 `surname` VARCHAR(255) NOT NULL DEFAULT '',
68 `family` VARCHAR(255) NOT NULL DEFAULT '',
69 `street_nr` VARCHAR(255) NOT NULL DEFAULT '',
70 `country` VARCHAR(4) NOT NULL DEFAULT '',
71 `zip` VARCHAR(6) NOT NULL DEFAULT '',
72 `city` VARCHAR(255) NOT NULL DEFAULT '',
73 `email` VARCHAR(255) NOT NULL DEFAULT '',
74 `birth_day` CHAR(2) NOT NULL DEFAULT '01',
75 `birth_month` CHAR(2) NOT NULL DEFAULT '01',
76 `birth_year` VARCHAR(4) NOT NULL DEFAULT '1970',
77 `password` VARCHAR(255) NOT NULL DEFAULT '',
78 `max_mails` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
79 `receive_mails` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
80 `refid` BIGINT(20) NOT NULL DEFAULT 0,
81 `status` ENUM('UNCONFIRMED','CONFIRMED','LOCKED') NOT NULL DEFAULT 'UNCONFIRMED',
82 `user_hash` VARCHAR(255) NULL DEFAULT NULL,
83 `REMOTE_ADDR` VARCHAR(15) NOT NULL DEFAULT '0.0.0.0',
84 `last_online` VARCHAR(10) NOT NULL DEFAULT 0,
85 `last_module` VARCHAR(255) NULL DEFAULT NULL,
86 `ref_clicks` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
87 `total_logins` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
88 `gender` ENUM('M','F') NOT NULL DEFAULT 'M',
89 `used_points` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
90 `emails_sent` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
91 `joined` VARCHAR(10) NOT NULL DEFAULT 0,
92 `last_update` VARCHAR(10) NOT NULL DEFAULT 0,
93 `last_profile_sent` VARCHAR(10) NOT NULL DEFAULT 0,
94 `notified` ENUM('Y','N') NOT NULL DEFAULT 'N',
95 `ref_payout` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
96 `last_login` VARCHAR(10) NOT NULL DEFAULT 0,
97 `login_failures` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
98 `last_failure` TIMESTAMP NULL DEFAULT NULL,
99 PRIMARY KEY (`userid`),
100 UNIQUE (`user_hash`),
101 INDEX (`refid`),
102 INDEX `status_mails` (`status`,`max_mails`)",
103                         'Main user data');
104
105                 addDropTableSql('user_points');
106                 addCreateTableSql('user_points', "
107 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
108 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
109 `ref_depth` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
110 `points` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
111 `locked_points` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
112 PRIMARY KEY (`id`),
113 INDEX (`userid`)",
114                         'User points (no used points)');
115
116                 addDropTableSql('user_links');
117                 addCreateTableSql('user_links', "
118 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
119 `stats_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
120 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
121 `link_type` VARCHAR(255) NOT NULL DEFAULT 'NORMAL',
122 PRIMARY KEY (`id`),
123 INDEX (`userid`),
124 INDEX (`stats_id`)",
125                         'Unconfirmed mails per user');
126
127                 addDropTableSql('user_stats');
128                 addCreateTableSql('user_stats', "
129 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
130 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
131 `cat_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
132 `payment_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
133 `subject` VARCHAR(255) NOT NULL DEFAULT '',
134 `url` TINYTEXT NOT NULL,
135 `max_rec` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
136 `clicks` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
137 `timestamp_ordered` VARCHAR(10) NOT NULL DEFAULT '',
138 `pool_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
139 `timestamp_sstart` VARCHAR(10) NOT NULL DEFAULT '',
140 `timestamp_send` VARCHAR(10) NOT NULL DEFAULT '',
141 `is_stats` ENUM('Y','N') NOT NULL DEFAULT 'N',
142 PRIMARY KEY (`id`),
143 INDEX (`userid`),
144 INDEX (`cat_id`),
145 INDEX (`payment_id`),
146 INDEX (`pool_id`)",
147                         'Mail statistics per user order');
148
149                 addDropTableSql('user_stats_data');
150                 addCreateTableSql('user_stats_data', "
151 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
152 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
153 `stats_type` VARCHAR(255) NOT NULL DEFAULT 'unknown',
154 `stats_data` VARCHAR(255) NOT NULL DEFAULT '',
155 `inserted` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
156 PRIMARY KEY (`id`),
157 INDEX (`userid`),
158 INDEX (`stats_type`)",
159                         'Member statistics data');
160
161                 // Admin menu
162                 addAdminMenuSql('user', NULL, 'Mitglieder-Management', 'Mitglieder freischalten, sperren, Accounts editieren, Neuanmeldungen verwalten, {OPEN_CONFIG}POINTS{CLOSE_CONFIG} gutschreiben und abziehen und und und...', 3);
163                 addAdminMenuSql('user', 'del_user', 'Mitglied l&ouml;schen', 'L&ouml;schen Sie hier Mitglied, die gegen die AGBs mehrmals verstossen haben. Bitte seien Sie nett zu Ihren Mitgliedern und l&ouml;schen Sie nicht gleich.', 1);
164                 addAdminMenuSql('user', 'lock_user', 'Mitglied sperren / entsperren', 'Sperren Sie Mitglied, die zu viele unbest&auml;tigte Mails haben oder gegen Ihre AGBs verstossen haben &uuml;ber diesen Men&uuml;punkt.', 3);
165                 addAdminMenuSql('user', 'list_user', 'Mitglieder auflisten', 'Listen Sie alle Mitglied oder eingeschr&auml;nkt nach Suchkritieren Ihre Userdatenbank auf. Sie k&ouml;nen per Klick auf die Usernummer sich Details zum Mitglied ansehen.', 4);
166                 addAdminMenuSql('user', 'add_points', '{OPEN_CONFIG}POINTS{CLOSE_CONFIG} gutschreiben', 'Buchen Sie einem Mitglied direkt {OPEN_CONFIG}POINTS{CLOSE_CONFIG} auf. Sie k&ouml;nnen dazu auch einen Kommentar mitsenden.', 5);
167                 addAdminMenuSql('user', 'edit_user', 'Account editieren', 'Daten eines Mitglieder-Accountes &auml;ndern.', 6);
168                 addAdminMenuSql('user', 'list_refs', 'Referrals anzeigen', 'Mit diesem Men&uuml;punkt k&ouml;nnen Sie die generierten Referrals eines Mitgliedes auflisten.', 7);
169                 addAdminMenuSql('user', 'list_links', 'Unbest&auml;tigte Mails', 'Mit diesem Men&uuml;punkt k&ouml;nnen Sie die vom Mitglied nicht best&auml;tigten Mails anzeigen.', 8);
170                 addAdminMenuSql('user', 'list_cats', 'Kategorien anzeigen', 'Listet die ausgew&auml;hlten Kategorien eines Mitgliedes auf.', 9);
171                 break;
172
173         case 'remove': // Do stuff when removing extension
174                 // SQL commands to run
175                 addDropTableSql('user_del');
176                 addDropTableSql('user_cats');
177                 addDropTableSql('user_data');
178                 addDropTableSql('user_points');
179                 addDropTableSql('user_links');
180                 addDropTableSql('user_refs');
181                 addDropTableSql('user_stats');
182                 addDropTableSql('user_stats_data');
183                 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `what` IN('config_user','user_contct','list_user_del') OR `action`='user'");
184
185                 // Register new filters for gathering points
186                 unregisterFilter(__FILE__, __LINE__, 'get_total_points', 'USER_POINTS', true, isExtensionDryRun());
187                 unregisterFilter(__FILE__, __LINE__, 'get_own_points', 'USER_POINTS', true, isExtensionDryRun());
188                 unregisterFilter(__FILE__, __LINE__, 'get_locked_points', 'LOCKED_USER_POINTS', true, isExtensionDryRun());
189                 unregisterFilter(__FILE__, __LINE__, 'get_all_point_columns', 'GET_ALL_USER_POINTS_COLUMN_NAMES', true, isExtensionDryRun());
190                 unregisterFilter(__FILE__, __LINE__, 'user_exclusion_sql', 'TESTER_USER_EXCLUSION_SQL', true, isExtensionDryRun());
191                 unregisterFilter(__FILE__, __LINE__, 'user_inclusion_sql', 'TESTER_USER_INCLUSION_SQL', true, isExtensionDryRun());
192                 unregisterFilter(__FILE__, __LINE__, 'pre_user_registration', 'TESTER_USER_REGISTRATION_ADD_SQL_COLUMNS', true, isExtensionDryRun());
193                 unregisterFilter(__FILE__, __LINE__, 'convert_user_data_columns', 'ADD_USER_DATA_CONVERT_SQL_COLUMNS', true, isExtensionDryRun());
194                 break;
195
196         case 'activate': // Do stuff when admin activates this extension
197                 // SQL commands to run
198                 addExtensionSql('');
199                 break;
200
201         case 'deactivate': // Do stuff when admin deactivates this extension
202                 // SQL commands to run
203                 addExtensionSql('');
204                 break;
205
206         case 'update': // Update an extension
207                 switch (getCurrentExtensionVersion()) {
208                         case '0.1.0': // SQL queries for v0.1
209                                 addConfigAddSql('user_limit', 'INT(7) UNSIGNED NOT NULL DEFAULT 20');
210
211                                 // Update notes (these will be set as task text!)
212                                 setExtensionUpdateNotes("Seitenweises Anzeigen der User-Liste ist nun m&ouml;glich.");
213                                 break;
214
215                         case '0.1.1': // SQL queries for v0.1.1
216                                 // This update depends on ext-sql_patches update!
217                                 addExtensionDependency('sql_patches');
218
219                                 // Update notes (these will be set as task text!)
220                                 setExtensionUpdateNotes("Ung&uuml;ltiges Update.");
221                                 break;
222
223                         case '0.1.2': // SQL queries for v0.1.2
224                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `mails_confirmed` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
225
226                                 // Update notes (these will be set as task text!)
227                                 setExtensionUpdateNotes("Dem Mitglied wird nun angezeigt, wie viele Mails er best&auml;tigt hat. Alle vor dieser Version best. Mails werden leider nicht mehr ber&uuml;cksichtigt! Bitte teilen Sie dies Ihren Mitgliedern mit.");
228                                 break;
229
230                         case '0.1.3': // SQL queries for v0.1.3
231                                 // Update notes (these will be set as task text!)
232                                 setExtensionUpdateNotes("Den Pfad <span class=\"bad\">Sie sind hier</span> im Men&uuml;punkt <u>Online-Liste</u> erweitert.");
233                                 break;
234
235                         case '0.1.4': // SQL queries for v0.1.4
236                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `emails_received` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
237
238                                 // Update notes (these will be set as task text!)
239                                 setExtensionUpdateNotes("Anzahl empfangener Mails wird angezeigt. <big>Diese Anzeige kann fehlerhaft sein, wenn Sie bereits Mitglieder in Ihrem {?mt_word?} haben sollen!</big>");
240                                 break;
241
242                         case '0.1.5': // SQL queries for v0.1.5
243                                 // Update notes (these will be set as task text!)
244                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
245                                 break;
246
247                         case '0.1.6': // SQL queries for v0.1.6
248                                 // Update notes (these will be set as task text!)
249                                 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
250                                 break;
251
252                         case '0.1.7': // SQL queries for v0.1.7
253                                 // Update notes (these will be set as task text!)
254                                 setExtensionUpdateNotes("Erweiterung bleibt wegen integrierten Schalters immer aktiv.");
255                                 break;
256
257                         case '0.1.8': // SQL queries for v0.1.8
258                                 // Update notes (these will be set as task text!)
259                                 setExtensionUpdateNotes("Seit <strong>Patch 340</strong> &uuml;berfl&uuml;ssige HTML-Tags entfernt.");
260                                 break;
261
262                         case '0.1.9': // SQL queries for v0.1.9
263                                 // Update notes (these will be set as task text!)
264                                 setExtensionUpdateNotes("Link zum Mitgliedsprofil in Funktion <u>generateUserProfileLink()</u> ausgelagert.");
265                                 break;
266
267                         case '0.2.0': // SQL queries for v0.2.0
268                                 // Update notes (these will be set as task text!)
269                                 setExtensionUpdateNotes("User-Liste ausgelagert in Templates und &uuml;berbreite Zeile in 2er-Zeile umgewandelt.");
270                                 break;
271
272                         case '0.2.1': // SQL queries for v0.2.1
273                                 addConfigAddSql('user_alpha', 'TINYINT(3) UNSIGNED NOT NULL DEFAULT 10');
274                                 addAdminMenuSql('setup','config_user','Mitgliederliste','Anzahl Mitglieder pro Seite, Anzahl Buchstaben pro Zeile usw.', 8);
275
276                                 // Update notes (these will be set as task text!)
277                                 setExtensionUpdateNotes("User-Liste ist konfigurierbar: Anzahl Mitglieder pro Seite und Anzahl Buchstaben pro Zeile; Template-Fehler beseitigt.");
278                                 break;
279
280                         case '0.2.2': // SQL queries for v0.2.2
281                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` CHANGE `gender` `gender` ENUM('M','F','C') NOT NULL DEFAULT 'M'");
282
283                                 // Update notes (these will be set as task text!)
284                                 setExtensionUpdateNotes("Anrede &quot;Firma&quot; hinzugef&uuml;gt.");
285                                 break;
286
287                         case '0.2.3': // SQL queries for v0.2.3
288                                 // Update notes (these will be set as task text!)
289                                 setExtensionUpdateNotes("Datumsformat festgelegt auf ausf&uuml;hrlich.");
290                                 break;
291
292                         case '0.2.4': // SQL queries for v0.2.4
293                                 // Update notes (these will be set as task text!)
294                                 setExtensionUpdateNotes("W&ouml;rter <strong>{?mt_word?}</strong>, <strong>{?mt_word2?}</strong> und <strong>{?mt_word3?}</strong> sind austauschbar.");
295                                 break;
296
297                         case '0.2.5': // SQL queries for v0.2.5
298                                 // Update notes (these will be set as task text!)
299                                 setExtensionUpdateNotes("SQL-Anweisungen abgesichert.");
300                                 break;
301
302                         case '0.2.6': // SQL queries for v0.2.6
303                                 // Update notes (these will be set as task text!)
304                                 setExtensionUpdateNotes("Abspeichern von Einstellungen repariert.");
305                                 break;
306
307                         case '0.2.7': // SQL queries for v0.2.7
308                                 // Update notes (these will be set as task text!)
309                                 setExtensionUpdateNotes("Sicherheitsupdate f&uuml;r die Include-Befehle.");
310                                 break;
311
312                         case '0.2.8': // SQL queries for v0.2.8
313                                 // Update notes (these will be set as task text!)
314                                 setExtensionUpdateNotes("if-Anweisungen auf Funktion <strong>empty()</strong> umgestellt.");
315                                 break;
316
317                         case '0.2.9': // SQL queries for v0.2.9
318                                 addAdminMenuSql('user','user_contct','Mitglied kontaktieren','Kontaktieren Sie hier Ihre Mitglieder ganz direkt &uuml;ber ein Webformular. Sie brauchen somit kein EMail-Programm mehr starten!', 8);
319
320                                 // Update notes (these will be set as task text!)
321                                 setExtensionUpdateNotes("Admin-Kontaktformular hinzugef&uuml;gt.");
322                                 break;
323
324                         case '0.3.0': // SQL queries for v0.3.0
325                                 // Update notes (these will be set as task text!)
326                                 setExtensionUpdateNotes("Hash-Erstellung von <strong>md5()</strong> auf bessere Funktion <strong>generateHash()</strong> umgestellt.<br />Diverse Fixes f&uuml;r <span class=\"bad\">0.2.1-Beta1</span> Release.");
327                                 break;
328
329                         case '0.3.1': // SQL queries for v0.3.1
330                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title` = 'Mitglieder-Management' WHERE `action`='user' AND (`what`='' OR `what` IS NULL) LIMIT 1");
331
332                                 // Update notes (these will be set as task text!)
333                                 setExtensionUpdateNotes("Verwaltung auf Management umgestellt");
334                                 break;
335
336                         case '0.3.2': // SQL queries for v0.3.2
337                                 // Update notes (these will be set as task text!)
338                                 setExtensionUpdateNotes("PHP-Hinweis in Userauflistung gefixt (trat bei fehlender Erweiterung <span class=\"data\">ext-nickname</span> auf) und Darstellungsfehler von <strong>0.00000</strong> unbest&auml;tigten Mails gefixt.");
339                                 break;
340
341                         case '0.3.3': // SQL queries for v0.3.3
342                                 // Update notes (these will be set as task text!)
343                                 setExtensionUpdateNotes("Mitglieder sind nun per Formular kontaktierbar (es wird eine EMail versendet), gesperrte und best&auml;tigte Mitglieder-Accounts sind seperat oder gemeinsam auflistbar (seperat nur mit der Erweiterung <span class=\"bad\">task</span>!)");
344                                 break;
345
346                         case '0.3.4': // SQL queries for v0.3.4
347                                 addConfigAddSql('select_user_zero_refid', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
348                                 addConfigAddSql('user_min_confirmed', 'SMALLINT(5) UNSIGNED NOT NULL DEFAULT 10');
349                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `rand_confirmed` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
350
351                                 // Update notes (these will be set as task text!)
352                                 setExtensionUpdateNotes("Mitglieder werden per Zufall als Referral-Id ausgew&auml;hlt, die eine Mindestanzahl an best&auml;tigten Mails haben, wenn die Ref-Id 0 ist.");
353                                 break;
354
355                         case '0.3.5': // SQL queries for v0.3.5
356                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `lock_reason` TINYTEXT");
357                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `lock_timestamp` TIMESTAMP NULL DEFAULT NULL");
358                                 addConfigAddSql('user_delete_purge', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT ' . (getOneDay() * 30));
359                                 addAdminMenuSql('user', 'list_user_del', 'L&ouml;schungen auflisten', 'Listet die L&ouml;schungen von Usern auf.', 9);
360                                 addDropTableSql('user_del');
361                                 addCreateTableSql('user_del', "
362 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
363 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
364 `email` VARCHAR(255) NOT NULL DEFAULT '',
365 `surname` VARCHAR(255) NOT NULL DEFAULT '',
366 `family` VARCHAR(255) NOT NULL DEFAULT '',
367 `joined` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
368 `last_online` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
369 `del_timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
370 `del_reason` TINYTEXT,
371 PRIMARY KEY (`id`),
372 INDEX (`userid`)",
373                                         'List of deleted users');
374
375                                 // Update notes (these will be set as task text!)
376                                 setExtensionUpdateNotes("Der Sperrgrund wird nun mit abgespeichert und beim L&ouml;schen des Users mit ausgesendet.");
377                                 break;
378
379                         case '0.3.6': // SQL queries for v0.3.6
380                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_cats` DROP INDEX `userid`');
381                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_cats` ADD UNIQUE INDEX `userid_catid` (`userid`,`cat_id`)');
382
383                                 // Update notes (these will be set as task text!)
384                                 setExtensionUpdateNotes("Der Sperrgrund wird nun mit abgespeichert und beim L&ouml;schen des Users mit ausgesendet.");
385                                 break;
386
387                         case '0.3.7': // SQL queries for v0.3.7
388                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_cats` CHANGE `id` `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT');
389                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_cats` CHANGE `userid` `userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
390                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_cats` CHANGE `cat_id` `cat_id` TINYINT(3) UNSIGNED NULL DEFAULT NULL');
391                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` CHANGE `userid` `userid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT');
392                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_del` CHANGE `userid` `userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
393                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` CHANGE `stats_id` `stats_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
394                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` CHANGE `userid` `userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
395                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_points` CHANGE `userid` `userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
396                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_points` CHANGE `ref_depth` `ref_depth` TINYINT(3) UNSIGNED NULL DEFAULT NULL');
397                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_stats` CHANGE `userid` `userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
398                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_stats` CHANGE `cat_id` `cat_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
399                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_stats` CHANGE `payment_id` `payment_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
400                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_stats` CHANGE `pool_id` `pool_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
401                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_stats_data` CHANGE `userid` `userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL');
402
403                                 // Cleanup SQLs
404                                 addExtensionSql('DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_user_cats` WHERE `userid` IS NULL OR `cat_id` IS NULL');
405                                 addExtensionSql('DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_user_del` WHERE `userid` IS NULL');
406                                 addExtensionSql('UPDATE `{?_MYSQL_PREFIX?}_user_links` SET `stats_id`=NULL WHERE `stats_id`=0');
407                                 addExtensionSql('DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_user_links` WHERE `userid` IS NULL');
408                                 addExtensionSql('UPDATE `{?_MYSQL_PREFIX?}_user_points` SET `ref_depth`=NULL WHERE `ref_depth`=0');
409                                 addExtensionSql('DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_user_points` WHERE `userid` IS NULL');
410                                 addExtensionSql('UPDATE `{?_MYSQL_PREFIX?}_user_stats` SET `cat_id`=NULL WHERE `cat_id`=0');
411                                 addExtensionSql('UPDATE `{?_MYSQL_PREFIX?}_user_stats` SET `payment_id`=NULL WHERE `payment_id`=0');
412                                 addExtensionSql('UPDATE `{?_MYSQL_PREFIX?}_user_stats` SET `pool_id`=NULL WHERE `pool_id`=0');
413                                 addExtensionSql('DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_user_stats` WHERE `userid` IS NULL');
414
415                                 // Update notes (these will be set as task text!)
416                                 setExtensionUpdateNotes("NULL ist wichtiger als 0 und UNSIGNED auch.");
417                                 break;
418
419                         case '0.3.8': // SQL queries for v0.3.8
420                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` CHANGE `last_failure` `last_failure` TIMESTAMP NULL DEFAULT NULL');
421
422                                 // Update notes (these will be set as task text!)
423                                 setExtensionUpdateNotes("Ausgangswert ist nicht mehr 0000-00-00 00:00:00, sondern einfach NULL.");
424                                 break;
425
426                         case '0.3.9': // SQL queries for v0.3.9
427                                 // Update notes (these will be set as task text!)
428                                 setExtensionUpdateNotes("Update verschoben nach ext-order (da es Werbeguthaben ist und nichts mit dem Mitglied selbst zu tun hat).");
429                                 break;
430
431                         case '0.4.0': // SQL queries for v0.4.0
432                                 // Register new filters for gathering points
433                                 registerFilter(__FILE__, __LINE__, 'get_total_points', 'USER_POINTS', false, true, isExtensionDryRun());
434                                 registerFilter(__FILE__, __LINE__, 'get_own_points', 'USER_POINTS', false, true, isExtensionDryRun());
435
436                                 // Update notes (these will be set as task text!)
437                                 setExtensionUpdateNotes("Filter registriert, die das eigene {?POINTS?}-Guthaben des Mitgliedes zur&uuml;ckliefern.");
438                                 break;
439
440                         case '0.4.1': // SQL queries for v0.4.1
441                                 // Add special fix include to fix filters
442                                 addIncludeToPool('extension', 'inc/fix_user_points.php');
443
444                                 // Update notes (these will be set as task text!)
445                                 setExtensionUpdateNotes("Das Mitgliederguthaben musste repariert werden, da f&uuml;r Referral-Ebene 0, noch NULL geschrieben wurde.");
446                                 break;
447
448                         case '0.4.2': // SQL queries for v0.4.2
449                                 // Add special fix include to fix filters
450                                 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `what`='chk_regs' LIMIT 1");
451
452                                 // Update notes (these will be set as task text!)
453                                 setExtensionUpdateNotes("&Uuml;berfl&uuml;ssiges Men&uuml; <strong>chk_regs</strong> entfernt, dies kann mit <strong>list_user</strong> &uuml;bernommen werden.");
454                                 break;
455
456                         case '0.4.3': // SQL queries for v0.4.3
457                                 // Add special fix include to fix filters
458                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` CHANGE `refid` `refid` BIGINT(20) NULL DEFAULT NULL");
459
460                                 // Update notes (these will be set as task text!)
461                                 setExtensionUpdateNotes("&Uuml;berfl&uuml;ssiges Men&uuml; <strong>chk_regs</strong> entfernt, dies kann mit <strong>list_user</strong> &uuml;bernommen werden.");
462                                 break;
463
464                         case '0.4.4': // SQL queries for v0.4.4
465                                 addDropTableSql('user_refs');
466                                 addCreateTableSql('user_refs', "
467 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
468 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
469 `level` smallINT(6) UNSIGNED NOT NULL DEFAULT 0,
470 `refid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
471 PRIMARY KEY (`id`),
472 UNIQUE INDEX `user_refid` (`userid`,`level`,`refid`),
473 INDEX (`level`),
474 INDEX (`refid`)",
475                                         'User referrals');
476
477                                 // Load ext-refback's special include to regenerate the referral table
478                                 addIncludeToPool('extension', 'inc/fix_refsystem.php');
479
480                                 // Update notes (these will be set as task text!)
481                                 setExtensionUpdateNotes("Neues Tabellenlayout und verschoben von ext-refback.");
482                                 break;
483
484                         case '0.4.5': // SQL queries for v0.4.5
485                                 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` CHANGE `link_type` `link_type` VARCHAR(255) NOT NULL DEFAULT 'NORMAL'");
486
487                                 // Update notes (these will be set as task text!)
488                                 setExtensionUpdateNotes("Die Spalte <strong>link_type</strong> ist nun kein ENUM mehr, um weitere Mailtypen zu erlauben.");
489                                 break;
490
491                         case '0.4.6': // SQL queries for v0.4.6
492                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title`='{OPEN_CONFIG}POINTS{CLOSE_CONFIG} gutschreiben' WHERE `what` = 'add_points' LIMIT 1");
493                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title`='{OPEN_CONFIG}POINTS{CLOSE_CONFIG} abziehen' WHERE `what` = 'sub_points' LIMIT 1");
494                                 addAdminMenuSql('user','sub_points','{OPEN_CONFIG}POINTS{CLOSE_CONFIG} abziehen','Allen oder einem Mitglied {OPEN_CONFIG}POINTS{CLOSE_CONFIG} abziehen.', 8);
495
496                                 // This update depends on ext-menu update
497                                 addExtensionDependency('menu');
498
499                                 // Update notes (these will be set as task text!)
500                                 setExtensionUpdateNotes("Abzug von {?POINTS?} sollte nun dabei sein und Hinzuf&uuml;gen gefixt (war zu kurze Spalte).");
501                                 break;
502
503                         case '0.4.7': // SQL queries for v0.4.7
504                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` CHANGE `lock_timestamp` `lock_timestamp` TIMESTAMP NULL DEFAULT NULL');
505                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_user_data` SET `lock_timestamp`=NULL WHERE `lock_timestamp`='0000-00-00 00:00:00'");
506
507                                 // Update notes (these will be set as task text!)
508                                 setExtensionUpdateNotes("0000-00-00  00:00:00 ist kein Standardwert mehr, NULL ist dies.");
509                                 break;
510
511                         case '0.4.8': // SQL queries for v0.4.8
512                                 // Update notes (these will be set as task text!)
513                                 setExtensionUpdateNotes("Dieses Update ist nicht mehr g&uuml;ltig.");
514                                 break;
515
516                         case '0.4.9': // SQL queries for v0.4.9
517                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` CHANGE `last_module` `last_what` VARCHAR(255) NULL DEFAULT NULL');
518
519                                 // Register filter locked points
520                                 registerFilter(__FILE__, __LINE__, 'get_locked_points', 'LOCKED_USER_POINTS', false, true, isExtensionDryRun());
521
522                                 // Register filter for all column names
523                                 registerFilter(__FILE__, __LINE__, 'get_all_point_columns', 'GET_ALL_USER_POINTS_COLUMN_NAMES', false, true, isExtensionDryRun());
524
525                                 // Update notes (these will be set as task text!)
526                                 setExtensionUpdateNotes("Die Spalte <strong>last_module</strong> ist nach <strong>last_what</strong> umbenannt und hat nun NULL als Ausgangswert und Filter f&uuml;r gesperrtes Guthaben hinzugef&uuml;gt.");
527                                 break;
528
529                         case '0.5.0': // SQL queries for v0.5.0
530                                 // Prefix for all test accounts
531                                 addConfigAddSql('tester_user_maximum', 'INT(5) UNSIGNED ZEROFILL NOT NULL DEFAULT 00999');
532                                 addConfigAddSql('tester_user_gender', "ENUM('M','F') NOT NULL DEFAULT 'M'");
533                                 addConfigAddSql('tester_user_surname_prefix', "VARCHAR(255) NOT NULL DEFAULT 'tester_'");
534                                 addConfigAddSql('tester_user_family', "VARCHAR(255) NOT NULL DEFAULT 'Testbenutzer'");
535                                 addConfigAddSql('tester_user_street_nr', "VARCHAR(255) NOT NULL DEFAULT 'Teststra&szlig;e 123'");
536                                 addConfigAddSql('tester_user_zip', 'INT(6) UNSIGNED NOT NULL DEFAULT 12345');
537                                 addConfigAddSql('tester_user_city', "VARCHAR(255) NOT NULL DEFAULT 'Teststadt'");
538                                 addConfigAddSql('tester_user_email', "VARCHAR(255) NOT NULL DEFAULT '{OPEN_CONFIG}WEBMASTER{CLOSE_CONFIG}'");
539                                 addConfigAddSql('tester_user_default_refid', 'BIGINT(20) NULL DEFAULT NULL');
540                                 addConfigAddSql('tester_user_password', "VARCHAR(255) NOT NULL DEFAULT ''");
541                                 addConfigAddSql('tester_user_check_cat', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
542
543                                 // Admin menu
544                                 addAdminMenuSql('user', 'add_tester_user', 'Testbenutzer anlegen', 'Es k&ouml;nnen hier bis zu 100 Testbenutzer angelegt werden. Diese haben als Vornamen immer den Pr&auml;fix <span class="data">{?tester_user_surname_prefix?}</span> und werden bei Null anfangend bis 99 hochgez&auml;lt.', 1);
545                                 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `title`='Mitglieder auflisten' WHERE `what`='list_user' LIMIT 1");
546
547                                 // Change 'zip' to INT(6)
548                                 addExtensionSql('ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` CHANGE `zip` `zip` INT(6) NOT NULL DEFAULT 0');
549
550                                 // Register filter for WHERE/AND exclusion/inclusion statements
551                                 registerFilter(__FILE__, __LINE__, 'user_exclusion_sql', 'TESTER_USER_EXCLUSION_SQL', false, true, isExtensionDryRun());
552                                 registerFilter(__FILE__, __LINE__, 'user_inclusion_sql', 'TESTER_USER_INCLUSION_SQL', false, true, isExtensionDryRun());
553
554                                 // Update notes (these will be set as task text!)
555                                 setExtensionUpdateNotes("Es k&ouml;nnen nun Test-Benutzer angelegt werden. Noch m&uuml;ssen diese &uuml;berall ausgeschlossen werden, damit die Mediadaten nicht unn&ouml;tig verf&auml;lscht werden.");
556                                 break;
557
558                         case '0.5.1': // SQL queries for v0.5.1
559                                 // Register a filter
560                                 registerFilter(__FILE__, __LINE__, 'pre_user_registration', 'TESTER_USER_REGISTRATION_ADD_SQL_COLUMNS', false, true, isExtensionDryRun());
561
562                                 // Update notes (these will be set as task text!)
563                                 setExtensionUpdateNotes("Filter zum Hinzuf&uuml;gen von SQL-Spalten f&uuml;r die Mitgliederanmeldung hinzugef&uuml;gt.");
564                                 break;
565
566                         case '0.5.2': // SQL queries for v0.5.2
567                                 // Register a filter
568                                 registerFilter(__FILE__, __LINE__, 'convert_user_data_columns', 'ADD_USER_DATA_CONVERT_SQL_COLUMNS', false, true, isExtensionDryRun());
569
570                                 // Update notes (these will be set as task text!)
571                                 setExtensionUpdateNotes("Filter zum Hinzuf&uuml;gen von SQL-Spalten f&uuml;r die Mitgliederanmeldung hinzugef&uuml;gt.");
572                                 break;
573                 } // END - switch
574                 break;
575
576         case 'modify': // When the extension got modified
577                 break;
578
579         case 'test': // For testing purposes
580                 break;
581
582         case 'init': // Do stuff when extension is initialized
583                 break;
584
585         default: // Unknown extension mode
586                 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));
587                 break;
588 } // END - switch
589
590 // [EOF]
591 ?>