[ Index ]

PHP Cross Reference of Joomla 2.5.4 DE

title

Body

[close]

/administrator/components/com_installer/models/ -> install.php (source)

   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  }


Generated: Tue Apr 3 11:40:28 2012 Cross-referenced by PHPXref 0.7.1