* @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ /** * Migrate BO tabs for 1.5 (new reorganization of BO) */ function migrate_tabs_15() { include_once(_PS_INSTALL_PATH_.'upgrade/php/add_new_tab.php'); // ===== Remove deleted tabs ===== $remove_tabs = array( 'AdminAliases', 'AdminContact', 'AdminDb', 'AdminGenerator', 'AdminPdf', 'AdminSubDomains', 'AdminStatsConf', ); $ids = array(); foreach ($remove_tabs as $tab) if ($id = get_tab_id($tab)) $ids[] = $id; if ($ids) { Db::getInstance()->delete('tab', 'id_tab IN ('.implode(', ', $ids).')'); Db::getInstance()->delete('tab_lang', 'id_tab IN ('.implode(', ', $ids).')'); } // ===== Create new parent tabs ===== $parent = array( 'AdminCatalog' => get_tab_id('AdminCatalog'), 'AdminParentOrders' => add_new_tab('AdminParentOrders', 'en:Orders|fr:Commandes|es:Pedidos|de:Bestellungen|it:Ordini', 0, true), 'AdminParentCustomer' => add_new_tab('AdminParentCustomer', 'en:Customers|fr:Clients|es:Clientes|de:Kunden|it:Clienti', 0, true), 'AdminPriceRule' => add_new_tab('AdminPriceRule', 'en:Price rules|fr:Promotions|es:Price rules|de:Price rules|it:Price rules', 0, true), 'AdminParentShipping' => add_new_tab('AdminParentShipping', 'en:Shipping|fr:Transport|es:Transporte|de:Versandkosten|it:Spedizione', 0, true), 'AdminParentLocalization' =>add_new_tab('AdminParentLocalization', 'en:Localization|fr:Localisation|es:Ubicación|de:Lokalisierung|it:Localizzazione', 0, true), 'AdminParentModules' => add_new_tab('AdminParentModules', 'en:Modules|fr:Modules|es:Módulos|de:Module|it:Moduli', 0, true), 'AdminParentPreferences' => add_new_tab('AdminParentPreferences', 'en:Preferences|fr:Préférences|es:Preferencias|de:Voreinstellungen|it:Preferenze', 0, true), 'AdminTools' => get_tab_id('AdminTools'), 'AdminAdmin' => add_new_tab('AdminAdmin', 'en:Administration|fr:Administration|es:Administration|de:Administration|it:Administration', 0, true), 'AdminParentStats' => add_new_tab('AdminParentStats', 'en:Stats|fr:Stats|es:Estadísticas|de:Statistik|it:Stat', 0, true), 'AdminParentShop' => add_new_tab('AdminParentShop', 'en:Shops|fr:Boutiques|es:Shops|de:Shops|it:Shops', 0, true), 'AdminStock' => get_tab_id('AdminStock'), ); // ===== Move tabs from old parents to new parents ===== $move_association = array( 'AdminParentOrders' => 'AdminOrders', 'AdminParentCustomer' => 'AdminCustomers', 'AdminParentShipping' => 'AdminShipping', 'AdminParentLocalization' => 'AdminLocalization', 'AdminParentModules' => 'AdminModules', 'AdminParentPreferences' => 'AdminPreferences', 'AdminAdmin' => 'AdminEmployees', 'AdminParentStats' => 'AdminStats', 'AdminParentShop' => 'AdminShop', ); foreach ($move_association as $to => $from) { if (empty($parent[$to])) continue; $id_parent = get_tab_id($from); if ($id_parent) Db::getInstance()->execute(' UPDATE '._DB_PREFIX_.'tab SET id_parent = '.$parent[$to].' WHERE id_parent = '.$id_parent.' OR id_tab = '.$id_parent.' '); } // ===== Move tabs to their new parents ===== $move_to = array( 'AdminContacts' => 'AdminParentCustomer', 'AdminCustomerThreads' => 'AdminParentCustomer', 'AdminCurrencies' => 'AdminParentLocalization', 'AdminTaxes' => 'AdminParentLocalization', 'AdminTaxRulesGroup' => 'AdminParentLocalization', 'AdminLanguages' => 'AdminParentLocalization', 'AdminTranslations' => 'AdminParentLocalization', 'AdminZones' => 'AdminParentLocalization', 'AdminCountries' => 'AdminParentLocalization', 'AdminStates' => 'AdminParentLocalization', 'AdminCartRules' => 'AdminPriceRule', 'AdminSpecificPriceRule' => 'AdminPriceRule', 'AdminQuickAccesses' => 'AdminAdmin', 'AdminPayment' => 'AdminParentModules', 'AdminCmsContent' => 'AdminParentPreferences', 'AdminStores' => 'AdminParentPreferences', 'AdminEmails' => 'AdminTools', 'AdminPerformance' => 'AdminTools', 'AdminAccountingConfiguration' => 'AdminTools', 'AdminAccountingRegisteredNumber' => 'AdminTools', 'AdminAccountingExport' => 'AdminStats', ); foreach ($move_to as $from => $to) { if (empty($parent[$to])) continue; $id_tab = get_tab_id($from); if ($id_tab) Db::getInstance()->execute(' UPDATE '._DB_PREFIX_.'tab SET id_parent = '.$parent[$to].' WHERE id_tab = '.$id_tab.' '); } // ===== Remove AdminThemes from Modules parent ===== $id_tab_theme = Db::getInstance()->getValue( 'SELECT id_tab FROM '._DB_PREFIX_.'tab WHERE class_name = \'AdminThemes\' AND id_parent = '.$parent['AdminParentModules'].' '); if ($id_tab_theme) Db::getInstance()->delete('tab', 'id_tab = '.$id_tab_theme); // ===== Create new tabs (but not parents this time) ===== add_new_tab('AdminOrderPreferences', 'en:Orders|fr:Commandes|es:Pedidos|de:Bestellungen|it:Ordini', $parent['AdminParentPreferences']); add_new_tab('AdminCustomerPreferences', 'en:Customers|fr:Clients|es:Clientes|de:Kunden|it:Clienti', $parent['AdminParentPreferences']); add_new_tab('AdminMaintenance', 'en:Maintenance|fr:Maintenance|es:Maintenance|de:Maintenance|it:Maintenance', $parent['AdminParentPreferences']); add_new_tab('AdminAdminPreferences', 'en:Preferences|fr:Préférences|es:Preferencias|de:Voreinstellungen|it:Preferenze', $parent['AdminAdmin']); // ===== Sort parent tabs ===== $position = 0; foreach ($parent as $id) Db::getInstance()->update('tab', array('position' => $position++), 'id_tab = '.(int)$id); $sql = 'SELECT id_tab FROM '._DB_PREFIX_.'tab WHERE id_tab NOT IN ('.implode(', ', $parent).') AND id_parent = 0'; $id_tabs = Db::getInstance()->executeS($sql); if (is_array($id_tabs) && count($id_tabs)) foreach (Db::getInstance()->executeS($sql) as $row) Db::getInstance()->update('tab', array('position' => $position++), 'id_tab = '.$row['id_tab']); } function get_tab_id($class_name) { static $cache = array(); if (!isset($cache[$class_name])) $cache[$class_name] = Db::getInstance()->getValue('SELECT id_tab FROM '._DB_PREFIX_.'tab WHERE class_name = \''.pSQL($class_name).'\''); return $cache[$class_name]; } /* DO NOT REMOVE THIS FUNCTION ! function get_tab_langs($classname) { $parent_xml = simplexml_load_file(_PS_INSTALL_DATA_PATH_.'xml/tab.xml'); $result = $parent_xml->xpath('entities/tab[class_name=\''.$classname.'\']'); $id = (string)$result[0]['id']; foreach (array('en', 'fr', 'es', 'de', 'it') as $iso) { $xml = simplexml_load_file(_PS_INSTALL_LANGS_PATH_.$iso.'/data/tab.xml'); $result = $xml->xpath('tab[@id=\''.$id.'\']'); $values[$iso] = (string)$result[0]['name']; } $return = ''; foreach ($values as $iso => $lang) $return .= $iso.':'.$lang.'|'; return utf8_decode(rtrim($return, '|')); } */