本文整理汇总了PHP中Cx\Lib\UpdateUtil::drop_table方法的典型用法代码示例。如果您正苦于以下问题:PHP UpdateUtil::drop_table方法的具体用法?PHP UpdateUtil::drop_table怎么用?PHP UpdateUtil::drop_table使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Cx\Lib\UpdateUtil
的用法示例。
在下文中一共展示了UpdateUtil::drop_table方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: _marketUpdate
/**
* Cloudrexx
*
* @link http://www.cloudrexx.com
* @copyright Cloudrexx AG 2007-2015
*
* According to our dual licensing model, this program can be used either
* under the terms of the GNU Affero General Public License, version 3,
* or under a proprietary license.
*
* The texts of the GNU Affero General Public License with an additional
* permission and of our proprietary license can be found at and
* in the LICENSE file you have received along with this program.
*
* 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 Affero General Public License for more details.
*
* "Cloudrexx" is a registered trademark of Cloudrexx AG.
* The licensing of the program under the AGPLv3 does not imply a
* trademark license. Therefore any rights, title and interest in
* our trademarks remain entirely with us.
*/
function _marketUpdate()
{
global $objDatabase, $_ARRAYLANG;
$query = "SELECT id FROM " . DBPREFIX . "module_market_settings WHERE name='codeMode'";
$objCheck = $objDatabase->SelectLimit($query, 1);
if ($objCheck !== false) {
if ($objCheck->RecordCount() == 0) {
$query = "INSERT INTO `" . DBPREFIX . "module_market_settings` ( `id` , `name` , `value` , `description` , `type` )\n VALUES ( NULL , 'codeMode', '1', 'TXT_MARKET_SET_CODE_MODE', '2')";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
} else {
return _databaseError($query, $objDatabase->ErrorMsg());
}
$arrColumns = $objDatabase->MetaColumns(DBPREFIX . 'module_market_mail');
if ($arrColumns === false) {
setUpdateMsg(sprintf($_ARRAYLANG['TXT_UNABLE_GETTING_DATABASE_TABLE_STRUCTURE'], DBPREFIX . 'module_market_mail'));
return false;
}
if (!isset($arrColumns['MAILTO'])) {
$query = "ALTER TABLE `" . DBPREFIX . "module_market_mail` ADD `mailto` VARCHAR( 10 ) NOT NULL AFTER `content`";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
/*****************************************************************
* EXTENSION: New attributes 'color' and 'sort_id' for entries *
* ADDED: Contrexx v2.1.0 *
*****************************************************************/
$arrColumns = $objDatabase->MetaColumns(DBPREFIX . 'module_market');
if ($arrColumns === false) {
setUpdateMsg(sprintf($_ARRAYLANG['TXT_UNABLE_GETTING_DATABASE_TABLE_STRUCTURE'], DBPREFIX . 'module_market'));
return false;
}
if (!isset($arrColumns['SORT_ID'])) {
$query = "ALTER TABLE `" . DBPREFIX . "module_market` ADD `sort_id` INT( 4 ) NOT NULL DEFAULT '0' AFTER `paypal`";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
if (!isset($arrColumns['COLOR'])) {
$query = "ALTER TABLE `" . DBPREFIX . "module_market` ADD `color` VARCHAR(50) NOT NULL DEFAULT '' AFTER `description`";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
try {
// delete obsolete table contrexx_module_market_access
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_market_access');
\Cx\Lib\UpdateUtil::table(DBPREFIX . 'module_market_spez_fields', array('id' => array('type' => 'INT(5)', 'notnull' => true, 'auto_increment' => true, 'primary' => true), 'name' => array('type' => 'VARCHAR(100)'), 'value' => array('type' => 'VARCHAR(100)'), 'type' => array('type' => 'INT(1)', 'notnull' => true, 'default' => '1'), 'lang_id' => array('type' => 'INT(2)', 'notnull' => true, 'default' => '0'), 'active' => array('type' => 'INT(1)', 'notnull' => true, 'default' => '0')));
} catch (\Cx\Lib\UpdateException $e) {
DBG::trace();
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
return true;
}
示例2: _auctionUpdate
/**
* Cloudrexx
*
* @link http://www.cloudrexx.com
* @copyright Cloudrexx AG 2007-2015
*
* According to our dual licensing model, this program can be used either
* under the terms of the GNU Affero General Public License, version 3,
* or under a proprietary license.
*
* The texts of the GNU Affero General Public License with an additional
* permission and of our proprietary license can be found at and
* in the LICENSE file you have received along with this program.
*
* 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 Affero General Public License for more details.
*
* "Cloudrexx" is a registered trademark of Cloudrexx AG.
* The licensing of the program under the AGPLv3 does not imply a
* trademark license. Therefore any rights, title and interest in
* our trademarks remain entirely with us.
*/
function _auctionUpdate()
{
try {
// delete obsolete table contrexx_module_auction_access
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_auction_access');
} catch (\Cx\Lib\UpdateException $e) {
// we COULD do something else here..
DBG::trace();
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
return true;
}
示例3: errorHandler
//.........这里部分代码省略.........
\Cx\Core\Setting\Controller\Setting::add('email_confirmation', 'no-reply@comvation.com', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('company', 'Comvation AG', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('address', 'Burgstrasse 20', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('country_id', 204, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('telephone', '+4133 2266000', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('fax', '+4133 2266001', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_number', '12345678', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_enabled_foreign_customer', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_enabled_foreign_reseller', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_enabled_home_customer', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_enabled_home_reseller', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_included_foreign_customer', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_included_foreign_reseller', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_included_home_customer', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_included_home_reseller', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_default_id', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('vat_other_id', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('weight_enable', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('show_products_default', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('product_sorting', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_DROPDOWN, '0:TXT_SHOP_PRODUCT_SORTING_ALPHABETIC,' . '1:TXT_SHOP_PRODUCT_SORTING_INDIVIDUAL,' . '2:TXT_SHOP_PRODUCT_SORTING_PRODUCTCODE', 'config');
\Cx\Core\Setting\Controller\Setting::add('thumbnail_max_width', 140, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('thumbnail_max_height', 140, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('thumbnail_quality', 90, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('saferpay_id', '1234', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('saferpay_active', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('saferpay_use_test_account', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('saferpay_finalize_payment', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('saferpay_window_option', 2, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('paypal_active', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('paypal_account_email', 'no-reply@comvation.com', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('paypal_default_currency', 'CHF', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
// Also see Yellowpay.class
\Cx\Core\Setting\Controller\Setting::add('payrexx_instance_name', 'Instanz Name', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT);
\Cx\Core\Setting\Controller\Setting::add('payrexx_api_secret', 'API Secret', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT);
\Cx\Core\Setting\Controller\Setting::add('payrexx_active', '0', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_CHECKBOX, '1');
\Cx\Core\Setting\Controller\Setting::add('postfinance_shop_id', 'Ihr Kontoname', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT);
\Cx\Core\Setting\Controller\Setting::add('postfinance_active', '0', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_CHECKBOX, '1');
\Cx\Core\Setting\Controller\Setting::add('postfinance_authorization_type', 'SAL', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_DROPDOWN, 'RES:Reservation,SAL:Verkauf');
// OBSOLETE
// As it appears that in_array(0, $array) is true for each non-empty
// $array, indices for the entries must be numbered starting at 1.
// $arrPayments = array();
// foreach (self::$arrKnownPaymentMethod as $index => $name) {
// $arrPayments[$index] = $name;
// }
// \Cx\Core\Setting\Controller\Setting::add('postfinance_accepted_payment_methods', '', ++$i,
// \Cx\Core\Setting\Controller\Setting::TYPE_CHECKBOXGROUP,
// \Cx\Core\Setting\Controller\Setting::joinValues($arrPayments));
\Cx\Core\Setting\Controller\Setting::add('postfinance_hash_signature_in', 'Mindestens 16 Buchstaben, Ziffern und Zeichen', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT);
\Cx\Core\Setting\Controller\Setting::add('postfinance_hash_signature_out', 'Mindestens 16 Buchstaben, Ziffern und Zeichen', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT);
\Cx\Core\Setting\Controller\Setting::add('postfinance_use_testserver', '1', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_CHECKBOX, '1');
\Cx\Core\Setting\Controller\Setting::add('postfinance_mobile_webuser', '1234', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('postfinance_mobile_sign', 'geheimer_schlüssel', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('postfinance_mobile_ijustwanttotest', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('postfinance_mobile_status', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('datatrans_merchant_id', '1234', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('datatrans_active', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('datatrans_request_type', 'CAA', ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('datatrans_use_testserver', 1, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('payment_lsv_active', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
// New for V3.0
// Disable jsCart by default.
$useJsCart = '0';
// Activate it in case it was activated in config/configuration.php
if (isset($_CONFIGURATION['custom']['shopJsCart']) && $_CONFIGURATION['custom']['shopJsCart']) {
$useJsCart = '1';
}
\Cx\Core\Setting\Controller\Setting::add('use_js_cart', $useJsCart, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_CHECKBOX);
// Disable shopnavbar on other pages by default.
$shopnavbar = '0';
// Activate it in case it was activated in config/configuration.php
if (isset($_CONFIGURATION['custom']['shopnavbar']) && $_CONFIGURATION['custom']['shopnavbar']) {
$shopnavbar = '1';
}
\Cx\Core\Setting\Controller\Setting::add('shopnavbar_on_all_pages', $shopnavbar, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_CHECKBOX);
// New for v3.1.0
\Cx\Core\Setting\Controller\Setting::add('orderitems_amount_min', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
// New for v2.2(?)
\Cx\Core\Setting\Controller\Setting::add('orderitems_amount_max', 0, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
// New for v2.3
\Cx\Core\Setting\Controller\Setting::add('register', ShopLibrary::REGISTER_MANDATORY, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_DROPDOWN, \Cx\Core\Setting\Controller\Setting::joinValues(array(ShopLibrary::REGISTER_MANDATORY, ShopLibrary::REGISTER_OPTIONAL, ShopLibrary::REGISTER_NONE)), 'config');
\Cx\Core\Setting\Controller\Setting::add('numof_products_per_page_frontend', 25, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('history_maximum_age_days', 730, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('numof_orders_per_page_frontend', 10, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('numof_orders_per_page_backend', 25, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('numof_customers_per_page_backend', 25, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('numof_manufacturers_per_page_backend', 25, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('numof_mailtemplate_per_page_backend', 25, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('numof_coupon_per_page_backend', 25, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('usergroup_id_customer', 0, 341, \Cx\Core\Setting\Controller\Setting::TYPE_DROPDOWN_USERGROUP, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('usergroup_id_reseller', 0, 342, \Cx\Core\Setting\Controller\Setting::TYPE_DROPDOWN_USERGROUP, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('user_profile_attribute_customer_group_id', 0, 351, \Cx\Core\Setting\Controller\Setting::TYPE_DROPDOWN_USER_CUSTOM_ATTRIBUTE, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('user_profile_attribute_notes', 0, 352, \Cx\Core\Setting\Controller\Setting::TYPE_DROPDOWN_USER_CUSTOM_ATTRIBUTE, null, 'config');
\Cx\Core\Setting\Controller\Setting::add('num_categories_per_row', 4, ++$i, \Cx\Core\Setting\Controller\Setting::TYPE_TEXT, null, 'config');
// Note that the Settings *MUST* be reinited after adding new entries!
// Add more new/missing settings here
\Cx\Lib\UpdateUtil::drop_table($table_name);
// Always
return false;
}
示例4: errorHandler
/**
* Handles database errors
*
* Also migrates old ProductAttribute to new Attribute structures,
* including Text records.
* @return boolean false Always!
* @throws Cx\Lib\Update_DatabaseException
*/
static function errorHandler()
{
// Attribute
$default_lang_id = \FWLanguage::getDefaultLangId();
$table_name_old = DBPREFIX . 'module_shop_products_attributes_name';
$table_name_new = DBPREFIX . 'module_shop_attribute';
if (\Cx\Lib\UpdateUtil::table_exist($table_name_new)) {
\Cx\Lib\UpdateUtil::drop_table($table_name_old);
} else {
$table_structure = array('id' => array('type' => 'INT(10)', 'unsigned' => true, 'auto_increment' => true, 'primary' => true), 'type' => array('type' => 'TINYINT(1)', 'unsigned' => true, 'default' => '1', 'renamefrom' => 'display_type'));
$table_index = array();
if (\Cx\Lib\UpdateUtil::table_exist($table_name_old)) {
if (\Cx\Lib\UpdateUtil::column_exist($table_name_old, 'name')) {
// Migrate all Product strings to the Text table first
\Text::deleteByKey('Shop', self::TEXT_ATTRIBUTE_NAME);
$query = "\n SELECT `id`, `name`\n FROM `{$table_name_old}`";
$objResult = \Cx\Lib\UpdateUtil::sql($query);
if (!$objResult) {
throw new \Cx\Lib\Update_DatabaseException("Failed to to query Attribute names", $query);
}
while (!$objResult->EOF) {
$id = $objResult->fields['id'];
$name = $objResult->fields['name'];
if (!\Text::replace($id, $default_lang_id, 'Shop', self::TEXT_ATTRIBUTE_NAME, $name)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to migrate Attribute name '{$name}'");
}
$objResult->MoveNext();
}
}
}
//DBG::activate(DBG_ADODB);
\Cx\Lib\UpdateUtil::table($table_name_old, $table_structure, $table_index);
if (!\Cx\Lib\UpdateUtil::table_rename($table_name_old, $table_name_new)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to rename Attribute table");
}
}
$table_name_old = DBPREFIX . 'module_shop_products_attributes_value';
$table_name_new = DBPREFIX . 'module_shop_option';
if (\Cx\Lib\UpdateUtil::table_exist($table_name_new)) {
\Cx\Lib\UpdateUtil::drop_table($table_name_old);
} else {
$table_structure = array('id' => array('type' => 'INT(10)', 'unsigned' => true, 'auto_increment' => true, 'primary' => true), 'attribute_id' => array('type' => 'INT(10)', 'unsigned' => true, 'renamefrom' => 'name_id'), 'price' => array('type' => 'DECIMAL(9,2)', 'default' => '0.00'));
$table_index = array();
if (\Cx\Lib\UpdateUtil::table_exist($table_name_old)) {
if (\Cx\Lib\UpdateUtil::column_exist($table_name_old, 'value')) {
// Migrate all Product strings to the Text table first
\Text::deleteByKey('Shop', self::TEXT_OPTION_NAME);
$query = "\n SELECT `id`, `value`\n FROM `{$table_name_old}`";
$objResult = \Cx\Lib\UpdateUtil::sql($query);
if (!$objResult) {
throw new \Cx\Lib\Update_DatabaseException("Failed to to query option names", $query);
}
while (!$objResult->EOF) {
$id = $objResult->fields['id'];
$name = $objResult->fields['value'];
if (!\Text::replace($id, $default_lang_id, 'Shop', self::TEXT_OPTION_NAME, $name)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to to migrate option Text '{$name}'");
}
$objResult->MoveNext();
}
}
}
\Cx\Lib\UpdateUtil::table($table_name_old, $table_structure, $table_index);
if (!\Cx\Lib\UpdateUtil::table_rename($table_name_old, $table_name_new)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to rename Option table");
}
}
$table_name_old = DBPREFIX . 'module_shop_products_attributes';
$table_name_new = DBPREFIX . 'module_shop_rel_product_attribute';
if (\Cx\Lib\UpdateUtil::table_exist($table_name_new)) {
\Cx\Lib\UpdateUtil::drop_table($table_name_old);
} else {
$table_structure = array('product_id' => array('type' => 'INT(10)', 'unsigned' => true, 'default' => '0', 'primary' => true), 'option_id' => array('type' => 'INT(10)', 'unsigned' => true, 'primary' => true, 'renamefrom' => 'attributes_value_id'), 'ord' => array('type' => 'INT(10)', 'default' => '0', 'renamefrom' => 'sort_id'));
$table_index = array();
\Cx\Lib\UpdateUtil::table($table_name_old, $table_structure, $table_index);
if (!\Cx\Lib\UpdateUtil::table_rename($table_name_old, $table_name_new)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to rename Product-Attribute relation table {$table_name_old} to {$table_name_new}");
}
}
// Always
return false;
}
示例5: errorHandler
/**
* Handles all kinds of database errors
*
* Creates the processors' table, and creates default entries if necessary
* @return boolean False. Always.
* @global ADOConnection $objDatabase
*/
static function errorHandler()
{
// PaymentProcessing
$table_name_old = DBPREFIX . 'module_shop_processors';
$table_name_new = DBPREFIX . 'module_shop_payment_processors';
if (\Cx\Lib\UpdateUtil::table_exist($table_name_old)) {
\Cx\Lib\UpdateUtil::table_rename($table_name_old, $table_name_new);
}
$table_structure = array('id' => array('type' => 'INT(10)', 'unsigned' => true, 'auto_increment' => true, 'primary' => true), 'type' => array('type' => 'ENUM("internal", "external")', 'default' => 'internal'), 'name' => array('type' => 'VARCHAR(255)', 'default' => ''), 'description' => array('type' => 'TEXT', 'default' => ''), 'company_url' => array('type' => 'VARCHAR(255)', 'default' => ''), 'status' => array('type' => 'TINYINT(1)', 'unsigned' => true, 'default' => 1), 'picture' => array('type' => 'VARCHAR(255)', 'default' => ''));
\Cx\Lib\UpdateUtil::table($table_name_new, $table_structure);
$arrPsp = array(array(1, 'external', 'saferpay', 'Saferpay is a comprehensive Internet payment platform, specially developed for commercial applications. It provides a guarantee of secure payment processes over the Internet for merchants as well as for cardholders. Merchants benefit from the easy integration of the payment method into their e-commerce platform, and from the modularity with which they can take account of current and future requirements. Cardholders benefit from the security of buying from any shop that uses Saferpay.', 'http://www.saferpay.com/', 1, 'logo_saferpay.gif'), array(2, 'external', 'paypal', 'With more than 40 million member accounts in over 45 countries worldwide, PayPal is the world\'s largest online payment service. PayPal makes sending money as easy as sending email! Any PayPal member can instantly and securely send money to anyone in the U.S. with an email address. PayPal can also be used on a web-enabled cell phone. In the future, PayPal will be available to use on web-enabled pagers and other handheld devices.', 'http://www.paypal.com/', 1, 'logo_paypal.gif'), array(3, 'external', 'yellowpay', 'PostFinance vereinfacht das Inkasso im Online-Shop.', 'http://www.postfinance.ch/', 1, 'logo_postfinance.gif'), array(4, 'internal', 'internal', 'Internal no forms', '', 1, ''), array(9, 'internal', 'internal_lsv', 'LSV with internal form', '', 1, ''), array(10, 'external', 'datatrans', 'Die professionelle und komplette Payment-Lösung', 'http://datatrans.biz/', 1, 'logo_datatrans.gif'), array(11, 'external', 'mobilesolutions', 'PostFinance Mobile', 'https://postfinance.mobilesolutions.ch/', 1, 'logo_postfinance_mobile.gif'));
$query_template = "\n REPLACE INTO `{$table_name_new}` (\n `id`, `type`, `name`,\n `description`,\n `company_url`, `status`, `picture`\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?\n )";
foreach ($arrPsp as $psp) {
\Cx\Lib\UpdateUtil::sql($query_template, $psp);
}
if (\Cx\Lib\UpdateUtil::table_exist($table_name_old)) {
\Cx\Lib\UpdateUtil::drop_table($table_name_old);
}
// Drop obsolete PSPs -- see Payment::errorHandler()
\Cx\Lib\UpdateUtil::sql("\n DELETE FROM `" . DBPREFIX . "module_shop_payment_processors`\n WHERE `id` IN (5, 6, 7, 8)");
// Always
return false;
}
示例6: errorHandler
//.........这里部分代码省略.........
\Cx\Core\Setting\Controller\Setting::set('usergroup_id_reseller', $objGroup->getId());
if (!\Cx\Core\Setting\Controller\Setting::update('usergroup_id_reseller')) {
throw new \Cx\Lib\Update_DatabaseException("Failed to store UserGroup ID for resellers");
}
$group_id_reseller = $objGroup->getId();
$default_lang_id = \FWLanguage::getDefaultLangId();
$query = "\n SELECT `customer`.`customerid`,\n `customer`.`prefix`, `customer`.`firstname`,\n `customer`.`lastname`,\n `customer`.`company`, `customer`.`address`,\n `customer`.`city`, `customer`.`zip`,\n `customer`.`country_id`,\n `customer`.`phone`, `customer`.`fax`,\n `customer`.`email`,\n `customer`.`username`, `customer`.`password`,\n `customer`.`company_note`,\n `customer`.`is_reseller`,\n `customer`.`customer_status`, `customer`.`register_date`,\n `customer`.`group_id`\n FROM `{$table_name_old}` AS `customer`\n ORDER BY `customer`.`customerid` ASC";
$objResult = \Cx\Lib\UpdateUtil::sql($query);
while (!$objResult->EOF) {
$old_customer_id = $objResult->fields['customerid'];
if (empty($objResult->fields['email'])) {
$objResult->fields['email'] = $objResult->fields['username'];
}
$email = $objResult->fields['email'];
$objUser = \FWUser::getFWUserObject()->objUser->getUsers(array('email' => array(0 => $email)));
// TODO: See whether a User with that username (but different e-mail address) exists!
$objUser_name = \FWUser::getFWUserObject()->objUser->getUsers(array('username' => array(0 => $objResult->fields['username'])));
if ($objUser && $objUser_name) {
$objUser = $objUser_name;
}
$objCustomer = null;
if ($objUser) {
$objCustomer = self::getById($objUser->getId());
}
if (!$objCustomer) {
$lang_id = Order::getLanguageIdByCustomerId($old_customer_id);
$lang_id = \FWLanguage::getLangIdByIso639_1($lang_id);
if (!$lang_id) {
$lang_id = $default_lang_id;
}
$objCustomer = new Customer();
if (preg_match('/^(?:frau|mad|mme|signora|miss)/i', $objResult->fields['prefix'])) {
$objCustomer->gender('gender_female');
} elseif (preg_match('/^(?:herr|mon|signore|mister|mr)/i', $objResult->fields['prefix'])) {
$objCustomer->gender('gender_male');
// } else {
// Other "genders", like "family", "thing", or "it" won't be matched
// and are left on "gender_unknown".
//DBG::log("*** Prefix {$objResult->fields['prefix']}, UNKNOWN GENDER!");
}
//DBG::log("Prefix {$objResult->fields['prefix']}, made gender ".$objCustomer->gender());
$objCustomer->company($objResult->fields['company']);
$objCustomer->firstname($objResult->fields['firstname']);
$objCustomer->lastname($objResult->fields['lastname']);
$objCustomer->address($objResult->fields['address']);
$objCustomer->city($objResult->fields['city']);
$objCustomer->zip($objResult->fields['zip']);
$objCustomer->country_id($objResult->fields['country_id']);
$objCustomer->phone($objResult->fields['phone']);
$objCustomer->fax($objResult->fields['fax']);
$objCustomer->email($objResult->fields['email']);
$objCustomer->companynote($objResult->fields['company_note']);
$objCustomer->active($objResult->fields['customer_status']);
// Handled by a UserGroup now, see below
//$objCustomer->setResellerStatus($objResult->fields['is_reseller']);
$objCustomer->register_date($objResult->fields['register_date']);
$objCustomer->group_id($objResult->fields['group_id']);
// NOTE: Mind that the User class has been modified to accept e-mail addresses
// as usernames!
$objCustomer->username($objResult->fields['username']);
// Copy the md5 hash of the password!
$objCustomer->password = $objResult->fields['password'];
$objCustomer->setFrontendLanguage($lang_id);
}
if ($objResult->fields['is_reseller']) {
$objCustomer->setGroups($objCustomer->getAssociatedGroupIds() + array($group_id_reseller));
//DBG::log("Customer::errorHandler(): Added reseller: ".$objCustomer->id());
} else {
$objCustomer->setGroups($objCustomer->getAssociatedGroupIds() + array($group_id_customer));
//DBG::log("Customer::errorHandler(): Added customer: ".$objCustomer->id());
}
if (!$objCustomer->store()) {
//DBG::log(var_export($objCustomer, true));
throw new \Cx\Lib\Update_DatabaseException("Failed to migrate existing Customer ID " . $old_customer_id . " to Users (Messages: " . join(', ', $objCustomer->error_msg) . ")");
}
// Update the Orders table with the new Customer ID.
// Note that we use the ambiguous old customer ID that may
// coincide with a new User ID, so to prevent inconsistencies,
// migrated Orders are marked as such.
$query = "\n UPDATE `{$table_order_name}`\n SET `customer_id`=" . $objCustomer->id() . ",\n `migrated`=1\n WHERE `customer_id`={$old_customer_id}\n AND `migrated`=0";
\Cx\Lib\UpdateUtil::sql($query);
// Drop migrated
$query = "\n DELETE FROM `{$table_name_old}`\n WHERE `customerid`={$old_customer_id}";
\Cx\Lib\UpdateUtil::sql($query);
$objResult->MoveNext();
if (!checkMemoryLimit() || !checkTimeoutLimit()) {
return false;
}
}
// Remove the flag, it's no longer needed.
// (You could also verify that all records have been migrated by
// querying them with "[...] WHERE `migrated`=0", which *MUST* result
// in an empty recordset. This is left as an exercise for the reader.)
$query = "\n ALTER TABLE `{$table_order_name}`\n DROP `migrated`";
\Cx\Lib\UpdateUtil::sql($query);
\Cx\Lib\UpdateUtil::drop_table($table_name_old);
//DBG::log("Updated Customer table and related stuff");
// Always
return false;
}
示例7: _newsUpdate
function _newsUpdate()
{
global $objDatabase, $_CONFIG, $objUpdate, $_ARRAYLANG;
/************************************************
* EXTENSION: Placeholder NEWS_LINK replaced *
* by NEWS_LINK_TITLE *
* ADDED: Contrexx v2.1.0 *
************************************************/
if ($objUpdate->_isNewerVersion($_CONFIG['coreCmsVersion'], '2.1.0')) {
try {
\Cx\Lib\UpdateUtil::migrateContentPage('news', null, '{NEWS_LINK}', '{NEWS_LINK_TITLE}', '2.1.0');
} catch (\Cx\Lib\UpdateException $e) {
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
}
/************************************************
* EXTENSION: Front- and backend permissions *
* ADDED: Contrexx v2.1.0 *
************************************************/
$query = "SELECT 1 FROM `" . DBPREFIX . "module_news_settings` WHERE `name` = 'news_message_protection'";
$objResult = $objDatabase->SelectLimit($query, 1);
if ($objResult) {
if ($objResult->RecordCount() == 0) {
$query = "INSERT INTO `" . DBPREFIX . "module_news_settings` (`name`, `value`) VALUES ('news_message_protection', '1'),\n ('recent_news_message_limit', '5')\n ";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
} else {
return _databaseError($query, $objDatabase->ErrorMsg());
}
$query = "SELECT 1 FROM `" . DBPREFIX . "module_news_settings` WHERE `name` = 'news_message_protection_restricted'";
$objResult = $objDatabase->SelectLimit($query, 1);
if ($objResult) {
if ($objResult->RecordCount() == 0) {
$query = "INSERT INTO `" . DBPREFIX . "module_news_settings` (`name`, `value`) VALUES ('news_message_protection_restricted', '1')";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
} else {
return _databaseError($query, $objDatabase->ErrorMsg());
}
$arrColumns = $objDatabase->MetaColumnNames(DBPREFIX . 'module_news');
if ($arrColumns === false) {
setUpdateMsg(sprintf($_ARRAYLANG['TXT_UNABLE_GETTING_DATABASE_TABLE_STRUCTURE'], DBPREFIX . 'module_news'));
return false;
}
if (!in_array('frontend_access_id', $arrColumns)) {
$query = "ALTER TABLE `" . DBPREFIX . "module_news` ADD `frontend_access_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `validated`";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
if (!in_array('backend_access_id', $arrColumns)) {
$query = "ALTER TABLE `" . DBPREFIX . "module_news` ADD `backend_access_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `frontend_access_id`";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
/************************************************
* EXTENSION: Thunbmail Image *
* ADDED: Contrexx v2.1.0 *
************************************************/
$arrColumns = $objDatabase->MetaColumnNames(DBPREFIX . 'module_news');
if ($arrColumns === false) {
setUpdateMsg(sprintf($_ARRAYLANG['TXT_UNABLE_GETTING_DATABASE_TABLE_STRUCTURE'], DBPREFIX . 'module_news'));
return false;
}
if (!in_array('teaser_image_thumbnail_path', $arrColumns)) {
$query = "ALTER TABLE `" . DBPREFIX . "module_news` ADD `teaser_image_thumbnail_path` TEXT NOT NULL AFTER `teaser_image_path`";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
try {
// delete obsolete table contrexx_module_news_access
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_news_access');
# fix some ugly NOT NULL without defaults
\Cx\Lib\UpdateUtil::table(DBPREFIX . 'module_news', array('id' => array('type' => 'INT(6) UNSIGNED', 'notnull' => true, 'primary' => true, 'auto_increment' => true), 'date' => array('type' => 'INT(14)', 'notnull' => false, 'default_expr' => 'NULL'), 'title' => array('type' => 'VARCHAR(250)', 'notnull' => true, 'default' => ''), 'text' => array('type' => 'MEDIUMTEXT', 'notnull' => true), 'redirect' => array('type' => 'VARCHAR(250)', 'notnull' => true, 'default' => ''), 'source' => array('type' => 'VARCHAR(250)', 'notnull' => true, 'default' => ''), 'url1' => array('type' => 'VARCHAR(250)', 'notnull' => true, 'default' => ''), 'url2' => array('type' => 'VARCHAR(250)', 'notnull' => true, 'default' => ''), 'catid' => array('type' => 'INT(2) UNSIGNED', 'notnull' => true, 'default' => 0), 'lang' => array('type' => 'INT(2) UNSIGNED', 'notnull' => true, 'default' => 0), 'userid' => array('type' => 'INT(6) UNSIGNED', 'notnull' => true, 'default' => 0), 'startdate' => array('type' => 'DATETIME', 'notnull' => true, 'default' => '0000-00-00 00:00:00'), 'enddate' => array('type' => 'DATETIME', 'notnull' => true, 'default' => '0000-00-00 00:00:00'), 'status' => array('type' => 'TINYINT(4)', 'notnull' => true, 'default' => 1), 'validated' => array('type' => "ENUM('0','1')", 'notnull' => true, 'default' => 0), 'frontend_access_id' => array('type' => 'INT(10) UNSIGNED', 'notnull' => true, 'default' => 0), 'backend_access_id' => array('type' => 'INT(10) UNSIGNED', 'notnull' => true, 'default' => 0), 'teaser_only' => array('type' => "ENUM('0','1')", 'notnull' => true, 'default' => 0), 'teaser_frames' => array('type' => 'TEXT', 'notnull' => true), 'teaser_text' => array('type' => 'TEXT', 'notnull' => true), 'teaser_show_link' => array('type' => 'TINYINT(1) UNSIGNED', 'notnull' => true, 'default' => 1), 'teaser_image_path' => array('type' => 'TEXT', 'notnull' => true), 'teaser_image_thumbnail_path' => array('type' => 'TEXT', 'notnull' => true), 'changelog' => array('type' => 'INT(14)', 'notnull' => true, 'default' => 0)), array('newsindex' => array('type' => 'FULLTEXT', 'fields' => array('text', 'title', 'teaser_text'))));
} catch (\Cx\Lib\UpdateException $e) {
// we COULD do something else here..
DBG::trace();
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
//encoding was a little messy in 2.1.4. convert titles and teasers to their raw representation
if ($_CONFIG['coreCmsVersion'] == "2.1.4") {
try {
$res = \Cx\Lib\UpdateUtil::sql('SELECT `id`, `title`, `teaser_text` FROM `' . DBPREFIX . 'module_news` WHERE `changelog` > ' . mktime(0, 0, 0, 12, 15, 2010));
while ($res->MoveNext()) {
$title = $res->fields['title'];
$teaserText = $res->fields['teaser_text'];
$id = $res->fields['id'];
//title is html entity style
$title = html_entity_decode($title, ENT_QUOTES, CONTREXX_CHARSET);
//teaserText is html entity style, but no cloudrexx was specified on encoding
$teaserText = html_entity_decode($teaserText);
\Cx\Lib\UpdateUtil::sql('UPDATE `' . DBPREFIX . 'module_news` SET `title`="' . addslashes($title) . '", `teaser_text`="' . addslashes($teaserText) . '" where `id`=' . $id);
}
$hfr = new HackyFeedRepublisher();
//.........这里部分代码省略.........
示例8: _accessUpdate
/**
* Cloudrexx
*
* @link http://www.cloudrexx.com
* @copyright Cloudrexx AG 2007-2015
*
* According to our dual licensing model, this program can be used either
* under the terms of the GNU Affero General Public License, version 3,
* or under a proprietary license.
*
* The texts of the GNU Affero General Public License with an additional
* permission and of our proprietary license can be found at and
* in the LICENSE file you have received along with this program.
*
* 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 Affero General Public License for more details.
*
* "Cloudrexx" is a registered trademark of Cloudrexx AG.
* The licensing of the program under the AGPLv3 does not imply a
* trademark license. Therefore any rights, title and interest in
* our trademarks remain entirely with us.
*/
function _accessUpdate()
{
global $objDatabase, $objUpdate, $_CONFIG, $_ARRAYLANG, $_CORELANG;
$arrTables = $objDatabase->MetaTables('TABLES');
if (!$arrTables) {
setUpdateMsg($_ARRAYLANG['TXT_UNABLE_DETERMINE_DATABASE_STRUCTURE']);
return false;
}
/****************************
*
* ADD NOTIFICATION E-MAILS
*
***************************/
try {
\Cx\Lib\UpdateUtil::table(DBPREFIX . 'access_user_mail', array('type' => array('type' => 'ENUM(\'reg_confirm\',\'reset_pw\',\'user_activated\',\'user_deactivated\',\'new_user\')', 'notnull' => true, 'default' => 'reg_confirm'), 'lang_id' => array('type' => 'TINYINT(2)', 'unsigned' => true, 'notnull' => true, 'default' => '0'), 'sender_mail' => array('type' => 'VARCHAR(255)', 'notnull' => true, 'default' => ''), 'sender_name' => array('type' => 'VARCHAR(255)', 'notnull' => true, 'default' => ''), 'subject' => array('type' => 'VARCHAR(255)', 'notnull' => true, 'default' => ''), 'format' => array('type' => 'ENUM(\'text\',\'html\',\'multipart\')', 'notnull' => true, 'default' => 'text'), 'body_text' => array('type' => 'TEXT'), 'body_html' => array('type' => 'TEXT')), array('mail' => array('fields' => array('type', 'lang_id'), 'type' => 'UNIQUE')), 'InnoDB');
$result = \Cx\Lib\UpdateUtil::sql('SHOW KEYS FROM `' . DBPREFIX . 'access_group_dynamic_ids`');
if ($result->EOF) {
\Cx\Lib\UpdateUtil::sql('ALTER IGNORE TABLE `' . DBPREFIX . 'access_group_dynamic_ids` ADD PRIMARY KEY ( `access_id` , `group_id` )');
}
$result = \Cx\Lib\UpdateUtil::sql('SHOW KEYS FROM `' . DBPREFIX . 'access_group_static_ids`');
if ($result->EOF) {
\Cx\Lib\UpdateUtil::sql('ALTER IGNORE TABLE `' . DBPREFIX . 'access_group_static_ids` ADD PRIMARY KEY ( `access_id` , `group_id` )');
}
} catch (\Cx\Lib\UpdateException $e) {
// we COULD do something else here..
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
\DBG::msg('001');
$arrMails = array(array('type' => 'reg_confirm', 'subject' => 'Benutzerregistrierung bestätigen', 'body_text' => 'Hallo [[USERNAME]],\\r\\n\\r\\nVielen Dank für Ihre Anmeldung bei [[HOST]].\\r\\nBitte klicken Sie auf den folgenden Link, um Ihre E-Mail-Adresse zu bestätigen:\\r\\n[[ACTIVATION_LINK]]\\r\\n\\r\\nUm sich später einzuloggen, geben Sie bitte Ihren Benutzernamen \\"[[USERNAME]]\\" und das Passwort ein, das Sie bei der Registrierung festgelegt haben.\\r\\n\\r\\n\\r\\n--\\r\\nIhr [[SENDER]]'), array('type' => 'reset_pw', 'subject' => 'Kennwort zurücksetzen', 'body_text' => 'Hallo [[USERNAME]],\\r\\n\\r\\nUm ein neues Passwort zu wählen, müssen Sie auf die unten aufgeführte URL gehen und dort Ihr neues Passwort eingeben.\\r\\n\\r\\nWICHTIG: Die Gültigkeit der URL wird nach 60 Minuten verfallen, nachdem diese E-Mail abgeschickt wurde.\\r\\nFalls Sie mehr Zeit benötigen, geben Sie Ihre E-Mail Adresse einfach ein weiteres Mal ein.\\r\\n\\r\\nIhre URL:\\r\\n[[URL]]\\r\\n\\r\\n\\r\\n--\\r\\n[[SENDER]]'), array('type' => 'user_activated', 'subject' => 'Ihr Benutzerkonto wurde aktiviert', 'body_text' => 'Hallo [[USERNAME]],\\r\\n\\r\\nIhr Benutzerkonto auf [[HOST]] wurde soeben aktiviert und kann von nun an verwendet werden.\\r\\n\\r\\n\\r\\n--\\r\\n[[SENDER]]'), array('type' => 'user_deactivated', 'subject' => 'Ihr Benutzerkonto wurde deaktiviert', 'body_text' => 'Hallo [[USERNAME]],\\r\\n\\r\\nIhr Benutzerkonto auf [[HOST]] wurde soeben deaktiviert.\\r\\n\\r\\n\\r\\n--\\r\\n[[SENDER]]'), array('type' => 'new_user', 'subject' => 'Ein neuer Benutzer hat sich registriert', 'body_text' => 'Der Benutzer [[USERNAME]] hat sich soeben registriert und muss nun frei geschaltet werden.\\r\\n\\r\\nÜber die folgende Adresse kann das Benutzerkonto von [[USERNAME]] verwaltet werden:\\r\\n[[LINK]]\\r\\n\\r\\n\\r\\n--\\r\\n[[SENDER]]'));
foreach ($arrMails as $arrMail) {
$query = "SELECT 1 FROM `" . DBPREFIX . "access_user_mail` WHERE `type` = '" . $arrMail['type'] . "'";
$objMail = $objDatabase->SelectLimit($query, 1);
if ($objMail !== false) {
if ($objMail->RecordCount() == 0) {
$query = "INSERT INTO `" . DBPREFIX . "access_user_mail` (\n `type`,\n `lang_id`,\n `sender_mail`,\n `sender_name`,\n `subject`,\n `body_text`,\n `body_html`\n ) VALUES (\n '" . $arrMail['type'] . "',\n 0,\n '" . addslashes($_CONFIG['coreAdminEmail']) . "',\n '" . addslashes($_CONFIG['coreAdminName']) . "',\n '" . $arrMail['subject'] . "',\n '" . $arrMail['body_text'] . "',\n ''\n )";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
} else {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
/****************
*
* ADD SETTINGS
*
***************/
try {
\Cx\Lib\UpdateUtil::table(DBPREFIX . 'access_settings', array('key' => array('type' => 'VARCHAR(32)', 'notnull' => true, 'default' => ''), 'value' => array('type' => 'VARCHAR(255)', 'notnull' => true, 'default' => '', 'after' => 'key'), 'status' => array('type' => 'TINYINT(1)', 'unsigned' => true, 'notnull' => true, 'default' => '0', 'after' => 'value')), array('key' => array('fields' => array('key'), 'type' => 'UNIQUE')), 'InnoDB');
if (in_array(DBPREFIX . "communit_config", $arrTables)) {
$objResult = \Cx\Lib\UpdateUtil::sql('SELECT `name`, `value`, `status` FROM `' . DBPREFIX . 'community_config`');
while (!$objResult->EOF) {
$arrCommunityConfig[$objResult->fields['name']] = array('value' => $objResult->fields['value'], 'status' => $objResult->fields['status']);
$objResult->MoveNext();
}
}
$arrSettings = array('user_activation' => array('value' => '', 'status' => isset($arrCommunityConfig['user_activation']['status']) ? $arrCommunityConfig['user_activation']['status'] : 0), 'user_activation_timeout' => array('value' => isset($arrCommunityConfig['user_activation_timeout']['value']) ? $arrCommunityConfig['user_activation_timeout']['value'] : 0, 'status' => isset($arrCommunityConfig['user_activation_timeout']['status']) ? $arrCommunityConfig['user_activation_timeout']['status'] : 0), 'assigne_to_groups' => array('value' => isset($arrCommunityConfig['community_groups']['value']) ? $arrCommunityConfig['community_groups']['value'] : '', 'status' => 1), 'max_profile_pic_width' => array('value' => '160', 'status' => 1), 'max_profile_pic_height' => array('value' => '160', 'status' => 1), 'profile_thumbnail_pic_width' => array('value' => '50', 'status' => 1), 'profile_thumbnail_pic_height' => array('value' => '50', 'status' => 1), 'max_profile_pic_size' => array('value' => '30000', 'status' => 1), 'max_pic_width' => array('value' => '600', 'status' => 1), 'max_pic_height' => array('value' => '600', 'status' => 1), 'max_thumbnail_pic_width' => array('value' => '130', 'status' => 1), 'max_thumbnail_pic_height' => array('value' => '130', 'status' => 1), 'max_pic_size' => array('value' => '200000', 'status' => 1), 'notification_address' => array('value' => addslashes($_CONFIG['coreAdminEmail']), 'status' => 1), 'user_config_email_access' => array('value' => '', 'status' => 1), 'user_config_profile_access' => array('value' => '', 'status' => 1), 'default_email_access' => array('value' => 'members_only', 'status' => 1), 'default_profile_access' => array('value' => 'members_only', 'status' => 1), 'user_delete_account' => array('value' => '', 'status' => 1), 'block_currently_online_users' => array('value' => '10', 'status' => 0), 'block_currently_online_users_pic' => array('value' => '', 'status' => 0), 'block_last_active_users' => array('value' => '10', 'status' => 0), 'block_last_active_users_pic' => array('value' => '', 'status' => 0), 'block_latest_reg_users' => array('value' => '10', 'status' => 0), 'block_latest_reg_users_pic' => array('value' => '', 'status' => 0), 'block_birthday_users' => array('value' => '10', 'status' => 0), 'block_birthday_users_pic' => array('value' => '', 'status' => 0), 'session_user_interval' => array('value' => '0', 'status' => 1), 'user_accept_tos_on_signup' => array('value' => '', 'status' => 0), 'user_captcha' => array('value' => '', 'status' => 0), 'profile_thumbnail_method' => array('value' => 'crop', 'status' => 1), 'profile_thumbnail_scale_color' => array('value' => '#FFFFFF', 'status' => 1));
foreach ($arrSettings as $key => $arrSetting) {
if (!\Cx\Lib\UpdateUtil::sql("SELECT 1 FROM `" . DBPREFIX . "access_settings` WHERE `key` = '" . $key . "'")->RecordCount()) {
\Cx\Lib\UpdateUtil::sql("INSERT INTO `" . DBPREFIX . "access_settings`\n SET `key` = '" . $key . "',\n `value` = '" . $arrSetting['value'] . "',\n `status` = '" . $arrSetting['status'] . "'\n ");
}
}
// delete obsolete table community_config
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'community_config');
// delete obsolete table user_validity
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'user_validity');
} catch (\Cx\Lib\UpdateException $e) {
// we COULD do something else here..
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
/********************
*
* ADD USER PROFILE
*
*******************/
//.........这里部分代码省略.........
示例9: dropOldTables
public function dropOldTables()
{
// Drop old tables
try {
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'content');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'content_history');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'content_logfile');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'content_navigation');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'content_navigation_history');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_alias_source');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_alias_target');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_block_rel_lang');
} catch (\Cx\Lib\UpdateException $e) {
\Cx\Lib\UpdateUtil::DefaultActionHandler($e);
return false;
}
return true;
}
示例10: dropOldTables
/**
* drop old tables
* @return bool|void
*/
protected function dropOldTables()
{
try {
\Cx\Lib\UpdateUtil::drop_table(CALENDAR_OLD_EVENT_TABLE);
\Cx\Lib\UpdateUtil::drop_table(CALENDAR_OLD_CATEGORY_TABLE);
\Cx\Lib\UpdateUtil::drop_table(CALENDAR_OLD_FORM_DATA_TABLE);
\Cx\Lib\UpdateUtil::drop_table(CALENDAR_OLD_FORM_FIELD_TABLE);
\Cx\Lib\UpdateUtil::drop_table(CALENDAR_OLD_REGISTRATIONS_TABLE);
} catch (\Cx\Lib\UpdateException $e) {
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
return true;
}
示例11: errorHandler
/**
* Tries to recreate the database table(s) for the class
*
* Should be called whenever there's a problem with the database table.
* @return boolean False. Always.
*/
static function errorHandler()
{
$table_name = DBPREFIX . 'core_country';
$table_structure = array('id' => array('type' => 'INT(10)', 'unsigned' => true, 'notnull' => true, 'auto_increment' => true, 'primary' => true), 'alpha2' => array('type' => 'CHAR(2)', 'notnull' => true, 'default' => ''), 'alpha3' => array('type' => 'CHAR(3)', 'notnull' => true, 'default' => ''), 'ord' => array('type' => 'INT(5)', 'unsigned' => true, 'notnull' => true, 'default' => '0', 'renamefrom' => 'sort_order'), 'active' => array('type' => 'TINYINT(1)', 'unsigned' => true, 'notnull' => true, 'default' => '1', 'renamefrom' => 'is_active'));
\Cx\Lib\UpdateUtil::table($table_name, $table_structure);
if (\Cx\Lib\UpdateUtil::table_empty($table_name)) {
\Text::deleteByKey('core', self::TEXT_NAME);
// Copy the Countries from the Shop module if possible
if (\Cx\Lib\UpdateUtil::table_exist(DBPREFIX . "module_shop_countries")) {
$query = "\n SELECT `countries_id`, `countries_name`,\n `countries_iso_code_2`, `countries_iso_code_3`,\n `activation_status`\n FROM " . DBPREFIX . "module_shop_countries";
$objResult = \Cx\Lib\UpdateUtil::sql($query);
if (!$objResult) {
throw new \Cx\Lib\Update_DatabaseException("Failed to to query Country names", $query);
}
$default_lang_id = \FWLanguage::getDefaultLangId();
while (!$objResult->EOF) {
$id = $objResult->fields['countries_id'];
$name = $objResult->fields['countries_name'];
$alpha2 = $objResult->fields['countries_iso_code_2'];
$alpha3 = $objResult->fields['countries_iso_code_3'];
$active = $objResult->fields['activation_status'];
$ord = 0;
if ($id == 14) {
// fixing missing name
$name = 'Österreich';
}
if (!self::store($alpha2, $alpha3, $default_lang_id, $name, $ord, $active, $id)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to to migrate Country '{$name}'");
}
$objResult->MoveNext();
}
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_shop_countries');
}
}
// USE FOR NEW INSTALLATIONS ONLY!
// These records will lead to inconsistencies with Country references in
// other tables otherwise.
if (\Cx\Lib\UpdateUtil::table_empty($table_name)) {
// Add new Country records if available
if (file_exists(ASCMS_CORE_PATH . '/countries_iso_3166-2.php') && (include_once ASCMS_CORE_PATH . '/countries_iso_3166-2.php')) {
//DBG::log("Country::errorHandler(): Included ISO file");
$arrCountries = null;
$ord = 0;
foreach ($arrCountries as $country_id => $arrCountry) {
$name = $arrCountry[0];
$alpha2 = $arrCountry[1];
$alpha3 = $arrCountry[2];
// Not currently in use:
// $numeric = $arrCountry[3];
// $iso_full = $arrCountry[4];
// English (language ID 2) only!
if (!self::store($alpha2, $alpha3, 2, $name, ++$ord, true, $country_id)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to to add Country '{$name}' from ISO file");
}
//DBG::log("Country::errorHandler(): Added Country ID $country_id: '$name'");
}
}
}
//DBG::activate(DBG_ADODB);
// Add more languages from the countries_languages.php file,
// if present
$arrCountries = array();
// $arrCountries is redefined in the file
if (file_exists(ASCMS_CORE_PATH . '/countries_languages.php') && (include_once ASCMS_CORE_PATH . '/countries_languages.php')) {
foreach ($arrCountries as $alpha2 => $arrLanguage) {
//DBG::log("errorHandler: Looking for Alpha-2 $alpha2");
$country_id = self::getIdByAlpha2($alpha2);
if (!$country_id) {
// TODO: Fail or not?
continue;
}
foreach ($arrLanguage as $lang_id => $name) {
if (!\Text::replace($country_id, $lang_id, 'core', self::TEXT_NAME, $name)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to to update Country '{$name}' from languages file");
}
//DBG::log("Country::errorHandler(): Added Country ID $country_id: language ID $lang_id");
}
}
}
\Cx\Core\Setting\Controller\Setting::init('core', 'country');
\Cx\Core\Setting\Controller\Setting::add('numof_countries_per_page_backend', 30, 101);
// More to come...
// Always!
return false;
}
示例12: _directoryUpdate
//.........这里部分代码省略.........
return _databaseError($query, $objDatabase->ErrorMsg());
}
/// 2.1
$query = "SELECT setid FROM " . DBPREFIX . "module_directory_settings WHERE setname='youtubeWidth'";
$objCheck = $objDatabase->SelectLimit($query, 1);
if ($objCheck !== false) {
if ($objCheck->RecordCount() == 0) {
$query = "INSERT INTO `" . DBPREFIX . "module_directory_settings` ( `setid` , `setname` , `setvalue` , `settyp` )\n VALUES (NULL , 'youtubeWidth', '400', '1')";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
} else {
return _databaseError($query, $objDatabase->ErrorMsg());
}
$query = "SELECT setid FROM " . DBPREFIX . "module_directory_settings WHERE setname='youtubeHeight'";
$objCheck = $objDatabase->SelectLimit($query, 1);
if ($objCheck !== false) {
if ($objCheck->RecordCount() == 0) {
$query = "INSERT INTO `" . DBPREFIX . "module_directory_settings` ( `setid` , `setname` , `setvalue` , `settyp` )\n VALUES (NULL , 'youtubeHeight', '300', '1')";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
} else {
return _databaseError($query, $objDatabase->ErrorMsg());
}
$query = "SELECT id FROM " . DBPREFIX . "module_directory_inputfields WHERE name='youtube'";
$objCheck = $objDatabase->SelectLimit($query, 1);
if ($objCheck !== false) {
if ($objCheck->RecordCount() == 0) {
$query = "INSERT INTO `" . DBPREFIX . "module_directory_inputfields` (`id` ,`typ` ,`name` ,`title` ,`active` ,`active_backend` ,`is_required` ,`read_only` ,`sort` ,`exp_search` ,`is_search`)\n VALUES (NULL , '1', 'youtube', 'TXT_DIRECTORY_YOUTUBE', '0', '0', '0', '0', '0', '0', '0')";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
} else {
return _databaseError($query, $objDatabase->ErrorMsg());
}
$arrColumns = $objDatabase->MetaColumns(DBPREFIX . 'module_directory_dir');
if ($arrColumns === false) {
setUpdateMsg(sprintf($_ARRAYLANG['TXT_UNABLE_GETTING_DATABASE_TABLE_STRUCTURE'], DBPREFIX . 'module_directory_dir'));
return false;
}
if (!array_key_exists("YOUTUBE", $arrColumns)) {
$query = "ALTER TABLE `" . DBPREFIX . "module_directory_dir` ADD `youtube` MEDIUMTEXT NOT NULL;";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
}
$query = "ALTER TABLE `" . DBPREFIX . "module_directory_dir`\n CHANGE `logo` `logo` VARCHAR(50) NULL,\n CHANGE `map` `map` VARCHAR(255) NULL,\n CHANGE `lokal` `lokal` VARCHAR(255) NULL,\n CHANGE `spez_field_11` `spez_field_11` VARCHAR(255) NULL,\n CHANGE `spez_field_12` `spez_field_12` VARCHAR(255) NULL,\n CHANGE `spez_field_13` `spez_field_13` VARCHAR(255) NULL,\n CHANGE `spez_field_14` `spez_field_14` VARCHAR(255) NULL,\n CHANGE `spez_field_15` `spez_field_15` VARCHAR(255) NULL,\n CHANGE `spez_field_16` `spez_field_16` VARCHAR(255) NULL,\n CHANGE `spez_field_17` `spez_field_17` VARCHAR(255) NULL,\n CHANGE `spez_field_18` `spez_field_18` VARCHAR(255) NULL,\n CHANGE `spez_field_19` `spez_field_19` VARCHAR(255) NULL,\n CHANGE `spez_field_20` `spez_field_20` VARCHAR(255) NULL;";
if ($objDatabase->Execute($query) === false) {
return _databaseError($query, $objDatabase->ErrorMsg());
}
//delete obsolete table contrexx_module_directory_access
try {
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_directory_access');
} catch (\Cx\Lib\UpdateException $e) {
DBG::trace();
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
/********************************
* EXTENSION: Fulltext key *
* ADDED: Contrexx v3.0.0 *
********************************/
try {
$objResult = \Cx\Lib\UpdateUtil::sql('SHOW KEYS FROM `' . DBPREFIX . 'module_directory_categories` WHERE `Key_name` = "directoryindex" and (`Column_name`= "name" OR `Column_name` = "description")');
if ($objResult && $objResult->RecordCount() == 0) {
\Cx\Lib\UpdateUtil::sql('ALTER TABLE `' . DBPREFIX . 'module_directory_categories` ADD FULLTEXT KEY `directoryindex` (`name`, `description`)');
}
} catch (\Cx\Lib\UpdateException $e) {
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
/**********************************
* EXTENSION: Content Migration *
* ADDED: Contrexx v3.0.0 *
**********************************/
try {
// migrate content page to version 3.0.1
$search = array('/(.*)/ms');
$callback = function ($matches) {
$content = $matches[1];
if (empty($content)) {
return $content;
}
// add missing placeholder {DIRECTORY_GOOGLEMAP_JAVASCRIPT_BLOCK}
if (strpos($content, '{DIRECTORY_GOOGLEMAP_JAVASCRIPT_BLOCK}') === false) {
$content .= "\n{DIRECTORY_GOOGLEMAP_JAVASCRIPT_BLOCK}";
}
// move placeholder {DIRECTORY_JAVASCRIPT} to the end of the content page
$content = str_replace('{DIRECTORY_JAVASCRIPT}', '', $content);
$content .= "\n{DIRECTORY_JAVASCRIPT}";
return $content;
};
\Cx\Lib\UpdateUtil::migrateContentPageUsingRegexCallback(array('module' => 'directory'), $search, $callback, array('content'), '3.0.1');
} catch (\Cx\Lib\UpdateException $e) {
return \Cx\Lib\UpdateUtil::DefaultActionHandler($e);
}
return true;
}
示例13: errorHandler
/**
* Migrates existing old Shop mailtemplates to the new MailTemplate class
* @return boolean False. Always.
* @throws Cx\Lib\Update_DatabaseException
*/
static function errorHandler()
{
if (!(include_once \Cx\Core\Core\Controller\Cx::instanciate()->getCodeBaseFrameworkPath() . '/UpdateUtil')) {
return false;
}
if (\Cx\Lib\UpdateUtil::table_empty(DBPREFIX . 'core_mail_template')) {
// Make sure there are no bodies lying around
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_NAME);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_FROM);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_SENDER);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_REPLY);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_TO);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_CC);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_BCC);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_SUBJECT);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_MESSAGE);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_MESSAGE_HTML);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_ATTACHMENTS);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_INLINE);
}
// Migrate existing templates from the shop to the MailTemplate.
// These are the keys replacing the IDs.
// TODO: Migrate the old template using the original IDs, make them unprotected
// TODO: Add the new default templates with the new keys
// and have the user migrate changes herself!
$arrKey = array(1 => 'order_confirmation', 2 => 'order_complete', 3 => 'customer_login', 4 => 'order_confirmation_login');
$arrLanguageId = \FWLanguage::getIdArray();
if (empty($arrLanguageId)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to get frontend language IDs");
}
foreach ($arrLanguageId as $lang_id) {
// Mind that the template name is single language yet!
$arrTemplates = self::getTemplateArray($lang_id);
if (empty($arrTemplates)) {
continue;
}
foreach ($arrTemplates as $id => $arrTemplate) {
// TODO: utf8_encode() may not be necessary in all cases.
// It worked without it for me earlier, but was necessary for verkehrstheorie.ch
$arrTemplate = array_map("utf8_encode", $arrTemplate);
if (isset($arrKey[$id])) {
// System templates get their default key
$arrTemplate['key'] = $arrKey[$id];
if ($id == 4) {
// Clear the protected flag, so the obsolete template
// #4 may be removed at will
$arrTemplate['protected'] = false;
}
} else {
// Custom templates:
// Make the name lowercase and replace any non-letter
$new_key = preg_replace('/[^a-z]/', '_', strtolower($arrTemplate['name']));
// Keep it unique! Use the ID if the key is taken
if (in_array($new_key, $arrKey)) {
$new_key = $id;
}
// Remember used keys, and replace the former ID
$arrKey[$id] = $new_key;
$arrTemplate['key'] = $new_key;
}
foreach ($arrTemplate as &$string) {
// Replace old <PLACEHOLDERS> with new [PLACEHOLDERS].
$string = preg_replace('/\\<([A-Z_]+)\\>/', '[$1]', $string);
// TODO: This is completely unreliable.
// Use the process as described above, not replacing the old templates,
// but adding the new ones instead.
// $string = str_replace('[ORDER_DATA]', $order_data, $string);
// $string = preg_replace('/[\\w\\s\\:]+\\[USERNAME\\](?:\\n|<br\\s?\\/?
// >)*[\\w\\s\\:]+\\[PASSWORD\\]/',
// $login_data, $string);
}
// $arrTemplate['message_html'] = preg_replace(
// '/(?:\r|\n|\r\n)/', "<br />\n", $arrTemplate['message']);
$arrTemplate['lang_id'] = $lang_id;
if (!\Cx\Core\MailTemplate\Controller\MailTemplate::store('Shop', $arrTemplate)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to store Mailtemplate");
}
}
}
// Drop old Mail tables after successful migration
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_shop_mail_content');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_shop_mail');
// Always!
return false;
}
示例14: errorHandler
/**
* Migrates existing old Shop mailtemplates to the new MailTemplate class
* @return boolean False. Always.
* @throws Cx\Lib\Update_DatabaseException
*/
static function errorHandler()
{
// Mail
\Cx\Core\MailTemplate\Controller\MailTemplate::errorHandler();
if (\Cx\Lib\UpdateUtil::table_empty(DBPREFIX . 'core_mail_template')) {
// Make sure there are no bodies lying around
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_NAME);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_FROM);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_SENDER);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_REPLY);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_TO);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_CC);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_BCC);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_SUBJECT);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_MESSAGE);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_MESSAGE_HTML);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_ATTACHMENTS);
\Text::deleteByKey('Shop', \Cx\Core\MailTemplate\Controller\MailTemplate::TEXT_INLINE);
}
$arrFrom = $arrSender = $arrSubject = array();
$arrLanguageId = \FWLanguage::getIdArray();
if (empty($arrLanguageId)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to get frontend language IDs");
}
if (\Cx\Lib\UpdateUtil::table_exist(DBPREFIX . 'module_shop_mail')) {
// Migrate existing templates from the shop to the MailTemplate,
// appending "_backup_by_update" to the respective keys.
// Make them unprotected.
// These are the keys replacing the IDs:
$arrKey = array(1 => 'order_confirmation', 2 => 'order_complete', 3 => 'customer_login', 4 => 'order_confirmation_login');
foreach ($arrLanguageId as $lang_id) {
// Mind that the template name is single language yet!
$arrTemplates = self::getTemplateArray($lang_id);
if (empty($arrTemplates)) {
continue;
}
foreach ($arrTemplates as $id => $arrTemplate) {
// NOTE: utf8_encode() may be necessary in some cases.
// It usually works without it, but was necessary on a few installations.
// $arrTemplate = array_map("utf8_encode", $arrTemplate);
if (!empty($arrTemplate['from']) && empty($arrFrom[$id])) {
$arrFrom[$id] = $arrTemplate['from'];
}
if (!empty($arrTemplate['sender']) && empty($arrSender[$id])) {
$arrSender[$id] = $arrTemplate['sender'];
}
if (!empty($arrTemplate['subject']) && empty($arrSubject[$id])) {
$arrSubject[$id] = str_replace('<DATE>', '[ORDER_DATE]', $arrTemplate['subject']);
}
if (isset($arrKey[$id])) {
// System templates get their default key
$arrTemplate['key'] = $arrKey[$id] . '_backup_by_update';
// Clear the protected flag, so the old templates
// may be removed at will
$arrTemplate['protected'] = false;
} else {
// Custom templates:
// Make the name lowercase and replace any non-letter
$new_key = preg_replace('/[^a-z]/', '_', strtolower($arrTemplate['name']));
// Keep it unique! Use the ID if the key is taken
if (in_array($new_key, $arrKey)) {
$new_key = $id;
}
// Remember used keys, and replace the former ID
$arrKey[$id] = $new_key;
$arrTemplate['key'] = $new_key;
}
// Some installations may contain corrupt templates
// causing empty (0 or "") keys. Those would make
// MailTemplate::store() fail!
if (empty($arrTemplate['key'])) {
$arrTemplate['key'] = uniqid() . '_backup_by_update)';
}
foreach ($arrTemplate as &$string) {
// Replace old <PLACEHOLDERS> with new [PLACEHOLDERS].
$string = preg_replace('/\\<([A-Z_]+)\\>/', '[$1]', $string);
// This is completely unreliable.
// Use the process as described above, not replacing the old templates,
// but adding the new ones instead.
// $string = str_replace('[ORDER_DATA]', $order_data, $string);
// $string = preg_replace('/[\\w\\s\\:]+\\[USERNAME\\](?:\\n|<br\\s?\\/?
// >)*[\\w\\s\\:]+\\[PASSWORD\\]/',
// $login_data, $string);
}
// $arrTemplate['message_html'] = preg_replace(
// '/(?:\r|\n|\r\n)/', "<br />\n", $arrTemplate['message']);
$arrTemplate['lang_id'] = $lang_id;
if (!\Cx\Core\MailTemplate\Controller\MailTemplate::store('Shop', $arrTemplate)) {
throw new \Cx\Lib\Update_DatabaseException("Failed to store Mailtemplate");
}
}
}
// Drop old Mail tables after successful migration
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_shop_mail_content');
\Cx\Lib\UpdateUtil::drop_table(DBPREFIX . 'module_shop_mail');
//.........这里部分代码省略.........