Server : LiteSpeed System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : alsaif ( 1057) PHP Version : 7.4.33 Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/alsaif/public_html/administrator/components/com_falang/liveupdate/classes/ |
<?php
/**
* @package LiveUpdate
* @copyright Copyright (c)2010-2016 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPLv3 or later <https://www.gnu.org/licenses/gpl.html>
*/
defined('_JEXEC') or die();
/**
* This is the base class inherited by the config.php file in LiveUpdate's root.
* You may override it non-final members to customise its behaviour.
*
* @author Nicholas K. Dionysopoulos <nicholas@akeebabackup.com>
*
*/
abstract class LiveUpdateAbstractConfig extends JObject
{
/** @var string The extension name, e.g. com_foobar, plg_foobar, mod_foobar, tpl_foobar etc */
protected $_extensionName = 'com_foobar';
/** @var string The human-readable name of your extension */
protected $_extensionTitle = 'Foobar Component for Joomla!';
/**
* The filename of the XML manifest of your extension. Leave blank to use extensionname.xml. For example,
* if the extension is com_foobar, it will look for com_foobar.xml and foobar.xml in the component's
* directory.
*
* @var string
* */
protected $_xmlFilename = '';
/** @var string The information storage adapter to use. Can be 'file' or 'component' */
protected $_storageAdapter = 'file';
/** @var array The configuration options for the storage adapter used */
protected $_storageConfig = array('path' => JPATH_CACHE);
/**
* How to determine if a new version is available. 'different' = if the version number is different,
* the remote version is newer, 'vcompare' = use version compare between the two versions, 'newest' =
* compare the release dates to find the newest. I suggest using 'different' on most cases.
*
* @var string
*/
protected $_versionStrategy = 'different';
/** @var The current version of your extension. Populated automatically from the XML manifest. */
protected $_currentVersion = '';
/** @var The current release date of your extension. Populated automatically from the XML manifest. */
protected $_currentReleaseDate = '';
/** @var string The URL to the INI update stream of this extension */
protected $_updateURL = '';
/** @var bool Does the download URL require authorization to download the package? */
protected $_requiresAuthorization = false;
/** @var string The username to authorize a download on your site */
protected $_username = '';
/** @var string The password to authorize a download on your site */
protected $_password = '';
/** @var string The Download ID to authorize a download on your site; use it instead of the username/password pair */
protected $_downloadID = '';
/** @var string The path to a local copy of cacert.pem, required if you plan on using HTTPS URLs to fetch live udpate information or download files from */
protected $_cacerts = null;
/** @var string The minimum stability level to report as available update. One of alpha, beta, rc and stable. */
protected $_minStability = 'alpha';
/**
* Singleton implementation
*
* @return LiveUpdateConfig An instance of the Live Update configuration class
*/
public static function &getInstance()
{
static $instance = null;
if (!is_object($instance))
{
$instance = new LiveUpdateConfig();
}
return $instance;
}
/**
* Public constructor. It populates all extension-specific fields. Override to your liking if necessary.
*/
public function __construct()
{
parent::__construct();
$this->populateExtensionInfo();
$this->populateAuthorization();
}
/**
* Returns the URL to the update INI stream. By default it returns the value to
* the protected $_updateURL property of the class. Override with your implementation
* if you want to modify its logic.
*/
public function getUpdateURL()
{
return $this->_updateURL;
}
/**
* Override this ethod to load customized CSS and media files instead of the stock
* CSS and media provided by Live Update. If you override this class it MUST return
* true, otherwise LiveUpdate's CSS will be loaded after yours and will override your
* settings.
*
* @return bool Return true to stop Live Update from loading its own CSS files.
*/
public function addMedia()
{
return false;
}
/**
* Gets the authorization string to append to the download URL. It returns either the
* download ID or username/password pair. Please override the class constructor, not
* this method, if you want to fetch these values.
*
* @return string
*/
public final function getAuthorization()
{
if (!empty($this->_downloadID))
{
return "dlid=" . urlencode($this->_downloadID);
}
if (!empty($this->_username) && !empty($this->_password))
{
return "username=" . urlencode($this->_username) . "&password=" . urlencode($this->_password);
}
return "";
}
/**
* Gets the authorisation parameters to append to the download URL. It returns either
* the download ID or the username/password pair. It is returned in array format.
*
* @return array
*/
public final function getAuthorizationParameters()
{
$ret = array();
if (!empty($this->_downloadID))
{
$ret = array(
'dlid' => $this->_downloadID
);
}
if (!empty($this->_username) && !empty($this->_password))
{
$ret = array(
'username' => $this->_username,
'password' => $this->_password,
);
}
return $ret;
}
public final function requiresAuthorization()
{
return $this->_requiresAuthorization;
}
/**
* Returns all the information we have about the extension and its update preferences
*
* @return array The extension information
*/
public final function getExtensionInformation()
{
return array(
'name' => $this->_extensionName,
'title' => $this->_extensionTitle,
'version' => $this->_currentVersion,
'date' => $this->_currentReleaseDate,
'updateurl' => $this->_updateURL,
'requireauth' => $this->_requiresAuthorization
);
}
/**
* Returns the information regarding the storage adapter
*
* @return array
*/
public final function getStorageAdapterPreferences()
{
$config = $this->_storageConfig;
$config['extensionName'] = $this->_extensionName;
return array(
'adapter' => $this->_storageAdapter,
'config' => $config
);
}
public final function getVersionStrategy()
{
return $this->_versionStrategy;
}
/**
* Get the current version from the XML manifest of the extension and
* populate the class' properties.
*/
private function populateExtensionInfo()
{
require_once dirname(__FILE__) . '/xmlslurp.php';
$xmlslurp = new LiveUpdateXMLSlurp();
$data = $xmlslurp->getInfo($this->_extensionName, $this->_xmlFilename);
if (empty($this->_currentVersion))
{
$this->_currentVersion = $data['version'];
}
if (empty($this->_currentReleaseDate))
{
$this->_currentReleaseDate = $data['date'];
}
}
/**
* Fetch username/password and Download ID from the component's configuration.
*/
protected function populateAuthorization()
{
if (!$this->_requiresAuthorization)
{
return;
}
// Do we already have authorizaton information?
if ((!empty($this->_username) && !empty($this->_password)) || !empty($this->_downloadID))
{
return;
}
if (substr($this->_extensionName, 0, 3) != 'com')
{
return;
}
// Not using JComponentHelper to avoid conflicts ;)
$db = JFactory::getDbo();
$sql = $db->getQuery(true)
->select($db->qn('params'))
->from($db->qn('#__extensions'))
->where($db->qn('type') . ' = ' . $db->q('component'))
->where($db->qn('element') . ' = ' . $db->q($this->_extensionName));
$db->setQuery($sql);
$rawparams = $db->loadResult();
$params = new JRegistry();
$params->loadString($rawparams, 'JSON');
$this->_username = $params->get('username', '');
$this->_password = $params->get('password', '');
$this->_downloadID = $params->get('downloadid', '');
}
public function applyCACert(&$ch)
{
if (!empty($this->_cacerts))
{
if (file_exists($this->_cacerts))
{
@curl_setopt($ch, CURLOPT_CAINFO, $this->_cacerts);
}
}
}
public function getMinimumStability()
{
return $this->_minStability;
}
}