web-dev-qa-db-fra.com

Impossible de mettre à jour l'URL du serveur de déploiement pendant un événement postflight

Quand j’installe myplugin pour la première fois, il devrait mettre à jour la colonne location dans #__update_sites table avec la chaîne mise à jour qui inclut la clé API.

Je ne parviens pas à mettre à jour lors de la première installation car ma requête ne comprend pas le update_site_id de #__update_sites_extensions.

Je me demande pourquoi? Pour cette raison, je suis incapable de mettre à jour la chaîne. Seulement après l'installation peut.

Quelqu'un peut-il indiquer à quel stade joomla met à jour le #__update_sites_extensions avec le location/ url?

Existe-t-il également un moyen d'empêcher Joomla d'insérer dans cette table le url à chaque installation?

en fichier xml:

<updateservers>
<server type="extension" name="myplugin Update Site">https://test.com/jupdates/manifest/myplugin</server>
</updateservers>

Dans script.php

public function postflight()
    {
       $extensionId = $this->getExtensionId();
       $updateSiteId = $this->updateSiteId($extensionId);
       $defaultLocation = 'https://test.com/jupdates/manifest/myplugin';
       $location = $defaultLocation . '?apikey=' . APIKEY;

mettre à jour la chaîne d'emplacement avec la clé api

       $db = JFactory::getDBO();
       $query = array();
       $query   = 'UPDATE '. $db->quoteName('#__update_sites')
            . ' SET ' . $db->quoteName('location') . ' = ' . $db->Quote($location)
            . ' WHERE ' . $db->quoteName('update_site_id') . ' = ' . $db->Quote($updateSiteId);

       $db->setQuery($query);
       $db->query();
    }

les fonctions:

public function getExtensionId()
{
    $db = JFactory::getDBO();

    $query = array();
    $query[] = 'SELECT ' . $db->quoteName('extension_id') . ' FROM ' . $db->quoteName('#__extensions');
    $query[] = 'WHERE ' . $db->quoteName('element') . '=' . $db->Quote('myplugin');
    $query[] = 'AND ' . $db->quoteName('type') . '=' . $db->Quote('plugin');

    $query = implode(' ', $query);

    $db->setQuery($query);

    $extensionId = $db->loadResult();


    return $extensionId;
}

public function updateSiteId($extensionId)
{
    $db = JFactory::getDBO();

    $query = array();
    $query[] = 'SELECT ' . $db->quoteName('update_site_id') . ' FROM ' . $db->quoteName('#__update_sites_extensions');
    $query[] = 'WHERE ' . $db->quoteName('extension_id') . '=' . $db->Quote($extensionId);

    $query = implode(' ', $query);
    $db->setQuery($query);

    $updateSiteId = $db->loadResult();


    return $updateSiteId;
}
2
112233

La définition du serveur de mise à jour n'est chargée dans la base de données que lorsque l'événement onExtensionAfterInstall est distribué, et cela dépend de l'activation du plug-in "Extension - Joomla".

1
Michael