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 * For more information visit: http://www.mxchange.org *
23 * This program is free software; you can redistribute it and/or modify *
24 * it under the terms of the GNU General Public License as published by *
25 * the Free Software Foundation; either version 2 of the License, or *
26 * (at your option) any later version. *
28 * This program is distributed in the hope that it will be useful, *
29 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
31 * GNU General Public License for more details. *
33 * You should have received a copy of the GNU General Public License *
34 * along with this program; if not, write to the Free Software *
35 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
37 ************************************************************************/
39 // Some security stuff...
40 if (!defined('__SECURITY')) {
45 setThisExtensionVersion('0.3.5');
47 // Version history array (add more with , '0.1.0' and so on)
48 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'));
50 switch (getExtensionMode()) {
51 case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
52 // SQL commands to run
53 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_data`");
54 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_prices`");
55 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_users`");
56 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_rallye_data` (
57 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
58 admin_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
59 title VARCHAR(255) NOT NULL DEFAULT '',
60 descr LONGTEXT NOT NULL,
61 template VARCHAR(255) NOT NULL DEFAULT '',
62 start_time VARCHAR(10) NOT NULL DEFAULT 0,
63 end_time VARCHAR(10) NOT NULL DEFAULT 0,
64 auto_add_new_user ENUM('Y','N') NOT NULL DEFAULT 'Y',
65 is_active ENUM('Y','N') NOT NULL DEFAULT 'N',
66 send_notify ENUM('Y','N') NOT NULL DEFAULT 'Y',
67 notified ENUM('Y','N') NOT NULL DEFAULT 'N',
70 ) TYPE={?_TABLE_TYPE?}");
71 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_rallye_prices` (
72 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
73 rallye_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
74 price_level BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
75 points BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
76 info LONGTEXT NOT NULL,
79 ) TYPE={?_TABLE_TYPE?}");
80 addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_rallye_users` (
81 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
82 rallye_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
83 userid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
84 refs BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
88 ) TYPE={?_TABLE_TYPE?}");
91 addAdminMenuSql('rallye', NULL, 'Rallye-Management','Richten Sie neue Ref-Rallyes ein, die zeitgesteuert anfangen und aufhöhren. Dabei wird alles weitere automatisch geregelt.',9);
92 addAdminMenuSql('rallye','add_rallye','Neue Rallye hinzufügen','Neue Ref-Rallye hinzufügen.',1);
93 // @TODO Fix config_rallye_prices to list_rallye_prices
94 addAdminMenuSql('rallye','config_rallye_prices','Preise einrichten','Richten Sie Preise zu den Rallyes ein.',2);
95 addAdminMenuSql('rallye','list_rallyes','Rallyes verwalten','Alle bestehenden Ref-Rallyes auflisten, bearbeiten, stoppen, löschen usw.',3);
98 addGuestMenuSql('main','rallyes','Ref-Rallyes','N','Y',9);
101 addMemberMenuSql('main','rallyes','Ref-Rallyes','N','Y',9);
104 case 'remove': // Do stuff when removing extension
106 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_data`");
107 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_prices`");
108 addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_rallye_users`");
111 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='rallye'");
112 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_guest_menu` WHERE `what`='rallyes'");
113 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what`='rallyes'");
116 unregisterFilter('extra_autopurge', 'RALLYE_EXTRA_AUTOPURGE', true, getExtensionDryRun());
119 case 'activate': // Do stuff when admin activates this extension
120 // SQL commands to run
121 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_guest_menu` SET `visible`='Y', `locked`='N' WHERE `what`='rallyes' LIMIT 1");
122 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y', `locked`='N' WHERE `what`='rallyes' LIMIT 1");
125 case 'deactivate': // Do stuff when admin deactivates this extension
126 // SQL commands to run
127 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_guest_menu` SET `visible`='N', `locked`='Y' WHERE `what`='rallyes' LIMIT 1");
128 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='N', `locked`='Y' WHERE `what`='rallyes' LIMIT 1");
131 case 'update': // Update an extension
132 switch (getCurrentExtensionVersion()) {
133 case '0.0.1': // SQL queries for v0.0.1
134 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_data` ADD expired ENUM('Y','N') NOT NULL DEFAULT 'N'");
136 // Update notes (these will be set as task text!)
137 setExtensionUpdateNotes("Ablaufen der Rallyes intergriert.");
140 case '0.0.2': // SQL queries for v0.0.2
141 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_users` ADD curr_points FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000");
143 // Update notes (these will be set as task text!)
144 setExtensionUpdateNotes("Aktueller {?POINTS?}-Stand wird beachtet.");
147 case '0.0.6': // SQL queries for v0.0.6
148 // Update notes (these will be set as task text!)
149 setExtensionUpdateNotes("Fehler <em>Unknown column 'd.useid' in 'on clause'</em> behoben.");
152 case '0.0.7': // SQL queries for v0.0.7
153 // Update notes (these will be set as task text!)
154 setExtensionUpdateNotes("Fehlende Abfrage im Mitlieder-Modul, on Erweiterung auch aktiviert ist.");
157 case '0.0.8': // SQL queries for v0.0.8
158 // Update notes (these will be set as task text!)
159 setExtensionUpdateNotes("Fehler <u>Template nicht gefunden</u> behoben und Admin-Formulare ausgelagert");
162 case '0.0.9': // SQL queries for v0.0.9
163 // Update notes (these will be set as task text!)
164 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist. Und der vorherige Fehler <u>Template nicht gefunden</u> ist endlich beseitigt.");
167 case '0.1.0': // SQL queries for v0.2.1
168 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_users` CHANGE curr_points curr_points FLOAT(23,5) UNSIGNED NOT NULL DEFAULT 0.00000");
170 // Update notes (these will be set as task text!)
171 setExtensionUpdateNotes("5 Nachkommastellen implementiert.");
174 case '0.1.1': // SQL queries for v0.1.1
175 // Update notes (these will be set as task text!)
176 setExtensionUpdateNotes("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
179 case '0.1.2': // SQL queries for v0.1.2
180 // Update notes (these will be set as task text!)
181 setExtensionUpdateNotes("Problem mit Speicherung der Einstellungen beseitigt.");
184 case '0.1.3': // SQL queries for v0.1.3
185 // Update notes (these will be set as task text!)
186 setExtensionUpdateNotes("Anzeigefehler im Gast-/Mitgliedsbereich behoben.");
189 case '0.1.4': // SQL queries for v0.1.4
190 // Update notes (these will be set as task text!)
191 setExtensionUpdateNotes("Admin-Mails korregiert.");
194 case '0.1.5': // SQL queries for v0.1.5
195 // Update notes (these will be set as task text!)
196 setExtensionUpdateNotes("Menüpunkte im Gast-/Mitgliedsbereich können nicht mehr aufgerufen werden, wenn die Erweiterung deaktiviert ist.");
199 case '0.1.6': // SQL queries for v0.1.6
200 // Update notes (these will be set as task text!)
201 setExtensionUpdateNotes("Seit <strong>Patch 340</strong> überflüssige HTML-Tags entfernt.");
204 case '0.1.7': // SQL queries for v0.1.7
205 // Update notes (these will be set as task text!)
206 setExtensionUpdateNotes("Aktivierte bzw. abgelaufene Rallyes werden nur ausserhalb des CSS-Modus geladen (wenn also nicht css.php aufgerufen wurde)");
209 case '0.1.8': // SQL queries for v0.1.8
210 // Update notes (these will be set as task text!)
211 setExtensionUpdateNotes("Weitere Templates vom Admin-Bereich ausgelagert und Referal-Anazahl in der Mail zur Rallye-Ankündigung repariert.");
214 case '0.1.9': // SQL queries for v0.1.9
215 // Update notes (these will be set as task text!)
216 setExtensionUpdateNotes("Funktion <u>generateUserProfileLink()</u> mit Verlinkung auf Referal-Liste implementiert.");
219 case '0.2.0': // SQL queries for v0.2.0
220 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_data` ADD min_users BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
221 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_rallye_data` ADD min_prices BIGINT(20) UNSIGNED NOT NULL DEFAULT 3");
223 // Update notes (these will be set as task text!)
224 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 />
226 <li>$DATA[min_users]</li>
227 <li>$DATA[min_prices]</li>
229 Zudem sollten Sie mindestens folgende Templates (in <strong>templates/".getLanguage()."/html/guest/</strong> !) aktualisieren:<br />
231 <li><strong>guest_rallye_footer.tpl</strong></li>
232 <li><strong>guest_rallye_header.tpl</strong></li>
236 case '0.2.1': // SQL queries for v0.2.1
237 // Update notes (these will be set as task text!)
238 setExtensionUpdateNotes("Wörter <strong>{?mt_word?}</strong>, <strong>{?mt_word2?}</strong> und <strong>{?mt_word3?}</strong> sind austauschbar.");
241 case '0.2.2': // SQL queries for v0.2.2
242 // Update notes (these will be set as task text!)
243 setExtensionUpdateNotes("Links wegen <strong>what=admins_contct</strong> geändert.");
246 case '0.2.3': // SQL queries for v0.2.3
247 // Update notes (these will be set as task text!)
248 setExtensionUpdateNotes("HTML-Code ausgelagert in Templates und SQL-Anweisungen abgesichert.");
251 case '0.2.4': // SQL queries for v0.2.4
252 // Update notes (these will be set as task text!)
253 setExtensionUpdateNotes("Abspeichern von Einstellungen repariert.");
256 case '0.2.5': // SQL queries for v0.2.5
257 // Update notes (these will be set as task text!)
258 setExtensionUpdateNotes("Menüpunkt "Rallyes verwalten" repariert.");
261 case '0.2.6': // SQL queries for v0.2.6
262 // Update notes (these will be set as task text!)
263 setExtensionUpdateNotes("Automatisches Starten von Referal-Rallyes repariert.");
266 case '0.2.7': // SQL queries for v0.2.7
267 // Update notes (these will be set as task text!)
268 setExtensionUpdateNotes("Fatalen Fehler beseitigt.");
271 case '0.2.8': // SQL queries for v0.2.8
272 // Update notes (these will be set as task text!)
274 setExtensionUpdateNotes("Vorbereitung auf die neue Mediendaten v0.0.4.");
277 case '0.2.9': // SQL queries for v0.2.9
278 // Update notes (these will be set as task text!)
279 setExtensionUpdateNotes("Sicherheitsupdate für die Include-Befehle.");
282 case '0.3.0': // SQL queries for v0.3.0
283 // Update notes (these will be set as task text!)
284 setExtensionUpdateNotes("if-Anweisungen auf Funktion <strong>empty()</strong> umgestellt.");
287 case '0.3.1': // SQL queries for v0.3.1
288 // Update notes (these will be set as task text!)
289 setExtensionUpdateNotes("Erweiterung für automatisch generierte Admin-Kontaktlinks geändert.");
292 case '0.3.2': // SQL queries for v0.3.2
293 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='rals', `sort`=1, `title`='Referal-Rallye' WHERE `what`='rallyes' LIMIT 1");
295 // Update notes (these will be set as task text!)
296 setExtensionUpdateNotes("Mitgliedsmenü komplett umgebaut.");
299 case '0.3.3': // SQL queries for v0.3.3
300 // Update notes (these will be set as task text!)
301 setExtensionUpdateNotes("Rallyes werden nun nur dann automatisch beseitigt, wenn die Erweiterung <strong>autopurge</strong> installiert und aktiviert ist.");
304 case '0.3.4': // SQL queries for v0.3.4
305 // Update notes (these will be set as task text!)
306 setExtensionUpdateNotes("Fehlerhinweis bei deaktivierter Erweiterung verbessert.");
309 case '0.3.5': // SQL queries for 0.3.5
310 // This update depends on sql_patches
311 addExtensionUpdateDependency('sql_patches');
314 registerFilter('extra_autopurge', 'RALLYE_EXTRA_AUTOPURGE', false, true, getExtensionDryRun());
316 // Update notes (these will be set as task text!)
317 setExtensionUpdateNotes("Filter hinzugefügt und ist von <strong>sql_patches</strong> abhängig.");
322 case 'modify': // When the extension got modified
325 case 'test': // For testing purposes. For details see file inc/modules/admin/what-extensions.php, arround line 305.
328 case 'init': // Do stuff when extension is initialized
329 // Do stuff only when not in CSS mode
330 // @TODO Move this code into rallye_functions.php
331 if (getOutputMode() != 1) {
332 // Get total member count
333 $total = countSumTotalData('CONFIRMED', 'user_data', 'userid', 'status', true);
335 // Add more data on higher versions
336 $ADD1 = ''; $ADD2 = ''; $OR = '';
337 if (getExtensionVersion('rallye') >= '0.2.0') {
338 $ADD1 = ", `min_users`, `min_prices`";
339 $ADD2 = ", d.min_users, d.min_prices";
340 $OR = " OR (d.min_users <= ".$total." AND d.min_users > 0)";
343 // Check for new started but not notified rallyes
344 $result = SQL_QUERY("SELECT SQL_SMALL_RESULT
345 `id`, `title`, `start_time`, `end_time`, `send_notify`".$ADD1."
347 `{?_MYSQL_PREFIX?}_rallye_data`
352 `start_time` <= UNIX_TIMESTAMP() AND
353 `end_time` > UNIX_TIMESTAMP()
354 LIMIT 1", __FILE__, __LINE__);
355 if (SQL_NUMROWS($result) == 1) {
357 autostartReferalRallyes($result);
361 SQL_FREERESULT($result);
363 // Check for expired rallyes
364 $result = SQL_QUERY("SELECT SQL_SMALL_RESULT
365 d.id, d.title, d.start_time, d.end_time, d.send_notify".$ADD2."
367 `{?_MYSQL_PREFIX?}_rallye_data` AS d
372 (d.end_time <= UNIX_TIMESTAMP()".$OR.")
373 LIMIT 1", __FILE__, __LINE__);
374 if ((SQL_NUMROWS($result) == 1) && (isExtensionActive('autopurge'))) {
375 // End rallye here...
376 markReferalRallyesAsExpired($result);
380 SQL_FREERESULT($result);
384 default: // Unknown extension mode
385 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s detected.", getExtensionMode()));