8768 sujets

Développement web côté serveur, CMS

Bonjour,

Je cherche a réaliser un pdf avec le framework codeigniter.
J'ai déjà vue pas mal de tuto, cependant je m'interroge sur la mise en application.

Pour résumer, j'ai un formulaire qui permet d'enregistrer un ticket, lorsque je le valide, j'aimerais générer le pdf de ce formulaire et l'envoyer par email.

Donc de côté de mon contrôleur, je traite mon formulaire, insert et update de ma bdd, en dessous, je mets la création de mon pdf, et là je ne sais pas trop dans quel sens il est préférable d'aller.
$NameFile= 'files/inter/inter-'.date("HisdmY").'.pdf';

            $this->load->helper(array('dompdf', 'file'));
            // page info here, db calls, etc.
            $data['client'] = $this->ct_model->getClientTicket($_POST['ticket']);
            $html = $this->load->view('admin/pdf/inter_pdf', $data, true);
            var_dump($html);
            pdf_create($html, $NameFile);

le problème avec ce code c'est que $html est vide. Alors je ne sais pas comment dire que $html = à ma vue inter_pdf, cette vue ne serra pas visible puisqu'elle sert uniquement pour le pdf et je dois également lui envoyer des datas.
Modérateur
Salut,

Je ne connais pas code igniter. En fait c'est le raisonnement qui n'est pas bon en soit. Tu t'emmêles les pinceaux.

Lorsque l'utilisateur a bien rempli le form, tu filtres ce qu'il a rempli. ex : dans le cas où il a fait des erreurs de saisie, tu l'invites à mieux saisir les champs du formulaire. Si les données vont en base, tu filtres les données afin qu'il n'y ait pas une faille.

Si tout est bon (bonne saisie), tu crées le pdf que tu placeras sur le HD. Tu crées ton mail et tu joins le pdf généré; tu envoies ton mail, tu supprimes le pdf si besoin et ensuite tu insères en bases si besoin. À chaque étape, je t'invite à bien vérifier que tout se passe bien (ex :Est ce que le fichier existe ? Est ce que la création du pdf s'est bien passée ? l'insertion en base ? etc. ). Pour finir, tu rediriges ton user vers la vue que tu veux et tu lui informes l'état de l 'action (Tout s'est bien déroulé. Vous allez recevoir un mail prochainement etc.)
Modifié par niuxe (13 Jan 2015 - 21:43)
Bonjour,

merci d'avoir pris le temps de répondre à mon problème !

Donc non je ne mélange pas tous, puisqu'en amont, je traite mon formulaire (test sur tous les champs requis, affichage des éventuels erreurs), Ensuite je redirige vers une page avec des messages de succès.

Alors peut être que je ne génère pas mon pdf au bon moment, d'ailleurs, je ne souhaites pas l'enregistrer, ni en base, ni sur le dd. Dès que l'utilisateur valide le formulaire, le pdf est généré puis envoyé par email, c'est une sorte de confirmation avec le résumé de ce qui a été dit dans le formulaire.

En fait le site est déjà fait, mais pas avec une architecture mvc, c'est pour ça que je reprend tous pour le faire avec codeigniter.

je mets le code de la fonction dans mon contrôler, peut être que ça peut aider à y voir plus clair.

