Envoyer le lien de l'article... sans le lien !

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

  • [RÉGLÉ] Envoyer le lien de l'article... sans le lien !

    Bonjour à tou(te)s,
    Je suis de retour avec un petit soucis avec le composant 'mailto' qui me permet d'utiliser la fonction "Envoyer l'adresse url de la page à un ami"

    Après avoir bricolé un peu le "controller.php", car l'envoi n'était pas possible auparavant, tout va bien l'envoi de mail fonctionne, mais le lien n'apparait pas dans le mail envoyé, aussi bien dans la version allemande que la version française de mon site
    (duett.fr).

    Vous pouvez tester, le corps du message envoyé se présente comme suit :
    Ceci est un e-mail de (duett.fr) envoyé par albert (untel@duett.fr).
    Ce lien pourrait vous intéresser:
    (et pas de lien !)

    Pour les cracks de la question, voici ci-dessous à quoi ressemble mon code "controller.php" à l'heure actuelle.
    Je tourne en rond entre les dossiers language (je ne pense pas que ça vienne de là, comme je l'ai écrit, j'ai le même problème dans les deux langues du site) et surtout dans components/com_mailto
    Tout coup de main est plus que le bienvenu, je suis encore novice sur Joomla.

    Alain
    duett.fr
    <?php
    /**
    * @version $Id: controller.php 21078 2011-04-04 20:52:23Z dextercowley $
    * @package Joomla
    * @subpackage MailTo
    * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
    * @license GNU/GPL, see LICENSE.php
    * Joomla! is free software. This version may have been modified pursuant to the
    * GNU General Public License, and as distributed it includes or is derivative
    * of works licensed under the GNU General Public License or other free or open
    * source software licenses. See COPYRIGHT.php for copyright notices and
    * details.
    */

    // Check to ensure this file is included in Joomla!
    defined('_JEXEC') or die( 'Restricted access' );

    jimport('joomla.application.component.controller') ;

    define('MAILTO_TIMEOUT', 20);

    /**
    * @package Joomla
    * @subpackage MailTo
    */
    class MailtoController extends JController
    {

    /**
    * Show the form so that the user can send the link to someone
    *
    * @access public
    * @since 1.5
    */
    function mailto()
    {
    $session =& JFactory::getSession();
    $session->set('com_mailto.formtime', time());
    JRequest::setVar( 'view', 'mailto' );
    $this->display();
    }

    /**
    * Send the message and display a notice
    *
    * @access public
    * @since 1.5
    */
    function send()
    {
    global $mainframe;

    // Check for request forgeries
    JRequest::checkToken() or jexit( 'Invalid Token' );
    $session =& JFactory::getSession();
    $db =& JFactory::getDBO();

    // we return time() instead of 0 (as it previously was), so that the session variable has to be set in order to send the mail
    $timeout = $session->get('com_mailto.formtime', 0);
    if($timeout == 0 || time() - $timeout > 20) {
    JError::raiseNotice( 500, JText:: _ ('EMAIL_NOT_SENT' ));
    return $this->mailto();
    }
    // here we unset the counter right away so that you have to wait again, and you have to visit mailto() first
    $session->set('com_mailto.formtime', null);

    jimport( 'joomla.mail.helper' );

    $SiteName = $mainframe->getCfg('sitename');
    $MailFrom = $mainframe->getCfg('mailfrom');
    $FromName = $mainframe->getCfg('fromname');

    $link = MailtoHelper::validateHash(JRequest::getString('li nk', '', 'post'));

    // Verify that this is a local link
    if(!JURI::isInternal($link)) {
    //Non-local url...
    JError::raiseNotice( 500, JText:: _ ('EMAIL_NOT_SENT' ));
    return $this->mailto();
    }

    // An array of e-mail headers we do not want to allow as input
    $headers = array ( 'Content-Type:',
    'MIME-Version:',
    'Content-Transfer-Encoding:',
    'bcc:',
    'cc:');

    // An array of the input fields to scan for injected headers
    $fields = array ('mailto',
    'sender',
    'from',
    'subject',
    );

    /*
    * Here is the meat and potatoes of the header injection test. We
    * iterate over the array of form input and check for header strings.
    * If we find one, send an unauthorized header and die.
    */
    foreach ($fields as $field)
    {
    foreach ($headers as $header)
    {
    if (strpos($_POST[$field], $header) !== false)
    {
    JError::raiseError(403, '');
    }
    }
    }

    /*
    * Free up memory
    */
    unset ($headers, $fields);

    $email = JRequest::getString('mailto', '', 'post');
    $sender = JRequest::getString('sender', '', 'post');
    $from = JRequest::getString('from', '', 'post');
    $subject_default = JText::sprintf('Item sent by', $sender);
    $subject = JRequest::getString('subject', $subject_default, 'post');

    // Check for a valid to address
    $error = false;
    if ( ! $email || ! JMailHelper::isEmailAddress($email) )
    {
    $error = JText::sprintf('EMAIL_INVALID', $email);
    JError::raiseWarning(0, $error );
    }

    // Check for a valid from address
    if ( ! $from || ! JMailHelper::isEmailAddress($from) )
    {
    $error = JText::sprintf('EMAIL_INVALID', $from);
    JError::raiseWarning(0, $error );
    }

    if ( $error )
    {
    return $this->mailto();
    }

    // Build the message to send
    $msg = JText :: _('EMAIL_MSG');
    $body = sprintf( $msg, $SiteName, $sender, $from, $link);

    // Clean the email data
    $subject = JMailHelper::cleanSubject($subject);
    $body = JMailHelper::cleanBody($body);
    $sender = JMailHelper::cleanAddress($sender);

    // Send the email
    if ( JUtility::sendMail($from, $sender, $email, $subject, $body) !== true )
    {
    JError::raiseNotice( 500, JText:: _ ('EMAIL_NOT_SENT' ));
    return $this->mailto();
    }

    JRequest::setVar( 'view', 'sent' );
    $this->display();
    }
    }
    Dernière édition par alain2 à 25/06/2011, 23h25

  • #2
    Re : Envoyer le lien de l'article... sans le lien !

    Personne en ce dernier dimanche de juin ? Pourtant, il ne fait pas très beau (à Berlin en tout cas !)
    Merci d'avance à qui pourrait m'aider !

    Commentaire


    • #3
      Re : Envoyer le lien de l'article... sans le lien !

      Tu as modifié cette constante de langue :
      EMAIL_MSG
      ?

      -Fly06_Fr
      Fly06_Fr (http://www.fly06.fr/)
      -------------------------------------------
      Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

      Commentaire


      • #4
        Re : Envoyer le lien de l'article... sans le lien !

        je ne pense pas (ou alors sans intention de le faire).
        où est-elle rangée ?
        Merci pour ton aide !

        Commentaire


        • #5
          Re : Envoyer le lien de l'article... sans le lien !

          Envoyé par alain2 Voir le message
          où est-elle rangée ?
          language/fr-FR/fr-FR.com_mailto.ini

          EMAIL_MSG=Ceci est un e-mail de (%s) envoyé par %s (%s). Ce lien pourrait vous intéresser: %s

          Vérifie que tu as bien 4 %s dans tes constantes.

          -Fly06_Fr
          Fly06_Fr (http://www.fly06.fr/)
          -------------------------------------------
          Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

          Commentaire


          • #6
            Re : Envoyer le lien de l'article... sans le lien !

            Le problème n'est pas là non plus, les quatre %s des variables sont bien là (les /n, c'est pour faire joli !)

            voici quand même mon code pour la version française (est-ce que ça pourrait venir de l'iso UT8 ?):

            # $Id: fr-FR.com_mailto.ini 1.5.9 2009-01-10 00:28:59 humvee ~0 $
            # author French translation team : Joomla!fr
            # copyright Copyright (C) 2005 - 2010 Joomla.fr et Open Source Matters. Tous droits réservés
            # license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL

            # Note : All ini files need to be saved as UTF-8

            EMAIL_ERR_NOINFO=Veuillez saisir une adresse e-mail valide
            EMAIL_INVALID=L'adresse '%s' ne semble pas être une adresse e-mail valide
            EMAIL_THIS_LINK_TO_A_FRIEND=Envoyer l'adresse url de la page Ã* un ami
            EMAIL_TO=E-mail du destinataire
            SENDER=Expéditeur
            YOUR_EMAIL=Votre adresse e-mail
            SUBJECT=Sujet
            SEND=Envoyer
            CANCEL=Annuler
            EMAIL_SENT=Cet e-mail a été envoyé avec succès
            EMAIL_NOT_SENT=Cet e-mail n'a pas pu être envoyé
            EMAIL_MSG=Ceci est un e-mail de (%s) envoyé par %s (%s). \n\n Ce lien pourrait vous intéresser:\n %s
            CLOSE_WINDOW=Fermer la fenêtre
            ITEM SENT BY=Élément envoyé par

            Commentaire


            • #7
              Re : Envoyer le lien de l'article... sans le lien !

              Non c'est pas la constante de langue qui pose pb (même si ton fichier soit mal encodé).

              Sinon, je viens de voir qu'il y a un espace entre le i et n dans 'li nk':
              Code PHP:
              $link MailtoHelper::validateHash(JRequest::getString('li nk''''post')); 
              C'est cet espace existe bien dans ton fichier controller.php alors le pb vient de la...

              -Fly06_Fr
              Fly06_Fr (http://www.fly06.fr/)
              -------------------------------------------
              Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

              Commentaire


              • #8
                Re : Envoyer le lien de l'article... sans le lien !

                Fausse joie : en arrivant sur le controller.php, l'espace ne figure pas à l'endroit indiqué.
                Comment cet espace a atterri dans le copié/collé, là, mystère...
                Revoilà donc le code recopié/recollé à l'instant depuis le ftp.
                Penses-tu que je pourrais récupérer un "controller.php" qui fonctionne sur un autre joomla pour en récupérer le code ?
                Concernant l'encodage, je le changerai quand j'aurai plus de temps, j'ai traduit tellement de fils en utilisant ces caractères, cela représente des heures de travail.

                Merci encore pour ton attention et ton aide !
                Alain

                Code PHP:
                <?php
                /**
                 * @version        $Id: controller.php 21078 2011-04-04 20:52:23Z dextercowley $
                 * @package        Joomla
                 * @subpackage    MailTo
                 * @copyright    Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
                 * @license        GNU/GPL, see LICENSE.php
                 * Joomla! is free software. This version may have been modified pursuant to the
                 * GNU General Public License, and as distributed it includes or is derivative
                 * of works licensed under the GNU General Public License or other free or open
                 * source software licenses. See COPYRIGHT.php for copyright notices and
                 * details.
                 */

                // Check to ensure this file is included in Joomla!
                defined('_JEXEC') or die( 'Restricted access' );

                jimport('joomla.application.component.controller');

                define('MAILTO_TIMEOUT'20);

                /**
                 * @package        Joomla
                 * @subpackage    MailTo
                 */
                class MailtoController extends JController
                {

                    
                /**
                     * Show the form so that the user can send the link to someone
                     *
                     * @access public
                     * @since 1.5
                     */
                    
                function mailto()
                    {
                        
                $session =& JFactory::getSession();
                        
                $session->set('com_mailto.formtime'time());
                        
                JRequest::setVar'view''mailto' );
                        
                $this->display();
                    }

                    
                /**
                     * Send the message and display a notice
                     *
                     * @access public
                     * @since 1.5
                     */
                    
                function send()
                    {
                        global 
                $mainframe;

                        
                // Check for request forgeries
                        
                JRequest::checkToken() or jexit'Invalid Token' );
                        
                $session =& JFactory::getSession();
                        
                $db    =& JFactory::getDBO();

                        
                // we return time() instead of 0 (as it previously was), so that the session variable has to be set in order to send the mail
                        
                $timeout $session->get('com_mailto.formtime'0);
                      if(
                $timeout == || time() - $timeout 20) {
                         
                JError::raiseNotice500JText:: ('EMAIL_NOT_SENT' ));
                         return 
                $this->mailto();
                      }
                        
                // here we unset the counter right away so that you have to wait again, and you have to visit mailto() first
                        
                $session->set('com_mailto.formtime'null);

                        
                jimport'joomla.mail.helper' );

                        
                $SiteName     $mainframe->getCfg('sitename');
                        
                $MailFrom     $mainframe->getCfg('mailfrom');
                        
                $FromName     $mainframe->getCfg('fromname');

                                
                $link           MailtoHelper::validateHash(JRequest::getString('link''''post'));

                        
                // Verify that this is a local link
                        
                if(!JURI::isInternal($link)) {
                         
                //Non-local url...  
                         
                JError::raiseNotice500JText:: ('EMAIL_NOT_SENT' ));
                         return 
                $this->mailto();
                      }

                        
                // An array of e-mail headers we do not want to allow as input
                        
                $headers = array (    'Content-Type:',
                                            
                'MIME-Version:',
                                            
                'Content-Transfer-Encoding:',
                                            
                'bcc:',
                                            
                'cc:');

                        
                // An array of the input fields to scan for injected headers
                        
                $fields = array ('mailto',
                                         
                'sender',
                                         
                'from',
                                         
                'subject',
                                         );

                        
                /*
                         * Here is the meat and potatoes of the header injection test.  We
                         * iterate over the array of form input and check for header strings.
                         * If we find one, send an unauthorized header and die.
                         */
                        
                foreach ($fields as $field)
                        {
                            foreach (
                $headers as $header)
                            {
                                if (
                strpos($_POST[$field], $header) !== false)
                                {
                                    
                JError::raiseError(403'');
                                }
                            }
                        }

                        
                /*
                         * Free up memory
                         */
                        
                unset ($headers$fields);

                        
                $email                 JRequest::getString('mailto''''post');
                        
                $sender             JRequest::getString('sender''''post');
                        
                $from                 JRequest::getString('from''''post');
                        
                $subject_default     JText::sprintf('Item sent by'$sender);
                        
                $subject             JRequest::getString('subject'$subject_default'post');

                        
                // Check for a valid to address
                        
                $error    false;
                        if ( ! 
                $email  || ! JMailHelper::isEmailAddress($email) )
                        {
                            
                $error    JText::sprintf('EMAIL_INVALID'$email);
                            
                JError::raiseWarning(0$error );
                        }

                        
                // Check for a valid from address
                        
                if ( ! $from || ! JMailHelper::isEmailAddress($from) )
                        {
                            
                $error    JText::sprintf('EMAIL_INVALID'$from);
                            
                JError::raiseWarning(0$error );
                        }

                        if ( 
                $error )
                        {
                            return 
                $this->mailto();
                        }

                        
                // Build the message to send
                        
                $msg    JText :: _('EMAIL_MSG');
                        
                $body    sprintf$msg$SiteName$sender$from$link);

                        
                // Clean the email data
                        
                $subject JMailHelper::cleanSubject($subject);
                        
                $body     JMailHelper::cleanBody($body);
                        
                $sender     JMailHelper::cleanAddress($sender);

                        
                // Send the email
                        
                if ( JUtility::sendMail($from$sender$email$subject$body) !== true )
                        {
                            
                JError::raiseNotice500JText:: ('EMAIL_NOT_SENT' ));
                            return 
                $this->mailto();
                        }

                        
                JRequest::setVar'view''sent' );
                        
                $this->display();
                    }
                }

                Commentaire


                • #9
                  Re : Envoyer le lien de l'article... sans le lien !

                  Envoyé par alain2 Voir le message
                  Fausse joie : en arrivant sur le controller.php, l'espace ne figure pas à l'endroit indiqué.
                  Désolé ;-)

                  Dans les cas où le problème ne me saute aux yeux à la lecture du code, je débuggue avec la bonne vieille méthode du die($ma_variable_à_inspecter) et/ou son équivalent pour les tableaux et les objets...

                  Mais là il y a que toi qui peut le faire.

                  -Fly06_Fr
                  Fly06_Fr (http://www.fly06.fr/)
                  -------------------------------------------
                  Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                  Commentaire


                  • #10
                    Re : Envoyer le lien de l'article... sans le lien !

                    Envoyé par Fly06_Fr Voir le message
                    bonne vieille méthode du die($ma_variable_à_inspecter)
                    -Fly06_Fr
                    Voilà qui m'intéresse ! Surtout si elle est bonne ! As-tu un lien ou pourrais-tu m'en résumer le principe en quelques mots ?
                    Le "jeune membre" que je suis ne connais pas (encore) les vielles méthodes !
                    Merci d'avance et merci pour tout !
                    Alain

                    Commentaire


                    • #11
                      Re : Envoyer le lien de l'article... sans le lien !

                      En regardant le code de la méthode send() sur une 1.5.20, je constate une différence :

                      Code PHP:
                      $link         base64_decodeJRequest::getVar'link''''post''base64' ) ); 
                      Alors que dans ton code :

                      Code PHP:
                      $link           MailtoHelper::validateHash(JRequest::getString('link''''post')); 
                      La classe MailtoHelper n'existe pas dans J1.5.20.

                      Tu est sûr de tes modifs ?!!

                      -Fly06_Fr
                      Fly06_Fr (http://www.fly06.fr/)
                      -------------------------------------------
                      Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                      Commentaire


                      • #12
                        Re : Envoyer le lien de l'article... sans le lien !

                        Mon héros !!! Enfin le lien dans les mails pour recommander un lien !
                        Merci Fly06, c'était bien là le problème.
                        Je viens de regarder, la classe "MailtoHelper" m'est tombée dessus avec le patch pour la version J1.5.23
                        Peut-être qu'il faudrait informer les développeurs du problème de cette version (mais peut-être que ce "MailtoHelper" devrait fonctionner correctement, mais pas depuis le patch en tout cas !)
                        Encore merci et bonne nuit !
                        Alain

                        Commentaire


                        • #13
                          Re : Envoyer le lien de l'article... sans le lien !

                          Envoyé par alain2 Voir le message
                          Je viens de regarder, la classe "MailtoHelper" m'est tombée dessus avec le patch pour la version J1.5.23
                          Peut-être qu'il faudrait informer les développeurs du problème de cette version (mais peut-être que ce "MailtoHelper" devrait fonctionner correctement, mais pas depuis le patch en tout cas !)
                          Effectivement, ces changements sont intervenus dans version 1.5.23.

                          En regardant de plus près, l'encodage de l'url a changé, de base64 pour sha1.

                          Donc si la modif fonctionne (décodage) c'est que la partie encodage est toujours en base64 ce qui plaide pour une application incomplète du patch (com_content).

                          Il serait préférable de réappliquer le patch

                          -Fly06_Fr
                          Fly06_Fr (http://www.fly06.fr/)
                          -------------------------------------------
                          Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                          Commentaire


                          • #14
                            Re : Envoyer le lien de l'article... sans le lien !

                            Entendu, je vais regarder de plus près ce fameux patch pour voir pourquoi il refuse l'encodage sha1 !
                            Je poste ici si je trouve la faille.

                            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
                            Travaille ...
                            X