2 /************************************************************************
3 * Mailer v0.2.1-FINAL Start: 06/19/2004 *
4 * =================== Last change: 12/26/2004 *
6 * -------------------------------------------------------------------- *
7 * File : ext-rallye.php *
8 * -------------------------------------------------------------------- *
9 * Short description : Referal rallye *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Ref-Rallyes starten *
12 * -------------------------------------------------------------------- *
15 * $Tag:: 0.2.1-FINAL $ *
17 * Needs to be in all Files and every File needs "svn propset *
18 * svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
19 * -------------------------------------------------------------------- *
20 * Copyright (c) 2003 - 2009 by Roland Haeder *
21 * Copyright (c) 2009, 2010 by Mailer Developer Team *
22 * For more information visit: http://www.mxchange.org *
24 * This program is free software; you can redistribute it and/or modify *
25 * it under the terms of the GNU General Public License as published by *
26 * the Free Software Foundation; either version 2 of the License, or *
27 * (at your option) any later version. *
29 * This program is distributed in the hope that it will be useful, *
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
32 * GNU General Public License for more details. *
34 * You should have received a copy of the GNU General Public License *
35 * along with this program; if not, write to the Free Software *
36 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
38 ************************************************************************/
40 // Some security stuff...
41 if (!defined('__SECURITY')) {
46 setThisExtensionVersion('0.3.5');
48 // Version history array (add more with , '0.1.0' and so on)
49 setExtensionVersionHistory(array('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'));
51 switch (getExtensionMode()) {
52 case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
53 // SQL commands to run
54 addExtensionSql('DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_data`');
55 addExtensionSql('DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_prices`');
56 addExtensionSql('DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_users`');
57 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_rallye_data` (
58 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
59 admin_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
60 title VARCHAR(255) NOT NULL DEFAULT '',
61 descr LONGTEXT NOT NULL,
62 template VARCHAR(255) NOT NULL DEFAULT '',
63 start_time VARCHAR(10) NOT NULL DEFAULT 0,
64 end_time VARCHAR(10) NOT NULL DEFAULT 0,
65 auto_add_new_user ENUM('Y','N') NOT NULL DEFAULT 'Y',
66 is_active ENUM('Y','N') NOT NULL DEFAULT 'N',
67 send_notify ENUM('Y','N') NOT NULL DEFAULT 'Y',
68 notified ENUM('Y','N') NOT NULL DEFAULT 'N',
71 ) TYPE={?_TABLE_TYPE?}");
72 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_rallye_prices` (
73 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
74 rallye_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
75 price_level BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
76 points BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
77 info LONGTEXT NOT NULL,
80 ) TYPE={?_TABLE_TYPE?}");
81 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_rallye_users` (
82 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
83 rallye_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
84 userid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
85 refs BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
89 ) TYPE={?_TABLE_TYPE?}");
92 addAdminMenuSql('rallye', NULL, 'Rallye-Management','Richten Sie neue Ref-Rallyes ein, die zeitgesteuert anfangen und aufhöhren. Dabei wird alles weitere automatisch geregelt.',9);
93 addAdminMenuSql('rallye','add_rallye','Neue Rallye hinzufügen','Neue Ref-Rallye hinzufügen.',1);
94 // @TODO Fix config_rallye_prices to list_rallye_prices
95 addAdminMenuSql('rallye','config_rallye_prices','Preise einrichten','Richten Sie Preise zu den Rallyes ein.',2);
96 addAdminMenuSql('rallye','list_rallyes','Rallyes verwalten','Alle bestehenden Ref-Rallyes auflisten, bearbeiten, stoppen, löschen usw.',3);
99 addGuestMenuSql('main','rallyes','Ref-Rallyes','N','Y',9);
102 addMemberMenuSql('main','rallyes','Ref-Rallyes','N','Y',9);
105 case 'remove': // Do stuff when removing extension
107 addExtensionSql('DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_data`');
108 addExtensionSql('DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_prices`');
109 addExtensionSql('DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_users`');
112 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='rallye'");
113 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_guest_menu` WHERE `what`='rallyes'");
114 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what`='rallyes'");
117 unregisterFilter('extra_autopurge', 'RALLYE_EXTRA_AUTOPURGE', true, getExtensionDryRun());
120 case 'activate': // Do stuff when admin activates this extension
121 // SQL commands to run
122 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_guest_menu` SET `visible`='Y', `locked`='N' WHERE `what`='rallyes' LIMIT 1");
123 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y', `locked`='N' WHERE `what`='rallyes' LIMIT 1");
126 case 'deactivate': // Do stuff when admin deactivates this extension
127 // SQL commands to run
128 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_guest_menu` SET `visible`='N', `locked`='Y' WHERE `what`='rallyes' LIMIT 1");
129 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='N', `locked`='Y' WHERE `what`='rallyes' LIMIT 1");
132 case 'update': // Update an extension
133 switch (getCurrentExtensionVersion()) {
134 case '0.0.1': // SQL queries for v0.0.1
135 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_data` ADD expired ENUM('Y','N') NOT NULL DEFAULT 'N'");
137 // Update notes (these will be set as task text!)
138 setExtensionUpdateNotes("Ablaufen der Rallyes intergriert.");
141 case '0.0.2': // SQL queries for v0.0.2
142 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_users` ADD curr_points FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000");
144 // Update notes (these will be set as task text!)
145 setExtensionUpdateNotes("Aktueller {?POINTS?}-Stand wird beachtet.");
148 case '0.0.6': // SQL queries for v0.0.6
149 // Update notes (these will be set as task text!)
150 setExtensionUpdateNotes("Fehler <em>Unknown column 'd.useid' in 'on clause'</em> behoben.");
153 case '0.0.7': // SQL queries for v0.0.7
154 // Update notes (these will be set as task text!)
155 setExtensionUpdateNotes("Fehlende Abfrage im Mitlieder-Modul, on Erweiterung auch aktiviert ist.");
158 case '0.0.8': // SQL queries for v0.0.8
159 // Update notes (these will be set as task text!)
160 setExtensionUpdateNotes("Fehler <u>Template nicht gefunden</u> behoben und Admin-Formulare ausgelagert");
163 case '0.0.9': // SQL queries for v0.0.9
164 // Update notes (these will be set as task text!)
165 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist. Und der vorherige Fehler <u>Template nicht gefunden</u> ist endlich beseitigt.");
168 case '0.1.0': // SQL queries for v0.2.1
169 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_users` CHANGE curr_points curr_points FLOAT(23,5) UNSIGNED NOT NULL DEFAULT 0.00000");
171 // Update notes (these will be set as task text!)
172 setExtensionUpdateNotes("5 Nachkommastellen implementiert.");
175 case '0.1.1': // SQL queries for v0.1.1
176 // Update notes (these will be set as task text!)
177 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
180 case '0.1.2': // SQL queries for v0.1.2
181 // Update notes (these will be set as task text!)
182 setExtensionUpdateNotes("Problem mit Speicherung der Einstellungen beseitigt.");
185 case '0.1.3': // SQL queries for v0.1.3
186 // Update notes (these will be set as task text!)
187 setExtensionUpdateNotes("Anzeigefehler im Gast-/Mitgliedsbereich behoben.");
190 case '0.1.4': // SQL queries for v0.1.4
191 // Update notes (these will be set as task text!)
192 setExtensionUpdateNotes("Admin-Mails korregiert.");
195 case '0.1.5': // SQL queries for v0.1.5
196 // Update notes (these will be set as task text!)
197 setExtensionUpdateNotes("Menüpunkte im Gast-/Mitgliedsbereich können nicht mehr aufgerufen werden, wenn die Erweiterung deaktiviert ist.");
200 case '0.1.6': // SQL queries for v0.1.6
201 // Update notes (these will be set as task text!)
202 setExtensionUpdateNotes("Seit <strong>Patch 340</strong> überflüssige HTML-Tags entfernt.");
205 case '0.1.7': // SQL queries for v0.1.7
206 // Update notes (these will be set as task text!)
207 setExtensionUpdateNotes("Aktivierte bzw. abgelaufene Rallyes werden nur ausserhalb des CSS-Modus geladen (wenn also nicht css.php aufgerufen wurde)");
210 case '0.1.8': // SQL queries for v0.1.8
211 // Update notes (these will be set as task text!)
212 setExtensionUpdateNotes("Weitere Templates vom Admin-Bereich ausgelagert und Referal-Anazahl in der Mail zur Rallye-Ankündigung repariert.");
215 case '0.1.9': // SQL queries for v0.1.9
216 // Update notes (these will be set as task text!)
217 setExtensionUpdateNotes("Funktion <u>generateUserProfileLink()</u> mit Verlinkung auf Referal-Liste implementiert.");
220 case '0.2.0': // SQL queries for v0.2.0
221 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_data` ADD min_users BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
222 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_data` ADD min_prices BIGINT(20) UNSIGNED NOT NULL DEFAULT 3");
224 // Update notes (these will be set as task text!)
225 setExtensionUpdateNotes("Ablaufen der Rallyes intergriert. Bauen Sie in Ihr Template <strong>templates/de/emails/member/member_rallye_notify.tpl</strong> folgende zwei Zeilen ein:<br />
227 <li>$DATA[min_users]</li>
228 <li>$DATA[min_prices]</li>
230 Zudem sollten Sie mindestens folgende Templates (in <strong>templates/".getLanguage()."/html/guest/</strong> !) aktualisieren:<br />
232 <li><strong>guest_rallye_footer.tpl</strong></li>
233 <li><strong>guest_rallye_header.tpl</strong></li>
237 case '0.2.1': // SQL queries for v0.2.1
238 // Update notes (these will be set as task text!)
239 setExtensionUpdateNotes("Wörter <strong>{?mt_word?}</strong>, <strong>{?mt_word2?}</strong> und <strong>{?mt_word3?}</strong> sind austauschbar.");
242 case '0.2.2': // SQL queries for v0.2.2
243 // Update notes (these will be set as task text!)
244 setExtensionUpdateNotes("Links wegen <strong>what=admins_contct</strong> geändert.");
247 case '0.2.3': // SQL queries for v0.2.3
248 // Update notes (these will be set as task text!)
249 setExtensionUpdateNotes("HTML-Code ausgelagert in Templates und SQL-Anweisungen abgesichert.");
252 case '0.2.4': // SQL queries for v0.2.4
253 // Update notes (these will be set as task text!)
254 setExtensionUpdateNotes("Abspeichern von Einstellungen repariert.");
257 case '0.2.5': // SQL queries for v0.2.5
258 // Update notes (these will be set as task text!)
259 setExtensionUpdateNotes("Menüpunkt "Rallyes verwalten" repariert.");
262 case '0.2.6': // SQL queries for v0.2.6
263 // Update notes (these will be set as task text!)
264 setExtensionUpdateNotes("Automatisches Starten von Referal-Rallyes repariert.");
267 case '0.2.7': // SQL queries for v0.2.7
268 // Update notes (these will be set as task text!)
269 setExtensionUpdateNotes("Fatalen Fehler beseitigt.");
272 case '0.2.8': // SQL queries for v0.2.8
273 // Update notes (these will be set as task text!)
275 setExtensionUpdateNotes("Vorbereitung auf die neue Mediendaten v0.0.4.");
278 case '0.2.9': // SQL queries for v0.2.9
279 // Update notes (these will be set as task text!)
280 setExtensionUpdateNotes("Sicherheitsupdate für die Include-Befehle.");
283 case '0.3.0': // SQL queries for v0.3.0
284 // Update notes (these will be set as task text!)
285 setExtensionUpdateNotes("if-Anweisungen auf Funktion <strong>empty()</strong> umgestellt.");
288 case '0.3.1': // SQL queries for v0.3.1
289 // Update notes (these will be set as task text!)
290 setExtensionUpdateNotes("Erweiterung für automatisch generierte Admin-Kontaktlinks geändert.");
293 case '0.3.2': // SQL queries for v0.3.2
294 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='rals', `sort`=1, `title`='Referal-Rallye' WHERE `what`='rallyes' LIMIT 1");
296 // Update notes (these will be set as task text!)
297 setExtensionUpdateNotes("Mitgliedsmenü komplett umgebaut.");
300 case '0.3.3': // SQL queries for v0.3.3
301 // Update notes (these will be set as task text!)
302 setExtensionUpdateNotes("Rallyes werden nun nur dann automatisch beseitigt, wenn die Erweiterung <strong>autopurge</strong> installiert und aktiviert ist.");
305 case '0.3.4': // SQL queries for v0.3.4
306 // Update notes (these will be set as task text!)
307 setExtensionUpdateNotes("Fehlerhinweis bei deaktivierter Erweiterung verbessert.");
310 case '0.3.5': // SQL queries for 0.3.5
311 // This update depends on sql_patches
312 addExtensionUpdateDependency('sql_patches');
315 registerFilter('extra_autopurge', 'RALLYE_EXTRA_AUTOPURGE', false, true, getExtensionDryRun());
317 // Update notes (these will be set as task text!)
318 setExtensionUpdateNotes("Filter hinzugefügt und ist von <strong>sql_patches</strong> abhängig.");
323 case 'modify': // When the extension got modified
326 case 'test': // For testing purposes. For details see file inc/modules/admin/what-extensions.php, arround line 305.
329 case 'init': // Do stuff when extension is initialized
330 // Do stuff only when not in CSS mode
331 // @TODO Move this code into rallye_functions.php
332 if (getOutputMode() != 1) {
333 // Get total member count
334 $total = countSumTotalData('CONFIRMED', 'user_data', 'userid', 'status', true);
336 // Add more data on higher versions
337 $ADD1 = ''; $ADD2 = ''; $OR = '';
338 if (isExtensionInstalledAndNewer('rallye', '0.2.0')) {
339 $ADD1 = ", `min_users`, `min_prices`";
340 $ADD2 = ", d.min_users, d.min_prices";
341 $OR = " OR (d.min_users <= ".$total." AND d.min_users > 0)";
344 // Check for new started but not notified rallyes
345 $result = SQL_QUERY("SELECT SQL_SMALL_RESULT
346 `id`, `title`, `start_time`, `end_time`, `send_notify`".$ADD1."
348 `{?_MYSQL_PREFIX?}_rallye_data`
353 `start_time` <= UNIX_TIMESTAMP() AND
354 `end_time` > UNIX_TIMESTAMP()
355 LIMIT 1", __FILE__, __LINE__);
356 if (SQL_NUMROWS($result) == 1) {
358 autostartReferalRallyes($result);
362 SQL_FREERESULT($result);
364 // Check for expired rallyes
365 $result = SQL_QUERY("SELECT SQL_SMALL_RESULT
366 d.id, d.title, d.start_time, d.end_time, d.send_notify".$ADD2."
368 `{?_MYSQL_PREFIX?}_rallye_data` AS d
373 (d.end_time <= UNIX_TIMESTAMP()".$OR.")
374 LIMIT 1", __FILE__, __LINE__);
375 if ((SQL_NUMROWS($result) == 1) && (isExtensionActive('autopurge'))) {
376 // End rallye here...
377 markReferalRallyesAsExpired($result);
381 SQL_FREERESULT($result);
385 default: // Unknown extension mode
386 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));