188 lines
5.4 KiB
PHP
188 lines
5.4 KiB
PHP
<?php
|
|
/**
|
|
* @package Regular Labs Library
|
|
* @version 24.11.1459
|
|
*
|
|
* @author Peter van Westen <info@regularlabs.com>
|
|
* @link https://regularlabs.com
|
|
* @copyright Copyright © 2024 Regular Labs All Rights Reserved
|
|
* @license GNU General Public License version 2 or later
|
|
*/
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Factory as JFactory;
|
|
use Joomla\CMS\Installer\Manifest\PackageManifest as JPackageManifest;
|
|
use Joomla\CMS\Language\Text as JText;
|
|
|
|
if ( ! class_exists('pkg_regularlabsInstallerScript'))
|
|
{
|
|
class pkg_regularlabsInstallerScript
|
|
{
|
|
static $current_version;
|
|
static $name;
|
|
static $package_name;
|
|
static $previous_version;
|
|
|
|
public function postflight($install_type, $adapter)
|
|
{
|
|
if ( ! in_array($install_type, ['install', 'update']))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
self::publishExtensions();
|
|
self::recreateNamespaceMap();
|
|
self::displayMessages();
|
|
|
|
return true;
|
|
}
|
|
|
|
public function preflight($install_type, $adapter)
|
|
{
|
|
$manifest = $adapter->getManifest();
|
|
|
|
static::$package_name = trim($manifest->packagename);
|
|
static::$name = trim($manifest->name);
|
|
static::$current_version = trim($manifest->version);
|
|
static::$previous_version = self::getPreviousVersion();
|
|
|
|
return true;
|
|
}
|
|
|
|
private static function recreateNamespaceMap()
|
|
{
|
|
if (JVERSION < 4)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Remove the administrator/cache/autoload_psr4.php file
|
|
$filename = JPATH_ADMINISTRATOR . '/cache/autoload_psr4.php';
|
|
|
|
if (file_exists($filename))
|
|
{
|
|
self::clearFileInOPCache($filename);
|
|
clearstatcache(true, $filename);
|
|
|
|
@unlink($filename);
|
|
}
|
|
|
|
JFactory::getApplication()->createExtensionNamespaceMap();
|
|
}
|
|
|
|
private static function clearFileInOPCache($file)
|
|
{
|
|
$hasOpCache = ini_get('opcache.enable')
|
|
&& function_exists('opcache_invalidate')
|
|
&& (
|
|
! ini_get('opcache.restrict_api')
|
|
|| stripos(realpath($_SERVER['SCRIPT_FILENAME']), ini_get('opcache.restrict_api')) === 0
|
|
);
|
|
|
|
if ( ! $hasOpCache)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return opcache_invalidate($file, true);
|
|
}
|
|
|
|
private static function displayMessages()
|
|
{
|
|
if (php_sapi_name() == 'cli')
|
|
{
|
|
return;
|
|
}
|
|
|
|
$msg = self::getInstallationLanguageString();
|
|
|
|
JFactory::getApplication()->enqueueMessage(
|
|
JText::sprintf(
|
|
$msg,
|
|
'<strong>' . JText::_(static::$name . '_SHORT') . '</strong>',
|
|
'<strong>' . static::$current_version . '</strong>'
|
|
), 'success'
|
|
);
|
|
}
|
|
|
|
private static function getInstallationLanguageString()
|
|
{
|
|
if ( ! static::$previous_version)
|
|
{
|
|
return 'PKG_RL_EXTENSION_INSTALLED';
|
|
}
|
|
|
|
if (static::$previous_version == static::$current_version)
|
|
{
|
|
return 'PKG_RL_EXTENSION_REINSTALLED';
|
|
}
|
|
|
|
return 'PKG_RL_EXTENSION_UPDATED';
|
|
}
|
|
|
|
private static function getPreviousVersion()
|
|
{
|
|
$xml_file = self::getXmlFile();
|
|
|
|
if ( ! $xml_file)
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$manifest = new JPackageManifest($xml_file);
|
|
|
|
return isset($manifest->version) ? trim($manifest->version) : '';
|
|
}
|
|
|
|
private static function getXmlFile()
|
|
{
|
|
$xml_file = JPATH_MANIFESTS . '/packages/pkg_' . static::$package_name . '.xml';
|
|
|
|
if (file_exists($xml_file))
|
|
{
|
|
return $xml_file;
|
|
}
|
|
|
|
$xml_file = JPATH_LIBRARIES . '/' . static::$package_name . '.xml';
|
|
|
|
if (file_exists($xml_file))
|
|
{
|
|
return $xml_file;
|
|
}
|
|
|
|
$xml_file = JPATH_ADMINISTRATOR . '/components/com_' . static::$package_name . '/' . static::$package_name . '.xml';
|
|
|
|
if (file_exists($xml_file))
|
|
{
|
|
return $xml_file;
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
private static function publishExtensions()
|
|
{
|
|
// ignore if this is an update of Conditions
|
|
if (static::$package_name == 'conditions' && static::$previous_version)
|
|
{
|
|
return;
|
|
}
|
|
|
|
$db = JFactory::getDbo();
|
|
|
|
$query = $db->getQuery(true)
|
|
->update('#__extensions')
|
|
->set($db->quoteName('enabled') . ' = 1')
|
|
->where($db->quoteName('element') . ' IN ('
|
|
. $db->quote(static::$package_name)
|
|
. ', ' . $db->quote('com_' . static::$package_name)
|
|
. ')'
|
|
);
|
|
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
}
|
|
}
|
|
}
|