182 lines
3.8 KiB
PHP
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();
|
|
}
|
|
}
|
|
}
|
|
} |