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 'User bank accounts data');
83 addDropTableSql('bank_transfers');
84 addCreateTableSql('bank_transfers', "
85 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
86 `to_account_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
87 `from_account_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
88 `points_amount` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
89 `day_bookkeeping` CHAR(4) NOT NULL DEFAULT '0000',
90 `day_available` CHAR(4) NOT NULL DEFAULT '0000',
91 `transfer_purpose` TINYTEXT,
93 INDEX (`to_account_id`,`from_account_id`),
94 INDEX (`day_bookkeeping`,`day_available`)",
95 'Bank user->user transfers');
97 addDropTableSql('bank_packages');
98 addCreateTableSql('bank_packages', "
99 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
100 `title` VARCHAR(255) NOT NULL DEFAULT '',
101 `description` TINYTEXT,
102 `account_fee` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
103 `free_transfers` INT(7) UNSIGNED NOT NULL DEFAULT 0,
104 `transfer_fee` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
105 `available` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
106 `output_system_mode` ENUM('LOGIN','EMAIL','DISABLED'),
107 `package_active` ENUM('Y','N') NOT NULL DEFAULT 'N',
108 `free_months_no_fee` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
109 `interest_plus` FLOAT(7,5) UNSIGNED NOT NULL DEFAULT 0.00000,
110 `interest_minus` FLOAT(7,5) UNSIGNED NOT NULL DEFAULT 0.00000,
111 `first_payment` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
112 `free_account_income` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
113 `free_account_stuff` TINYTEXT null,
114 `tan_lock` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
116 'Bank account packages');
118 // Free_account_stuff will be a list of columns of the table _bank_packages
119 // what the member shall get for the specified income. output_system_mode
120 // must be extended with the mode you get for free: output_system_mode:LOGIN
121 // should be fine. More than one entry and not DISABLED ;) are not supported.
122 addDropTableSql('bank_tanlist');
123 addCreateTableSql('bank_tanlist', "
124 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
125 `idx` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
126 `account_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
127 `tan` VARCHAR(50) NOT NULL DEFAULT '',
128 `used` ENUM('Y','N') NOT NULL DEFAULT 'N',
130 UNIQUE (`account_id`,`tan`)",
131 'Bank TAN lists per user');
133 // Admin menu queries
134 addAdminMenuSql('bank', NULL, 'Bank-Accounts', 'Verwalten Sie hier alle Bank-Accounts Ihrer Mitglieder, sowie Angebotspakete und Überweisungen.', 6);
135 addAdminMenuSql('bank', 'add_bank_package', 'Angebotspaket hinzufügen', 'Neues Angebotspaket erstellen.', 1);
136 addAdminMenuSql('bank', 'list_bank_package', 'Angebotspakete auflisten', 'Listet alle erstellten Angebotspakete auf.', 2);
137 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);
138 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);
139 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);
140 addAdminMenuSql('bank', 'add_bank_account', 'Konto anlegen', 'Legen Sie hier Konten für die Mitglieder an (falls Ihre Mitglieder nicht zurecht kommen).', 6);
141 addAdminMenuSql('bank', 'list_bank_account', 'Konten auflisten', 'Auflistung aller Konto oder eines auswählbaren Mitglieds.', 7);
142 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);
143 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);
144 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);
145 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);
146 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);
147 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);
150 addMemberMenuSql('bank', NULL, 'Bank-Account', 3);
151 addMemberMenuSql('bank', 'bank_infos', 'Angebotspakete', 1);
152 addMemberMenuSql('bank', 'bank_create', 'Konto anlegen', 2);
153 addMemberMenuSql('bank', 'bank_deposit', 'Auf Konto einzahlen', 3);
154 addMemberMenuSql('bank', 'bank_withdraw', 'Vom Konto abheben', 4);
155 addMemberMenuSql('bank', 'bank_output', 'Kontoauszug', 5);
156 addMemberMenuSql('bank', 'bank_change', 'Paket wechseln', 6);
157 addMemberMenuSql('bank', 'bank_remove', 'Konto Kündigen', 7);
160 case 'remove': // Do stuff when removing extension
161 // SQL commands to run
162 addDropTableSql('bank_accounts');
163 addDropTableSql('bank_transfers');
164 addDropTableSql('bank_packages');
165 addDropTableSql('bank_tanlist');
166 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='bank'");
167 addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `action`='bank'");
170 case 'activate': // Do stuff when admin activates this extension
171 // SQL commands to run
172 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y', `locked`='N' WHERE `action`='bank' LIMIT 8");
175 case 'deactivate': // Do stuff when admin deactivates this extension
176 // SQL commands to run
177 addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='N', `locked`='Y' WHERE `action`='bank' LIMIT 8");
180 case 'update': // Update an extension
181 switch (getCurrentExtensionVersion()) {
182 case '0.0.1': // SQL queries for v0.0.1
185 // Update notes (these will be set as task text!)
186 setExtensionUpdateNotes('');
191 case 'modify': // When the extension got modified
194 case 'test': // For testing purposes
197 case 'init': // Do stuff when extension is initialized
200 default: // Unknown extension mode
201 logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));