Moved to contrib/ in preperation for merge
[mailer.git] / contrib / ideas / ext-shop.php
diff --git a/contrib/ideas/ext-shop.php b/contrib/ideas/ext-shop.php
new file mode 100644 (file)
index 0000000..4bc6f03
--- /dev/null
@@ -0,0 +1,315 @@
+<?php
+/************************************************************************
+ * Mailer-Project 0.2.1-FINAL                         Start: 06/04/2004 *
+ * ==========================                   Last change: 08/08/2004 *
+ *                                                                      *
+ * -------------------------------------------------------------------- *
+ * File              : ext-shop.php                                     *
+ * -------------------------------------------------------------------- *
+ * Short description : Shop system with referal and reseller programs   *
+ * -------------------------------------------------------------------- *
+ * Kurzbeschreibung  : Shop-System mit Referal- und Reseller-Programmen *
+ * -------------------------------------------------------------------- *
+ *                                                                      *
+ * -------------------------------------------------------------------- *
+ * $Revision::                                                        $ *
+ * $Date::                                                            $ *
+ * $Tag:: 0.2.1-FINAL                                                 $ *
+ * $Author::                                                          $ *
+ * -------------------------------------------------------------------- *
+ * Copyright (c) 2003 - 2009 by Roland Haeder                           *
+ * Copyright (c) 2009 - 2011 by Mailer Developer Team                   *
+ * For more information visit: http://www.mxchange.org                  *
+ *                                                                      *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or    *
+ * (at your option) any later version.                                  *
+ *                                                                      *
+ * This program is distributed in the hope that it will be useful,      *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
+ * GNU General Public License for more details.                         *
+ *                                                                      *
+ * You should have received a copy of the GNU General Public License    *
+ * along with this program; if not, write to the Free Software          *
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
+ * MA  02110-1301  USA                                                  *
+ ************************************************************************/
+
+// Some security stuff...
+if (!defined('__SECURITY')) {
+       exit();
+} // END - if
+
+// Version number
+setThisExtensionVersion('0.0.0');
+
+// Version history array (add more with , '0.1' and so on)
+setExtensionVersionHistory(array('0.0.0'));
+
+// This extension is in development (non-productive)
+enableExtensionProductive(false);
+
+switch (getExtensionMode()) {
+       case 'register': // Do stuff when installtion is running
+               // Create tables
+               addDropTableSql('shop_config');
+               addCreateTableSql('shop_config', "
+`config` TINYINT(1) UNSIGNED NOT NULL AUTO_INCREMENT,
+`allow_item_history` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`allow_item_gallery` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`allow_votes` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`allow_vote_comments` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`allow_save_search` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`allow_points_system` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`enable_reseller` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`enable_search` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`enable_member_preview` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`shop_title` VARCHAR(255) NOT NULL DEFAULT '{?MAIN_TITLE?} Shop',
+`points_ref` BIGINT(20) UNSIGNED NOT NULL DEFAULT '100',
+`num_preview_guest` TINYINT(4) UNSIGNED NOT NULL DEFAULT '3',
+`num_preview_member` TINYINT(4) UNSIGNED NOT NULL DEFAULT '3',
+`show_links_num` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+PRIMARY KEY (`config`)",
+                       'Shop configuration data');
+
+               addExtensionSql("INSERT INTO {?_MYSQL_PREFIX?}_shop_config (`config`) VALUES (0)");
+
+               addDropTableSql('shop_basket');
+               addCreateTableSql('shop_basket', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`item_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`customer_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`guest_session` VARCHAR(32) NOT NULL DEFAULT '',
+`amount` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+INDEX (`item_id`),
+INDEX (`customer_id`),
+PRIMARY KEY (`id`)",
+                       'Shopping baskets');
+
+               addDropTableSql('shop_cats');
+               addCreateTableSql('shop_cats', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`parent_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`active` ENUM('Y','N') NOT NULL DEFAULT 'N',
+`title` VARCHAR(255) NOT NULL DEFAULT '',
+`short_descr` MEDIUMTEXT,
+`long_descr` LONGTEXT,
+`cat_icon` VARCHAR(255),
+`counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`show_links_num` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+INDEX (`parent_id`),
+PRIMARY KEY (`id`)",
+                       'Shopping categories');
+
+               addDropTableSql('shop_items');
+               addCreateTableSql('shop_items', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`catid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`required_by` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`suggested_by` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`active` ENUM('Y','N') NOT NULL DEFAULT 'N',
+`title` VARCHAR(255) NOT NULL DEFAULT '',
+`version_no` VARCHAR(255) NOT NULL DEFAULT '',
+`licence` VARCHAR(255) NOT NULL DEFAULT '',
+`default_price` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`short_descr` MEDIUMTEXT,
+`long_descr` LONGTEXT,
+`item_icon` VARCHAR(255) NOT NULL DEFAULT 0,
+`item_created` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
+`item_amount` BIGINT(20) UNSIGNED NOT NULL DEFAULT '-1',
+`admin_created` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`admin_unlock` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`tax_type` VARCHAR(255) NOT NULL DEFAULT '',
+`tax_rate` INT(3) UNSIGNED NOT NULL DEFAULT 0,
+`counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`point_costs` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`point_earned` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+INDEX (`suggested_by`),
+INDEX (`required_by`),
+INDEX (`admin_unlock`),
+INDEX (`admin_created`),
+INDEX (`default_price`),
+INDEX (`catid`),
+PRIMARY KEY (`id`)",
+                       'Shop items');
+
+               addDropTableSql('shop_item_gallery');
+               addCreateTableSql('shop_item_gallery', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`item_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`item_pic_url` VARCHAR(255) NOT NULL DEFAULT '',
+`item_pic_descr` MEDIUMTEXT,
+`is_private` ENUM('Y','N') NOT NULL DEFAULT 'N',
+`counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+INDEX (`item_id`),
+PRIMARY KEY (`id`)",
+                       'Optional item gallery');
+
+               addDropTableSql('shop_item_votes');
+               addCreateTableSql('shop_item_votes', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`item_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`vote_value` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+INDEX (`item_id`),
+PRIMARY KEY (`id`)",
+                       'Votings on the items');
+
+               addDropTableSql('shop_customers');
+               addCreateTableSql('shop_customers', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`reseller_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`salut` ENUM('M','F') NOT NULL DEFAULT 'M',
+`company` VARCHAR(255) NOT NULL DEFAULT '',
+`surname` VARCHAR(255) NOT NULL DEFAULT '',
+`family` VARCHAR(255) NOT NULL DEFAULT '',
+`street_nr` VARCHAR(255) NOT NULL DEFAULT '',
+`street_nr2` VARCHAR(255) NOT NULL DEFAULT '',
+`zip` VARCHAR(7) NOT NULL DEFAULT '',
+`city` VARCHAR(255) NOT NULL DEFAULT '',
+`country` VARCHAR(2) NOT NULL DEFAULT 'DE',
+`email` VARCHAR(255) NOT NULL DEFAULT '',
+`phone` VARCHAR(255) NOT NULL DEFAULT '',
+`fax` VARCHAR(255) NOT NULL DEFAULT '',
+`b_surname` VARCHAR(255) NOT NULL DEFAULT '',
+`b_family` VARCHAR(255) NOT NULL DEFAULT '',
+`b_street_nr` VARCHAR(255) NOT NULL DEFAULT '',
+`b_street_nr2` VARCHAR(255) NOT NULL DEFAULT '',
+`b_zip` VARCHAR(7) NOT NULL DEFAULT '',
+`b_city` VARCHAR(255) NOT NULL DEFAULT '',
+`b_country` VARCHAR(2) NOT NULL DEFAULT 'DE',
+`b_email` VARCHAR(255) NOT NULL DEFAULT '',
+`b_phone` VARCHAR(255) NOT NULL DEFAULT '',
+`b_fax` VARCHAR(255) NOT NULL DEFAULT '',
+`joined` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
+`updated` TIMESTAMP NULL DEFAULT NULL,
+`status` ENUM('UNCONFIRMED','CONFIRMED','LOCKED') NOT NULL DEFAULT 'UNCONFIRMED',
+`unlock_key` VARCHAR(255) NULL NULL,
+`points_amount` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+INDEX (`reseller_id`),
+UNIQUE KEY (`unlock_key`),
+PRIMARY KEY (`id`)",
+                       'Shop customer data');
+
+               addDropTableSql('shop_resellers');
+               addCreateTableSql('shop_resellers', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`reseller_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`salut` ENUM('M','F') NOT NULL DEFAULT 'M',
+`company` VARCHAR(255) NOT NULL DEFAULT '',
+`surname` VARCHAR(255) NOT NULL DEFAULT '',
+`family` VARCHAR(255) NOT NULL DEFAULT '',
+`street_nr` VARCHAR(255) NOT NULL DEFAULT '',
+`street_nr2` VARCHAR(255) NOT NULL DEFAULT '',
+`zip` VARCHAR(7) NOT NULL DEFAULT '',
+`city` VARCHAR(255) NOT NULL DEFAULT '',
+`country` VARCHAR(2) NOT NULL DEFAULT 'DE',
+`email` VARCHAR(255) NOT NULL DEFAULT '',
+`phone` VARCHAR(255) NOT NULL DEFAULT '',
+`fax` VARCHAR(255) NOT NULL DEFAULT '',
+`joined` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
+`updated` TIMESTAMP NULL DEFAULT NULL,
+`status` ENUM('UNCONFIRMED','CONFIRMED','LOCKED') NOT NULL DEFAULT 'UNCONFIRMED',
+`unlock_key` VARCHAR(255) NULL NULL,
+INDEX (`reseller_id`),
+UNIQUE KEY (`unlock_key`),
+PRIMARY KEY (`id`)",
+                       'Shop reseller data');
+
+               addDropTableSql('shop_saved_searches');
+               addCreateTableSql('shop_saved_searches', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`customer_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`reseller_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`timestamp` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
+`catid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`search_words` VARCHAR(255) NOT NULL DEFAULT '',
+INDEX (`catid`),
+INDEX (`customer_id`),
+INDEX (`reseller_id`),
+PRIMARY KEY (`id`)",
+                       'Saved shop searched for customers and resellers');
+
+               addDropTableSql('shop_price_types');
+               addCreateTableSql('shop_price_types', "
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`price_type` VARCHAR(255) NOT NULL DEFAULT '',
+`rate` FLOAT (20,5) NOT NULL DEFAULT '0.0000',
+PRIMARY KEY (`id`)",
+                       'Shop prices');
+
+               // Add admin menu system
+               addAdminMenuSql('shop', NULL, 'Shop-Verwaltung', 'Stellen Sie hier alles am Shop-System ein. Hier k&ouml;nnen Sie auch die Kunden verwalten.', '6');
+               addAdminMenuSql('shop', 'config_shop', 'Shop-Einstellungen', 'Allgemeine Einstellungen zum Shop.', 1);
+               addAdminMenuSql('shop', 'add_shop_cat', 'Warenkategorien hinzuf&uuml;gen', 'Neue Warenkategorien hinzuf&uuml;gen.', 2);
+               addAdminMenuSql('shop', 'edit_shop_cat', 'Warenkategorien &auml;ndern', 'Bestehende Warenkategorien &auml;ndern.', 3);
+               addAdminMenuSql('shop', 'add_shop_items', 'Neue Ware hinzuf&uuml;gen', 'Neue Waren in die Warenkategorien einsortieren.', 5);
+               addAdminMenuSql('shop', 'edit_shop_items', 'Ware &auml;ndern', 'Bestehende Ware &auml;ndern oder verschieben.', 6);
+               addAdminMenuSql('shop', 'add_shop_ptypes', 'Buchungspaket hinzuf&uuml;gen', 'F&uuml;gen Sie eine Bezahlungalternative zum direkten Geld hinzu. Beispiele: Klammlose, MyPoints, Wedis, usw.', 8);
+               addAdminMenuSql('shop', 'edit_shop_ptypes', 'Buchungspaket &auml;ndern', 'Bestehende Buchungspakete &auml;ndern.', 9);
+               addAdminMenuSql('shop', 'import_shop_ptyes', 'Import Buchungspakete', 'Importieren Sie bei installierter payout-Erweiterung die bestehenden Auszahlungsarten als Buchungspakete! Banner-Auszahlungsarten werden dabei ignoriert.', 11);
+
+               // Add guest and member menu entries (just redirects)
+               addGuestMenuSql('main', 'shop', 'Zum Shop...', 'Y', 'Y', 7);
+               addMemberMenuSql('main', 'shop', 'Zum Shop...', 'Y', 'Y', 7);
+               break;
+
+       case 'remove': // Do stuff when removing extension
+               // SQL commands to run
+               addDropTableSql('shop_basket');
+               addDropTableSql('shop_config');
+               addDropTableSql('shop_cats');
+               addDropTableSql('shop_items');
+               addDropTableSql('shop_item_gallery');
+               addDropTableSql('shop_item_votes');
+               addDropTableSql('shop_saved_searches');
+               addDropTableSql('shop_customers');
+               addDropTableSql('shop_resellers');
+               addDropTableSql('shop_price_types');
+
+               // Admin / guest / member menu
+               addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='shop' LIMIT 12");
+               addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_guest_menu` WHERE `what`='shop' LIMIT 1");
+               addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what`='shop' LIMIT 1");
+               break;
+
+       case 'activate': // Do stuff when admin activates this extension
+               // SQL commands to run
+               addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_guest_menu` SET `visible`='Y', `locked`='N' WHERE `what`='shop' LIMIT 1");
+               addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y', `locked`='N' WHERE `what`='shop' LIMIT 1");
+               break;
+
+       case 'deactivate': // Do stuff when admin deactivates this extension
+               // SQL commands to run
+               addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_guest_menu` SET `visible`='Y', `locked`='Y' WHERE `what`='shop' LIMIT 1");
+               addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `visible`='Y', `locked`='Y' WHERE `what`='shop' LIMIT 1");
+               break;
+
+       case 'update': // Update an extension
+               switch (getCurrentExtensionVersion()) {
+                       case '0.0.1': // SQL queries for v0.0.1
+                               addExtensionSql('');
+
+                               // Update notes (these will be set as task text!)
+                               setExtensionUpdateNotes('');
+                               break;
+               } // END - switch
+               break;
+
+       case 'modify': // When the extension got modified
+               break;
+
+       case 'test': // For testing purposes
+               break;
+
+       case 'init': // Do stuff when extension is initialized
+               break;
+
+       default: // Unknown extension mode
+               logDebugMessage(__FILE__, __LINE__, sprintf("Unknown extension mode %s in extension %s detected.", getExtensionMode(), getCurrentExtensionName()));
+               break;
+} // END - switch
+
+// [EOF]
+?>