コード例 #1
0
ファイル: helper.php プロジェクト: rafarubert/megafiltros
 /**
  * Performs post-populate conversions after importing a migration script
  * These include constructing an appropriate menu table for core content items
  * and adding core modules from old site to the modules table
  *
  * @static
  * @param JDatabase
  * @param array errors (by ref)
  * @return error count
  * @since 1.5
  */
 function postMigrate($db, &$errors, &$args)
 {
     $newPrefix = $args['DBPrefix'];
     /*
      * Check to see if migration is from 4.5.1
      */
     $query = 'SELECT id FROM ' . $newPrefix . 'users WHERE usertype = "superadministrator"';
     $db->setQuery($query);
     $rows = $db->loadRowList();
     JInstallationHelper::getDBErrors($errors, $db);
     /*
      * if it is, then fill usertype field with correct values from aro_group
      */
     if (count($rows) > 0) {
         $query = 'UPDATE ' . $newPrefix . 'users AS u, ' . $newPrefix . 'core_acl_aro_groups AS g' . ' SET u.usertype = g.value' . ' WHERE u.gid = g.id';
         $db->setQuery($query);
         $db->query();
         JInstallationHelper::getDBErrors($errors, $db);
     }
     /*
      * Construct the menu table based on old table references to core items
      */
     // Component - change all
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `type` = "component" WHERE `type` = "components";';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // Component Item Link
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = SUBSTRING(link, 1, LOCATE("&Itemid=", link) -1), `type` = "component" WHERE `type` = "component_item_link";';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // get com_contact id
     $query = 'SELECT `id` FROM `' . $newPrefix . 'components` WHERE `option`="com_contact" AND `parent` = 0';
     $db->setQuery($query);
     JInstallationHelper::getDBErrors($errors, $db);
     $compId = $db->loadResult();
     // contact category table
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET  `link` = INSERT(link, LOCATE("catid=", link), 0, "view=category&"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "contact_category_table"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // contact item link
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET  `link` = INSERT(link, LOCATE("task=view", link), 20, "view=contact&id"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "contact_item_link"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // fix up standalone contact
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = "index.php?option=com_contact&view=category" WHERE `link` = "index.php?option=com_contact"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // get com_content id
     $query = 'SELECT `id` FROM `' . $newPrefix . 'components` WHERE `option`="com_content" AND `parent` = 0';
     $db->setQuery($query);
     $compId = $db->loadResult();
     JInstallationHelper::getDBErrors($errors, $db);
     // front page
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = "index.php?option=com_content&view=frontpage", `type` = "component", `componentid` = ' . $compId . ' WHERE `link` LIKE "%option=com_frontpage%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // content archive category or section
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET  `link` = "index.php?option=com_content&view=archive", `type` = "component", `componentid` = ' . $compId . ' WHERE (`type` = "content_archive_category" OR `type` = "content_archive_section")';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // content blog category
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET  `link` = INSERT(link, LOCATE("task=blogcat", link), 17, "view=category&layout=blog"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "content_blog_category"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // content blog section
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("task=blogsec", link), 16, "view=section&layout=blog"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "content_blog_section";';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // content category
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("task=", link), LOCATE("&id=", link) - LOCATE("task=", link), "view=category"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "content_category"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // content item link and typed content
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET  `link` = INSERT(link, LOCATE("task=", link), 9, "view=article"), `type` = "component", `componentid` = ' . $compId . ' WHERE (`type` = "content_item_link" OR `type` = "content_typed")';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // content section
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET  `link` = INSERT(link, LOCATE("task=", link), 12, "view=section"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "content_section"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // get com_newsfeeds id
     $query = 'SELECT `id` FROM `' . $newPrefix . 'components` WHERE `option`="com_newsfeeds" AND `parent` = 0';
     $db->setQuery($query);
     $compId = $db->loadResult();
     JInstallationHelper::getDBErrors($errors, $db);
     // newsfeed categories
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = CONCAT(link, "&view=categories"), `componentid` = ' . $compId . ' WHERE `type` = "component" AND link LIKE "%option=com_newsfeeds%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // newsfeed category table
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("catid=", link), 5, "view=category&catid"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "newsfeed_category_table"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // newsfeed link
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("task=", link), 9, "view=newsfeed"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "newsfeed_link"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // user checkin items
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("CheckIn", link), 7, "checkin") WHERE `type` = "url" AND link LIKE "%option=com_user&task=CheckIn%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // user edit details
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("UserDetails", link), 11, "edit") WHERE `type` = "url" AND link LIKE "%option=com_user&task=UserDetails%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // get com_weblinks id
     $query = 'SELECT `id` FROM `' . $newPrefix . 'components` WHERE `option`="com_weblinks" AND `parent` = 0';
     $db->setQuery($query);
     $compId = $db->loadResult();
     JInstallationHelper::getDBErrors($errors, $db);
     // weblinks categories
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = CONCAT(link, "&view=categories"), `componentid` = ' . $compId . ' WHERE `type` = "component" AND link LIKE "%option=com_weblinks%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // weblinks category table
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("catid=", link), 5, "view=category&catid"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "weblink_category_table"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // weblinks submit new item
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = INSERT(link, LOCATE("task=", link), 8, "view=weblink&layout=form") WHERE `type` = "url" AND link LIKE "%option=com_weblinks%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // get com_wrapper id
     $query = 'SELECT `id` FROM `' . $newPrefix . 'components` WHERE `option`="com_wrapper" AND `parent` = 0';
     $db->setQuery($query);
     JInstallationHelper::getDBErrors($errors, $db);
     $compId = $db->loadResult();
     // wrapper
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = CONCAT(link, "&view=wrapper"), `type` = "component", `componentid` = ' . $compId . ' WHERE `type` = "wrapper"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // set default to lowest ordering published on mainmenu
     $query = 'SELECT MIN( `ordering` ) FROM `' . $newPrefix . 'menu_migration` WHERE `published` = 1 AND `parent` = 0 AND `menutype` = "mainmenu"';
     $db->setQuery($query);
     $minorder = $db->loadResult();
     if (!$minorder) {
         $minorder = 0;
     }
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'SELECT `id` FROM `' . $newPrefix . 'menu_migration` WHERE `published` = 1 AND `parent` = 0 AND `menutype` = "mainmenu" AND `ordering` = ' . $minorder;
     $db->setQuery($query);
     $menuitemid = $db->loadResult();
     JInstallationHelper::getDBErrors($errors, $db);
     if (!$menuitemid) {
         $menuitemid = 1;
     }
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `home` = 1 WHERE `id` = ' . $menuitemid;
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // login and log out; component id and link update
     $query = 'SELECT id FROM `' . $newPrefix . 'components` WHERE link like "option=com_user"';
     $db->setQuery($query);
     $componentid = $db->loadResult();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET componentid = ' . $componentid . ' WHERE link = "index.php?option=com_login"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET link = "index.php?option=com_user&view=login" WHERE link = "index.php?option=com_login"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // Search - Component ID Update
     $query = 'SELECT id FROM `' . $newPrefix . 'components` WHERE link like "option=com_search"';
     $db->setQuery($query);
     $componentid = $db->loadResult();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET componentid = ' . $componentid . ' WHERE link like "index.php?option=com_search%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     // tidy up urls with Itemids
     $query = 'UPDATE `' . $newPrefix . 'menu_migration` SET `link` = SUBSTRING(`link`,1,LOCATE("&Itemid",`link`)-1) WHERE `type` = "url" AND `link` LIKE "%&Itemid=%"';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'SELECT DISTINCT `option` FROM ' . $newPrefix . 'components WHERE `option` != ""';
     $db->setQuery($query);
     $lookup = $db->loadResultArray();
     JInstallationHelper::getDBErrors($errors, $db);
     $lookup[] = 'com_user&';
     // prepare to copy across
     $query = 'SELECT * FROM ' . $newPrefix . 'menu_migration';
     $db->setQuery($query);
     $oldMenuItems = $db->loadObjectList();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'DELETE FROM ' . $newPrefix . 'menu WHERE 1';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'SELECT * FROM ' . $newPrefix . 'menu';
     $db->setQuery($query);
     $newMenuItems = $db->loadObjectList();
     JInstallationHelper::getDBErrors($errors, $db);
     // filter out links to 3pd components
     foreach ($oldMenuItems as $item) {
         if ($item->type == 'url' && !strpos($item->link, 'com_')) {
             $newMenuItems[] = $item;
         } else {
             if ($item->type == 'url' && JInstallationHelper::isValidItem($item->link, $lookup)) {
                 $newMenuItems[] = $item;
             } else {
                 if ($item->type == 'component') {
                     // unpublish components that don't exist yet
                     if (!JInstallationHelper::isValidItem($item->link, $lookup)) {
                         $item->published = 0;
                     }
                     $newMenuItems[] = $item;
                 }
             }
         }
     }
     // build the menu table
     foreach ($newMenuItems as $item) {
         $db->insertObject($newPrefix . 'menu', $item);
         JInstallationHelper::getDBErrors($errors, $db);
     }
     // fix possible orphaned sub menu items
     $query = 'UPDATE  `' . $newPrefix . 'menu` AS c LEFT OUTER JOIN `' . $newPrefix . 'menu` AS p ON c.parent = p.id SET c.parent = 0 WHERE c.parent <> 0 AND p.id IS NULL';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     /*
      * Construct the menu_type table base on new menu table types
      */
     $query = 'SELECT DISTINCT `menutype` FROM ' . $newPrefix . 'menu WHERE 1';
     $db->setQuery($query);
     JInstallationHelper::getDBErrors($errors, $db);
     $menuTypes = $db->loadResultArray();
     $query = 'TRUNCATE TABLE ' . $newPrefix . 'menu_types';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     foreach ($menuTypes as $mType) {
         $query = 'INSERT INTO ' . $newPrefix . 'menu_types ( menutype, title ) VALUES ("' . $mType . '", "' . $mType . '");';
         $db->setQuery($query);
         $db->query();
         JInstallationHelper::getDBErrors($errors, $db);
     }
     /*
      * Add core client modules from old site to modules table as unpublished
      */
     $query = 'SELECT id FROM ' . $newPrefix . 'modules_migration WHERE client_id = 0 ';
     $db->setQuery($query);
     $lookup = $db->loadResultArray();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'SELECT MAX(id) FROM ' . $newPrefix . 'modules ';
     $db->setQuery($query);
     $nextId = $db->loadResult();
     JInstallationHelper::getDBErrors($errors, $db);
     jimport('joomla.filesystem.folder');
     jimport('joomla.filesystem.file');
     foreach ($lookup as $module) {
         $qry = 'SELECT * FROM ' . $newPrefix . 'modules_migration WHERE id = "' . $module . '" AND client_id = 0';
         $db->setQuery($qry);
         if ($row = $db->loadObject()) {
             if ($row->module == '') {
                 $row->module = 'mod_custom';
             }
             if (JFolder::exists(JPATH_SITE . DS . 'modules' . DS . $row->module)) {
                 $nextId++;
                 $oldid = $row->id;
                 $row->id = $nextId;
                 $row->published = 0;
                 if ($db->insertObject($newPrefix . 'modules', $row)) {
                     // Grab the old modules menu links and put them in too!
                     $qry = 'SELECT * FROM ' . $newPrefix . 'modules_migration_menu WHERE moduleid = ' . $oldid;
                     $db->setQuery($qry);
                     $entries = $db->loadObjectList();
                     JInstallationHelper::getDBErrors($errors, $db);
                     foreach ($entries as $entry) {
                         $entry->moduleid = $nextId;
                         $db->insertObject($newPrefix . 'modules_menu', $entry);
                         JInstallationHelper::getDBErrors($errors, $db);
                     }
                 } else {
                     JInstallationHelper::getDBErrors($errors, $db);
                 }
             }
             // else the module doesn't exist?
         } else {
             JInstallationHelper::getDBErrors($errors, $db);
         }
     }
     // Put in breadcrumb module as per sample data
     $query = "INSERT INTO `" . $newPrefix . "modules` VALUES (0, 'Breadcrumbs', '', 1, 'breadcrumb', 0, '0000-00-00 00:00:00', 1, 'mod_breadcrumbs', 0, 0, 1, 'moduleclass_sfx=\ncache=0\nshowHome=1\nhomeText=Home\nshowComponent=1\nseparator=\n\n', 1, 0, '');";
     $db->setQuery($query);
     $db->Query();
     JInstallationHelper::getDBErrors($errors, $db);
     /*
      * Clean up
      */
     $query = 'DROP TABLE IF EXISTS ' . $newPrefix . 'modules_migration';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'DROP TABLE IF EXISTS ' . $newPrefix . 'modules_migration_menu';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     $query = 'DROP TABLE IF EXISTS ' . $newPrefix . 'menu_migration';
     $db->setQuery($query);
     $db->query();
     JInstallationHelper::getDBErrors($errors, $db);
     return count($errors);
 }