%PDF- %PDF-
| Direktori : /home1/lightco1/www/lightcolab.com/administrator/components/com_jce/models/ |
| Current File : //home1/lightco1/www/lightcolab.com/administrator/components/com_jce/models/updates.php |
<?php
/**
* @copyright Copyright (c) 2009-2017 Ryan Demmer. All rights reserved
* @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* JCE is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses
*/
defined('_JEXEC') or die('RESTRICTED');
// load base model
require_once dirname(__FILE__).'/model.php';
// load helper class
require_once dirname(dirname(__FILE__)).'/helpers/updates.php';
class WFModelUpdates extends WFModel
{
protected static $updateURL = 'https://www.joomlacontenteditor.net/index.php?option=com_updates&format=raw';
public static function canUpdate()
{
if (defined('JPATH_PLATFORM')) {
return false;
}
if (UpdatesHelper::hasCURL() === false) {
return UpdatesHelper::hasFOPEN();
}
return true;
}
/**
* Get extension versions.
*
* @return array
*/
public function getVersions()
{
$db = JFactory::getDBO();
jimport('joomla.installer.helper');
$versions = array('joomla' => array(), 'jce' => array());
// Get Component xml
$com_xml = JApplicationHelper::parseXMLInstallFile(JPATH_ADMINISTRATOR.'/components/com_jce/jce.xml');
// set component version
$component = 'com_jce';
if (is_dir(JPATH_COMPONENT_SITE.'/editor/libraries/pro')) {
$component = 'com_jce_pro';
}
$versions['joomla'][$component] = str_replace('pro-', '', $com_xml['version']);
// get mediabox version
$mediabox_xml_file = JPATH_PLUGINS.'/system/jcemediabox.xml';
// set mediabox version
if (file_exists($mediabox_xml_file)) {
$mediabox_xml = JApplicationHelper::parseXMLInstallFile($mediabox_xml_file);
$versions['joomla']['plg_jcemediabox'] = $mediabox_xml['version'];
}
$plugins = JFolder::files(JPATH_PLUGINS.'/jce', '\.xml$', false, true);
if (!empty($plugins)) {
foreach ($plugins as $plugin) {
$name = str_replace('editor-', '', basename($plugin));
$xml = WFXMLHelper::parseInstallManifest($plugin);
$versions['jce']['jce_'.$name] = $xml['version'];
}
}
return $versions;
}
/**
* Check for extension updates.
*
* @return string JSON string of updates
*/
public function check()
{
$result = false;
// Get all extensions and version numbers
$data = array('task' => 'check', 'jversion' => '1.5');
$key = '';
$component = JComponentHelper::getComponent('com_jce');
$params = json_decode($component->params);
if ($params && isset($params->preferences) && isset($params->preferences->updates_key)) {
$key = $params->preferences->updates_key;
}
// encode it
if (!empty($key)) {
$data['key'] = urlencode($key);
}
$req = array();
// create request data
foreach ($this->getVersions() as $type => $extension) {
foreach ($extension as $item => $value) {
$data[$type.'['.urlencode($item).']'] = urlencode($value);
}
}
foreach ($data as $key => $value) {
$req[] = $key.'='.urlencode($value);
}
// connect
$result = $this->connect(self::$updateURL, implode('&', $req));
return $result;
}
/**
* Download update.
*
* @return string JSON string
*/
public function download()
{
$app = JFactory::getApplication();
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
$config = JFactory::getConfig();
$result = array('error' => WFText::_('WF_UPDATES_DOWNLOAD_ERROR'));
$id = JRequest::getInt('id');
$key = '';
$component = JComponentHelper::getComponent('com_jce');
$params = json_decode($component->params);
if ($params && isset($params->preferences) && isset($params->preferences->updates_key)) {
$key = $params->preferences->updates_key;
}
$data = $this->connect(self::$updateURL.'&task=download&id='.$id.'&key='.urlencode($key));
if ($data) {
$data = json_decode($data);
if (isset($data->error)) {
return json_encode(array('error' => $data->error));
}
// get update file
if ($data->name && $data->url && $data->hash) {
// create path for package file
$path = $app->getCfg('tmp_path').'/'.basename($data->name);
// download file
if ($this->connect($data->url, null, $path)) {
if (JFile::exists($path) && @filesize($path) > 0) {
// check hash and file type
if ($data->hash == md5(md5_file($path)) && preg_match('/\.(zip|tar|gz)$/', $path)) {
$result = array('file' => basename($path), 'hash' => $data->hash, 'installer' => $data->installer, 'type' => isset($data->type) ? $data->type : '');
} else {
// fail and delete file
$result = array('error' => WFText::_('WF_UPDATES_ERROR_FILE_VERIFICATION_FAIL'));
if (JFile::exists($path)) {
@JFile::delete($path);
}
}
} else {
$result = array('error' => WFText::_('WF_UPDATES_ERROR_FILE_MISSING_OR_INVALID'));
}
} else {
$result = array('error' => WFText::_('WF_UPDATES_DOWNLOAD_ERROR_DATA_TRANSFER'));
}
} else {
$result = array('error' => WFText::_('WF_UPDATES_DOWNLOAD_ERROR_MISSING_DATA'));
}
}
return json_encode($result);
}
/**
* Install extension update.
*
* @return string JSON string
*/
public function install()
{
jimport('joomla.installer.installer');
jimport('joomla.installer.helper');
jimport('joomla.filesystem.file');
$app = JFactory::getApplication();
$result = array('error' => WFText::_('WF_UPDATES_INSTALL_ERROR'));
// get vars
$file = JRequest::getCmd('file');
$hash = JRequest::getVar('hash', '', 'POST', 'alnum');
$method = JRequest::getWord('installer');
$type = JRequest::getWord('type');
// check for vars
if ($file && $hash && $method) {
$path = $app->getCfg('tmp_path').'/'.$file;
// check if file exists
if (JFile::exists($path)) {
// check hash
if ($hash == md5(md5_file($path))) {
$package = JInstallerHelper::unpack($path);
if ($package) {
jimport('joomla.installer.installer');
// get new Installer instance
$installer = JInstaller::getInstance();
if ($installer->install($package['dir'])) {
// installer message
$result = array('error' => '', 'text' => WFText::_($installer->get('message'), $installer->get('message')));
}
// Cleanup the install files
JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']);
} else {
$result = array('error' => WFText::_('WF_UPDATES_ERROR_FILE_EXTRACT_FAIL'));
JFile::delete($path);
}
} else {
$result = array('error' => WFText::_('WF_UPDATES_ERROR_FILE_VERIFICATION_FAIL'));
}
} else {
$result = array('error' => WFText::_('WF_UPDATES_ERROR_FILE_MISSING_OR_INVALID'));
}
}
return json_encode($result);
}
/**
* @copyright Copyright (C) 2009 Ryan Demmer. All rights reserved
* @copyright Copyright (C) 2006-2010 Nicholas K. Dionysopoulos
*
* @param string $url URL to resource
* @param array $data [optional] Array of key value pairs
* @param string $download [optional] path to file to write to
*
* @return mixed Boolean or JSON String on error
*/
protected function connect($url, $data = '', $download = '')
{
@error_reporting(E_ERROR);
$result = false;
if ($download) {
return UpdatesHelper::download($url, $download);
} else {
$result = UpdatesHelper::check($url, $data);
if ($result === false) {
return array('error' => WFText::_('Update check failed : Invalid response from update server'));
}
}
return $result;
}
}