function inter_new()
    {
        if (!$this->session->userdata('log_admin')) {
            redirect('ct/log_admin');
        }
        $this->form_validation->set_rules('ticket', 'Ticket', 'trim|required|xss_clean');
        $this->form_validation->set_rules('dinter', 'Date d\'intervention', 'trim|required|xss_clean');
        $this->form_validation->set_rules('tech', 'Technicien', 'trim|required|xss_clean');
        $this->form_validation->set_rules('ferme', 'Fermer le ticket', 'trim|xss_clean');
        $this->form_validation->set_rules('garantie', 'Garantie', 'trim|xss_clean');
        $this->form_validation->set_rules('description', 'Intervention', 'trim|required|xss_clean');
        if ($this->form_validation->run()) {
            $this->load->model('ct_model');
            if(!isset($_POST['ferme'])){
                $etat = 0;
            }else{
                $etat = 1;
            }
            if(!isset($_POST['garantie'])){
                $garant = 0;
            }else{
                $garant = 1;
            }


            $data = array(
                'IDTicket'=>$_POST['ticket'],
                'DateInter'=>$this->ct_model->convertDate($_POST['dinter']),
                'DescrInter'=>$_POST['description'],
                'IDCapecom'=>$_POST['tech']
            );
            $this->ct_model->insertInter($data);
            $data = array(
                'Etat'=> $etat,
                'Garantie'=> $garant,
                'Inter'=>1
            );
            $this->ct_model->update_ticket($_POST['ticket'], $data);


            $NameFile= 'files/inter/inter-'.date("HisdmY").'.pdf';

            $this->load->helper(array('dompdf', 'file'));
            // page info here, db calls, etc.
            $data['client'] = $this->ct_model->getClientTicket($_POST['ticket']);
            $html = $this->load->view('admin/pdf/inter_pdf', $data, true);
            var_dump($html);
            pdf_create($html, $NameFile);

            $data['success'] = 'L\'intervention a bien été enregistrée, le détail sera envoyé au client.';
            $data['table'] = $this->ct_model->getInter(0, 9);
            $this->load->view('admin/inter/table', $data);
        }else{
            $this->load->model('ct_model');
            $data['table'] = $this->ct_model->getTicket(0);
            $data['tech'] = $this->ct_model->getTech();
            $this->load->view('admin/inter/new', $data);
        }
    }



