2 /************************************************************************
3 * Mailer v0.2.1-FINAL Start: 03/09/2010 *
4 * =================== Last change: 03/09/2010 *
6 * -------------------------------------------------------------------- *
7 * File : ext-forced.php *
8 * -------------------------------------------------------------------- *
9 * Short description : Clickable forced banner or text links *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Klickbare Forced-Banner oder -Textlinks *
12 * -------------------------------------------------------------------- *
15 * $Tag:: 0.2.1-FINAL $ *
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 *
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. *
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. *
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, *
36 ************************************************************************/
38 // Some security stuff...
39 if (!defined('__SECURITY')) {
44 setThisExtensionVersion('0.0.0');
46 // Version history array (add more with , '0.0.1' and so on)
47 setExtensionVersionHistory(array('0.0.0'));
49 // This extension is in development (non-productive)
50 enableExtensionProductive(FALSE);
52 switch (getExtensionMode()) {
53 case 'setup': // Do stuff when installation is running
54 // Add dependency for ext-earning
55 addExtensionDependency('earning');
57 // All required tables for this extension:
59 addDropTableSql('forced_ads');
60 addCreateTableSql('forced_ads', "
61 `forced_ads_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
62 `forced_ads_provider` ENUM('ADMIN', 'MEMBER', 'API', 'UNKNOWN') NOT NULL DEFAULT 'UNKNOWN',
63 `forced_ads_api_type` VARCHAR(255) NULL DEFAULT NULL,
64 `forced_ads_ad_url` VARCHAR(255) NULL DEFAULT NULL,
65 `forced_ads_click_url` VARCHAR(255) NOT NULL,
66 `forced_ads_width` SMALLINT(3) UNSIGNED NULL DEFAULT NULL,
67 `forced_ads_height` SMALLINT(3) UNSIGNED NULL DEFAULT NULL,
68 `forced_ads_alt_text` VARCHAR(255) NULL DEFAULT NULL,
69 `forced_ads_framebreaker` ENUM('Y','N') NOT NULL DEFAULT 'Y',
70 `forced_ads_type` VARCHAR(255) NOT NULL DEFAULT 'INVALID',
71 `forced_ads_views_counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
72 `forced_ads_clicks_counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
73 `forced_ads_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
74 `forced_ads_userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
75 PRIMARY KEY (`forced_ads_id`),
76 INDEX (`forced_ads_userid`)",
79 // - Connection ->ext-network
80 addDropTableSql('forced_network');
81 addCreateTableSql('forced_network', "
82 `forced_network_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
83 `forced_ads_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
84 `network_type_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
85 PRIMARY KEY (`forced_network_id`),
86 UNIQUE `ads_type` (`forced_ads_id`, `network_type_id`)",
87 'Forced Campaign Data');
90 addDropTableSql('forced_campaigns');
91 addCreateTableSql('forced_campaigns', "
92 `forced_campaign_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
93 `forced_campaign_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
94 `forced_campaign_status` ENUM('ACTIVE','PENDING','EXPIRED','LOCKED') NOT NULL DEFAULT 'PENDING',
95 `forced_campaign_last_locked` TIMESTAMP NULL DEFAULT NULL,
96 `forced_campaign_lock_reason` VARCHAR(255) NULL DEFAULT NULL,
97 `forced_campaign_expired` TIMESTAMP NULL DEFAULT NULL,
98 `forced_campaign_ordered_clicks` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
99 `forced_campaign_payment_api` FLOAT(20,5) UNSIGNED NULL DEFAULT NULL,
100 `forced_campaign_reload_lock` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
101 `forced_campaign_minimum_stay` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
102 `forced_ads_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
103 `forced_campaign_userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
104 `forced_costs_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
105 PRIMARY KEY (`forced_campaign_id`),
106 INDEX (`forced_costs_id`)",
107 'Forced Campaign Data');
110 addDropTableSql('forced_costs');
111 addCreateTableSql('forced_costs', "
112 `forced_costs_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
113 `forced_costs_price_click` FLOAT(20,5) UNSIGNED NULL DEFAULT NULL,
114 `forced_costs_payment_click` FLOAT(20,5) UNSIGNED NULL DEFAULT NULL,
115 `forced_costs_visibility` ENUM('MEMBER','SPONSOR','ALL','NONE') NOT NULL DEFAULT 'NONE',
116 PRIMARY KEY (`forced_costs_id`)",
117 'Forced Campaign Costs');
119 // - Campaign Statistics
120 addDropTableSql('forced_stats');
121 addCreateTableSql('forced_stats', "
122 `forced_stats_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
123 `forced_stats_campaign_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
124 `forced_stats_userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
125 `forced_stats_token` VARCHAR(255) NULL DEFAULT NULL,
126 `forced_stats_viewed` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
127 `forced_stats_clicked` TIMESTAMP NULL DEFAULT NULL,
128 `forced_stats_real_ip` VARCHAR(15) NOT NULL DEFAULT '0.0.0.0',
129 `forced_stats_remote_addr` VARCHAR(15) NOT NULL DEFAULT '0.0.0.0',
130 `forced_stats_ua` VARCHAR(255) NULL DEFAULT NULL,
131 `forced_stats_is_proxy` ENUM('Y','N') NOT NULL DEFAULT 'N',
132 `forced_stats_session_id` VARCHAR(100) NULL DEFAULT NULL,
133 PRIMARY KEY (`forced_stats_id`),
134 INDEX (`forced_stats_campaign_id`),
135 INDEX (`forced_stats_userid`)",
136 'Forced Campaign Statistics');
140 addAdminMenuSql('forced', NULL, 'Forced-Ads', 'Verwalten Sie hier bequem alle laufenden Forced-Banner, -Textlinks, -PopUps und deren Kampgnen. Sie können hier auch neue Werbmittel (Ads) hinzufügen oder laufende Forced-Kampagnen bei z.B. Regelverstössen sperren oder löschen. Auch das naträgliche Editieren von Ads und Kampagnen ist jederzeit möglich. Kampagnen dienen der einfacheren Verwaltung und der Trennung von dem Werbemittel selbst dienen. Sie brauchen also z.B. einen Forced-Banner nur einmal einfügen und können dann bei Bedarf weitere Kampagnen starten.', 5);
141 addAdminMenuSql('forced', 'list_forced_ads', 'Forced-Ads verwalten', 'Listet alle eingetragenen Forced-Ads (Werbmittel mit Klickzwang) auf und fügt neue hinzu. Sie können hier diese nachträglich editieren falls Sie mal eine falsche URL eingegeben haben oder den Text ändern wollen. Löschen Sie hier auch Forced-Banner, die nicht mehr gültig sind (z.B. abgelaufen sind). Sollten doch mit dem Werbmittel verknüpfte Kampagnen vorhanden sein, erhalten Sie einen Warnhinweis. Neue Werbmittel können Sie hier ebenfalls hinzufügen. Denken Sie aber daran, dass ohne Kampagne dieses nicht angezeigt wird. Achten Sie hier auch die Reload-Sperre.', 2);
142 addAdminMenuSql('forced', 'list_forced_campaigns', 'Kampagnen verwalten', 'Listet alle Kampagnen auf und zeigt deren Status an. Jederzeit können Sie Kampagnen stoppen, falls Sie dies wünschen oder ein Regelverstoss vorliegt. Haben Sie ein Werbemittel hinzugefügt, so fügen Sie bitte unbedingt eine Kampagne hinzu, da es sonst nicht angezeigt wird.', 3);
143 addAdminMenuSql('forced', 'list_forced_costs', 'Preise verwalten', 'Legen Sie die Preise pro Klick für Forced-Werbemittelbuchungen fest und wie viele {OPEN_CONFIG}POINTS{CLOSE_CONFIG} Ihre Mitglieder erhalten sollen. Generell sollten Sie bei Mitgliederbuchungen höhere Kosten pro Klick als was Ihre Mitglieder pro Klick erhalten einstellen, da so die {OPEN_CONFIG}POINTS{CLOSE_CONFIG} abgebaut werden (Sie können an Accountaufladungen z.B. verdienen).', 4);
144 addAdminMenuSql('forced', 'stats_forced', 'Statistiken', 'Zeigt Gesamtstatistiken und zu den einzelnen Kampagnen und Werbmitteln an. Die hier angezeigte Statistik kann jedoch nicht manuell gelöscht werden (bitte auch nicht selber tun) da sie auch gleichzeitigt als Reload-Sperre dient.', 5);
147 addMemberMenuSql('earn', 'forced_banner', 'Forced-Banner', 3);
148 addMemberMenuSql('earn', 'forced_textlink', 'Forced-Textlinks', 4);
149 addMemberMenuSql('extras', 'book_forced', 'Forced-Kampagne buchen', 3);
151 // Register Forced-PopUps with earning_data table
152 addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_earning_data` (`earning_group`, `earning_provider`, `earning_sorting`) VALUES ('POPUP','FORCED_POPUP',1)");
155 registerFilter(__FILE__, __LINE__, 'add_forced_ads_types', 'FORCED_AD_TYPE_DEFAULTS', FALSE, TRUE, isExtensionDryRun());
156 registerFilter(__FILE__, __LINE__, 'member_earning_table_data', 'FORCED_POPUP_TABLE_DATA', FALSE, TRUE, isExtensionDryRun());
157 registerFilter(__FILE__, __LINE__, 'post_change_forced_campaign_status', 'FORCED_CHANGE_CAMPAIGN_STATUS', FALSE, TRUE, isExtensionDryRun());
158 registerFilter(__FILE__, __LINE__, 'pre_change_forced_campaign_status', 'FORCED_CHANGE_CAMPAIGN_VALIDATE_DATA', FALSE, TRUE, isExtensionDryRun());
159 registerFilter(__FILE__, __LINE__, 'handle_click_php', 'HANDLE_FORCED_AD_CLICK', FALSE, TRUE, isExtensionDryRun());
160 registerFilter(__FILE__, __LINE__, 'handle_view_php', 'HANDLE_FORCED_AD_VIEW', FALSE, TRUE, isExtensionDryRun());
163 case 'remove': // Do stuff when removing extension
164 // SQL commands to run
165 addDropTableSql('forced_ads');
166 addDropTableSql('forced_network');
167 addDropTableSql('forced_campaigns');
168 addDropTableSql('forced_costs');
169 addDropTableSql('forced_stats');
172 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='forced'");
173 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what` LIKE '%forced%'");
175 // Is earning_data there?
176 if (ifSqlTableExists('earning_data')) {
177 // Unregister Forced-PopUps from earning_data
178 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_earning_data` WHERE `earning_provider`='FORCED_POPUP' LIMIT 1");
182 unregisterFilter(__FILE__, __LINE__, 'add_forced_ads_types', 'FORCED_AD_TYPE_DEFAULTS', TRUE, isExtensionDryRun());
183 unregisterFilter(__FILE__, __LINE__, 'member_earning_table_data', 'FORCED_POPUP_TABLE_DATA', TRUE, isExtensionDryRun());
184 unregisterFilter(__FILE__, __LINE__, 'post_change_forced_campaign_status', 'FORCED_CHANGE_CAMPAIGN_STATUS', TRUE, isExtensionDryRun());
185 unregisterFilter(__FILE__, __LINE__, 'pre_change_forced_campaign_status', 'FORCED_CHANGE_CAMPAIGN_VALIDATE_DATA', TRUE, isExtensionDryRun());
186 unregisterFilter(__FILE__, __LINE__, 'handle_click_php', 'HANDLE_FORCED_AD_CLICK', TRUE, isExtensionDryRun());
187 unregisterFilter(__FILE__, __LINE__, 'handle_view_php', 'HANDLE_FORCED_AD_VIEW', TRUE, isExtensionDryRun());
190 case 'activate': // Do stuff when admin activates this extension
191 // SQL commands to run
194 case 'deactivate': // Do stuff when admin deactivates this extension
195 // SQL commands to run
198 case 'update': // Update an extension
199 switch (getCurrentExtensionVersion()) {
200 case '0.0.1': // SQL queries for v0.0.1
203 // Update notes (these will be set as task text!)
204 setExtensionUpdateNotes('');
209 case 'modify': // When the extension got modified
212 case 'test': // For testing purposes
215 case 'init': // Do stuff when extension is initialized
218 default: // Unknown extension mode
219 reportBug(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));