187 lines
4.8 KiB
PHP
187 lines
4.8 KiB
PHP
<?php
|
|
/**
|
|
* JEM Package
|
|
* @package JEM.Package
|
|
*
|
|
* @copyright (C) 2013-2024 joomlaeventmanager.net
|
|
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
|
|
*
|
|
* @copyright (C) 2008 - 2013 Kunena Team. All rights reserved.
|
|
* @license https://www.gnu.org/copyleft/gpl.html GNU/GPL
|
|
* @link https://www.kunena.org
|
|
**/
|
|
|
|
defined ('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Version;
|
|
use Joomla\CMS\Table\Table;
|
|
use Joomla\CMS\Router\Route;
|
|
/**
|
|
* JEM package installer script.
|
|
*/
|
|
class Pkg_JemInstallerScript
|
|
{
|
|
/**
|
|
* List of supported versions. Newest version first!
|
|
* @var array
|
|
*/
|
|
protected $versions = array(
|
|
'PHP' => array (
|
|
'8.0' => '8.0',
|
|
'0' => '8.0' // Preferred version
|
|
),
|
|
'MySQL' => array (
|
|
'8.0' => '8.0',
|
|
'5.6' => '5.6',
|
|
'0' => '5.6' // Preferred version
|
|
),
|
|
'Joomla!' => array (
|
|
'4.2' => '4.2',
|
|
'4.0' => '',
|
|
'0' => '4.2' // Preferred version
|
|
)
|
|
);
|
|
|
|
/**
|
|
* List of required PHP extensions.
|
|
* @var array
|
|
*/
|
|
protected $extensions = array ('gd', 'json', 'pcre', 'ctype', 'SimpleXML' /* iCalCreator */ );
|
|
|
|
public function install($parent) {
|
|
return true;
|
|
}
|
|
|
|
public function discover_install($parent) {
|
|
return self::install($parent);
|
|
}
|
|
|
|
public function update($parent) {
|
|
return self::install($parent);
|
|
}
|
|
|
|
public function uninstall($parent) {
|
|
return true;
|
|
}
|
|
|
|
public function preflight($type, $parent) {
|
|
// Prevent installation if requirements are not met.
|
|
if (!$this->checkRequirements()){
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function makeRoute($uri) {
|
|
return Route::_($uri, false);
|
|
}
|
|
|
|
public function postflight($type, $parent) {
|
|
// Clear Joomla system cache.
|
|
/** @var JCache|JCacheController $cache */
|
|
$cache = Factory::getCache();
|
|
$cache->clean('_system');
|
|
|
|
// Remove all compiled files from APC cache.
|
|
if (function_exists('apc_clear_cache')) {
|
|
@apc_clear_cache();
|
|
}
|
|
|
|
if ($type == 'uninstall') return true;
|
|
|
|
$this->enablePlugin('content', 'jem');
|
|
$this->enablePlugin('content', 'jemlistevents');
|
|
$this->enablePlugin('quickicon', 'jem');
|
|
// $this->enablePlugin('finder', 'jem');
|
|
// $this->enablePlugin('search', 'jem');
|
|
// $this->enablePlugin('jem', 'mailer');
|
|
|
|
# ajax calendar module doesn't fully work on Joomla! 2.5
|
|
if (version_compare(JVERSION, '3', '<')) {
|
|
$this->disableModule('mod_jem_calajax');
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function enablePlugin($group, $element) {
|
|
$plugin = Table::getInstance('extension');
|
|
if (!$plugin->load(array('type'=>'plugin', 'folder'=>$group, 'element'=>$element))) {
|
|
return false;
|
|
}
|
|
$plugin->enabled = 1;
|
|
return $plugin->store();
|
|
}
|
|
|
|
function disableModule($element) {
|
|
$module = Table::getInstance('extension');
|
|
if (!$module->load(array('type'=>'module', 'element'=>$element))) {
|
|
return false;
|
|
}
|
|
$module->enabled = 0;
|
|
return $module->store();
|
|
}
|
|
|
|
public function checkRequirements() {
|
|
$db = Factory::getContainer()->get('DatabaseDriver');
|
|
$pass = $this->checkVersion('PHP', phpversion());
|
|
$pass &= $this->checkVersion('Joomla!', JVERSION);
|
|
$pass &= $this->checkVersion('MySQL', $db->getVersion ());
|
|
$pass &= $this->checkDbo($db->name, array('mysql', 'mysqli'));
|
|
$pass &= $this->checkExtensions($this->extensions);
|
|
return $pass;
|
|
}
|
|
|
|
// Internal functions
|
|
|
|
protected function checkVersion($name, $version) {
|
|
$app = Factory::getApplication();
|
|
|
|
$major = $minor = 0;
|
|
foreach ($this->versions[$name] as $major=>$minor) {
|
|
if (!$major || version_compare($version, $major, '<')) {
|
|
continue;
|
|
}
|
|
if ($minor && version_compare($version, $minor, '>=')) {
|
|
return true;
|
|
}
|
|
break;
|
|
}
|
|
if (!$major) {
|
|
$minor = reset($this->versions[$name]);
|
|
}
|
|
$recommended = end($this->versions[$name]);
|
|
if ($minor) {
|
|
$app->enqueueMessage(sprintf("%s %s is not supported. Minimum required version is %s %s, but it is highly recommended to use %s %s or later.", $name, $version, $name, $minor, $name, $recommended), 'notice');
|
|
} else {
|
|
$app->enqueueMessage(sprintf("%s %s is not supported. It is highly recommended to use %s %s or later.", $name, $version, $name, $recommended), 'notice');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
protected function checkDbo($name, $types) {
|
|
$app = Factory::getApplication();
|
|
|
|
if (in_array($name, $types)) {
|
|
return true;
|
|
}
|
|
$app->enqueueMessage(sprintf("Database driver '%s' is not supported. Please use MySQL instead.", $name), 'notice');
|
|
return false;
|
|
}
|
|
|
|
protected function checkExtensions($extensions) {
|
|
$app = Factory::getApplication();
|
|
|
|
$pass = 1;
|
|
foreach ($extensions as $name) {
|
|
if (!extension_loaded($name)) {
|
|
$pass = 0;
|
|
$app->enqueueMessage(sprintf("Required PHP extension '%s' is missing. Please install it into your system.", $name), 'notice');
|
|
}
|
|
}
|
|
return $pass;
|
|
}
|
|
|
|
}
|