You've already forked joomla_test
							
							first commit
This commit is contained in:
		
							
								
								
									
										278
									
								
								administrator/components/com_installer/models/languages.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										278
									
								
								administrator/components/com_installer/models/languages.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,278 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @package     Joomla.Administrator | ||||
|  * @subpackage  com_installer | ||||
|  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt | ||||
|  */ | ||||
|  | ||||
| defined('_JEXEC') or die; | ||||
|  | ||||
| jimport('joomla.updater.update'); | ||||
|  | ||||
| /** | ||||
|  * Languages Installer Model | ||||
|  * | ||||
|  * @package     Joomla.Administrator | ||||
|  * @subpackage  com_installer | ||||
|  * @since       2.5.7 | ||||
|  */ | ||||
| class InstallerModelLanguages extends JModelList | ||||
| { | ||||
| 	/** | ||||
| 	 * Constructor override, defines a white list of column filters. | ||||
| 	 * | ||||
| 	 * @param   array  $config  An optional associative array of configuration settings. | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	public function __construct($config = array()) | ||||
| 	{ | ||||
| 		if (empty($config['filter_fields'])) | ||||
| 		{ | ||||
| 			$config['filter_fields'] = array( | ||||
| 				'update_id', 'update_id', | ||||
| 				'name', 'name', | ||||
| 			); | ||||
| 		} | ||||
|  | ||||
| 		parent::__construct($config); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to get the available languages database query. | ||||
| 	 * | ||||
| 	 * @return  JDatabaseQuery  The database query | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	protected function _getListQuery() | ||||
| 	{ | ||||
| 		$db   = JFactory::getDbo(); | ||||
| 		$query = $db->getQuery(true); | ||||
|  | ||||
| 		// Select the required fields from the updates table | ||||
| 		$query->select('update_id, name, version, detailsurl, type') | ||||
|  | ||||
| 			->from('#__updates'); | ||||
|  | ||||
| 		// This Where clause will avoid to list languages already installed. | ||||
| 		$query->where('extension_id = 0'); | ||||
|  | ||||
| 		// Filter by search in title | ||||
| 		$search = $this->getState('filter.search'); | ||||
| 		if (!empty($search)) | ||||
| 		{ | ||||
| 			$search = $db->quote('%' . $db->escape($search, true) . '%'); | ||||
| 			$query->where('(name LIKE ' . $search . ')'); | ||||
| 		} | ||||
|  | ||||
| 		// Add the list ordering clause. | ||||
| 		$listOrder = $this->state->get('list.ordering'); | ||||
| 		$orderDirn = $this->state->get('list.direction'); | ||||
| 		$query->order($db->escape($listOrder) . ' ' . $db->escape($orderDirn)); | ||||
|  | ||||
| 		return $query; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to get a store id based on model configuration state. | ||||
| 	 * | ||||
| 	 * @param   string  $id  A prefix for the store id. | ||||
| 	 * | ||||
| 	 * @return  string  A store id. | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	protected function getStoreId($id = '') | ||||
| 	{ | ||||
| 		// Compile the store id. | ||||
| 		$id	.= ':' . $this->getState('filter.search'); | ||||
|  | ||||
| 		return parent::getStoreId($id); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to auto-populate the model state. | ||||
| 	 * | ||||
| 	 * Note. Calling getState in this method will result in recursion. | ||||
| 	 * | ||||
| 	 * @param   string  $ordering   list order | ||||
| 	 * @param   string  $direction  direction in the list | ||||
| 	 * | ||||
| 	 * @return  void | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	protected function populateState($ordering = 'name', $direction = 'asc') | ||||
| 	{ | ||||
| 		$app = JFactory::getApplication(); | ||||
|  | ||||
| 		$value = $app->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); | ||||
| 		$this->setState('filter.search', $value); | ||||
|  | ||||
| 		$this->setState('extension_message', $app->getUserState('com_installer.extension_message')); | ||||
|  | ||||
| 		parent::populateState($ordering, $direction); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to find available languages in the Accredited Languages Update Site. | ||||
| 	 * | ||||
| 	 * @param   int  $cache_timeout  time before refreshing the cached updates | ||||
| 	 * | ||||
| 	 * @return  bool | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	public function findLanguages($cache_timeout = 0) | ||||
| 	{ | ||||
| 		$updater = JUpdater::getInstance(); | ||||
|  | ||||
| 		/* | ||||
| 		 * The following function uses extension_id 600, that is the english language extension id. | ||||
| 		 * In #__update_sites_extensions you should have 600 linked to the Accredited Translations Repo | ||||
| 		 */ | ||||
| 		$updater->findUpdates(array(600), $cache_timeout); | ||||
|  | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Install languages in the system. | ||||
| 	 * | ||||
| 	 * @param   array  $lids  array of language ids selected in the list | ||||
| 	 * | ||||
| 	 * @return  bool | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	public function install($lids) | ||||
| 	{ | ||||
| 		$app       = JFactory::getApplication(); | ||||
| 		$installer = JInstaller::getInstance(); | ||||
|  | ||||
| 		// Loop through every selected language | ||||
| 		foreach ($lids as $id) | ||||
| 		{ | ||||
| 			// Loads the update database object that represents the language | ||||
| 			$language = JTable::getInstance('update'); | ||||
| 			$language->load($id); | ||||
|  | ||||
| 			// Get the url to the XML manifest file of the selected language | ||||
| 			$remote_manifest = $this->_getLanguageManifest($id); | ||||
| 			if (!$remote_manifest) | ||||
| 			{ | ||||
| 				// Could not find the url, the information in the update server may be corrupt | ||||
| 				$message  = JText::sprintf('COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_MANIFEST', $language->name); | ||||
| 				$message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); | ||||
| 				$app->enqueueMessage($message); | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			// Based on the language XML manifest get the url of the package to download | ||||
| 			$package_url = $this->_getPackageUrl($remote_manifest); | ||||
| 			if (!$package_url) | ||||
| 			{ | ||||
| 				// Could not find the url , maybe the url is wrong in the update server, or there is not internet access | ||||
| 				$message  = JText::sprintf('COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_PACKAGE', $language->name); | ||||
| 				$message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); | ||||
| 				$app->enqueueMessage($message); | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			// Download the package to the tmp folder | ||||
| 			$package = $this->_downloadPackage($package_url); | ||||
|  | ||||
| 			// Install the package | ||||
| 			if (!$installer->install($package['dir'])) | ||||
| 			{ | ||||
| 				// There was an error installing the package | ||||
| 				$message  = JText::sprintf('COM_INSTALLER_INSTALL_ERROR', $language->name); | ||||
| 				$message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); | ||||
| 				$app->enqueueMessage($message); | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			// Package installed successfully | ||||
| 			$app->enqueueMessage(JText::sprintf('COM_INSTALLER_INSTALL_SUCCESS', $language->name)); | ||||
|  | ||||
| 			// Cleanup the install files in tmp folder | ||||
| 			if (!is_file($package['packagefile'])) | ||||
| 			{ | ||||
| 				$config = JFactory::getConfig(); | ||||
| 				$package['packagefile'] = $config->get('tmp_path') . '/' . $package['packagefile']; | ||||
| 			} | ||||
| 			JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); | ||||
|  | ||||
| 			// Delete the installed language from the list | ||||
| 			$language->delete($id); | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Gets the manifest file of a selected language from a the language list in a update server. | ||||
| 	 * | ||||
| 	 * @param   int  $uid  the id of the language in the #__updates table | ||||
| 	 * | ||||
| 	 * @return  string | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	protected function _getLanguageManifest($uid) | ||||
| 	{ | ||||
| 		$instance = JTable::getInstance('update'); | ||||
| 		$instance->load($uid); | ||||
|  | ||||
| 		return $instance->detailsurl; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Finds the url of the package to download. | ||||
| 	 * | ||||
| 	 * @param   string  $remote_manifest  url to the manifest XML file of the remote package | ||||
| 	 * | ||||
| 	 * @return  string|bool | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	protected function _getPackageUrl( $remote_manifest ) | ||||
| 	{ | ||||
| 		$update = new JUpdate; | ||||
| 		$update->loadFromXML($remote_manifest); | ||||
| 		$package_url = trim($update->get('downloadurl', false)->_data); | ||||
|  | ||||
| 		return $package_url; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Download a language package from a URL and unpack it in the tmp folder. | ||||
| 	 * | ||||
| 	 * @param   string  $url  hola | ||||
| 	 * | ||||
| 	 * @return  array|bool  Package details or false on failure | ||||
| 	 * | ||||
| 	 * @since   2.5.7 | ||||
| 	 */ | ||||
| 	protected function _downloadPackage($url) | ||||
| 	{ | ||||
| 		// Download the package from the given URL | ||||
| 		$p_file = JInstallerHelper::downloadPackage($url); | ||||
|  | ||||
| 		// Was the package downloaded? | ||||
| 		if (!$p_file) | ||||
| 		{ | ||||
| 			JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_INVALID_URL')); | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| 		$config   = JFactory::getConfig(); | ||||
| 		$tmp_dest = $config->get('tmp_path'); | ||||
|  | ||||
| 		// Unpack the downloaded package file | ||||
| 		$package = JInstallerHelper::unpack($tmp_dest . '/' . $p_file); | ||||
|  | ||||
| 		return $package; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 alazhar
					alazhar