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 - 2011 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.0');
48 // Version history array (add more with , '0.1' and so on)
49 setExtensionVersionHistory(array('0.0'));
51 // This extension is in development (non-productive)
52 enableExtensionProductive(false);
54 switch (getExtensionMode()) {
55 case 'register': // Do stuff when installtion is running
56 // This extension requires an up-to-date user
57 addExtensionDependency('user');
60 addDropTableSql('coupon_data');
61 addCreateTableSql('coupon_data', "(
62 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
63 `coupon_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
64 `coupon_expired` TIMESTAMP NULL DEFAULT NULL,
65 `coupon_type` ENUM('CODE','API') NOT NULL DEFAULT 'CODE',
66 `total_created` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
67 `total_used` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
68 `points` FLOAT(20,5) NOT NULL DEFAULT 0.00000,
69 `coupon_description` TEXT,
71 ) TYPE = {?_TABLE_TYPE?} CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Created coupons'");
73 // Coupon->user connection table
74 addDropTableSql('user_coupons');
75 addCreateTableSql('user_coupons', "(
76 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
77 `coupon_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
78 `userid` BIGINT(2) UNSIGNED NOT NULL DEFAULT 0,
79 `coupon_code` VARCHAR(30) NULL DEFAULT NULL,
80 `cashed_on` TIMESTAMP NULL DEFAULT NULL,
82 UNIQUE KEY `coupon_user` (`coupon_id`,`userid`),
83 UNIQUE KEY (`coupon_code`)
84 ) TYPE = {?_TABLE_TYPE?} CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Coupon->user connection'");
86 // Configuration entries
87 addConfigAddSql('coupon_default_time', 'BIGINT(20) NOT NULL DEFAULT ' . (getOneDay() * 7));
88 addConfigAddSql('coupon_default_points', 'FLOAT(20,5) NOT NULL DEFAULT 100.00000');
89 addConfigAddSql('coupon_points_account', "ENUM('ORDER','GENERAL') NOT NULL DEFAULT 'ORDER'");
90 addConfigAddSql('coupon_payment_method', "ENUM('DIRECT','REF') NOT NULL DEFAULT 'DIRECT'");
91 addConfigAddSql('coupon_locked_points_mode', "ENUM('LOCKED','UNLOCKED') NOT NULL DEFAULT 'LOCKED'");
92 addConfigAddSql('coupon_autopurge_time', 'BIGINT(20) NOT NULL DEFAULT ' . (getOneDay() * 7));
93 addConfigAddSql('coupon_userid', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT 0');
96 addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `receiving_coupons` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
100 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);
101 addAdminMenuSql('coupon', 'list_coupon', 'Auflisten', 'Listet alle Gutscheine und Einlösungen durch die Mitglieder auf.', 1);
102 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);
103 addAdminMenuSql('coupon', 'config_coupon', 'Einstellungen', 'Allgemeine Einstellungen zu Code-Gutscheinen und Gutscheinen von Sponsoren (z.B. per API) können hier vorgenommen werden.', 3);
105 addMemberMenuSql('coupon', NULL, 'Gutscheine', 'N', 'Y', 3);
106 addMemberMenuSql('coupon', 'cash_coupon', 'Gutschein einlösen', 'N', 'Y', 1);
107 addMemberMenuSql('coupon', 'list_coupon', 'Eingelöste auflisten', 'N', 'Y', 2);
109 // Add filter (for changing user_points column dynamically
110 registerFilter('determine_points_column_name', 'COUPON_CHANGE_POINTS_COLUMN_NAME', false, true, isExtensionDryRun());
113 case 'remove': // Do stuff when removing extension
114 // SQL commands to run
115 addDropTableSql('coupon_data');
116 addDropTableSql('user_coupons');
117 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='coupon' LIMIT 4");
118 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `action`='coupon' LIMIT 3");
120 // Remove all filters
121 unregisterFilter(__FUNCTION__, __LINE__, 'determine_points_column_name', 'COUPON_CHANGE_POINTS_COLUMN_NAME', true, isExtensionDryRun());
124 case 'activate': // Do stuff when admin activates this extension
125 // SQL commands to run
126 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y', `locked`='N' WHERE `action`='coupon' LIMIT 3");
129 case 'deactivate': // Do stuff when admin deactivates this extension
130 // SQL commands to run
131 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='N', `locked`='Y' WHERE `action`='coupon' LIMIT 3");
134 case 'update': // Update an extension
135 switch (getCurrentExtensionVersion()) {
136 case '0.0.1': // SQL queries for v0.0.1
139 // Update notes (these will be set as task text!)
140 setExtensionUpdateNotes('');
145 case 'modify': // When the extension got modified
148 case 'test': // For testing purposes
151 case 'init': // Do stuff when extension is initialized
154 default: // Unknown extension mode
155 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));