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