1 (edited by kiricou 2015-08-27 17:03:03)

Topic: gestion des documents joints

bonjour,

j'utilise la gestion des tickets par mail (chez nous peu ou pas de personne utilise l'interface de glpi)
il y a un comportement des notifications qui me pose pb lors d'un ticket avec document joint :
j'utilise le modèle de notification "Ticket (Simple)" et lors des notifications en html
il se trouve que la liste des documents est liée au mail :
"
généré automatiquement par GLPI 0.85.4

=_=_=_= Pour répondre par courriel, écrivez au dessous de cette ligne =_=_=_=

Éléments rattachés : Document ticket 821, Document ticket 821, Document ticket 821
"
alors que dans le modèle de notification, il n'y a pas la liste des documents justement...
et comme cette liste est ajoutée après la ligne "=_=_=_= Pour répondre par courriel, écrivez au dessous de cette ligne =_=_=_="
lorsque je réponds à ce mail, pour créer un suivi, la liste des documents est ajoutée dans le suivi.

j'espère que c'est compréhensible et reproduisible

a priori dans la notification non html, il n'y a pas la liste des documents.

----
pour moi, ce serait peut-être mieux de pouvoir associer des documents aux suivis et non pas au niveau ticket, et pouvoir aussi transmettre lors des notifications par mail les documents en piece jointe

merci d'avance

2

Re: gestion des documents joints

Vous avez quelle valeur pour le champ "Ajouter des documents dans les notifications de ticket " de la configuration du collecteur ?

CentOS 6.5 - PHP 5.6 - PHP 7 - MySQL 5.6  + APC + memcached
GLPI 0.90.5 SVN - GLPI 9.1.3 SVN
Certifiée ITIL (ITV2F, ITILF, ITILOSA)

3

Re: gestion des documents joints

Bonjour,

Premièrement désolé, je n'avais vraiment pas vu le suivi pour ma demande,
ensuite pour répondre, je n'ai pas ce paramètre dans la conf. des collecteurs :
j'ai ça :'Taille maximale des fichiers importés par le collecteur' qui s'en rapproche...
je suis en 0.85.4

merci d'avance

4

Re: gestion des documents joints

Je fatigue...
cette option est dans Configuration > Notification > Configuration des suivis par courriels

CentOS 6.5 - PHP 5.6 - PHP 7 - MySQL 5.6  + APC + memcached
GLPI 0.90.5 SVN - GLPI 9.1.3 SVN
Certifiée ITIL (ITV2F, ITILF, ITILOSA)

5

Re: gestion des documents joints

bonjour,

quel balise doit être utilisé pour avoir le lien vers les documents attaché
je suis en 0.90 est je n'ai plus les liens vers les documents dans les notifs (suivi ou resolu)
l'option dans Configuration > Notification > Configuration des suivis par courriels est à oui

merci

6

Re: gestion des documents joints

L'option de configuration "Ajouter des documents dans les notifications de ticket " était à Non, passée à Oui,
cela fonctionne pas mieux : un document envoyé par mail pour un suivi est bien ajouté à la liste des documents mais pas retransmis par mail .
un nouveau ticket par mail avec un document joint n'envoie pas non plus le doc joint.

Merci d'avance

ps:  la balise que j'ai essayé d'utiliser est : ##ticket.urldocument##

7

Re: gestion des documents joints

J'en profite pour connaître les méthodes pour logger dans le code, j'aimerai bien faire un peu de débug/dev mais je cherche la "doc développeur" ou en tout cas des astuces : quelle méthode utiliser et dans quel fichier cela écrit...
j'ai essayé Toolbox::loginfile mais je ne vois pas de fichier...

merci d'avance

8

Re: gestion des documents joints

Le plus simple est d'utiliser Toolbox::logDebug(texte, texte...) et vous vous mettez en tail -f sur le fichier php-errors.log de GLpi.
Au fur et à mesure des actions les logs apparaitront en live

CentOS 6.5 - PHP 5.6 - PHP 7 - MySQL 5.6  + APC + memcached
GLPI 0.90.5 SVN - GLPI 9.1.3 SVN
Certifiée ITIL (ITV2F, ITILF, ITILOSA)

9 (edited by kiricou 2015-11-23 19:39:29)

Re: gestion des documents joints

Bonjour,

J'ai donc essayé de débugguer, mais ce n'est pas très concluant ; je suis donc en 0.85.5

