web-dev-qa-db-fra.com

Comment arrêter la mise à jour / l'installation par le script d'installation et conserver le dossier actuel?

Joomla 3.x m'a montré que je peux utiliser un script d'installation qui ressemble à ceci:

class lib_exampleInstallerScript
{
    public function install($adapter) 
    {
        // during install
    }

    public function uninstall($adapter) 
    {
        // during uninstall
    }

    public function update($adapter) 
    {
        // during update
    }

    public function preflight($route, $adapter) 
    {
        // before all
    }

    public function postflight($route, $adapter) 
    {
        // after all
    }
}

J'essayais de créer un script qui vérifie si les extensions actuelles à installer ont une version supérieure à celle installée sur le système. Quelque chose comme ça:

public function preflight($type, $parent){

    // Return true if version to be installed is higher
    if (!$this->isHigherVersion($parent)){
        $msg = "<p>Error msg.</p>";
        JLog::add($msg, JLog::WARNING, 'jerror');
        return false;
    }
}

Cependant, il semble qu'avant d'entrer dans le contrôle en amont, joomla supprime le contenu du dossier de l'extension installée, et que j'arrête le processus dans le contrôle en amont, j'obtiens un dossier sans les fichiers, uniquement le script d'installation. Cela devrait fonctionner quand l'extension sera installée ou mise à jour.

2
CyberHollow

Pour obtenir la version actuelle, vous devez obtenir la version à partir du #__extensions table et comparez-les. Voici le script que j'ai écrit pour mes extensions ... J'ai ajouté quelques commentaires pour vous aider:

class lib_exampleInstallerScript
{
    protected $release = '';

    protected $extension = 'lib_mylibrary';

    public function preflight($type, $parent)
    {
        // Module manifest file version
        $this->release = $parent->get('manifest')->version;

        // Abort if the module being installed is not newer than the currently installed version
        if (strtolower($type) === 'update')
        {
            $manifest   = $this->getItemArray(JFactory::getDbo()->quote($this->extension));
            $oldRelease = $manifest['version'];

            // Someone is trying to install a lower version than is currently installed
            if (version_compare($this->release, $oldRelease, '<'))
            {
                // Throw some error message and return false
                JApplicationCms::getInstance('site')->enqueueMessage('Error msg'), 'error');

                return false;
            }

            // The version being installed is higher than what is currently installed
            if (version_compare($oldRelease, $this->release, '<'))
            {
                // You can execute a function here

                // If you want to compare a specific version.
                if (version_compare($oldRelease, '2.0.0', '<='))
                {
                    // Update function for version 2.0.0
                    // $this->updateToVersionTwo();
                }
            }
        }
    }

    protected function getItemArray($identifier)
    {
        $db = JFactory::getDbo();

        $query = $db->getQuery(true)
            ->select($db->qn('manifest_cache'))
            ->from($db->qn('#__extensions'))
            ->where($db->qn('element') . ' = ' . $identifier);
        $db->setQuery($query);

        // Load the single cell and json_decode data
        $array = json_decode($db->loadResult(), true);

        return $array;
    }
}

J'espère que cela t'aides

1
Lodder