Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un composan

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

  • [RÉGLÉ] Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un composan

    Bonjour

    Quelqu'un aurait-il une suggestion : est-il possible de demander à Joomla 1.5 d'exécuter un bout de code avant même qu'il ne commence à supprimer le composant ?

    L'objectif est le suivant : procéder à un contrôle et le cas échéant, afficher un popup informant l'utilisateur que supprimer le composant va aussi supprimer un certain nombre de fichiers php qu'il aurait créé manuellement ==> s'il veut les garder, il doit les sauver.

    A ma connaissance, le seul code de type uninstall que Joomla exécute est celui qu'on place dans la fonction com_uinstall et Joomla l'exécute après avoir tout supprimer.

    J'ai essayé ceci

    Code PHP:
    function com_uninstall() {
       echo 
    '<h1>PAS DE UNINSTALL!!!</h1>';    
       return 
    false;
    // function com_uninstall() 
    Je vois bien le message après la désinstallation et je vois bien que la désinstallation n'est pas OK (parce que j'ai fait un return false) mais trop tard, Joomla a déjà supprimé les fichiers.

    (Pour être complet : les fichiers que l'utilisateur aurait créé sont des fichiers PHP. je pourrais les placer dans le dossier des media et là, ils seront l'abri mais ce n'est pas logique vu qu'il ne s'agit en rien de media mais bien de code. Et ce serait même risqué sur le plan de la sécurité vu que /media est plutôt ouvert comme dossier)


    [EDIT]Selon cette doc (http://docs.joomla.org/API15:JInstal...nent/uninstall) cela ne serait pas possible, le composant com_install ne subordonne pas la suppression à un éventuel contrôle.

    Si quelqu'un a une idée amusante et fonctionnelle.... [/EDIT]
    Dernière édition par cavo789 à 12/04/2011, 15h28 Raison: Ajout lien vers l'API
    Christophe (cavo789)
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
    Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
    Mes logiciels OpenSource : https://www.avonture.be

  • #2
    Re : Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un com

    Bonjour,

    Je crois que j'ai une solution qui peut te plaire.
    J'ai un peu regardé ton lien et il apparaît que si un fichier de manifest xml existe alors le processus de désinstallation va d'abord exécuter ton fichier de désinstallation avant de supprimer des fichier.

    Il faut jouer à ce moment là sur les redirections.
    Il faut instancier un contrôleur et faire une redirection avec message d'erreur s'il vous plaît.

    Code PHP:
    <?php
    defined
    ('_JEXEC') or die ('No Access to this File');
    jimport('joomla.application.component.controler');
    function 
    com_uninstall() {
        
    $controller = new     JController();
        
    $controller->setRedirect(JRoute::_('/administrator/index.php?option=com_installer',false),'On a arreté la désinstallation','error');
        
    $controller->redirect();
    }
    Et le tour est joué!

    Damien
    www.Crac-Design.com

    Commentaire


    • #3
      Re : Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un com

      Et ça marche ? Cela semble sacrément original (comprendre "imaginatif"). Chapeau bas !

      A relire ton premier paragraphe, je me demande même si un bête jexit() ne suffirait pas à vrai dire.

      Je teste demain.

      Merci
      Christophe (cavo789)
      Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
      Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
      Mes logiciels OpenSource : https://www.avonture.be

      Commentaire


      • #4
        Re : Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un com

        Bien entendu ça marche...
        Un bout de code ne se poste pas à la légère

        Le jexit($msg) marche aussi mais alors c'est pas vraiment pas joli.
        C'est un peu comme:
        Code PHP:
        echo $msg;
        exit(
        0); 
        Bon dev.
        www.Crac-Design.com

        Commentaire


        • #5
          Re : Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un com

          Envoyé par ZDamienZ Voir le message
          Un bout de code ne se poste pas à la légère
          Il m'arrive de poster du code sans le tester; "à la volée" (mais j'avertis mon lecteur dans ce cas).

          Merci pour cette lumineuse idée. Reste à voir comment je vais l'implémenter.

          L'idée est d'avertir mon utilisateur "Attention, vous avez modifié des fichiers PHP du composant AllEvents. En désinstallant le composant, Joomla va supprimer vos fichiers. Si c'est votre intention, cliquez sur Continuer sinon, annuler la désinstallation; faites p.e. un backup de vos fichiers et si nécessaire, relancez la désinstallation". Un truc du genre. Ma première idée serait un petit bout de code JS avec un confirm().

          La redirection a ceci de cavalier c'est que je stoppe l'action alors que, peut-être, mon utilisateur veut vraiment supprimer le composant. Dans ce cas, il faudrait qu'il puisse le faire sans devoir aller dans son FTP, supprimer les fichiers du dossier override.

          A creuser.

          Merci pour ton code.
          Christophe (cavo789)
          Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
          Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
          Mes logiciels OpenSource : https://www.avonture.be

          Commentaire


          • #6
            Re : Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un com

            Ca c'est un sujet qui me branche bien.

            Une petite idée vite fait de bon matin, tu peux utiliser le morceau de code contenant la redirection pour rediriger l'utilisateur si il a modifié des fichiers sportingEvents vers la page de gestion des composants (de tête com_manager et la tâche manage) avec un message.
            Dans ce message tu insères un lien (balise a classique) pointant sur /administrator/index.php?option=com_manager&task=unsinstall&compo nent=com_sportingevents&confirm=1 (attention le lien est faux pour task et component, il faut regarder exactement le lien permettant une désinstallation).
            Dans ton uninstall.com_sportingevents.php tu vérifies alors que si tu as une variable $_GET['confirm']=1 alors l'administrateur a bien confirmé la désinstallation. Let's do it...

            A vérifier si tu peux intégrer un lien dans un message de redirection, je sais pas si il n'y a pas un htmlentities() qui traine avant.
            Plutôt que $_GET tu peux utiliser JRequest::getInt('confirm') peut-être un peu plus joli.
            Avec un peu de css tu peux même faire comme si ton lien était un joli bouton.

            A coder...
            www.Crac-Design.com

            Commentaire


            • #7
              Re : Demander à Monsieur Joomla d'exécuter un code PHP avant qu'il ne supprime un com

              Bonjour

              BRAVO, c'est une excellente solution que tu proposes-là.

              Ci-dessous le code que j'ai implémenté. Pour le réutiliser dans d'autres composants, il faudra l'adapter quelque peu.

              L'idée : la fonction $g_se_Files->hasBeenOverride() va retourner true dès lors que l'utilisateur a surchargé des fichiers de mon composant. Dans ce cas, je dois interdire à Joomla de supprimer le composant car sinon l'utilisateur non averti perds ses fichiers (et risque de m'insulter de tous les noms alors que je n'y suis pour rien du tout).

              Donc si hasBeenOverride retourne true, je vérifie le paramètre global CanDeleteOverrideFiles qui est par défaut à 0. Si 0, cela signifie que l'utilisateur n'est pas averti de la catastrophe en cours et est redirigé vers une vue de mon composant (&task=uninstalling). Par précaution, je passe le token.

              La tâche uninstalling a pour fonction d'afficher une vue avec un texte explicatif et une possibilité de mettre le paramètre CanDeleteOverrideFiles à true. Si c'est le choix de l'utilisateur, cela permet de relancer la désinstallation de AllEvents et de passer outre mon contrôle en lui donnant un "Je suis pleinement conscient de ce qui sera fait; je souhaite la suppression de mes fichiers."

              Code PHP:

              jimport
              ('joomla.application.component.controler');
              jimport('joomla.filesystem.file');

              function 
              com_uninstall() {

                 global 
              $g_se_Files;
                 global 
              $g_se_Settings;

                 
              $bContinue false;
                 
              $path=JPATH_SITE.DS.'components'.DS.'com_allevents'.DS;
                 
                 
              // Instanciation de deux classes PHP de AllEvents

                 
              if ($g_se_Files==null)    { require_once ($path.'class'.DS.'files.php');    $g_se_Files    =new AllEventsClassFiles();    }
                 if (
              $g_se_Settings==null) { require_once ($path.'class'.DS.'settings.php'); $g_se_Settings =new AllEventsClassSettings(); }
                 
                 
              // Avant de permettre à Joomla de désinstaller AllEvents, il faut vérifier
                 // si l'utilisateur n'a pas faire de l'override.  

                 
              if ($g_se_Files->hasBeenOverride()===true) {
                     
                       
              // Oui ==> est-ce qu'on peut supprimer les fichiers surchargés ?   
                       // Par défaut, non.   Toutefois si l'utilisateur a volontairement activé le paramètre l'autorisant, 
                       // la main est rendue à Joomla qui va supprimer les fichiers

                    
              if ($g_se_Settings->get('CanDeleteOverrideFiles',0)!=1) {
                        
                         
              // Si le code arrive ici, cela signifie que l'utilisateur a fait de l'override et qu'il n'a pas autorisé
                         // la suppression de ces fichiers ==> il est redirigé vers la vue Uninstalling de AllEvents qui lui explique
                         // qu'il serait bon de sauvegarder ses fichiers surchargés et, si tel est son choix, d'autoriser la suppression 
                         // (dans ce cas et seulement dans ce cas, le paramètre CanDeleteOverrideFiles du composant sera mis à 1).

                       
              $jUtil = new JUtility();
                       
              $token $jUtil->getToken();      
                       unset(
              $jUtil);

                       
              $controller = new JController();
                       
              $controller->setRedirect(JRoute::_(JURI::base().'index.php?option=com_allevents&task=uninstalling&'.$token.'=1',false), JText::_('Oups'),'warning');
                       
              $controller->redirect();

                       return 
              false;
                    }

                 } 
              // if ($g_se_Files->hasBeenOverride()===true)
                 
                 // Si le code arrive ici, la désinstallation de AllEvents peut se faire

                
              ...
                ...
                ...

                 echo 
              "Hope to see you again on our flights";

                 return 
              true
              Christophe (cavo789)
              Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
              Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
              Mes logiciels OpenSource : https://www.avonture.be

              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