la conf correspondant à l'option citée : Configuration > Notification > Configuration des suivis par courriels
soit $CFG_GLPI['attach_ticket_documents_to_mail'] si je ne me trompe n'est utilisée qu'une fois dans inc/ticket.class.php - ligne 5850 dans convertContentForNotification
ici la suite de if semble dire qu'un doc joint  est une image si elle a un id ET un tag mais pas les autres docs (dans mon cas, les pdf ont un id et un tag donc ils sont vu comme des images...) l'option n'est donc jamais prise en compte

ensuite, une fois ce contenu converti , il y a notificationmailclass.php qui prepare le mail et le met dans la QueudMail pour qu'il soit envoyé par phpmailer le moment venu via sendMailById

là on voit déjà que les docs ne sont joints que si le format des mails est HTML (or mes notifications sont toutes en texte simple - pour le moment ;-) ) ce qui explique que je n'ai pas de pj.

je pense donc mais ne suis pas sûr que c'est ici - dans QueudMail - qu'il faut checker l'option $CFG_GLPI['attach_ticket_documents_to_mail'] et utiliser peut-être addAttachment de phpmailer en cas de format txt de message ?
(ceci cela ne résout pas mon pb de base, qui était lors d'un suivi avec pj reçu par mail, les notifiés reçoivent ce nouveau suivi avec  la pj en attaché : car dans ce que j'ai déchiffré du fonctionnement de Queudmail, toutes les pj sont jointes)

et peut-être une petite doc sur cette option et ce qu'elle implique peut-être intéressante ...

Merci d'avance pour vos retours,
si il y a un moyen plus direct, genre IRC,  de discuter sur ce thème, je suis preneur...

bonne soirée,

10

Re: gestion des documents joints

Pour continuer ce que je souhaite faire et qui me semble être une bonne manière d'utiliser le suivi de ticket par mail, je vais sans doute me baser sur l'historique du ticket pour connaître  le dernier document joint : ex ;
29005    23-11-2015 17:04    Mon User (325)    Document       Ajout d'un lien avec un élément : Document ticket 701 (51)

et le passer dans le mail via AddAttchment de PHPMailer

11

Re: gestion des documents joints

Re,

par ailleurs dans la liste des balises il y a cela, ça ne fonctionne pas :


##document.downloadurl##    Document : URL de téléchargement    Tous    Valeur unique    
##document.filename##    Document : Fichier    Tous    Valeur unique    
##document.heading##    Document : Rubrique    Tous    Valeur unique    
##document.id##    Document : ID    Tous    Valeur unique    
##document.name##    Document : Nom    Tous    Valeur unique    
##document.url##    Document : URL    Tous    Valeur unique    
##document.weblink##    Document : Lien Web    Tous    Valeur unique

en dehors d'une boucle, les balises (le texte) est affiché tel quel
et dans une boucle FOLLOWUP rien ne se passe non plus

comment les utiliser ?

merci d'avance

12

Re: gestion des documents joints

Là c'est plutot ##FOREACHdocuments## ##ENDFOREACHdocuments## qu'il faut utiliser

CentOS 6.5 - PHP 5.6 - PHP 7 - MySQL 5.6  + APC + memcached
GLPI 0.90.5 SVN - GLPI 9.1.3 SVN
Certifiée ITIL (ITV2F, ITILF, ITILOSA)

13

Re: gestion des documents joints

bonjour,

tout à fait, ça fonctionne !
(mais cette balise n'est pas dans la liste des balises disponibles affichée en aide lors de la traduction d'une notification)

merci

voici ce que je fais pour que GLPI corresponde à mon mode de fonctionnement : pour la gestion des tickets, un maximum d'échanges se passent par mail et je souhaitais que les docs soient joints aux mails :

voici mon bout de code si ça peut intéresser, c'est un peu du bricolage:
0.85.5

