diff --git a/administrator/components/com_installer/controllers/update.php b/administrator/components/com_installer/controllers/update.php index 37b2aaae7d3e4..94cdef43e966f 100644 --- a/administrator/components/com_installer/controllers/update.php +++ b/administrator/components/com_installer/controllers/update.php @@ -94,7 +94,11 @@ public function purge() JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $model = $this->getModel('update'); $model->purge(); - $model->enableSites(); + + // We no longer need to enable update sites in Joomla! 3.4 as we now allow the users to manage update sites + // themselves. + // $model->enableSites(); + $this->setRedirect(JRoute::_('index.php?option=com_installer&view=update', false), $model->_message); } diff --git a/administrator/components/com_installer/controllers/updatesites.php b/administrator/components/com_installer/controllers/updatesites.php new file mode 100644 index 0000000000000..ab9fce36cb232 --- /dev/null +++ b/administrator/components/com_installer/controllers/updatesites.php @@ -0,0 +1,76 @@ +registerTask('unpublish', 'publish'); + $this->registerTask('publish', 'publish'); + } + + /** + * Enable/Disable an extension (if supported). + * + * @return void + * + * @since 3.4 + * + * @throws Exception on error + */ + public function publish() + { + // Check for request forgeries. + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $ids = $this->input->get('cid', array(), 'array'); + $values = array('publish' => 1, 'unpublish' => 0); + $task = $this->getTask(); + $value = JArrayHelper::getValue($values, $task, 0, 'int'); + + if (empty($ids)) + { + throw new Exception(JText::_('COM_INSTALLER_ERROR_NO_UPDATESITES_SELECTED'), 500); + } + + // Get the model. + $model = $this->getModel('Updatesites'); + + // Change the state of the records. + if (!$model->publish($ids, $value)) + { + throw new Exception(implode('
', $model->getErrors()), 500); + } + + $ntext = ($value == 0) ? 'COM_INSTALLER_N_EXTENSIONS_UNPUBLISHED' : 'COM_INSTALLER_N_EXTENSIONS_PUBLISHED'; + + $this->setMessage(JText::plural($ntext, count($ids))); + + $this->setRedirect(JRoute::_('index.php?option=com_installer&view=updatesites', false)); + } +} diff --git a/administrator/components/com_installer/helpers/installer.php b/administrator/components/com_installer/helpers/installer.php index 2a30c544f05b4..fa1dffaf5a5fc 100644 --- a/administrator/components/com_installer/helpers/installer.php +++ b/administrator/components/com_installer/helpers/installer.php @@ -62,6 +62,11 @@ public static function addSubmenu($vName = 'install') 'index.php?option=com_installer&view=languages', $vName == 'languages' ); + JHtmlSidebar::addEntry( + JText::_('COM_INSTALLER_SUBMENU_UPDATESITES'), + 'index.php?option=com_installer&view=updatesites', + $vName == 'updatesites' + ); } /** diff --git a/administrator/components/com_installer/models/extension.php b/administrator/components/com_installer/models/extension.php index ce653cb270f32..a731540c95e1e 100644 --- a/administrator/components/com_installer/models/extension.php +++ b/administrator/components/com_installer/models/extension.php @@ -103,7 +103,7 @@ protected function _getList($query, $limitstart = 0, $limit = 0) * * @return array The array of translated objects */ - private function translate(&$items) + protected function translate(&$items) { $lang = JFactory::getLanguage(); foreach ($items as &$item) diff --git a/administrator/components/com_installer/models/update.php b/administrator/components/com_installer/models/update.php index 17b7790f8345e..2f0e5df60fe45 100644 --- a/administrator/components/com_installer/models/update.php +++ b/administrator/components/com_installer/models/update.php @@ -177,12 +177,12 @@ public function purge() ->set($db->quoteName('last_check_timestamp') . ' = ' . $db->quote(0)); $db->setQuery($query); $db->execute(); - $this->_message = JText::_('COM_INSTALLER_PURGED_UPDATES'); + $this->_message = JText::_('JLIB_INSTALLER_PURGED_UPDATES'); return true; } else { - $this->_message = JText::_('COM_INSTALLER_FAILED_TO_PURGE_UPDATES'); + $this->_message = JText::_('JLIB_INSTALLER_FAILED_TO_PURGE_UPDATES'); return false; } } diff --git a/administrator/components/com_installer/models/updatesites.php b/administrator/components/com_installer/models/updatesites.php new file mode 100644 index 0000000000000..c573973bbbf49 --- /dev/null +++ b/administrator/components/com_installer/models/updatesites.php @@ -0,0 +1,249 @@ +getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $clientId = $this->getUserStateFromRequest($this->context . '.filter.client_id', 'filter_client_id', ''); + $this->setState('filter.client_id', $clientId); + + $status = $this->getUserStateFromRequest($this->context . '.filter.enabled', 'filter_enabled', ''); + $this->setState('filter.enabled', $status); + + $categoryId = $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', ''); + $this->setState('filter.type', $categoryId); + + $group = $this->getUserStateFromRequest($this->context . '.filter.group', 'filter_group', ''); + $this->setState('filter.group', $group); + + parent::populateState('name', 'asc'); + } + + /** + * Enable/Disable an extension. + * + * @param array &$eid Extension ids to un/publish + * @param int $value Publish value + * + * @return boolean True on success + * + * @since 3.4 + * + * @throws Exception on ACL error + */ + public function publish(&$eid = array(), $value = 1) + { + $user = JFactory::getUser(); + + if (!$user->authorise('core.edit.state', 'com_installer')) + { + throw new Exception(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), 403); + } + + $result = true; + + /* + * Ensure eid is an array of extension ids + */ + if (!is_array($eid)) + { + $eid = array($eid); + } + + // Get a table object for the extension type + $table = JTable::getInstance('Updatesite'); + + // Enable the update site in the table and store it in the database + foreach ($eid as $i => $id) + { + $table->load($id); + $table->enabled = $value; + + if (!$table->store()) + { + $this->setError($table->getError()); + $result = false; + } + } + + return $result; + } + + /** + * Method to get the database query + * + * @return JDatabaseQuery The database query + * + * @since 3.4 + */ + protected function getListQuery() + { + $enabled = $this->getState('filter.enabled'); + $type = $this->getState('filter.type'); + $client = $this->getState('filter.client_id'); + $group = $this->getState('filter.group'); + + $query = JFactory::getDbo()->getQuery(true) + ->select(array( + 's.update_site_id', + 's.name as update_site_name', + 's.type as update_site_type', + 's.location', + 's.enabled', + 'e.extension_id', + 'e.name', + 'e.type', + 'e.element', + 'e.folder', + 'e.client_id', + 'e.state', + 'e.manifest_cache', + )) + ->from('#__update_sites AS s') + ->innerJoin('#__update_sites_extensions AS se on(se.update_site_id = s.update_site_id)') + ->innerJoin('#__extensions AS e ON(e.extension_id = se.extension_id)') + ->where('state=0'); + + if ($enabled != '') + { + $query->where('s.enabled=' . (int)$enabled); + } + + if ($type) + { + $query->where('e.type=' . $this->_db->quote($type)); + } + + if ($client != '') + { + $query->where('client_id=' . (int)$client); + } + + if ($group != '' && in_array($type, array('plugin', 'library', ''))) + { + $query->where('folder=' . $this->_db->quote($group == '*' ? '' : $group)); + } + + // Filter by search in id + $search = $this->getState('filter.search'); + + if (!empty($search) && stripos($search, 'id:') === 0) + { + $query->where('s.update_site_id = ' . (int)substr($search, 3)); + } + + return $query; + } + + /** + * Returns an object list + * + * @param string $query The query + * @param int $limitstart Offset + * @param int $limit The number of records + * + * @return array + */ + protected function _getList($query, $limitstart = 0, $limit = 0) + { + $ordering = $this->getState('list.ordering'); + $search = $this->getState('filter.search'); + + // Replace slashes so preg_match will work + $search = str_replace('/', ' ', $search); + $db = $this->getDbo(); + + if ($ordering == 'name' || (!empty($search) && stripos($search, 'id:') !== 0)) + { + $db->setQuery($query); + $result = $db->loadObjectList(); + $this->translate($result); + + if (!empty($search) && (stripos($search, 'id:') !== 0)) + { + foreach ($result as $i => $item) + { + if (!preg_match("/$search/i", $item->name) && !preg_match("/$search/i", $item->update_site_name)) + { + unset($result[$i]); + } + } + } + + JArrayHelper::sortObjects($result, $this->getState('list.ordering'), $this->getState('list.direction') == 'desc' ? -1 : 1, true, true); + + $total = count($result); + $this->cache[$this->getStoreId('getTotal')] = $total; + + if ($total < $limitstart) + { + $limitstart = 0; + $this->setState('list.start', 0); + } + + return array_slice($result, $limitstart, $limit ? $limit : null); + } + + $query->order($db->quoteName($ordering) . ' ' . $this->getState('list.direction')); + $result = parent::_getList($query, $limitstart, $limit); + $this->translate($result); + + return $result; + } +} diff --git a/administrator/components/com_installer/views/update/view.html.php b/administrator/components/com_installer/views/update/view.html.php index 120618af6a1e6..8ff79988e6dbd 100644 --- a/administrator/components/com_installer/views/update/view.html.php +++ b/administrator/components/com_installer/views/update/view.html.php @@ -80,6 +80,7 @@ protected function addToolbar() { JToolbarHelper::custom('update.update', 'upload', 'upload', 'COM_INSTALLER_TOOLBAR_UPDATE', true, false); JToolbarHelper::custom('update.find', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_FIND_UPDATES', false, false); + JToolbarHelper::custom('update.purge', 'purge', 'purge', 'COM_INSTALLER_TOOLBAR_PURGE', false, false); JToolbarHelper::divider(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATE'); diff --git a/administrator/components/com_installer/views/updatesites/index.html b/administrator/components/com_installer/views/updatesites/index.html new file mode 100644 index 0000000000000..2efb97f319a35 --- /dev/null +++ b/administrator/components/com_installer/views/updatesites/index.html @@ -0,0 +1 @@ + diff --git a/administrator/components/com_installer/views/updatesites/tmpl/default.php b/administrator/components/com_installer/views/updatesites/tmpl/default.php new file mode 100644 index 0000000000000..220fcd274277e --- /dev/null +++ b/administrator/components/com_installer/views/updatesites/tmpl/default.php @@ -0,0 +1,129 @@ +escape($this->state->get('list.ordering')); +$listDirn = $this->escape($this->state->get('list.direction')); +?> +
+
+ sidebar)) : ?> +
+ sidebar; ?> +
+
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+ +
+ + +
+
+
+ + items)) : ?> + + + + + + + + + + + + + + + + + + + + items as $i => $item) : ?> + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ pagination->getListFooter(); ?> +
+ update_site_id); ?> + + element) : ?> + X + + enabled, $i, 'updatesites.'); ?> + + + update_site_name; ?> + + + name; ?> + + + client; ?> + + type); ?> + + folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> + + update_site_id ?> +
+ + + + + + + + +
+ +
diff --git a/administrator/components/com_installer/views/updatesites/tmpl/index.html b/administrator/components/com_installer/views/updatesites/tmpl/index.html new file mode 100644 index 0000000000000..2efb97f319a35 --- /dev/null +++ b/administrator/components/com_installer/views/updatesites/tmpl/index.html @@ -0,0 +1 @@ + diff --git a/administrator/components/com_installer/views/updatesites/view.html.php b/administrator/components/com_installer/views/updatesites/view.html.php new file mode 100644 index 0000000000000..213cae1e27cee --- /dev/null +++ b/administrator/components/com_installer/views/updatesites/view.html.php @@ -0,0 +1,119 @@ +state = $this->get('State'); + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Check if there are no matching items + if (!count($this->items)) + { + JFactory::getApplication()->enqueueMessage( + JText::_('COM_INSTALLER_MSG_MANAGE_NOUPDATESITE'), + 'warning' + ); + } + + // Include the component HTML helpers. + JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); + + // Display the view + parent::display($tpl); + } + + /** + * Add the page title and toolbar. + * + * @return void + * + * @since 3.4 + */ + protected function addToolbar() + { + $canDo = JHelperContent::getActions('com_installer'); + + if ($canDo->get('core.edit.state')) + { + JToolbarHelper::publish('updatesites.publish', 'JTOOLBAR_ENABLE', true); + JToolbarHelper::unpublish('updatesites.unpublish', 'JTOOLBAR_DISABLE', true); + JToolbarHelper::divider(); + } + + JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATESITES'); + + JHtmlSidebar::setAction('index.php?option=com_installer&view=updatesites'); + + JHtmlSidebar::addFilter( + JText::_('COM_INSTALLER_VALUE_CLIENT_SELECT'), + 'filter_client_id', + JHtml::_('select.options', array('0' => 'JSITE', '1' => 'JADMINISTRATOR'), 'value', 'text', $this->state->get('filter.client_id'), true) + ); + + JHtmlSidebar::addFilter( + JText::_('COM_INSTALLER_VALUE_STATE_SELECT'), + 'filter_enabled', + JHtml::_('select.options', array('0' => 'JUNPUBLISHED', '1' => 'JPUBLISHED'), 'value', 'text', $this->state->get('filter.enabled'), true) + ); + + JHtmlSidebar::addFilter( + JText::_('COM_INSTALLER_VALUE_TYPE_SELECT'), + 'filter_type', + JHtml::_('select.options', InstallerHelper::getExtensionTypes(), 'value', 'text', $this->state->get('filter.type'), true) + ); + + JHtmlSidebar::addFilter( + JText::_('COM_INSTALLER_VALUE_FOLDER_SELECT'), + 'filter_group', + JHtml::_('select.options', array_merge(InstallerHelper::getExtensionGroupes(), array('*' => JText::_('COM_INSTALLER_VALUE_FOLDER_NONAPPLICABLE'))), 'value', 'text', $this->state->get('filter.group'), true) + ); + + parent::addToolbar(); + } +} diff --git a/administrator/language/en-GB/en-GB.com_installer.ini b/administrator/language/en-GB/en-GB.com_installer.ini index eb91a6518b4fc..6eda7ecf49d6b 100644 --- a/administrator/language/en-GB/en-GB.com_installer.ini +++ b/administrator/language/en-GB/en-GB.com_installer.ini @@ -13,6 +13,7 @@ COM_INSTALLER_ENABLED_UPDATES_MORE=", %s disabled sites were enabled" COM_INSTALLER_ERROR_DISABLE_DEFAULT_TEMPLATE_NOT_PERMITTED="Disable default template is not permitted" COM_INSTALLER_ERROR_METHOD="Method Not Implemented" COM_INSTALLER_ERROR_NO_EXTENSIONS_SELECTED="No extensions selected" +COM_INSTALLER_ERROR_NO_UPDATESITES_SELECTED="No update sites selected" COM_INSTALLER_EXTENSION_DISABLE="Disable extension" COM_INSTALLER_EXTENSION_DISABLED="Disabled extension" COM_INSTALLER_EXTENSION_ENABLE="Enable extension" @@ -22,7 +23,6 @@ COM_INSTALLER_EXTENSION_PROTECTED="Protected extension" COM_INSTALLER_EXTENSION_PUBLISHED="Extension successfully enabled." COM_INSTALLER_EXTENSION_UNPUBLISHED="Extension successfully disabled." COM_INSTALLER_FAILED_TO_ENABLE_UPDATES=", failed to enable updates" -COM_INSTALLER_FAILED_TO_PURGE_UPDATES="Failed to purge updates" COM_INSTALLER_FILTER_LABEL="Search by extension name" COM_INSTALLER_HEADER_DATABASE="Extension Manager: Check Database" COM_INSTALLER_HEADER_DISCOVER="Extension Manager: Discover" @@ -30,6 +30,7 @@ COM_INSTALLER_HEADER_INSTALL="Extension Manager: Install" COM_INSTALLER_HEADER_LANGUAGES="Install Accredited Language Translations" COM_INSTALLER_HEADER_MANAGE="Extension Manager: Manage" COM_INSTALLER_HEADER_UPDATE="Extension Manager: Update" +COM_INSTALLER_HEADER_UPDATESITES="Extension Manager: Update Sites" COM_INSTALLER_HEADER_WARNINGS="Extension Manager: Warnings" COM_INSTALLER_HEADING_CLIENT="Client" COM_INSTALLER_HEADING_DETAILS_URL="Details URL" @@ -40,6 +41,8 @@ COM_INSTALLER_HEADING_INSTALLTYPE="Install Type" COM_INSTALLER_HEADING_LOCATION="Location" COM_INSTALLER_HEADING_NAME="Name" COM_INSTALLER_HEADING_TYPE="Type" +COM_INSTALLER_HEADING_UPDATESITE_NAME="Update Site" +COM_INSTALLER_HEADING_UPDATESITEID="Update Site ID" COM_INSTALLER_INSTALL_BUTTON="Install" COM_INSTALLER_INSTALL_DIRECTORY="Install Directory" COM_INSTALLER_INSTALL_ERROR="Error installing %s" @@ -98,6 +101,7 @@ COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_PACKAGE="The installer can't get th COM_INSTALLER_MSG_LANGUAGES_NOLANGUAGES="There are no available languages to install at the moment. Please click on the "Find languages" button to check for updates on the Joomla Languages server. You will need an internet connection for this to work." COM_INSTALLER_MSG_LANGUAGES_TRY_LATER="Try again later or contact the language team coordinator" COM_INSTALLER_MSG_MANAGE_NOEXTENSION="There are no extensions installed matching your query" +COM_INSTALLER_MSG_MANAGE_NOUPDATESITE="There are no update sites matching your query" COM_INSTALLER_MSG_N_DATABASE_ERROR_PANEL="%d Database Problems Found" COM_INSTALLER_MSG_N_DATABASE_ERROR_PANEL_1="1 Database Problem Found" COM_INSTALLER_MSG_UPDATE_ERROR="Error updating %s." @@ -134,13 +138,14 @@ COM_INSTALLER_N_EXTENSIONS_PUBLISHED="%d extensions successfully enabled." COM_INSTALLER_N_EXTENSIONS_PUBLISHED_1="%d extension successfully enabled." COM_INSTALLER_N_EXTENSIONS_UNPUBLISHED="%d extensions successfully disabled." COM_INSTALLER_N_EXTENSIONS_UNPUBLISHED_1="%d extension successfully disabled." +COM_INSTALLER_N_UPDATESITES_PUBLISHED="%d update sites successfully enabled." +COM_INSTALLER_N_UPDATESITES_PUBLISHED_1="%d update site successfully enabled." COM_INSTALLER_NEW_INSTALL="New install" COM_INSTALLER_NO_INSTALL_TYPE_FOUND="No Install Type Found" COM_INSTALLER_PACKAGE_DOWNLOAD_FAILED="Package download failed: %s" COM_INSTALLER_PACKAGE_FILE="Package File" COM_INSTALLER_PREFERENCES_DESCRIPTION="Fine-tune how extensions installation and updates work" COM_INSTALLER_PREFERENCES_LABEL="Preferences" -COM_INSTALLER_PURGED_UPDATES="Purged updates" COM_INSTALLER_SHOW_JED_INFORMATION_DESC="Show or hide the information at the top of the installer page about the Joomla! Extensions Directory." COM_INSTALLER_SHOW_JED_INFORMATION_HIDE_MESSAGE="Hide message" COM_INSTALLER_SHOW_JED_INFORMATION_LABEL="Joomla! Extensions Directory" @@ -152,6 +157,7 @@ COM_INSTALLER_SUBMENU_INSTALL="Install" COM_INSTALLER_SUBMENU_LANGUAGES="Install languages" COM_INSTALLER_SUBMENU_MANAGE="Manage" COM_INSTALLER_SUBMENU_UPDATE="Update" +COM_INSTALLER_SUBMENU_UPDATESITES="Update Sites" COM_INSTALLER_SUBMENU_WARNINGS="Warnings" COM_INSTALLER_TITLE_DATABASE="Extension manager - Database" COM_INSTALLER_TITLE_DISCOVER="Extension manager - Discover" @@ -159,12 +165,14 @@ COM_INSTALLER_TITLE_INSTALL="Extension manager - Install" COM_INSTALLER_TITLE_LANGUAGES="Extension manager - Install Languages" COM_INSTALLER_TITLE_MANAGE="Extension manager - Manage" COM_INSTALLER_TITLE_UPDATE="Extension manager - Update" +COM_INSTALLER_TITLE_UPDATESITES="Extension manager - Update Sites" COM_INSTALLER_TITLE_WARNINGS="Extension manager - Warnings" COM_INSTALLER_TOOLBAR_DATABASE_FIX="Fix" COM_INSTALLER_TOOLBAR_DISCOVER="Discover" COM_INSTALLER_TOOLBAR_FIND_LANGUAGES="Find languages" COM_INSTALLER_TOOLBAR_FIND_UPDATES="Find Updates" COM_INSTALLER_TOOLBAR_INSTALL="Install" +COM_INSTALLER_TOOLBAR_PURGE="Purge" COM_INSTALLER_TOOLBAR_UPDATE="Update" COM_INSTALLER_TYPE_CLIENT="Location" COM_INSTALLER_TYPE_COMPONENT="Component" diff --git a/administrator/language/en-GB/en-GB.ini b/administrator/language/en-GB/en-GB.ini index 70c05b89607ff..abcca73e2ce79 100644 --- a/administrator/language/en-GB/en-GB.ini +++ b/administrator/language/en-GB/en-GB.ini @@ -648,6 +648,7 @@ JHELP_EXTENSIONS_EXTENSION_MANAGER_INSTALL="Extensions_Extension_Manager_Install JHELP_EXTENSIONS_EXTENSION_MANAGER_LANGUAGES="Extensions_Extension_Manager_languages" JHELP_EXTENSIONS_EXTENSION_MANAGER_MANAGE="Extensions_Extension_Manager_Manage" JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATE="Extensions_Extension_Manager_Update" +JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATESITES="Extensions_Extension_Manager_Updatesites" JHELP_EXTENSIONS_EXTENSION_MANAGER_WARNINGS="Extensions_Extension_Manager_Warnings" JHELP_EXTENSIONS_LANGUAGE_MANAGER_CONTENT="Extensions_Language_Manager_Content" JHELP_EXTENSIONS_LANGUAGE_MANAGER_EDIT="Extensions_Language_Manager_Edit" diff --git a/language/en-GB/en-GB.lib_joomla.ini b/language/en-GB/en-GB.lib_joomla.ini index 4dc5ba098f523..7e606bacbcc70 100644 --- a/language/en-GB/en-GB.lib_joomla.ini +++ b/language/en-GB/en-GB.lib_joomla.ini @@ -190,6 +190,7 @@ JLIB_DATABASE_ERROR_MOVE_FAILED="%s: :move failed - %s" JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_CATEGORY="Category must have a title" JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_EXTENSION="Extension must have a title" JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_MODULE="Module must have a title" +JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_UPDATESITE="Update site must have a title" JLIB_DATABASE_ERROR_NEGATIVE_NOT_PERMITTED="%s cannot be negative" JLIB_DATABASE_ERROR_NO_ROWS_SELECTED="No rows selected." JLIB_DATABASE_ERROR_NOT_SUPPORTED_FILE_NOT_FOUND="Table %s not supported. File not found." diff --git a/libraries/joomla/table/updatesite.php b/libraries/joomla/table/updatesite.php new file mode 100644 index 0000000000000..f09f7b604bce5 --- /dev/null +++ b/libraries/joomla/table/updatesite.php @@ -0,0 +1,53 @@ +name) == '' || trim($this->location) == '') + { + $this->setError(JText::_('JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_EXTENSION')); + + return false; + } + return true; + } +}