et voici le code de l'ancienne version
<?php
require '../../config/config.inc.php';
/************  HEADER ************/
include("../includes/header.php");

    if(isset($_POST['valid']))
    {
    
        function convertDate($date)
        {
            $tabDate = explode('/' , $date);
            $enDate  = $tabDate[2].'-'.$tabDate[1].'-'.$tabDate[0];
            return $enDate;
        }
        
        //récupération des valeurs des champs
        $touvert      = $_POST['ticket'];
        $dateinter    = $_POST['dinter'];
        $tech         = $_POST['tech'];
        $ferme        = $_POST['ferme'];
        $garantie     = $_POST['garantie'];
        $description  = $_POST['description'];
        //creation de la requete sql
        $sql5 = $cnx->query('INSERT INTO inters(IDInter, IDTicket, DateInter, DescrInter, IDCapecom, DateNow) VALUES ("", "'.$touvert.'", "'.convertDate($dateinter).'", "'.$description.'", "'.$tech.'", curdate())') or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
        
        //update table ticket

        $sql = "UPDATE tickets
                SET Garantie   ='$garantie',
                    Etat       ='$ferme',
                    Inter      = 1
            WHERE IDTicket     ='$touvert'";
        //execution de la requete sql
        $res = $cnx->query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
        //affichage des resultats, pour savoir si la modif à marchée:
        if($res)
        {?>
           <p class="text-success bg-success">Vous avez mis à jour la liste des tickets pour voir la modification cliquez <a href="../gticket/TBGticket.php">ici</a>, ou retournez dans la gestion des <a href="TBGinter.php">interventions !</a></p>
        <?php }else {?>
            <p class="text-danger bg-danger">La modification à échouée, <a href="TBGinter.php">Retour</a></p>
        <?php }

        //envoi du pdf pour confirmation de l'intervention:
        //génération pdf + envoi par mail en pj

        $client = $cnx->query("SELECT Nom, Adresse1, CodePostal, Ville FROM clients 
                                INNER JOIN utilisateurs ON utilisateurs.IDClient = clients.IDClient
                                INNER JOIN tickets ON tickets.IDUtilisateur = utilisateurs.IDUtilisateur
                                WHERE tickets.IDTicket =".$touvert) or die('Erreur SQL!<br>'.$client.'<br>'.mysql_error());
        $row = $client->fetch(PDO::FETCH_ASSOC);
        $nom       = $row['Nom'];
        $adresse1  = $row['Adresse1'];
        $cp        = $row['CodePostal'];
        $ville     = $row['Ville'];

        $ticket = $cnx->query("SELECT DateNow, ProblemeIDTF, NomUser, Email, NomSite FROM tickets, utilisateurs, sites 
            WHERE tickets.IDUtilisateur = utilisateurs.IDUtilisateur AND tickets.IDSite = sites.IDSite AND IDTicket='".$touvert."'") or die('Erreur TICKET!<br>'.$ticket.'<br>'.mysql_error());
        $row2 = $ticket->fetch(PDO::FETCH_ASSOC);
        $demandeur = $row2['NomUser'];
        $datenow   = $row2['DateNow'];
        $probleme  = $row2['ProblemeIDTF'];
        $site      = $row2['NomSite'];

        $capecom = $cnx->query("SELECT Nom FROM utilisateurcapecom WHERE IDCapecom = '".$tech."'") or die('Erreur TICKET!<br>'.$capecom.'<br>'.mysql_error());
        $row3 = $capecom->fetch(PDO::FETCH_ASSOC);
        ob_start();
        ?>
        <style type="text/css">
            table{width:100%; vertical-align: top; font-family: helvetica; font-weight: 12px; line-height: 6mm; padding: 10mm 5mm;}
            h2{color: #092B35; font-size: 18px;}
            strong{font-size: 14px; }
        </style>
        <page>
            <table>
                <tr>
                    <td style="width:50%"><img style="margin-bottom: 10px" src="../../images/logo.png"/><br>
                        27, Rue des Garennes<br>
                        57155
                        Marly<br>
                        Tél. 03 87 63 56 73<br>
                        Fax 03 87 55 03 01
                    </td>
                    <td style="width:50%; text-align: right"><h2><?php echo $nom;?></h2>
                        <?php echo $adresse1;?><br>
                        <?php echo $cp;?><br>
                        <?php echo $ville;?>
                    </td>
                </tr>
            </table>
            <table style="line-height: 10mm">
                <tr>
                    <td style="width: 100%; text-align:center; border:1px solid #000; padding:0"><h3>Support technique</h3></td>
                </tr>   
                <tr>
                    <td><strong>Objet: Intervention du : <?php echo $dateinter ?></strong></td>
                </tr>
                <tr><td><br></td></tr>
                <tr>
                    <td><strong>Résumé du ticket ouvert :<br></strong></td> 
                </tr>
                <tr>
                    <td>
                        Demandeur : <?php echo $demandeur; ?><br>
                        Date du problème : <?php echo date("d/m/Y", strtotime($datenow));?><br>
                        Site : <?php echo $site;?><br>
                        Problème rencontré : <?php echo $probleme;?><br><br>
                    </td>
                </tr>
                <tr>
                    <td><strong>Résumé de l'intervention :<br></strong></td>    
                </tr>
                <tr>
                    <td>
                        Interventon sur le ticket n°<?php echo $touvert; ?><br>
                        Date d'intervention : <?php echo $dateinter ;?><br>
                        Technicien : <?php echo $row3['Nom']; ?><br>
                        Description : <?php echo $description;?><br>
                        <?php
                            if($garantie == 1)
                            {?>
                                Garantie : Oui<br>
                            <?php }else {?>
                                Garantie : Non<br> 
                            <?php }
                            if($ferme == 1)
                            {?>
                                Etat du ticket : ouvert<br>
                            <?php }else {?>
                                Etat du ticket : Fermé<br>
                            <?php }
                        ?>
                    </td>
                </tr>
            </table>    
        </page>
        <?php
        $contentPDF = ob_get_clean();
        
        try{
            //convertion HTML => PDF
            require_once('../../html2pdf/html2pdf.class.php');
            require_once('../../pjmail/pjmail.class.php');
            $pdf =new HTML2PDF('P', 'A4', 'fr');
            $pdf ->writeHTML($contentPDF);
            $content_pdf = $pdf ->Output('Intervention.pdf', true);
            //Envoie du PDF par email
            
            $mail = new PJmail();
            $mail->setAllFrom('test@email.fr', "Support technique");
            $mail->addrecipient($row2['Email']);
            $mail->addcc('test@email.fr');
            $mail->addsubject("Ticket du ".$dateinter);
            $mail->text = "Voici le rapport d'intervention pour le ticket que vous avez ouvert sur le site  http://support.capecom.fr";
 
            $mail->addbinattachement('Intervention.pdf', $content_pdf);
            echo $mail->sendmail();
        }catch(HTML2PDF_exception $e){
            die($e);
        }
    }else {?>
        <div id="contenue" class="row contenue-tablaux">
            <?php if(isset($_GET['err']))
            {?>
                <div class="text-center col-lg-12"><?php
                  if($_GET['err'] == 1)
                  {?>
                    <p class="text-success bg-success"><small>Vous venez de valider une intervention !!</small></p><?php
                  }?>
                </div><?php
            }?>
            <h2 class="text-center">Ouvrir une intervention</h2><br>
            <div class="col-lg-6 coll-xs-12 col-lg-offset-2 col-xs-offset-0">
                <form action="" method="post" class="form-horizontal" name="intervention">
                    <div class="form-group">
                        <label for="ticket" class="col-sm-4 control-label">Tickets ouvert :</label>
                        <div class="col-sm-8">
                            <select name="ticket" id="ticket" class="form-control" size="1" />   
                                <option selected value="0">Liste des tickets disponible...</option>
                                <?php 
                                $reponse = $cnx->query('SELECT IDTicket, DateNow, NomUser FROM tickets, utilisateurs WHERE tickets.IDUtilisateur = utilisateurs.IDUtilisateur AND Etat = 1 AND Inter = 0 ORDER BY DateNow') or die('Erreur SQL!<br>'.$reponse.'<br>'.mysql_error());
                                while ($donnees = $reponse->fetch())
                                {?>
                                <option value="<?php echo $donnees['IDTicket']; ?>"> <?php echo $donnees['DateNow']." ".$donnees['NomUser']; ?></option>
                                <?php }?>
                            </select>
                        </div><!-- LISTE TICKETS -->
                    </div><!-- FORM-GROUPE -->

                    <div class="form-group">
                        <label for="date" class="col-sm-4 control-label">Date d'intervention :</label>
                        <div class="col-sm-8">
                            <input type="text" name="dinter" class="form-control" id="datepicker"/>
                        </div><!-- DATE INTER -->
                    </div><!--FORM-GROUPE-->

                    <div class="form-group"> 
                        <label for="tech" class="col-sm-4 control-label">Technicien :</label>
                        <div class="col-sm-8">
                            <select name="tech" class="form-control" id="tech" size="1"/>
                                <option selected>Liste des techniciens Capecom...</option>
                                <?php
                                $sql1 = $cnx->query('SELECT IDCapecom, Nom, Prenom  FROM utilisateurcapecom ORDER BY Nom') or die('Erreur SQL!<br>'.$sql1.'<br>'.mysql_error());
                                while ($row1 = $sql1->fetch(PDO::FETCH_ASSOC))
                                {?>
                                <option value="<?php echo $row1['IDCapecom']; ?>"> <?php echo $row1['Nom']." ".$row1['Prenom']; ?></option>
                                <?php }?>
                            </select>
                        </div><!-- TECHNICIEN -->
                    </div><!-- FORM-GROUPE -->

                    <div class="form-group">
                        <label for="ticketouvert" class="col-sm-4 control-label">Fermer le ticket :</label>
                        <div class="btn-group  col-sm-8" data-toggle="buttons">
                            <label for="true" class="btn btn-success **active**">
                                <input type="radio" name="ferme" id="true" value="0" checked>
                            Oui</label>
                            <label for="false" class="btn btn-danger **active**">
                                <input type="radio" name="ferme" id="false" value="1" checked>
                            Non</label>
                        </div><!-- FERMER LE TICKET-->
                    </div><!-- FORM-GROUPE-->

                    <div class="form-group">
                        <label for="garantie" class="col-sm-4 control-label">Garantie :</label>
                        <div class="btn-group  col-sm-8" data-toggle="buttons">
                            <label for="true" class="btn btn-success **active**">
                                <input type="radio" name="garantie" id="true" value="1" checked>
                            Oui</label>
                            <label for="false" class="btn btn-danger **active**">
                                <input type="radio" name="garantie" id="false" value="0" checked>
                            Non</label>
                        </div><!-- GARANTIE -->
                    </div><!-- FORM-GROUPE-->

                    <div class="form-group">
                        <label for="description" class="col-sm-4 control-label">Intervention :</label>
                        <div class="col-sm-8">
                            <textarea name="description" class="form-control" cols="50" size="30"></textarea>
                        </div><!-- DESCRIPTION -->
                    </div><!-- FORM-CONTROL -->

                    <div class="col-sm-offset-4 bouton-perso">
                        <button type="submit" name="valid" class="btn btn-success">Envoyer</button>
                    </div>
                </form>
            </div>
        </div><!-- Contenue -->
    <?php } ?>
</div><!-- Container contenue -->
<?php
/************  FOOTER ************/
include("../includes/footer.php"); 
?>