2 /************************************************************************
3 * Mailer v0.2.1-FINAL Start: 05/28/2007 *
4 * =================== Last change: 05/31/2007 *
6 * -------------------------------------------------------------------- *
7 * File : ext-bank.php *
8 * -------------------------------------------------------------------- *
9 * Short description : A little bank account *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Ein einfaches Bankaccount *
12 * -------------------------------------------------------------------- *
15 * $Tag:: 0.2.1-FINAL $ *
17 * -------------------------------------------------------------------- *
18 * Copyright (c) 2003 - 2009 by Roland Haeder *
19 * Copyright (c) 2009 - 2011 by Mailer Developer Team *
20 * For more information visit: http://www.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 'register': // Do stuff when installation is running
54 // SQL commands to run
55 addDropTableSql('bank_accounts');
56 addCreateTableSql('bank_accounts', "(
57 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
58 `userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
59 `account_created` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
60 `account_locked` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
61 `locked_reason` TINYTEXT,
62 `status` ENUM('NEW','ACTIVE','LOCKED') NOT NULL DEFAULT 'NEW',
63 `account_balance` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
64 `output_mode` ENUM('LOGIN','EMAIL','DISABLED'),
65 `pin` VARCHAR(50) NOT NULL DEFAULT '',
66 `tan_mode` ENUM('NORMAL','INDEXED'),
67 `tan_list_status` ENUM('PENDING','ACTIVE','INVALID','LOCKED') NOT NULL DEFAULT 'PENDING',
68 `tan_key` VARCHAR(50) NOT NULL DEFAULT '',
69 `month_transfered` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
70 `last_tan` VARCHAR(5) NOT NULL DEFAULT '00000',
71 `last_tan_stamp` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
72 `last_tan_purpose` TINYTEXT,
73 `account_type` ENUM('CHECK','SAVING') NOT NULL DEFAULT 'CHECK',
74 `overdraft_credit` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
77 INDEX `userid_type` (`userid`, `account_type`),
78 INDEX (`account_created`),
79 INDEX (`account_locked`),
80 INDEX (`last_tan_stamp`)
81 ) ENGINE = {?_TABLE_TYPE?} CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'User bank accounts data'");
82 addDropTableSql('bank_transfers');
83 addCreateTableSql('bank_transfers', "(
84 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
85 `to_account_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
86 `from_account_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
87 `points_amount` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
88 `day_bookkeeping` CHAR(4) NOT NULL DEFAULT '0000',
89 `day_available` CHAR(4) NOT NULL DEFAULT '0000',
90 `transfer_purpose` TINYTEXT,
92 INDEX (`to_account_id`, `from_account_id`),
93 INDEX (`day_bookkeeping`, `day_available`)
94 ) ENGINE = {?_TABLE_TYPE?} CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Bank user->user transfers'");
95 addDropTableSql('bank_packages');
96 addCreateTableSql('bank_packages', "(
97 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
98 `title` VARCHAR(255) NOT NULL DEFAULT '',
99 `description` TINYTEXT,
100 `account_fee` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
101 `free_transfers` INT(7) UNSIGNED NOT NULL DEFAULT 0,
102 `transfer_fee` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
103 `available` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
104 `output_system_mode` ENUM('LOGIN','EMAIL','DISABLED'),
105 `package_active` ENUM('Y','N') NOT NULL DEFAULT 'N',
106 `free_months_no_fee` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
107 `interest_plus` FLOAT(7,5) UNSIGNED NOT NULL DEFAULT 0.00000,
108 `interest_minus` FLOAT(7,5) UNSIGNED NOT NULL DEFAULT 0.00000,
109 `first_payment` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
110 `free_account_income` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
111 `free_account_stuff` TINYTEXT null,
112 `tan_lock` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
114 ) ENGINE = {?_TABLE_TYPE?} CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Bank account packages'");
115 // Free_account_stuff will be a list of columns of the table _bank_packages
116 // what the member shall get for the specified income. output_system_mode
117 // must be extended with the mode you get for free: output_system_mode:LOGIN
118 // should be fine. More than one entry and not DISABLED ;) are not supported.
119 addDropTableSql('bank_tanlist');
120 addCreateTableSql('bank_tanlist', "(
121 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
122 `idx` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
123 `account_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
124 `tan` VARCHAR(50) NOT NULL DEFAULT '',
125 `used` ENUM('Y','N') NOT NULL DEFAULT 'N',
127 UNIQUE (`account_id`, `tan`)
128 ) ENGINE = {?_TABLE_TYPE?} CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Bank TAN lists per user'");
130 // Admin menu queries
131 addAdminMenuSql('bank', NULL, 'Bank-Accounts', 'Verwalten Sie hier alle Bank-Accounts Ihrer Mitglieder, sowie Angebotspakete und Überweisungen.', 6);
132 addAdminMenuSql('bank', 'add_bank_package', 'Angebotspaket hinzufügen', 'Neues Angebotspaket erstellen.', 1);
133 addAdminMenuSql('bank', 'list_bank_package', 'Angebotspakete auflisten', 'Listet alle erstellten Angebotspakete auf.', 2);
134 addAdminMenuSql('bank', 'edit_bank_package', 'Angebotspaket ändern', 'Nach Auswahl eines Angebotspaketes können Sie dieses hier verändern. Bitte beachten Sie, dass Ihre Mitglieder keine Mail dabei erhalten!', 3);
135 addAdminMenuSql('bank', 'lock_bank_package', 'Angebotspaket ent-/sperren', 'Nehmen Sie Angebotspakete zur temporären Überarbeitung zuvor heraus, dann können Sie in Ruhe drüber nachdenken und Berechnungen anstellen. Freigabe ist hier auch möglich.', 4);
136 addAdminMenuSql('bank', 'del_bank_package', 'Angebotspaket löschen', 'Nach Auswahl eines Angebotspaketes können Sie mit abschliessender Bestätigung Angebotspakete ganz löschen. Bitte beachten Sie, dass dies nur möglich ist, wenn auch alle Accounts dieses nicht mehr nutzen!', 5);
137 addAdminMenuSql('bank', 'add_bank_account', 'Konto anlegen', 'Legen Sie hier Konten für die Mitglieder an (falls Ihre Mitglieder nicht zurecht kommen).', 6);
138 addAdminMenuSql('bank', 'list_bank_account', 'Konten auflisten', 'Auflistung aller Konto oder eines auswählbaren Mitglieds.', 7);
139 addAdminMenuSql('bank', 'edit_bank_account', 'Konto ändern', 'Ändern Sie hier bestehende Konten, z.B. den Dispositionskredit usw. PINs und TANs sind hier nicht änderbar! Bestätigungsmails sind optional versendbar.', 8);
140 addAdminMenuSql('bank', 'lock_bank_account', 'Konto ent-/sperren', 'Sperren Sie hier Konten bei Bedarf. Auch das Freischalten ist hier möglich. Eine Benachrichtigung per Mail wird dann an das Mitglied ausgesendet.', 9);
141 addAdminMenuSql('bank', 'del_bank_account', 'Konto löschen', 'Löschen von Konten mit Bestätigungsmail. Wenn Sie ein Mitglieder-Account löschen, so müssen Sie derzeit seine angelegten Konten auch löschen!', 10);
142 addAdminMenuSql('bank', 'send_bank_tanlist', 'TAN-Liste aussenden', 'Listet zuerst Anfragen von Mitgliedern auf, die eine neue (i)TAN-Liste benötigen, anschliessend kann die Liste dann ausgesendet werden.', 11);
143 addAdminMenuSql('bank', 'lock_bank_tanlist', 'TAN-Liste ent-/sperren', 'Bestehende TAN-Listen können auf Kundenwunsch hin gesperrt und wieder entsperrt werden. Dies passiert auch, wenn der Kunde x-mal (siehe Angebotspakete) eine verkehrte TAN eingegeben hat. Einzelne TANs sind nicht ent-/sperrbar.', 12);
144 addAdminMenuSql('bank', 'list_bank_trans', 'Überweisungen auflisten', 'Nach Auswahl eines Mitgliedes und einem Konto (benötgt JavaScript!) können Sie seitenweise die Überweisungen durchschauen.', 13);
147 addMemberMenuSql('bank', NULL, 'Bank-Account', 'N', 'Y', 3);
148 addMemberMenuSql('bank', 'bank_infos', 'Angebotspakete', 'N', 'Y', 1);
149 addMemberMenuSql('bank', 'bank_create', 'Konto anlegen', 'N', 'Y', 2);
150 addMemberMenuSql('bank', 'bank_deposit', 'Auf Konto einzahlen', 'N', 'Y', 3);
151 addMemberMenuSql('bank', 'bank_withdraw', 'Vom Konto abheben', 'N', 'Y', 4);
152 addMemberMenuSql('bank', 'bank_output', 'Kontoauszug', 'N', 'Y', 5);
153 addMemberMenuSql('bank', 'bank_change', 'Paket wechseln', 'N', 'Y', 6);
154 addMemberMenuSql('bank', 'bank_remove', 'Konto Kündigen', 'N', 'Y', 7);
157 case 'remove': // Do stuff when removing extension
158 // SQL commands to run
159 addDropTableSql('bank_accounts');
160 addDropTableSql('bank_transfers');
161 addDropTableSql('bank_packages');
162 addDropTableSql('bank_tanlist');
163 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='bank'");
164 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `action`='bank'");
167 case 'activate': // Do stuff when admin activates this extension
168 // SQL commands to run
169 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y', `locked`='N' WHERE `action`='bank' LIMIT 8");
172 case 'deactivate': // Do stuff when admin deactivates this extension
173 // SQL commands to run
174 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='N', `locked`='Y' WHERE `action`='bank' LIMIT 8");
177 case 'update': // Update an extension
178 switch (getCurrentExtensionVersion()) {
179 case '0.0.1': // SQL queries for v0.0.1
182 // Update notes (these will be set as task text!)
183 setExtensionUpdateNotes('');
188 case 'modify': // When the extension got modified
191 case 'test': // For testing purposes
194 case 'init': // Do stuff when extension is initialized
197 default: // Unknown extension mode
198 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));