View file upload/src/addons/xenMade/ACPE/Repository/SoftwareVersions.php

File size: 3.39Kb
<?php

namespace xenMade\ACPE\Repository;

use XF\Mvc\Entity\Finder;
use XF\Mvc\Entity\Repository;

class SoftwareVersions extends Repository
{
    protected $_xfProducts = ['XF', 'XFMG', 'XFRM', 'XFES'];

    public function getSoftwareVersions()
    {
        $versions = [];

        try
        {
            /** @var \GuzzleHttp\Client  $client */
            $client = \XF::app()->http()->client();

            $request = $client->createRequest('get', 'https://xenmade.com/getxfversions', [
                'timeout' => 20,
                'exceptions' => false,
                'headers' => ['User-Agent' => 'ACPPlus2 XF Versions Checker']
            ]);

            $response = $client->send($request);

            if ($response && $response->getStatusCode() == 200)
            {
                $xml = $response->xml();

                if($xml instanceof \SimpleXMLElement)
                {
                    if($xml->children() instanceof \SimpleXMLElement)
                    {
                        foreach($xml->children() as $child)
                        {
                            $product = (string)$child->getName();

                            $addOnId = 'unknow';

                            switch($product)
                            {
                                case 'XenForo':
                                    $addOnId = 'XF';
                                    break;

                                case 'XenES':
                                    $addOnId = 'XFES';
                                    break;

                                case 'XenResource':
                                    $addOnId = 'XFRM';
                                    break;

                                case 'XenGallery':
                                    $addOnId = 'XFMG';
                                    break;
                            }

                            $versions[$addOnId] = (string)$child['version'];
                        }
                    }
                }
            }
        }
        catch(\GuzzleHttp\Exception\RequestException $e)
        {
            \XF::logException($e, false, 'ACPE XF Versions Check: ');
            return true;
        }

        $cache = \XF::app()->simpleCache()->ACPE;
        $cache->software_versions = $versions;

        return true;
    }

    public function getVersionsList($onlyXF = false)
    {
        \XF::app()->addOnManager()->_acpe = true;

        $addOns = \XF::app()->addOnManager()->getInstalledAddOns();
        $softwareVersions = \XF::app()->simpleCache()->ACPE->software_versions;
        $products = [];

        foreach ($addOns as $addOnId => $addOn)
        {
            if(isset($softwareVersions[$addOnId]))
            {
                if(!in_array($addOnId, $this->_xfProducts))
                    continue;

                $products[$addOnId] =
                    [
                        'addon_id' => $addOnId,
                        'title' => $addOn['title'],
                        'version_string' => $addOn['version_string'],
                        'current_string' => $softwareVersions[$addOnId],
                        'update_exists' => version_compare($softwareVersions[$addOnId], $addOn['version_string']),
                    ];
            }
        }

        return $products;
    }
}