function update() { require_once JPATH_ADMINISTRATOR . '/components/com_sef/classes/config.php'; $db = JFactory::getDBO(); $jversion = new JVersion(); // 20.8.2013 dajo: adapters don't need installation anymore, they're registered using our system plugin, // so remove them from older versions $path = JPATH_LIBRARIES . '/joomla/installer/adapters/sef_ext.php'; if (JFile::exists($path)) { JFile::delete($path); } // Handle Joomla 3 if ($jversion->isCompatible('3.0.0')) { $path = JPATH_LIBRARIES . '/cms/installer/adapter/sef_ext.php'; if (JFile::exists($path)) { JFile::delete($path); } } $path = JPATH_LIBRARIES . '/joomla/updater/adapters/sef_update.php'; if (JFile::exists($path)) { JFile::delete($path); } // Install JoomSEF plugins $this->installPlugins(); JTable::addIncludePath(JPATH_LIBRARIES . '/joomla/database/table'); $ext_update_dir = dirname(__FILE__) . '/site/sef_ext/'; // Migrate existing extensions from old table $db = JFactory::getDBO(); $query = "SELECT * FROM #__sefexts"; $db->setQuery($query); $exts = $db->loadObjectList(); // Delete extensions from old table, so they don't cause problems later $db->setQuery("DELETE FROM #__sefexts"); $db->query(); for ($i = 0; $i < count($exts); $i++) { $xml_file = JPATH_SITE . '/components/com_sef/sef_ext/' . $exts[$i]->file; if (file_exists($ext_update_dir . $exts[$i]->file)) { $xml_file = $ext_update_dir . $exts[$i]->file; } if (!file_exists($xml_file)) { // Extension not available continue; } $xml = simplexml_load_file($xml_file); $element = $this->getElement($xml); $query = "SELECT COUNT(*) FROM #__extensions WHERE type=" . $db->quote('sef_ext') . " AND element=" . $db->quote($element); $db->setQuery($query); $cnt = $db->loadResult(); if ($cnt > 0) { continue; } $ext_table = JTable::getInstance('extension'); $ext_table->name = (string) $xml->name; $ext_table->type = 'sef_ext'; $ext_table->element = $element; $ext_table->enabled = 1; $ext_table->protected = 0; $ext_table->access = 1; $ext_table->client_id = 0; $params = new JRegistry($exts[$i]->params); $download_id = $params->get('downloadId'); if (strlen($exts[$i]->title)) { $params->def('custom_menu_title', $exts[$i]->title); } $ext_table->params = $params->toString(); $ext_table->custom_data = $exts[$i]->filters; $ext_table->manifest_cache = json_encode(JApplicationHelper::parseXMLInstallFile($xml_file)); $ext_table->store(); $query = "INSERT INTO #__schemas SET extension_id=" . $ext_table->extension_id . ", version_id=" . $db->quote((string) $xml->version); $db->setQuery($query); $db->query(); if (isset($xml->updateservers->server)) { $location = (string) $xml->updateservers->server; if (isset($download_id) && strlen($download_id)) { $location = str_replace('.xml', '-' . $download_id . '.xml', $location); } $query = "SELECT COUNT(*) FROM #__update_sites \n"; $query .= "WHERE type=" . $db->quote((string) $xml->updateservers->server['type']) . " AND name=" . $db->quote((string) $xml->updateservers->server['name']); $db->setQuery($query); $cnt = $db->loadResult(); if ($cnt) { $query = "UPDATE #__update_sites SET location=" . $db->quote($location) . ", enabled=1 \n"; $query .= "WHERE type=" . $db->quote((string) $xml->updateservers->server['type']) . " AND name=" . $db->quote((string) $xml->updateservers->server['name']); } else { $query = "INSERT INTO #__update_sites SET name=" . $db->quote((string) $xml->updateservers->server['name']) . ", type=" . $db->quote((string) $xml->updateservers->server['type']) . ", \n"; $query .= "location=" . $db->quote($location) . ", enabled=1 \n"; } $db->setQuery($query); $db->query(); $id = $db->insertId(); $query = "SELECT COUNT(*) FROM #__update_sites_extensions \n"; $query .= "WHERE update_site_id=" . $id; $db->setQuery($query); $cnt = $db->loadResult(); if ($cnt) { $query = "UPDATE #__update_sites_extensions \n"; $query .= "SET extension_id=" . $ext_table->extension_id . " \n"; $query .= "WHERE update_site_id=" . $id; } else { $query = "INSERT INTO #__update_sites_extensions SET update_site_id=" . $id . ", extension_id=" . $ext_table->extension_id . " \n"; } $db->setQuery($query); $db->query(); } } //Add existing extensions to Joomla extensions table $list = JFolder::files(JPATH_SITE . '/components/com_sef/sef_ext'); foreach ($list as $sef) { if (substr($sef, -4) != '.xml') { continue; } $xml_file = JPATH_SITE . '/components/com_sef/sef_ext/' . $sef; if (file_exists($ext_update_dir . $sef)) { $xml_file = $ext_update_dir . $sef; } $xml = simplexml_load_file($xml_file); $element = $this->getElement($xml); $query = "SELECT COUNT(*) FROM #__extensions WHERE type=" . $db->quote('sef_ext') . " AND element=" . $db->quote($element); $db->setQuery($query); $cnt = $db->loadResult(); if ($cnt > 0) { continue; } $ext_table = JTable::getInstance('extension'); $ext_table->name = (string) $xml->name; $ext_table->type = 'sef_ext'; $ext_table->element = $element; $ext_table->enabled = 1; $ext_table->protected = 0; $ext_table->access = 1; $ext_table->client_id = 0; if (isset($xml->install->defaultparams)) { $ext_table->params = SEFTools::getDefaultParams((string) $xml->install->defaultparams); } if (isset($xml->install->defaultfilters)) { $ext_table->custom_data = SEFTools::getDefaultFilters((string) $xml->install->defaultfilters); } $ext_table->manifest_cache = json_encode(JApplicationHelper::parseXMLInstallFile($xml_file)); $ext_table->store(); $query = "INSERT INTO #__schemas SET extension_id=" . $ext_table->extension_id . ", version_id=" . $db->quote((string) $xml->version); $db->setQuery($query); $db->query(); if (isset($xml->updateservers->server)) { $query = "INSERT INTO #__update_sites SET name=" . $db->quote((string) $xml->updateservers->server['name']) . ", type=" . $db->quote((string) $xml->updateservers->server['type']) . ", \n"; $query .= "location=" . $db->quote((string) $xml->updateservers->server) . ", enabled=1 \n"; $db->setQuery($query); $db->query(); $id = $db->insertId(); $query = "INSERT INTO #__update_sites_extensions SET update_site_id=" . $id . ", extension_id=" . $ext_table->extension_id . " \n"; $db->setQuery($query); $db->query(); } } $fields = $db->getTableColumns('#__sefurls'); $fields = array_keys($fields); if (!in_array('metaauthor', $fields)) { $query = "ALTER TABLE #__sefurls \n"; $query .= "ADD (metaauthor varchar(30) default '') \n"; $db->setQuery($query); $db->query(); } // 30.11.2012 dajo: Move stored configuration from params to custom_data field $db->setQuery("UPDATE `#__extensions` SET `custom_data` = `params` WHERE `type` = 'component' AND `element` = 'com_sef' AND (`custom_data` IS NULL OR `custom_data` = '') LIMIT 1"); $db->query(); // 2.1.2013 dajo: Remove left-over file if (JFile::exists(JPATH_ADMINISTRATOR . '/components/com_sef/tables/extension.php')) { JFile::delete(JPATH_ADMINISTRATOR . '/components/com_sef/tables/extension.php'); } ob_start(); $tmp_path = JFactory::getApplication()->getCfg('tmp_path'); if (JFile::exists($tmp_path . '/joomsef-configuration.php')) { require_once $tmp_path . '/joomsef-configuration.php'; } if (isset($artioDownloadId) && strlen($artioDownloadId)) { $query = "SELECT location FROM #__update_sites \n"; $query .= "WHERE name=" . $db->quote('com_joomsef'); $db->setQuery($query); $location = $db->loadResult(); if (!preg_match("/(-([A-Za-z0-9]*)).xml/", $location)) { ?> <p class="message"> It was found, that you have an commercial version of Artio JoomSEF and you dont have migrated your download id. Please finish upgrade by clicking <a href="index.php?option=com_sef&task=finish_upgrade">here</a> </p> <?php } } $output = ob_get_contents(); ob_end_clean(); echo $output; return true; }
function discover_install() { $option = str_replace('ext_joomsef4_', 'com_', $this->parent->extension->element); $manifest_path = JPATH_ROOT . '/components/com_sef/sef_ext/' . $option . '.xml'; $this->parent->manifest = $this->parent->isManifest($manifest_path); if (!is_object($this->parent->manifest)) { JError::raiseWarning(101, JText::_('COM_SEF_INSTALLER_ERROR_SEF_DISCOVER_STORE_DETAILS')); return false; } $description = (string) $this->parent->manifest->description; if ($description) { $this->parent->set('message', $description); } else { $this->parent->set('message'); } $this->parent->setPath('manifest', $manifest_path); $manifest_details = JApplicationHelper::parseXMLInstallFile($this->parent->getPath('manifest')); $this->parent->extension->manifest_cache = json_encode($manifest_details); $this->parent->extension->state = 0; $this->parent->extension->name = $manifest_details['name']; $this->parent->extension->enabled = 1; if (isset($this->manifest->install->defaultparams)) { $this->parent->extension->params = SEFTools::getDefaultParams((string) $this->manifest->install->defaultparams); } if (isset($this->manigest->install->defaultfilters)) { $this->parent->extension->custom_data = SEFTools::getDefaultFilters((string) $this->manigest->install->defaultfilters); } if ($this->parent->extension->store()) { return $this->parent->extension->get('extension_id'); } else { JError::raiseWarning(101, JText::_('COM_SEF_INSTALLER_ERROR_SEF_DISCOVER_STORE_DETAILS')); return false; } $utfresult = $this->parent->parseSQLFiles($this->manifest->install->sql); if ($utfresult === false) { JError::raiseWarning(JText::sprintf('COM_SEF_INSTALLER_ABORT_SEF_INSTALL_SQL_ERROR', JText::_('JLIB_INSTALLER_' . $this->route), $db->stderr(true))); return false; } if ($this->manifest->update) { $this->parent->setSchemaVersion($this->manifest->update->schemas, $row->extension_id); } }