Méthodo pour un champ file

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

  • Méthodo pour un champ file

    hello je cherche a fignolé un petit plugin de formulaire spécifique qui envois des emails (pas de stokage en bdd)
    j'arrive a générer les mes champs via des input html5
    et je voudrais pouvoir mettre un fichier en PJ au email
    via Jmail c'est pas trop complexe mais comme faire pour stocker temporairement la pj pour la mettre dans l'email ?
    Merci par avance

    Code PHP:
    $list_fields $field->parameters->get('form_fields');
                                    if (
    $list_fields){
                      foreach( 
    $list_fields as $list_fields_idx => $list_field ) {
                                        
    //print_r ($list_field);
                                        //check and create required class
                                        
    $required ='';
                                        if (
    $list_field->field_required){
                                            
    $required="required";
                                        }
                                        
    //create field id
                                        
    $field_id preg_replace("#[^a-zA-Z-0-9]#"""JText::_($list_field->field_label));

                                        
    //create field value
                                        
    $field_value preg_replace("#[^a-zA-Z-0-9]#"""JText::_($list_field->field_value));

                                        
    //placeholder
                                        
    $placeholder = ($label_position === 'placeholder') ? 'placeholder="'.$list_field->field_label.'"''';

                                        
    //create JText value
                                        
    $field_label JText::_($list_field->field_label);

                                        if(
    $list_field->field_type === 'text') {
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><input type="text" name="'.$field_value.'" id="'.$field_id.'" '.$placeholder.' aria-label="'.$field_label.'" class="'.$required.'"></div>';
                                            }
                                        if(
    $list_field->field_type === 'email') {
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><input type="email" name="'.$field_value.'" id="'.$field_id.'" '.$placeholder.' aria-label="'.$field_label.'" class="'.$required.' validate-email"></div>';
                                            }
                                        if(
    $list_field->field_type === 'date') {
                                                
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><input type="date" name="'.$field_value.'" id="'.$field_id.'" '.$placeholder.' aria-label="'.$field_label.'" class="'.$required.'"></div>';
                                                }
                                        if(
    $list_field->field_type === 'datetime-local') {
                                                
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><input type="datetime-local" name="'.$field_value.'" id="'.$field_id.'" '.$placeholder.' aria-label="'.$field_label.'" class="'.$required.'"></div>';
                                                }
                                        if(
    $list_field->field_type === 'textarea') {
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><textarea rows="4" cols="50" name="'.$field_value.'" '.$placeholder.' aria-label="'.$field_label.'" id="'.$field_id.'" class="'.$required.'"></textarea></div>';
                                            }
                                        if(
    $list_field->field_type === 'radio') {
                                            
    $values_field explode(";;",$list_field->field_value);
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$list_field->field_label.'</label>';
                                                foreach( 
    $values_field as $value_field ) {
                                                    
    $value preg_replace("#[^a-zA-Z-0-9]#"""JText::_($value_field));
                                                    
    $fields_display .= '<input type="radio" value="'.$value.'" name="'.$field_id.'" aria-label="'.JText::_($value_field).'" class="'.$required.'"><label for="'.$field_id.'">'.JText::_($value_field).'</label>';
                                                }
                                                
    $fields_display .='</div>';
                                        }
                                        if(
    $list_field->field_type === 'checkbox') {
                                            
    $values_field explode(";;",$list_field->field_value);
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$list_field->field_label.'</label>';
                                                foreach( 
    $values_field as $value_field ) {
                                                    
    $value preg_replace("#[^a-zA-Z-0-9]#"""JText::_($value_field));
                                                    
    $fields_display .= '<input type="checkbox" value="'.$value.'" name="'.$field_id.'" class="" aria-label="'.JText::_($value_field).'" ><label for="'.$field_id.'">'.JText::_($value_field).'</label>'//TODO add required system
                                                
    }
                                                
    $fields_display .='</div>';
                                        }
                                        if(
    $list_field->field_type === 'select') {
                                            
    $values_field explode(";;",$list_field->field_value);
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$list_field->field_label.'</label><select id="'.$field_id.'" aria-label="'.JText::_($value_field).'"><option value="">'.JText::_('FLEXI_SELECT').'</option>';
                                                foreach( 
    $values_field as $value_field ) {
                                                    
    $value preg_replace("#[^a-zA-Z-0-9]#"""JText::_($value_field));
                                                    
    $fields_display .='<option value="'.$value.'" class="'.$required.'">'.JText::_($value_field).'</option>';
                                                }
                                            
    $fields_display .='</select></div>';
                                        }
                                        if(
    $list_field->field_type === 'file') {
                                            
    $fields_display .= '<h3>NOT COMPLETE FUNCTION</h3><div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><input type="file" name="'.$field_id.'" accept="'.$value.'" id="'.$field_id.'" '.$placeholder.' aria-label="'.$field_label.'" class="'.$required.'"></div>';
                                        }
                                        if(
    $list_field->field_type === 'phone') {
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><input type="phone" name="'.$field_id.'" pattern="'.$value.'" id="'.$field_id.'" '.$placeholder.' aria-label="'.$field_label.'" class="'.$required.'"></div>';
                                        }
                                        if(
    $list_field->field_type === 'hidden') {
                                            
    $fields_display .= '<input type="hidden" name="'.$field_id.'" id="'.$field_id.'">';
                                        }
                                        if(
    $list_field->field_type === 'freehtml') {
                                            
    $fields_display .= '<div class="field"><p>'.$field_label.'</p><p>'.JText::_($list_field->field_value).'</p></div>';
                                        }
                                        if(
    $list_field->field_type === 'url') {
                                            
    $fields_display .= '<div class="field"><label for="'.$field_id.'" class="'.$class.'">'.$field_label.'</label><input type="url" name="'.$field_id.'" pattern="'.$list_field->field_value.'" id="'.$field_id.'" '.$placeholder.' aria-label="'.$field_label.'" class="'.$required.'"></div>';
                                        }
                                }
                            }

        
    $html '
            <form id="contact-form-'
    .$formid.'" method="POST" class="form-validate" enctype="multipart/form-data">
            <fieldset>
                '
    .$titleformD.'
                '
    .$fields_display.'
                '
    .$consent_field.'
                '
    .$captcha_div.'
            <input type="submit" name="submit" value="'
    .JText::_('FLEXI_FIELD_EMAIL_SUBMIT_LABEL_VALUE').'" class="'.$submit_class.'">
            <input type="hidden" name="emailtask" value="plg.email.submit" />
            <input type="hidden" name="emailto" value="'
    .$addr.'" />
            <input type="hidden" name="itemid" value="'
    .$item->id.'" />
            <input type="hidden" name="itemtitle" value="'
    .$item->title.'" />
            <input type="hidden" name="itemalias" value="'
    .$item->alias.'" />
            <input type="hidden" name="catid" value="'
    .$item->catid.'" />
            <input type="hidden" name="return" value="" />
            '
    .JHtml::_("form.token").'
            </fieldset>
            </form>'

    Société : http://www.com3elles.com
    Bénévole : http://www.flexicontent.org

  • #2
    Tu as vu la doc : https://docs.joomla.org/Sending_email_from_extensions

    Je mets tous mes fichier en PJ dans le dossier tmp de Joomla et cela marche très bien.

    Faut juste penser à effacer les fichiers après.
    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


    • #3
      as tu regles le champs dans le dossier tmp
      puis tu le recuepere via
      $mailer->addAttachment(JPATH_COMPONENT.'/assets/document.pdf'); tu aurais le bout de code pour l'envoi et la destruction ? (l'event send j'ai)
      Dernière édition par y.berges à 12/02/2019, 14h10
      Société : http://www.com3elles.com
      Bénévole : http://www.flexicontent.org

      Commentaire


      • #4
        Envoyé par y.berges Voir le message
        as tu regles le champs dans le dossier tmp
        puis tu le recuepere via
        $mailer->addAttachment(JPATH_COMPONENT.'/assets/document.pdf'); tu aurais le bout de code pour l'envoi et la destruction ? (l'event send j'ai)
        Pas évident, j'ai tout dans des classes bien spécifiques, un espèce de framework à moi si tu veux.
        Voici bout à bout les principales méthodes que j'utilise.

        Pour l’écriture du fichier c'est :

        Code PHP:


        $FileInscriptionsUrl 
        GskiFileHelper::URLFichierTmp();
        JFile::write($FileInscriptionsUrlimplode("\n"$infos->fichier_lignes
        Code PHP:
        abstract class GskiFileHelper
        {

            public static function 
        DossierTmp($sdossier 'gski'){

                
        $dir_dest=JFactory::getConfig()->get('tmp_path');
                if(
        strlen($sdossier)>0){
                    
        $dir_dest .= DIRECTORY_SEPARATOR.$sdossier;
                }
                if(!
        self::DirInitialize($dir_dest)){
                    
        $dir_dest=JFactory::getConfig()->get('tmp_path');
                }
                return 
        $dir_dest;
            }

            public static function 
        DirInitialize($dir_dest){
                
        $app JFactory::getApplication();
                if(
        is_file($dir_dest)){
                    
        $app->enqueueMessage(JText::sprintf('COM_GSKIEPREUVE_FOLDER_CREATE_ERROR',$dir_dest), 'error');
                    return 
        false;
                }
                if(!
        is_dir($dir_dest)){
                    if (
        JFolder::create($dir_dest,511)){
                        
        $data "<html>\n<body bgcolor="#FFFFFF">\n</body>\n</html>";
                        
        JFile::write($dir_dest DIRECTORY_SEPARATOR "index.html"$data);
                        
        $data "order deny,allow\ndeny from all\nallow from none\n";
                        
        JFile::write($dir_dest DIRECTORY_SEPARATOR '.htaccess'$data);
                    }else{
                        
        $app->enqueueMessage(JText::sprintf('COM_GSKIEPREUVE_FOLDER_CREATE_ERROR',$dir_dest), 'error');
                        return 
        false;
                    }
                }
                return 
        true;

            }

            public static function 
        NomFichierTmp($suffix=''){

                
        $nom 'gski_tmp_' .  JFactory::getUser()->id '_' time();

                if(
        strlen($suffix)>0){
                    if(
        $suffix[0] == '.'){
                        
        $nom .= $suffix;
                    }else{
                        
        $nom .= '.'.$suffix;
                    }

                }
                return 
        $nom;
            }


            public static function 
        URLFichierTmp($suffix=''){

                
        $dir_dest=self::DossierTmp();
                
        $nom self::NomFichierTmp($suffix);
                
        $retour $dir_dest DIRECTORY_SEPARATOR $nom;
                return 
        $retour;
            } 
        Pour l'envoi :
        Code PHP:

        // c'est une autre methode d'une autre classe abstraite $FileInscriptionsUrl est passé en paramètre et devient maintenant $urlFile

                
        $mailer JFactory::getMailer();

                if(
        $format=='html'){
                    
        $mailer->isHtml(true);
                    
        $mailer->Encoding 'base64';
                }

        ....

                
        $mailer->addRecipient($tabEmails); // tableau avec les adresses mail des destinataires

                
        $mailer->setSubject(GskiStringHelper::tags_chaine_traite($titre$tagstables'text'));
        // GskiStringHelper::tags_chaine_traite c'est une fonction qui remplaces des tags par des valeurs de champs dans les templates de mail
                
        $mailer->setBody(GskiStringHelper::tags_chaine_traite($mess$tagstables$format));

                
        $mailer->setSender(array($config->get('mailfrom'),$config->get('fromname')));

        .....


                if(
        $urlFile!=''){
                    
        $filename 'skiffs_concurrents_'.$CLEvenement->codex// nom du fichier dans le mail
                    
        $mailer->addAttachment($urlFile,$filename,'base64','text/plain');
                }
        $result=$mailer->send(); 
        Pour la destruction c'est :
        Code PHP:
                        if($FileInscriptionsUrl != ''){
                            
        JFile::delete($FileInscriptionsUrl);
                        } 
        Dernière édition par roland_d_alsace à 12/02/2019, 15h24
        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