Packetage d'installation, execution des scripts d'installation des packet inclus

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Packetage d'installation, execution des scripts d'installation des packet inclus

    Bonjour à tous.

    Quand on fait un packetage d'installation (un pkg_), comment faire afin que les scripts d'install de chaque packet inclu soient exécutés.

    Seul le script du packetage global est exécuté (donc celui défini dans la balise <scriptfile> du fichier manifest du package global).

    Je n'ai pas trouvé de documentation sur ce point.

    Si quelqu'un(e) peut m’éclairer, merci.
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

  • #2
    Bonjour,

    Si je me réfère au package de Joaktree (qui n'a pas de scriptfile lui-même), le simple fait d'inclure le zip du composant lance le script du composant :
    <!-- database scripts -->
    <scriptfile>joaktree.script.php</scriptfile>
    Et apparemment c'est moi qui ai créé ce package.
    Je ne sais donc pas si un script "général" empêcherait le fonctionnement des autres.
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

    Commentaire


    • #3
      Bonjour,

      Pour un package, j'ai repris la logique utilisée par RegularLabs pour ses extensions.

      Le script.install.php respecte plus ou moins la doc : https://docs.joomla.org/J3.x:Creatin...te_script_file

      Mais, ils ont adapté pour que cela installe les composants, plugins, ibrairies et cela fait ce qu'il faut pour enregistrer/activer les plugins.

      Donc, j'ai adapté leur adaptation à mon package : https://www.conseilgouz.com/componen...d=64:cg-secure

      En espérant que cela t'aide,

      Pascal
      If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

      Commentaire


      • #4
        Envoyé par RobertG Voir le message
        Bonjour,

        Si je me réfère au package de Joaktree (qui n'a pas de scriptfile lui-même), le simple fait d'inclure le zip du composant lance le script du composant :

        Et apparemment c'est moi qui ai créé ce package.
        Je ne sais donc pas si un script "général" empêcherait le fonctionnement des autres.
        Merci Robert, mais je n'ai pas ce comportement.
        Seul le script du package s’exécute.

        Ce qui fait que je dois reprendre les actions des scripts des composants et plugins inclus dans le script du package.
        Or dans la logique d'un package, le script du package ne devrait pas faire grand chose comme traitement, sauf de gérer l'affichage dans l'installateur.

        Envoyé par pmleconte Voir le message
        Bonjour,

        Pour un package, j'ai repris la logique utilisée par RegularLabs pour ses extensions.

        Le script.install.php respecte plus ou moins la doc : https://docs.joomla.org/J3.x:Creatin...te_script_file

        Mais, ils ont adapté pour que cela installe les composants, plugins, ibrairies et cela fait ce qu'il faut pour enregistrer/activer les plugins.

        Donc, j'ai adapté leur adaptation à mon package : https://www.conseilgouz.com/componen...d=64:cg-secure

        En espérant que cela t'aide,

        Pascal
        Merci Pascal je vais regarder ton package.

        Mais je cherche bien à ce que le script du package s’exécute, mais aussi les scripts d'installation de chaque composant, librairie ou plugin inclus, car je ne vois pas comment les lancer à partir du script du packet.
        Dernière édition par roland_d_alsace à 17/01/2020, 17h56
        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
        Rejoignez le Joomla Users Groupe Alsace...
        roland_d_alsace va-t-il devenir roland_du_grand_est ?

        Commentaire


        • #5
          Envoyé par roland_d_alsace Voir le message

          ...;
          Mais je cherche bien à ce que le script du package s’exécute, mais aussi les scripts d'installation de chaque composant, librairie ou plugin inclus, car je ne vois pas comment les lancer à partir du script du packet
          ...
          .
          Sauf erreur de ma part, c'est ce type de fonctionnement qui a été fait dans le packaging de type RegularLabs. J'ai des plugins, une librairie, un composant. La base SQL est dans le zip du composant et le package installe tout cela (voir la fonction PostFlight qui installe chaque partie du package).

          Pascal
          Dernière édition par pmleconte à 17/01/2020, 18h18
          If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

          Commentaire


          • #6
            Bonjour,
            Je prépare actuellement des composants avec module et plugins.
            Je peux te fournir le fichier script.php complet qui installe le tout si tu veux, aussi qui active le plugin.

            Est-ce quelque chose comme ça que tu recherches ?
            Code:
            public function install($parent)
                {
                    $this->installDb($parent);
                    $this->installPlugins($parent);
                    $this->installModules($parent);
                }

            Code:
                private function installPlugins($parent)
                {
                    $installation_folder = $parent->getParent()->getPath('source');
                    $app                 = Factory::getApplication();
            
                    /* @var $plugins SimpleXMLElement */
                    $plugins = $parent->get("manifest")->plugins;
            
                    if (count($plugins->children()))
                    {
                        $db    = Factory::getDbo();
                        $query = $db->getQuery(true);
            
                        foreach ($plugins->children() as $plugin)
                        {
                            $pluginName  = (string) $plugin['plugin'];
                            $pluginGroup = (string) $plugin['group'];
                            $path        = $installation_folder . '/plugins/' . $pluginGroup . '/' . $pluginName;
                            $installer   = new JInstaller;
            
                            if (!$this->isAlreadyInstalled('plugin', $pluginName, $pluginGroup))
                            {
                                $result = $installer->install($path);
                            }
                            else
                            {
                                $result = $installer->update($path);
                            }
            
                            if ($result)
                            {
                                $app->enqueueMessage('Plugin ' . $pluginName . ' was installed successfully');
                            }
                            else
                            {
                                $app->enqueueMessage('There was an issue installing the plugin ' . $pluginName,
                                    'error');
                            }
            
                            $query
                                ->clear()
                                ->update('#__extensions')
                                ->set('enabled = 1')
                                ->where(
                                    array(
                                        'type LIKE ' . $db->quote('plugin'),
                                        'element LIKE ' . $db->quote($pluginName),
                                        'folder LIKE ' . $db->quote($pluginGroup)
                                    )
                                );
                            $db->setQuery($query);
                            $db->execute();
                        }
                    }
                }
            Cordialement.

            Eric

            Commentaire


            • #7
              Hello.

              L'activation des plugins je le fais dans les scripts de chaque plugin afin qu'il soit autonome, cela me semble plus logique.

              La création et la maintenance des tables de la database doit être faite par le framework (balises sql et update du manifest d'installation).
              En effet il vaut mieux laisser faire le framework de Joomla, afin qu'il puisse enregistrer le numéro de version de ta structure de DB dans la table #__schemas et donc pouvoir corriger à partir de l'administration.
              Si tu fais les créations et mise à jour des tables dans le script d'installation, Joomla ne pourra pas : le fameux bouton "correction" du menu extension > gerer > base de donnée, ne traitera pas ton composant, vu qu'il ne pourra pas traiter la différence de version entre le "schema" de tes tables dans la DB provenant de la table #__schemas et la dernière version du fichier sql contenue dans le dossier correspondant de ton composant (par exemple /administrator/components/com_toncomposant/sql/update/1.2.0.sql).

              Le problème que je rencontre, c'est que les scripts d'install des packets d'installation inclus dans un package ne sont pas exécutés lors de l'install du packatage.

              Par exemple :
              Je déplace des helpers d'un composant dans une library.
              Dans la version 1.1 du composant ces helpers sont installée dans un des dossier du composant.
              Dans la version 1.2 ce n'est plus le cas, et les helpers sont installés dans un dossier de la library (donc dans la packatage d'install de la library)
              Dans la methode update() de la classe herité de Jinstaller du paquetage d'install composant version 1.2, si la version précédente était < à 1.2 je supprime les fichier de helpers des dossiers du composant, vu qu'ils sont installée par la package d'installation de la librairie dans /libraries/my_librairy.

              Eh bien cette methode du script d'install du package du composant n'est pas exécute.
              Je dois reprendre la procédure dans la méthode update du script d'instal du packetage.
              Idem pour l'activation des plugins, je dois reprendre l'activation de script d'install du packetage car le script d'install du plugin (du moins la méthode update) ne semble pas exécuté.

              Je n'ai pas le temps, mais Mardi je tracerai l’exécution de l’installateur car j'ai d'autres questions à laquelle je n'ai pas de réponse.

              MErci en tous cas et bonne journée.
              Dernière édition par roland_d_alsace à 19/01/2020, 12h46
              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
              Rejoignez le Joomla Users Groupe Alsace...
              roland_d_alsace va-t-il devenir roland_du_grand_est ?

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X