2 /************************************************************************
3 * Mailer-Project 0.2.1-FINAL Start: 01/07/2005 *
4 * ========================== Last change: 01/07/2005 *
6 * -------------------------------------------------------------------- *
7 * File : ext-coupon.php *
8 * -------------------------------------------------------------------- *
9 * Short description : Coupon system *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Coupon-System *
12 * -------------------------------------------------------------------- *
14 * -------------------------------------------------------------------- *
17 * $Tag:: 0.2.1-FINAL $ *
19 * -------------------------------------------------------------------- *
20 * Copyright (c) 2003 - 2009 by Roland Haeder *
21 * Copyright (c) 2009 - 2012 by Mailer Developer Team *
22 * For more information visit: http://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.0.3');
48 // Version history array (add more with , '0.1' and so on)
49 setExtensionVersionHistory(array('0.0.0', '0.0.1', '0.0.2', '0.0.3'));
51 switch (getExtensionMode()) {
52 case 'register': // Do stuff when installtion is running
53 // This extension requires an up-to-date ext-user
54 addExtensionDependency('user');
55 addExtensionDependency('autopurge');
58 addDropTableSql('coupon_data');
59 addCreateTableSql('coupon_data', "
60 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
61 `coupon_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
62 `coupon_expired` TIMESTAMP NULL DEFAULT NULL,
63 `coupon_type` ENUM('CODE','API') NOT NULL DEFAULT 'CODE',
64 `total_created` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
65 `total_cashed` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
66 `points` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
67 `coupon_description` TEXT NOT NULL,
71 // Coupon->user connection table
72 addDropTableSql('user_coupons');
73 addCreateTableSql('user_coupons', "
74 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
75 `coupon_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
76 `userid` BIGINT(2) UNSIGNED NOT NULL DEFAULT 0,
77 `coupon_code` VARCHAR(30) NULL DEFAULT NULL,
78 `cashed_on` TIMESTAMP NULL DEFAULT NULL,
80 UNIQUE INDEX `coupon_user` (`coupon_id`, `userid`),
81 UNIQUE INDEX (`coupon_code`)",
82 'Coupon->user connection');
84 // Configuration entries
85 addConfigAddSql('coupon_default_time', 'BIGINT(20) NOT NULL DEFAULT ' . (getOneDay() * 7));
86 addConfigAddSql('coupon_default_points', 'FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 100.00000');
87 addConfigAddSql('coupon_autopurge_time', 'BIGINT(20) NOT NULL DEFAULT ' . (getOneDay() * 7));
88 addConfigAddSql('coupon_userid', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
91 addExtensionAddTableColumnSql('user_data', 'receiving_coupons', "ENUM('Y','N') NOT NULL DEFAULT 'Y'");
95 addAdminMenuSql('coupon', NULL, 'Gutscheine', 'Einrichten und Versenden von Code-Gutscheinen, sowie per API (noch in Planung). Bei Code-Gutscheinen wird ein Code pro Mitglied erzeugt, der dann an das Mitglied ausgesandt wird. Löst das Mitglied den Gutschein ein, erhält es die Gutschrift auf sein Konto gutgeschrieben. Ausgangseinstellung ist die Gutschrift auf das Werbeguthaben, was für Paidmailer von Wichtigkeit ist, dass Guthaben aus Gutscheinen nicht auszahlungsfähig ist.', 6);
96 addAdminMenuSql('coupon', 'list_coupon', 'Auflisten', 'Listet alle Gutscheine und Einlösungen durch die Mitglieder auf.', 1);
97 addAdminMenuSql('coupon', 'send_coupon', 'Versenden/Neuen erstellen', 'Versendet neue Gutscheine an die Mitglieder. Wenn Sie auf "Absenden" klicken, warten Sie bitte die Folgeseite ab, da der Versand der Gutscheine derzeit nicht gepoolt ist.', 2);
98 addAdminMenuSql('coupon', 'config_coupon', 'Einstellungen', 'Allgemeine Einstellungen zu Code-Gutscheinen und Gutscheinen von Sponsoren (z.B. per API) können hier vorgenommen werden.', 3);
100 addMemberMenuSql('coupon', NULL, 'Gutscheine', 3);
101 addMemberMenuSql('coupon', 'cash_coupon', 'Gutschein einlösen', 1);
102 addMemberMenuSql('coupon', 'list_coupon', 'Eingelöste auflisten', 2);
104 // Add filter (for changing user_points column dynamically
105 registerFilter(__FILE__, __LINE__, 'determine_points_column_name', 'COUPON_CHANGE_POINTS_COLUMN_NAME', FALSE, TRUE, isExtensionDryRun());
108 case 'remove': // Do stuff when removing extension
109 // SQL commands to run
110 addDropTableSql('coupon_data');
111 addDropTableSql('user_coupons');
112 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='coupon' LIMIT 4");
113 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `action`='coupon' LIMIT 3");
115 // Remove points data
116 unregisterExtensionPointsData('coupon_cashed');
118 // Remove all filters
119 unregisterFilter(__FILE__, __LINE__, 'determine_points_column_name', 'COUPON_CHANGE_POINTS_COLUMN_NAME', TRUE, isExtensionDryRun());
120 unregisterFilter(__FILE__, __LINE__, 'post_cash_coupon', 'POST_CASH_COUPON', TRUE, isExtensionDryRun());
123 case 'activate': // Do stuff when admin activates this extension
124 // SQL commands to run
125 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y',`locked`='N' WHERE `action`='coupon' LIMIT 3");
128 case 'deactivate': // Do stuff when admin deactivates this extension
129 // SQL commands to run
130 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='N',`locked`='Y' WHERE `action`='coupon' LIMIT 3");
133 case 'update': // Update an extension
134 switch (getCurrentExtensionVersion()) {
135 case '0.0.1': // SQL queries for v0.0.1
136 addConfigDropSql('coupon_points_account');
137 addConfigDropSql('coupon_payment_method');
138 addConfigDropSql('coupon_locked_points_mode');
140 // This extension's update requires an up-to-date ext-sql_patches and ext-order
141 addExtensionDependency('sql_patches');
142 addExtensionDependency('order');
144 // Insert data in new table
145 registerExtensionPointsData('coupon_cashed', 'order_points', 'LOCKED', 'DIRECT');
147 // Update notes (these will be set as task text!)
148 setExtensionUpdateNotes('');
151 case '0.0.2': // SQL queries for v0.0.2
152 // Update data in points_data table
153 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_points_data` SET `subject`='coupon_cashed' WHERE `subject`='coupon' LIMIT 1");
155 // Update notes (these will be set as task text!)
156 setExtensionUpdateNotes('Eintrag in <strong>{CONFIG_OPEN}_MYSQL_PREFIX{CONFIG_CLOSE}_points_data</strong> umbenannt.');
159 case '0.0.3': // SQL queries for v0.0.3
160 registerFilter(__FILE__, __LINE__, 'post_cash_coupon', 'POST_CASH_COUPON', FALSE, TRUE, isExtensionDryRun());
162 // Update notes (these will be set as task text!)
163 setExtensionUpdateNotes('Filter zum Post- und Pre-Filter hinzugefügt.');
168 case 'modify': // When the extension got modified
171 case 'test': // For testing purposes
174 case 'init': // Do stuff when extension is initialized
177 default: // Unknown extension mode
178 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));