*** queuedmail.class.php        2015-09-15 18:10:47.000000000 +0200
--- queuedmail.class.phpV2      2015-11-30 17:52:40.722139496 +0100
*************** class QueuedMail extends CommonDBTM {
*** 333,339 ****
      * @return true if send false if not
     **/
     function sendMailById($ID) {
!       global $CFG_GLPI;
  
        if ($this->getFromDB($ID)) {
  
--- 333,339 ----
      * @return true if send false if not
     **/
     function sendMailById($ID) {
!       global $CFG_GLPI, $DB;
  
        if ($this->getFromDB($ID)) {
  
*************** class QueuedMail extends CommonDBTM {
*** 357,362 ****
--- 357,425 ----
           }
           $mmail->Subject  = $this->fields['name'];
  
+ $lastFollowupDocument = False;
+        if ($this->fields["itemtype"] == "Ticket" && $this->fields["items_id"] > 1 && $CFG_GLPI['attach_ticket_documents_to_mail'] == 1 )
+        {
+       #on est dans le cas d'un ticket
+       $lastFollowupDocument = False;
+        $ticket = new Ticket();
+          // Check if ticket  exists 
+          if ($ticket->getFromDB($this->fields["items_id"]))
+               { 
+               # en fait on doit passer par Document Item pour avoir les vrais dates d'ajout des docs et surtout passer par du SQL pour avoir cette relation 
+                       // Get all attached documents of ticket
+                       $query = "SELECT `glpi_documents_items`.`id` AS id,
+                       `glpi_documents_items`.`documents_id` AS docId,
+                               `glpi_documents_items`.`date_mod` AS date_mod
+                 FROM `glpi_documents_items`
+                 WHERE `glpi_documents_items`.`items_id` = '".$this->fields["items_id"]."'
+                       AND `glpi_documents_items`.`itemtype` = 'Ticket' ";
+       
+                       $result = $DB->query($query);
+               $my_docs = array();
+               $dateMessage = '';
+               if ($DB->numrows($result)) {
+                       while ($data = $DB->fetch_assoc($result)) {
+                       if (!empty($data['id'])) {
+                       $my_docs[]=$data;
+                       }
+                       }
+               #on se base sur le timestamp de creation de la notification pour ensuite déterminer les documents ajoutés récemments
+               if (!empty($this->fields['messageid'])) {
+                       preg_match('/^GLPI-'.$this->fields["items_id"]."\.([0-9]{10}\.[0-9]{6}).*@/", $this->fields['messageid'], $matches);
+                       $messageid_timestamp = $matches[1];
+                       $dateMessage = new DateTime(date("y-m-d H:i:s",$messageid_timestamp));
+                       $dateMessage = $dateMessage->sub(new DateInterval("P0Y0M0DT0H1M0S"));
+               }
+ 
+               $link_doc = array();
+               if (is_array($my_docs) && count($my_docs)>0) {
+                               foreach ($my_docs as $the_doc) {
+                               $dateDoc = new DateTime($the_doc['date_mod']);
+                               if ($dateDoc > $dateMessage) {
+                                       $TheDoc = new Document();
+                                       $TheDoc->getFromDB($the_doc['docId']);
+                                       $lastFollowupDocument[] = $TheDoc;
+                                       }
+                               }
+                       }
+               }
+               }
+ 
+ 
+         if ($lastFollowupDocument != False )
+         {
+         foreach ($lastFollowupDocument as $doc2Send) {
+ 
+                 $mmail->AddAttachment(GLPI_DOC_DIR."/".$doc2Send->fields['filepath'],
+                                               $doc2Send->fields['filename'],
+                                               'base64',
+                                               $doc2Send->fields['mime']);
+                 }
+ 
+         }
+     }
+ 
           if (empty($this->fields['body_html'])) {
              $mmail->isHTML(false);
              $mmail->Body = $this->fields['body_text'];

14

Re: gestion des documents joints

Bonjour,

Je viens faire un petit up sur ce sujet car c'est une fonctionnalité que je cherche.

J'ai repris le bout de ton code comme indiqué mais ca ne fonctionne pas de mon côté, aurais tu apporté d'autres modificatios ??

Merci d avance pour ta réponse.

15

Re: gestion des documents joints

Bonjour,
J'ai aussi besoin de la même fonctionnalité sur notre version 0.9.
J'ai repris le code kiricou qui  fonctionne !

Pour Razdon, si ça peut vous aider, à mon premier essai j'avais oublié d'ajouter

 $DB;


au début de la méthode :

 function sendMailById($ID) {


pour que cela donne

function sendMailById($ID) {
      global $CFG_GLPI, $DB;

Si cette fonctionnalité peut devenir par défaut, je suis bien évidemment preneur ^^.

En tout merci pour ce "patch".

16

Re: gestion des documents joints

Bonjour,

Je cherche à savoir si, à partir de l'interface GLPI, lorsque je rajoute un document à un ticket, s'il est possible de joindre dans le document dans la notification.

En effet, la seule balise qui semble correspondre à ma demande est : ##document.filename## qui est de type fichier
Code utilisé dans mon modèle

<p><span><span>##FOREACHdocuments##</span></span></p>

<tbody>

##document.filename##


</tbody>

<p><span>##ENDFOREACHdocuments##</span></p>

Cependant, lorsque je fais des tests, la notification ne comprend que le nom du fichier et non pas le fichier en lui même.

Au niveau de configuration > Notifications > Configuration des suivis par courriels > Ajouter des documents dans les notifications de ticket j'ai bien OUI

D'avance merci pour votre aide