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 hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

  • #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 hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

          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 hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

              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 hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

                  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 hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

                      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 hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

                            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
                              1 sur 2 < >

                              C'est [Réglé] et on n'en parle plus ?

                              A quoi ça sert ?
                              La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                              Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                              Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                              Comment ajouter la mention [Réglé] à votre discussion ?
                              1 - Aller sur votre discussion et éditer votre premier message :


                              2 - Cliquer sur la liste déroulante Préfixe.

                              3 - Choisir le préfixe [Réglé].


                              4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                              2 sur 2 < >

                              Assistance au forum - Outil de publication d'infos de votre site

                              Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                              Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                              Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                              UTILISER À VOS PROPRES RISQUES :
                              L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                              Problèmes connus :
                              FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                              Installation :

                              1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                              Archive zip : https://github.com/AFUJ/FPA/zipball/master

                              2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                              3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                              4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                              5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                              6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                              et remplacer www. votresite .com par votre nom de domaine


                              Exemples:
                              Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/
                              Pour executer le script: http://www..com/fpa-fr.php

                              Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/cms/
                              Pour executer le script: http://www..com/cms/fpa-fr.php

                              En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                              Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                              Voir plus
                              Voir moins

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X