Problème d'enregistrement de paramètre (plugin)

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

  • [RÉGLÉ] Problème d'enregistrement de paramètre (plugin)

    Bonjour,

    Je suis en train d'essayer de créer un plugin système à faire exécuter à une heure précise. (je me suis inspiré du code du plugin updatenotification)

    Pour ça, j'ai un paramètre "lastrun" défini dans le manifest, par défaut à "0".
    Le code suivant doit récupérer sa valeur, puis la modifier à "now"
    Code PHP:
            $now time();
            
    $last = (int) $this->params->get('lastrun'0);
            echo (
    $last); echo('<br/>');
            if ((
    abs($now $last) < $timeout))
            {
                echo(
    'Not time to work');
                return;
            }
            
    // Update last run status
            
    $this->params->set('lastrun'$now);
            
    $db    $this->db;
            
    $query $db->getQuery(true)
                ->
    update($db->qn('#__extensions'))
                ->
    set($db->qn('params') . ' = ' $db->q($this->params->toString('JSON')))
                ->
    where($db->qn('type') . ' = ' $db->q('plugin'))
                ->
    where($db->qn('folder') . ' = ' $db->q('system'))
                ->
    where($db->qn('element') . ' = ' $db->q('monplugin'));

           
    $now1 = (int) $this->params->get('lastrun'0);
           echo(
    $now1); 
    Lorsque j'enregistre le plugin, le premier "echo" me renvoie "0", le dernier une valeur type "1562575782".
    Mais dans la base, j'ai toujours lastrun à 0, et si je réenregistre mêmes valeurs, "0" et "1562576252"
    Quelle erreur ai-je pu faire pour que ce paramètre reste à 0 dans le champ "params" du plugin ?

    Merci de votre aide,
    Robert

    PS : en complément, lé définition du paramètre lastrun dans le manifeste
    <field
    name="lastrun"
    type="hidden"
    default="0"
    size="15"
    />
    Dernière édition par RobertG à 08/07/2019, 10h14
    "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

  • #2
    have you executed the query?
    Jean-Marie Simonet / infograf768
    Joomla co-fondateur. Joomla Production Working Group.
    Sauf demande explicite de ma part, merci de ne pas utiliser de Message Privé pour poser des questions. Le forum est là pour ça.

    Commentaire


    • #3
      Salut

      Verifie qu'il ne te manque pas la ligne d'execution de la requete, du style
      Code PHP:
      $db->setQuery($query); 
      ++
      Wis

      Commentaire


      • #4
        Salut Robert.

        +1 avec infograf768

        Tu n’exécutes pas ta requête.

        Il te manque le
        Code PHP:
          $db->execute(); 
        voir https://docs.joomla.org/Inserting,_U...g_JDatabase/fr
        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
          Merci à tous les trois !
          En effet, j'avais oublié cette ligne...

          Mais pas d'amélioration. Que j'utilise $db = $this->db; ou $db = JFactory::getDbo(); ce n'est pas enregistré pour autant...
          Dernière édition par RobertG à 08/07/2019, 11h54
          "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


          • #6
            Envoyé par RobertG Voir le message
            Merci à tous les trois !
            En effet, j'avais oublié cette ligne...

            Mais pas d'amélioration. Que j'utilise $db = $this->db; ou $db = JFactory::getDbo(); ce n'est pas enregistré pour autant...
            Essaie en remplaçant $db->qn par $db->quotename et $db->q par $db->quote (je ne connais pas ces alias de méthode).
            correction de 13:06 Si cela semble ok : https://api.joomla.org/cms-3/classes....html#method_q


            Alors vérifie ta requête fait un :
            Code PHP:
            echo $query->__toString(); 
            et regarde si elle fonctionne avec phpmyadmin
            Dernière édition par roland_d_alsace à 08/07/2019, 12h08 Raison: ajouts
            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


            • #7
              Merci Roland,

              Cette requête, je l'ai récupérée dans le plugin logrotation (et non updatenotification comme je l'ai écrit par erreur), donc elle devrait fonctionner.
              echo sur elle me donne
              UPDATE `#__extensions` SET `params` = '{"unlocktime":"10:30","lastrun":1562586251}' WHERE `type` = 'plugin' AND `folder` = 'system' AND `element` = 'dataunlock'
              Ce qui est bizarre, c'est que la modification de l'heure (unlocktime) dans la gestion du plugin est, elle, bien enregistrée. Est-il normal que la valeur pour lastrun ne soit pas entourée des " comme les autres éléments ?

              Pour info, c'est une tentative de plugin de déblocage des données verrouillées, comme on en parle dans une autre discussion : tout fonctionne (un script indépendant aussi), sauf cet enregistrement. Je teste en local, donc sans aucun risque.
              Il me restera ensuite à gérer l'heure de lancement, prévue pour le moment comme seul paramètre modifiable, et éventuellement une sélection des données à déverrouiller en fonction des membres qui les ont verrouillées et de leur connexion en cours, mais j'ai un doute sur la recherche des membres connectés dont il faudrait ne pas déverrouiller les lignes, compte tenu de la gestion actuelle des sessions...
              Si ça t'intéresse, on peut en discuter en privé.
              "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


              • #8
                Envoyé par RobertG Voir le message
                Merci Roland,

                Cette requête, je l'ai récupérée dans le plugin logrotation (et non updatenotification comme je l'ai écrit par erreur), donc elle devrait fonctionner.
                echo sur elle me donne
                Ce qui est bizarre, c'est que la modification de l'heure (unlocktime) dans la gestion du plugin est, elle, bien enregistrée. Est-il normal que la valeur pour lastrun ne soit pas entourée des " comme les autres éléments ?
                C'est du numérique, donc pas besoin d'être encadré par des doubles-guillemets en JSON.
                De toutes façon au niveau de la requête sql c'est géré comme une chaine, donc il peut y avoir n'importe quel caractère, cela doit s'enregistrer.

                Regarde déjà ce qui est enregistré avec phpmyadmin pour voir si c'est l'enregistrement qui ne marche pas ou la relecture.

                Sinon essaie la requête avec phpmyadmin. (nombre de lignes affectée)
                C'est donc plutôt au niveau des index qu'il y a un problème (elle existe ta ligne `element` = 'dataunlock' ??).

                Envoyé par RobertG Voir le message
                Pour info, c'est une tentative de plugin de déblocage des données verrouillées, comme on en parle dans une autre discussion : tout fonctionne (un script indépendant aussi), sauf cet enregistrement. Je teste en local, donc sans aucun risque.
                Il me restera ensuite à gérer l'heure de lancement, prévue pour le moment comme seul paramètre modifiable, et éventuellement une sélection des données à déverrouiller en fonction des membres qui les ont verrouillées et de leur connexion en cours, mais j'ai un doute sur la recherche des membres connectés dont il faudrait ne pas déverrouiller les lignes, compte tenu de la gestion actuelle des sessions...
                Si ça t'intéresse, on peut en discuter en privé.
                Oui j'ai vu ce fil et aussi donné mon avis.
                Mais pour l'instant je ne suis pas trop derrière mes claviers...
                Dernière édition par roland_d_alsace à 08/07/2019, 13h45
                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


                • #9
                  Dans la tables des extensions, le plugin est bien présent et la valeur de lastrun n'est pas enregistrée, elle reste à "0", alors que celle de l'heure de déclenchement l'est.
                  Directement depuis phpMyAdmin, cette requête fonctionne. Mystère !
                  "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


                  • #10
                    Envoie-moi ton code (voir MP).
                    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


                    • #11
                      Merci Roland ! Mail envoyé.
                      "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


                      • #12
                        Pour moi ton code fonctionne (réponse + complète / mail).
                        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


                        • #13
                          $db->setQuery($query)->execute()
                          Jean-Marie Simonet / infograf768
                          Joomla co-fondateur. Joomla Production Working Group.
                          Sauf demande explicite de ma part, merci de ne pas utiliser de Message Privé pour poser des questions. Le forum est là pour ça.

                          Commentaire


                          • #14
                            Merci à vous !

                            En fait, je n'avais pas compris que je devais utiliser à la fois setQuery et execute.
                            Problème réglé !
                            "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


                            • #15
                              Envoyé par RobertG Voir le message
                              Merci à vous !

                              En fait, je n'avais pas compris que je devais utiliser à la fois setQuery et execute.
                              Problème réglé !
                              Le $db->setQuery($query) passe la requête SQL $query à l'instance de $db.

                              Ce point est toujours à faire.

                              Ensuite le $db->execute() exécute la dernière requête sql passée, selon la connexion paramétrés dans Joomla. (obtenue lors de la création de l'objet par $db = JFactory::getDbo();
                              ceci dans le cas où l'on attend rien en retour qu'une éventuelle erreur (cas du update ou du delete).

                              Sinon (cas du SELECT) ce sera une méthode de sélection comme un $db->loadResult(), un $db->loadRow() ou un $db->loadAssoc (par exemple) (donc a la place du $db->execute()).

                              Mais comme dit au préalable le $db->setQuery($query) et nécessaire au préalable afin de savoir quelle sera la prochaine requête sql à exécuter par le driver de database instancié en $db.
                              On peut même directement y mettre une chaine contenant du SQL en paramètre à la place de $query.
                              Dernière édition par roland_d_alsace à 08/07/2019, 19h01
                              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