PageRenderTime 70ms CodeModel.GetById 36ms RepoModel.GetById 1ms app.codeStats 0ms

/administrator/components/com_installer/models/install.php

https://github.com/shahsaurabh/minima
PHP | 266 lines | 134 code | 46 blank | 86 comment | 13 complexity | 9ce201b5959c970b21268ca5ca29ea89 MD5 | raw file
  1. <?php
  2. /**
  3. * @version $Id: install.php 19712 2010-12-01 16:38:00Z infograf768 $
  4. * @package Joomla.Administrator
  5. * @subpackage com_installer
  6. * @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved.
  7. * @license GNU General Public License version 2 or later; see LICENSE.txt
  8. */
  9. // No direct access.
  10. defined('_JEXEC') or die;
  11. // Import library dependencies
  12. jimport('joomla.application.component.model');
  13. jimport('joomla.installer.installer');
  14. jimport('joomla.installer.helper');
  15. /**
  16. * Extension Manager Install Model
  17. *
  18. * @package Joomla.Administrator
  19. * @subpackage com_installer
  20. * @since 1.5
  21. */
  22. class InstallerModelInstall extends JModel
  23. {
  24. /**
  25. * @var object JTable object
  26. */
  27. protected $_table = null;
  28. /**
  29. * @var object JTable object
  30. */
  31. protected $_url = null;
  32. /**
  33. * Model context string.
  34. *
  35. * @var string
  36. */
  37. protected $_context = 'com_installer.install';
  38. /**
  39. * Method to auto-populate the model state.
  40. *
  41. * Note. Calling getState in this method will result in recursion.
  42. *
  43. * @since 1.6
  44. */
  45. protected function populateState()
  46. {
  47. // Initialise variables.
  48. $app = JFactory::getApplication('administrator');
  49. $this->setState('message',$app->getUserState('com_installer.message'));
  50. $this->setState('extension_message',$app->getUserState('com_installer.extension_message'));
  51. $app->setUserState('com_installer.message','');
  52. $app->setUserState('com_installer.extension_message','');
  53. // Recall the 'Install from Directory' path.
  54. $path = $app->getUserStateFromRequest($this->_context.'.install_directory', 'install_directory', $app->getCfg('tmp_path'));
  55. $this->setState('install.directory', $path);
  56. parent::populateState();
  57. }
  58. /**
  59. * Install an extension from either folder, url or upload.
  60. *
  61. * @return boolean result of install
  62. * @since 1.5
  63. */
  64. function install()
  65. {
  66. jimport('joomla.client.helper');
  67. $this->setState('action', 'install');
  68. // Set FTP credentials, if given.
  69. JClientHelper::setCredentialsFromRequest('ftp');
  70. $app = JFactory::getApplication();
  71. switch(JRequest::getWord('installtype')) {
  72. case 'folder':
  73. // Remember the 'Install from Directory' path.
  74. $app->getUserStateFromRequest($this->_context.'.install_directory', 'install_directory');
  75. $package = $this->_getPackageFromFolder();
  76. break;
  77. case 'upload':
  78. $package = $this->_getPackageFromUpload();
  79. break;
  80. case 'url':
  81. $package = $this->_getPackageFromUrl();
  82. break;
  83. default:
  84. $app->setUserState('com_installer.message', JText::_('COM_INSTALLER_NO_INSTALL_TYPE_FOUND'));
  85. return false;
  86. break;
  87. }
  88. // Was the package unpacked?
  89. if (!$package) {
  90. $app->setUserState('com_installer.message', JText::_('COM_INSTALLER_UNABLE_TO_FIND_INSTALL_PACKAGE'));
  91. return false;
  92. }
  93. // Get an installer instance
  94. $installer = JInstaller::getInstance();
  95. // Install the package
  96. if (!$installer->install($package['dir'])) {
  97. // There was an error installing the package
  98. $msg = JText::sprintf('COM_INSTALLER_INSTALL_ERROR', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type'])));
  99. $result = false;
  100. } else {
  101. // Package installed sucessfully
  102. $msg = JText::sprintf('COM_INSTALLER_INSTALL_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type'])));
  103. $result = true;
  104. }
  105. // Set some model state values
  106. $app = JFactory::getApplication();
  107. $app->enqueueMessage($msg);
  108. $this->setState('name', $installer->get('name'));
  109. $this->setState('result', $result);
  110. $app->setUserState('com_installer.message', $installer->message);
  111. $app->setUserState('com_installer.extension_message', $installer->get('extension_message'));
  112. $app->setUserState('com_installer.redirect_url', $installer->get('redirect_url'));
  113. // Cleanup the install files
  114. if (!is_file($package['packagefile'])) {
  115. $config = JFactory::getConfig();
  116. $package['packagefile'] = $config->get('tmp_path').DS.$package['packagefile'];
  117. }
  118. JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']);
  119. return $result;
  120. }
  121. /**
  122. * Works out an installation package from a HTTP upload
  123. *
  124. * @return package definition or false on failure
  125. */
  126. protected function _getPackageFromUpload()
  127. {
  128. // Get the uploaded file information
  129. $userfile = JRequest::getVar('install_package', null, 'files', 'array');
  130. // Make sure that file uploads are enabled in php
  131. if (!(bool) ini_get('file_uploads')) {
  132. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLFILE'));
  133. return false;
  134. }
  135. // Make sure that zlib is loaded so that the package can be unpacked
  136. if (!extension_loaded('zlib')) {
  137. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLZLIB'));
  138. return false;
  139. }
  140. // If there is no uploaded file, we have a problem...
  141. if (!is_array($userfile)) {
  142. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_NO_FILE_SELECTED'));
  143. return false;
  144. }
  145. // Check if there was a problem uploading the file.
  146. if ($userfile['error'] || $userfile['size'] < 1) {
  147. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR'));
  148. return false;
  149. }
  150. // Build the appropriate paths
  151. $config = JFactory::getConfig();
  152. $tmp_dest = $config->get('tmp_path').DS.$userfile['name'];
  153. $tmp_src = $userfile['tmp_name'];
  154. // Move uploaded file
  155. jimport('joomla.filesystem.file');
  156. $uploaded = JFile::upload($tmp_src, $tmp_dest);
  157. // Unpack the downloaded package file
  158. $package = JInstallerHelper::unpack($tmp_dest);
  159. return $package;
  160. }
  161. /**
  162. * Install an extension from a directory
  163. *
  164. * @return Package details or false on failure
  165. * @since 1.5
  166. */
  167. protected function _getPackageFromFolder()
  168. {
  169. // Get the path to the package to install
  170. $p_dir = JRequest::getString('install_directory');
  171. $p_dir = JPath::clean($p_dir);
  172. // Did you give us a valid directory?
  173. if (!is_dir($p_dir)) {
  174. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_PLEASE_ENTER_A_PACKAGE_DIRECTORY'));
  175. return false;
  176. }
  177. // Detect the package type
  178. $type = JInstallerHelper::detectType($p_dir);
  179. // Did you give us a valid package?
  180. if (!$type) {
  181. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE'));
  182. return false;
  183. }
  184. $package['packagefile'] = null;
  185. $package['extractdir'] = null;
  186. $package['dir'] = $p_dir;
  187. $package['type'] = $type;
  188. return $package;
  189. }
  190. /**
  191. * Install an extension from a URL
  192. *
  193. * @return Package details or false on failure
  194. * @since 1.5
  195. */
  196. protected function _getPackageFromUrl()
  197. {
  198. // Get a database connector
  199. $db = JFactory::getDbo();
  200. // Get the URL of the package to install
  201. $url = JRequest::getString('install_url');
  202. // Did you give us a URL?
  203. if (!$url) {
  204. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_ENTER_A_URL'));
  205. return false;
  206. }
  207. // Download the package at the URL given
  208. $p_file = JInstallerHelper::downloadPackage($url);
  209. // Was the package downloaded?
  210. if (!$p_file) {
  211. JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_INVALID_URL'));
  212. return false;
  213. }
  214. $config = JFactory::getConfig();
  215. $tmp_dest = $config->get('tmp_path');
  216. // Unpack the downloaded package file
  217. $package = JInstallerHelper::unpack($tmp_dest.DS.$p_file);
  218. return $package;
  219. }
  220. }