/administrator/components/com_sef/models/upgrade.php
PHP | 428 lines | 308 code | 74 blank | 46 comment | 70 complexity | 8c7b4d3fd9c5984c2333e01f168c0fe5 MD5 | raw file
Possible License(s): LGPL-3.0, GPL-2.0, MIT, BSD-3-Clause, LGPL-2.1
- <?php
- /**
- * SEF component for Joomla!
- *
- * @package JoomSEF
- * @version 4.2.8
- * @author ARTIO s.r.o., http://www.artio.net
- * @copyright Copyright (C) 2012 ARTIO s.r.o.
- * @license GNU/GPLv3 http://www.artio.net/license/gnu-general-public-license
- */
-
- // Check to ensure this file is included in Joomla!
- defined('_JEXEC') or die();
-
- jimport('joomla.application.component.model');
- jimport('joomla.filesystem.file');
- jimport('joomla.filesystem.folder');
- jimport('joomla.installer.helper');
- jimport('joomla.installer.installer');
- jimport('joomla.application.helper');
- require_once JPATH_ADMINISTRATOR.DS.'components'.DS.'com_sef'.DS.'classes'.DS.'seftools.php';
-
- class SEFModelUpgrade extends JModel
- {
- function getUpgradeExts()
- {
- if (!isset($this->_upgradeExts)) {
- $this->_loadVersions();
-
- $basedir = JPATH_ROOT.DS.'components'.DS.'com_sef'.DS.'sef_ext';
-
- $extensions = array();
- if( count($this->_extVersions) > 0 ) {
- foreach( $this->_extVersions as $key => $ext ) {
- $option=str_replace('ext_joomsef4_','com_',$ext->name);
- $xmlfile = $basedir.DS.$option.'.xml';
- if (!JFile::exists($xmlfile)) {
- continue;
- }
-
- $xml=JFactory::getXML($xmlfile);
- if (!$xml) {
- unset($xml);
- continue;
- }
-
- if (!is_object($xml) ||
- ($xml->name() != 'extension') ||
- version_compare($xml->getAttribute('version'), '1.6', '<') ||
- ($xml->getAttribute('type') != 'sef_ext' ))
- {
- unset($xml);
- continue;
- }
-
- $extension = new stdClass();
- $extension->new = $ext->version;
-
- $extension->type = $ext->type;
- $extension->option = $key;
- $extension->params = SEFTools::getExtParams($key);
-
- $element = $xml->name;
- $extension->name = $element ? $element->data() : '';
-
- $element = $xml->version;
- $extension->old = $element ? $element->data() : '';
-
- $extensions[$ext->name] = $extension;
- }
- }
-
- $this->_upgradeExts = $extensions;
- }
-
- return $this->_upgradeExts;
- }
-
- function getNewSEFVersion()
- {
- if( !isset($this->_newSEFVersion) ) {
- $this->_loadVersions();
- $this->_newSEFVersion=$this->_extVersions['com_joomsef4']->version;
- }
-
- return $this->_newSEFVersion;
- }
-
- function getRegisteredInfo()
- {
- if (!isset($this->_regInfo) ) {
- $regInfo = new stdClass();
-
- $sefConfig =& SEFConfig::getConfig();
- if( trim($sefConfig->artioDownloadId) != '' ) {
- // Send the request to ARTIO server to check registration
- $data = array('download_id' => trim($sefConfig->artioDownloadId),'cat'=>'com_joomsef4');
- $response = SEFTools::PostRequest($sefConfig->serverLicenser, null, $data);
-
- if( ($response === false) || ($response->code != 200) ) {
- JError::raiseNotice(100, JText::_('COM_SEF_ERROR_REG_CHECK_FAIL'));
- return null;
- }
- else {
- // Parse the response - get individual lines
- $lines = explode("\n", $response->content);
-
- // Get the code
- $pos = strpos($lines[0], ' ');
- if( $pos === false ) {
- JError::raiseNotice(100, JText::_('COM_SEF_ERROR_REG_CHECK_FAIL'));
- return null;
- }
- $regInfo->code = intval(substr($lines[0], 0, $pos));
-
- if( ($regInfo->code == 10) || ($regInfo->code == 20) ) {
- // Download id found
- if (count($lines) < 3) {
- // Wrong response
- JError::raiseNotice(100, JText::_('COM_SEF_ERROR_REG_CHECK_FAIL'));
- return null;
- }
-
- // Parse the date
- $date =& JFactory::getDate(str_replace('.', '/', trim($lines[1])));
- $regInfo->date = $date->format(JText::_('DATE_FORMAT_LC3'));
-
- // Parse the name
- $regInfo->name = trim($lines[2]);
-
- // Parse the company
- $regInfo->company = isset($lines[3]) ? trim($lines[3]) : '';
-
- // Is upgrade expired?
- if ($regInfo->code == 20) {
- JError::raiseNotice(100, JText::sprintf('COM_SEF_EXPIRED', 'Artio JoomSEF 4') . ' ' . JText::_('COM_SEF_INFO_YOU_GET_FREE_VERSION'));
- }
-
- }
- // Is upgrade inactive
- else if ($regInfo->code == 30) {
- JError::raiseNotice(100, JText::sprintf('COM_SEF_NOT_ACTIVATED', 'Artio JoomSEF 4') . ' ' . JText::_('COM_SEF_INFO_YOU_GET_FREE_VERSION'));
- $regInfo->date = JText::_('COM_SEF_NOT_ACTIVATED_YET');
- }
- else if($regInfo->code==40) {
- JError::raiseNotice(100,JText::sprintf('COM_SEF_ERR_DOMAIN_NOT_MATCH','Artio JoomSEF 4').' '.JText::_('COM_SEF_INFO_YOU_GET_FREE_VERSION'));
- return null;
- }
- else if($regInfo->code==50) {
- JError::raiseNotice(100,JText::sprintf('COM_SEF_DOWLOAD_ID_INVALID','Artio JoomSEF 4').' '.JText::_('COM_SEF_INFO_YOU_GET_FREE_VERSION'));
- return null;
- }
- else if( $regInfo->code == 90 ) {
- // Download id not found, do nothing
- JError::raiseNotice(100, JText::sprintf('COM_SEF_ERROR_DOWNLOAD_ID_NOT_FOUND',trim($sefConfig->artioDownloadId)). ' ' . JText::_('COM_SEF_INFO_YOU_GET_FREE_VERSION'));
- }
- else {
- // Wrong response
- JError::raiseNotice(100, JText::_('COM_SEF_ERROR_REG_CHECK_FAIL'));
- return null;
- }
- }
- }
- else {
- // Download ID not set
- $link1 = '<a href="index.php?option=com_sef&controller=config&task=edit&tab=registration">';
- $link2 = '</a>';
- $enterIdText = sprintf(JText::_('COM_SEF_INFO_ENTER_DOWNLOAD_ID'), $link1, $link2);
- JError::raiseNotice(100, JText::_('COM_SEF_DOWNLOAD_ID_NOT_SET') . ' ' . JText::_('COM_SEF_INFO_YOU_GET_FREE_VERSION') . ' ' . $enterIdText);
- return null;
- }
-
- $this->_regInfo = $regInfo;
- }
-
- return $this->_regInfo;
- }
-
- function _loadVersions()
- {
- if (!isset($this->_extVersions)) {
- $sefConfig =& SEFConfig::getConfig();
-
- $this->_extVersions = array();
-
- // Get the response from server
- $response = SEFTools::PostRequest($sefConfig->serverNewVersionURL);
-
- // Check the response
- if( ($response === false) || ($response->code != 200) ) {
- JError::raiseNotice(100, JText::_('COM_SEF_ERROR_NO_VERSION_INFO'));
-
- // Set dummy data
- $ext = new stdClass();
- $ext->version = '?.?.?';
- $ext->name = 'JoomSEF';
- $this->_extVersions['com_joomsef4'] = $ext;
- }
- else {
- $versions = $response->content;
-
- $xml = JFactory::getXML($versions,false);
- if (is_object($xml)) {
- foreach ($xml->children() as $package) {
- $ext = new stdClass();
- $ext->name = $package->element->data();
- $ext->version = $package->version->data();
- if (isset($package->buyURL)) {
- $ext->type = 'Paid';
- $ext->link = $package->buyURL->data();
- } else {
- $ext->type = 'Free';
- $ext->link = '';
- }
-
- $this->_extVersions[$ext->name]=$ext;
- }
- }
- }
- }
- }
-
- function &getVersions()
- {
- $this->_loadVersions();
-
- return $this->_extVersions;
- }
-
- function getIsPaidVersion()
- {
- if( !isset($this->_isPaidVersion) ) {
- $check = SEFTools::GetSEFGlobalMeta();
- $ctrl = md5(implode(file(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_sef'.DS.'sef.xml')));
-
- $this->_isPaidVersion = ($check == $ctrl);
- }
-
- return $this->_isPaidVersion;
- }
-
- function upgrade()
- {
- $extDir = JPATH_ROOT.DS.'components'.DS.'com_sef'.DS.'sef_ext';
- JFActory::getLanguage()->load('com_installer',JPATH_ADMINISTRATOR);
-
- $fromServer = JRequest::getVar('fromserver');
- $extension = JRequest::getVar('ext');
-
- if( is_null($fromServer) ) {
- $this->setState('message', JText::_('COM_SEF_ERROR_UPGRADE_SOURCE'));
- return false;
- }
-
- if( $fromServer == 1 ) {
- $package = $this->_getPackageFromServer($extension);
- } else {
- $package = $this->_getPackageFromUpload();
- }
-
- // was the package unpacked?
- if (!$package) {
- $this->setState('message', 'Unable to find install package.');
- return false;
- }
-
- $xmls=JFolder::files($package['extractdir'],'.xml');
- $xmlfile=$xmls[0];
-
- $xml=JFactory::getXML($package['extractdir'].DS.$xmlfile);
-
- $installer=JInstaller::getInstance();
- JTable::addIncludePath(JPATH_LIBRARIES.DS.'joomla'.DS.'database'.DS.'table');
- if(!$installer->update($package['dir'])) {
- $msg=JText::sprintf('COM_INSTALLER_MSG_UPDATE_ERROR', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type'])));
- $result=false;
- } else {
- $msg=JText::sprintf('COM_INSTALLER_MSG_UPDATE_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type'])));
- $result=true;
- }
- $this->setState('message',$msg);
-
- if (!is_file($package['packagefile'])) {
- $config=JFactory::getConfig();
- $package['packagefile']=$config->get('tmp_path').'/'.$package['packagefile'];
- }
-
- JInstallerHelper::cleanupInstall($package['packagefile'],$package['extractdir']);
-
- return $result;
- }
-
- function _getPackageFromUpload()
- {
- // Get the uploaded file information
- $userfile = JRequest::getVar('install_package', null, 'files', 'array' );
-
- // Make sure that file uploads are enabled in php
- if (!(bool) ini_get('file_uploads')) {
- JError::raiseWarning(100, JText::_('COM_SEF_WARNINSTALLFILE'));
- return false;
- }
-
- // Make sure that zlib is loaded so that the package can be unpacked
- if (!extension_loaded('zlib')) {
- JError::raiseWarning(100, JText::_('COM_SEF_WARNINSTALLZLIB'));
- return false;
- }
-
- // If there is no uploaded file, we have a problem...
- if (!is_array($userfile) ) {
- JError::raiseWarning(100, JText::_('COM_SEF_NO_FILE_SELECTED'));
- return false;
- }
-
- // Check if there was a problem uploading the file.
- if ( $userfile['error'] || $userfile['size'] < 1 )
- {
- JError::raiseWarning(100, JText::_('COM_SEF_WARNINSTALLUPLOADERROR'));
- return false;
- }
-
- // Build the appropriate paths
- $config =& JFactory::getConfig();
- $tmp_dest = $config->getValue('config.tmp_path').DS.$userfile['name'];
- $tmp_src = $userfile['tmp_name'];
-
- // Move uploaded file
- jimport('joomla.filesystem.file');
- $uploaded = JFile::upload($tmp_src, $tmp_dest);
-
- // Unpack the downloaded package file
- $package = JInstallerHelper::unpack($tmp_dest);
-
- // Delete the package file
- JFile::delete($tmp_dest);
-
- return $package;
- }
-
- function _getPackageFromServer($extension)
- {
- // Make sure that zlib is loaded so that the package can be unpacked
- if (!extension_loaded('zlib')) {
- JError::raiseWarning(100, JText::_('COM_SEF_WARNINSTALLZLIB'));
- return false;
- }
- // build the appropriate paths
- $sefConfig =& SEFConfig::getConfig();
- $config =& JFactory::getConfig();
- if( strlen($extension)==0 ) {
- $tmp_dest = $config->getValue('config.tmp_path').DS.'joomsef.zip';
- }
- else {
- $tmp_dest = $config->getValue('config.tmp_path').DS.$extension.'.zip';
- }
-
- // Validate the upgrade on server
- $data = array();
- $data['username'] = $sefConfig->artioUserName;
- $data['password'] = $sefConfig->artioPassword;
- if( strlen($extension)==0 ) {
- $data['download_id'] = $sefConfig->artioDownloadId;
- $data['file'] = 'com_joomsef4';
- }
- else {
- $params =& SEFTools::getExtParams($extension);
- $data['download_id'] = $params->get('downloadId', '');
- $data['file'] = $extension;
- }
- $uri = parse_url(JURI::root());
- $url = $uri['host'].$uri['path'];
- $url = trim($url, '/');
- $data['site'] = $url;
- $data['ip'] = $_SERVER['SERVER_ADDR'];
- $lang =& JFactory::getLanguage();
- $data['lang'] = $lang->getTag();
- $data['cat'] = 'joomsef4';
-
- // Get the server response
- $response = SEFTools::PostRequest($sefConfig->serverAutoUpgrade, JURI::root(), $data);
-
- // Check the response
- if( ($response === false) || ($response->code != 200) ) {
- JError::raiseWarning(100, JText::_('COM_SEF_ERROR_SERVER_CONNECTION'));
- return false;
- }
-
- // Response OK, check what we got
- if( strpos($response->header, 'Content-Type: application/zip') === false ) {
- JError::raiseWarning(100, $response->content);
- return false;
- }
-
- // Seems we got the ZIP installation package, let's save it to disk
- if (!JFile::write($tmp_dest, $response->content)) {
- JError::raiseWarning(100, JText::_('COM_SEF_ERROR_TEMP_DIRECTORY'));
- return false;
- }
-
- // Unpack the downloaded package file
- $package = JInstallerHelper::unpack($tmp_dest);
-
- // Delete the package file
- JFile::delete($tmp_dest);
-
- return $package;
- }
-
- function _getXmlText($file, $variable)
- {
- // try to find variable
- $value = null;
- if (JFile::exists($file)) {
- $xml =& JFactory::getXMLParser('Simple');
-
- if ($xml->loadFile($file)) {
- $root =& $xml->document;
- $element =& $root->getElementByPath($variable);
- $value = $element ? $element->data() : '';
- }
- }
-
- return $value;
- }
-
- }
- ?>