pkg-component-builder/install_component_builder.php
2024-03-09 21:50:57 +02:00

142 lines
3.9 KiB
PHP

<?php
/**
* @package Joomla.Component.Builder
*
* @created 30th April, 2015
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Factory;
/**
* Script File of Componentbuilder Package
*/
class pkg_component_builderInstallerScript
{
/**
* Called after any type of action
*
* @return boolean True on success
*/
public function postflight($type, $parent)
{
// enable the JCB plugins
$this->enableJCBPlugins();
// only run these if we have an update
if ('update' == $type)
{
// update the update server location
$this->updateServerLocation();
}
}
/**
* Update server location
*
* @return void
*/
protected function updateServerLocation()
{
$location = "https://git.vdm.dev/joomla/Component-Builder/raw/branch/4.x/componentbuilder_update_server.xml";
$elements = ['pkg_component_builder', 'com_componentbuilder'];
// Get the Package Update Site Details
foreach ($elements as $element)
{
if (($sites = $this->getUpdateSites($element)) !== null)
{
foreach ($sites as $site)
{
if ($site->location !== $location)
{
// Update the update site location
$site->location = $location;
Factory::getDbo()->updateObject('#__update_sites', $site, 'update_site_id');
}
}
}
}
}
/**
* Get Update Sites
*
* @return array|null
*/
protected function getUpdateSites(string $element): ?array
{
// Get The Database object
$db = Factory::getDbo();
// Get the Package Update Site Details
$query = $db->getQuery(true);
$query->select($db->quoteName(array('s.location', 's.update_site_id')));
$query->from($db->quoteName('#__update_sites', 's'));
$query->join('LEFT', $db->quoteName('#__update_sites_extensions', 'u') . ' ON ' . $db->quoteName('s.update_site_id') . ' = ' . $db->quoteName('u.update_site_id'));
$query->join('LEFT', $db->quoteName('#__extensions', 'e') . ' ON ' . $db->quoteName('u.extension_id') . ' = ' . $db->quoteName('e.extension_id'));
$query->where($db->quoteName('e.element') . ' = ' . $db->quote($element));
$db->setQuery($query);
$db->execute();
if ($db->getNumRows())
{
return $db->loadObjectList();
}
return null;
}
/**
* Enable all JCB Plugins
*
* @return void
*/
protected function enableJCBPlugins()
{
// Get The Database object
$db = Factory::getDbo();
// enable all JCB plugins Always!
$plugins = [
'componentbuilderadminheaderstabs',
'componentbuildercomponentdashboardheaderstabs',
'componentbuildercomponentheaderstabs',
'componentbuildercustomadminheaderstabs',
'componentbuilderlanguagetabs',
'componentbuildersiteheaderstabs',
'componentbuilderdynamicgetheaderstabs',
'componentbuilderprivacytabs',
'componentbuilderfieldorderingtabs',
'componentbuilderactionlogcompiler',
'componentbuilderexportcompiler',
'componentbuilderfieldorderingcompiler',
'componentbuilderheaderscompiler',
'componentbuilderlanguagepackaging',
'componentbuilderpowersautoloadercompiler',
'componentbuilderprivacycompiler'
];
// Create a new query object.
$query = $db->getQuery(true);
// we must update the enabled field
$fields = [
$db->quoteName('enabled') . ' = 1'
];
// Conditions for which records should be updated.
$conditions = [
$db->quoteName('element') . ' IN (' . implode(',', array_map([$db, 'quote'], $plugins)) . ')'
];
// load the update query
$query->update($db->quoteName('#__extensions'))->set($fields)->where($conditions);
// Reset the query using our newly populated query object.
$db->setQuery($query);
$db->execute();
}
}