Files
conservatorio-tomadini/plugins/system/nrframework/NRFramework/Updatesites.php
2024-12-31 11:07:09 +01:00

182 lines
3.8 KiB
PHP

<?php
/**
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
namespace NRFramework;
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Factory;
class Updatesites
{
/**
* Joomla Database Class
*
* @var object
*/
private $db;
/**
* The download key.
*
* @var string
*/
private $key;
/**
* Consturction method
*
* @param string $key Download Key
*/
public function __construct($key = null)
{
$this->db = Factory::getDBO();
$this->key = ($key) ? $key : $this->getDownloadKey();
}
/**
* Main method
*/
public function update()
{
$this->removeDuplicates();
$this->updateHttptoHttps();
$this->removeInstallerUpdateSite();
}
/**
* Reads the Download Key saved in the framework plugin parameters
*
* @return string The Download Key
*/
public function getDownloadKey()
{
$hash = 'nrframework_download_key';
$cache = Cache::read($hash);
if ($cache)
{
return $cache;
}
$query = $this->db->getQuery(true)
->select('e.params')
->from('#__extensions as e')
->where('e.element = ' . $this->db->quote('nrframework'));
$this->db->setQuery($query);
if (!$params = $this->db->loadResult())
{
return;
}
$params = json_decode($params);
if (!isset($params->key))
{
return;
}
return Cache::set($hash, trim($params->key));
}
/**
* Remove our Installer's update site left over from the database
*
* @return void
*/
private function removeInstallerUpdateSite()
{
$query = $this->db->getQuery(true)
->delete('#__update_sites')
->where($this->db->quoteName('name') . ' = ' . $this->db->quote('System - Novarain Installer'));
$this->db->setQuery($query);
$this->db->execute();
}
/**
* Update http to https
*
* @return void
*/
private function updateHttptoHttps()
{
$query = $this->db->getQuery(true)
->update('#__update_sites')
->set($this->db->quoteName('location') . ' = REPLACE('
. $this->db->quoteName('location') . ', '
. $this->db->quote('http://') . ', '
. $this->db->quote('https://')
. ')')
->where($this->db->quoteName('location') . ' LIKE ' . $this->db->quote('%tassos.gr%'));
$this->db->setQuery($query);
$this->db->execute();
}
/**
* Remove duplicate update sites created by upgrading from Free to Pro version
*
* @return void
*/
private function removeDuplicates()
{
$db = $this->db;
// Find duplicates first
$query = 'SELECT name, COUNT(*) c FROM #__update_sites where location like "%tassos.gr%" GROUP BY name HAVING c > 1';
$db->setQuery($query);
if (!$duplicates = $db->loadObjectList())
{
return;
}
// OK we have duplicates. Let's remove them.
foreach ($duplicates as $key => $duplicate)
{
// Get all IDs
$query = $db->getQuery(true)
->select('update_site_id')
->from('#__update_sites')
->where('name = ' . $db->quote($duplicate->name))
->order('update_site_id DESC');
$db->setQuery($query);
if (!$update_site_ids = $db->loadObjectList())
{
return;
}
// Skip the 1st index which represents the last created and valid.
unset($update_site_ids[0]);
foreach ($update_site_ids as $key => $update_site_id)
{
$id = $update_site_id->update_site_id;
$query->clear()
->delete('#__update_sites')
->where($db->quoteName('update_site_id') . ' = ' . (int) $id);
$db->setQuery($query);
$db->execute();
$query->clear()
->delete('#__update_sites_extensions')
->where($db->quoteName('update_site_id') . ' = ' . (int) $id);
$db->setQuery($query);
$db->execute();
}
}
}
}