You are not logged in.
Pages: 1
Topic closed
Bonjour,
J'ouvre ce sujet de discussion car j'ai un problème lors de l'ajout de documents dans un ticket.
J'explique mon problème :
J'ai crée une fonction supplémentaire dans glpi qui permet d'envoyer un email lorsque l'on est sur un ticket. Lorsque l'email est envoyé, j'aimerai pouvoir stocker le mail dans les documents qui sont rattachés au ticket au format ".doc".
Avec les quelques compétences que j'ai en php/sql, j'ai réussi à enregistrer le mail en format .doc, et à le stocker dans la base de donné et plus précisément dans la table glpi_documents.
Seulement, lorsque je retourne sur le ticket, le document n'apparait pas. Je penses que l'enregistrement dans la base ne se fait pas dans "les règles de l'art".
Es-ce que quelqu'un pourrait me renseigner sur les procédures de stockage d'un document pour qu'il soit bien rattaché au ticket ?
Les informations que je renseigne dans la base sont les suivants :
- name : Document Ticket - email
- filename : nomDuFichier
- filepath : CheminAccesFichier
- mime: application/msword
- ticket_id : ticket_id
- users_id : id de mon identifiant (avec le profil super admin)
Configuration :
Version de GLPI : GLPI 0.80.61
PHP Version 5.2.8
Apache/2.2.11
MYSQL : 5.1.30
Je vous remercie d'avance pour vos réponses
Cordialement
Offline
Comment faites-vous l'enregistrement dans la base ?
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Voici la partie du code php permettant l'enregistrement en base :
$bdd->exec("INSERT INTO glpi_documents (name, filename, filepath, mime, tickets_id, users_id) VALUES
('Document Ticket - email', '$nomDuFichier', '$cheminDuFichier', 'application/msword', '$ticket_id', 19)");
Offline
Cela ne suffit pas. Il faut aussi le documentcategories_id
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Si je reprend de façon "algorithmique" mon code, on obtient :
- Récupération de données provenant d'un formulaire
- Création du fichier .doc contenant le contenu du mail
- écriture dans le fichier
- fermeture du fichier
- A ce niveau la je fais l'insert dans la base de donnée
Es-ce que ces informations vous sont suffisante ?
Merci de votre aide.
Offline
En ce qui concerne le champs documentcategories_id, la valeur par défaut est zéro.
J'ai remarqué que les autres documents ajoutés "directement avec glpi" ont pour valeur 0 dans ce champs.
Offline
Perso, je vous déconseille très fortement de ne pas passer pas les fonctions du Framework GLPI
Genre:
$document->add($input)
+
Dév. Fedora 29 - PHP 5.6/7.0/7.1/7.2/7.3/7.4 - MariaDB 10.3 - GLPI master
Certifié ITILv3 - RPM pour Fedora, RHEL et CentOS sur https://blog.remirepo.net/
Offline
Bonjour remi,
Pouvez-vous êtes plus explicite dans votre réponse ? Vous déconseillez d'utiliser de ne pas passer par les fonctions du framwork GLPI mais je n'ai pas réussi à réutiliserles méthodes qui permettent l'enregistrement d'un document.
C'est pour cela que j'ai voulu faire l'ajout de documents a ce qu'on pourrait dire "à ma manière".
Ou pourrais-je obtenir une documentation complète de ce Framework ?
Ou, pourriez - vous m'aider à réutiliser les méthodes du Framework ?
Merci de vos réponses
Offline
Dév. Fedora 29 - PHP 5.6/7.0/7.1/7.2/7.3/7.4 - MariaDB 10.3 - GLPI master
Certifié ITILv3 - RPM pour Fedora, RHEL et CentOS sur https://blog.remirepo.net/
Offline
$input = tableau contenant ce que vous voulez enregistrer)
$document = new Document();
$document->add($input)
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Lors de l'utilisation de la classe document.class.php, j'ai le message d'erreur qui survient :
"Sorry. You can't access directly to this file"
J'ai regardé de plus près, et j'ai trouvé que ce message venait du test suivant :
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access directly to this file");
}
Je voudrais savoir comment définir dans mon programme cette valeur GLPI_ROOT pour pouvoir utiliser la classe Document.
Offline
Dans votre premier post vous avez indiqué que vous aviez le ticket. Comment ? en changeant le core ou avec un plugin ?
Vous avez fait quoi exactement et où ?
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Pour récupérer l'id du ticket, j'ai simplement rajouté un lien dans le ticket.form.php
<a href="email/page2.php?id=<?php echo ($_GET["id"]);?>" title="envois email" > Envoyer un email </a>
Last edited by anoel (2012-04-12 17:20:27)
Offline
Je n'arrive toujours pas à utiliser la classe Document.
J'ai fait un include du fichier document.class.php mais, lorque le programme arrive à la déclaration de la classe, j'ai une erreur qui me dit que la classe CommonDBTM est introuvable ...
class Document extends CommonDBTM
Lorsque je fais un include directement dans la classe, c'est GLPI qui ne retrouve plus ses billes et ne fonctionne plus.
Es-ce que vous savez comment donner à la classe Document tous les includes necessaires ?
Merci d'avance de vos réponses.
(Je ne sais pas si cela pourra aider certain, mais j'ai la réponse au message n°11, il faut définir GLPI_ROOT de cette manière )
define('GLPI_ROOT', '/nom_du_repertoire/glpi');
Last edited by anoel (2012-04-12 17:28:52)
Offline
L'autoload se charge des class et si vous avez changé directement dans GLPI, je ne vois pas pourquoi la class Document ne serait pas connu.
Ce que j'ai besoin de connaitre c'est à quel endroit pour constituer les données à injecter et à quel endroit vous faites l'injection (nom du fichier GLPI et nom de la fonction)
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Bonjour,
Vous parlez de l'autoload, de quoi s'agit-t-il ? Lorsque je déclare un objet Document, j'ai une erreur qui me dis : Class Document not found.
Ce que j'ai besoin de connaitre c'est à quel endroit pour constituer les données à injecter et à quel endroit vous faites l'injection (nom du fichier GLPI et nom de la fonction)
Pouvez vous reformuler votre question ? j'ai un peu du mal à comprendre ...
Offline
A quel endroit dans le code de GLPI constituez-vous les données à mettre en base et à quel endroit pour faites l'injection.
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Voilà le code que j'ai pour la sauvegarde en base de donnée du document .doc :
Variables :
$nomDuFichier = $_FILES['binFile']['name'];
$filepath = $_FILES['binFile']['tmp_name'];
$dateComplete = date("Y-m-d h:i:s");
$bdd->exec("INSERT INTO glpi_documents (entities_id, name, filename, filepath, mime, date_mod, users_id, tickets_id) VALUES
(5, 'Document Ticket - EMAIL', '$nomDuFichier', '$filepath', 'application/msword', '$dateComplete', 19, '$ticket_id')");
La sauvegarde en base de donnée est bonne puisque que je peux accéder aux valeurs dans la base. Seulement, lorsque je retourne sur le ticket, rien à faire, le document ne s'affiche pas.
Merci de votre aide
Offline
Bonjour,
Je remet un post sur ce sujet car je n'ai pas encore résolu mon problème.
J'aimerai savoir dans quel champs de la base de donnée de glpi sont stockés les documents.
Le champs que je recherche est de type "blob" je penses.
j'ai déjà effectué des recherches sur beaucoup de table glpi_documents, glpi_tickets, glpi_documents_items, glpi_documenttypes ...
Ou alors, dans le meilleurs des cas, si quelqu'un pourrais m'expliquer la procédure, les tables qui sont affectés lors de l'ajout de nouveaux documents liés à un ticket.
Merci de votre aide
Offline
J'ai encore des interrogations sur la manière dont glpi récupèrent les docuements :
Comment les documents liés aux tickets sont-ils affichés dans un ticket particulier ?
Quels sont les critères de sélections sur lesquels le tickets va récupérer ses documents qui lui sont rattachés ?
Quel fichier classe / fichier est appelé lors d'une insertion dans la base de donnée d'un document lié à un ticket ?
Je pose ces questions car les informations en base des documents que j'ajoute (sans passer par GLPI) sont identiques aux informations de documents ajoutés depuis GLPI pour un ticket.
Last edited by anoel (2012-04-16 15:57:56)
Offline
Problème résolu :
Lors d'ajout de documents liés aux tickets, l'enregistrement en base se fait sur deux tables :
- glppi_docuements
- glpi_documents_items
Last edited by anoel (2012-04-19 15:55:28)
Offline
Pbm résolu. Donc je ferme.
Dév. Fedora 29 - PHP 5.6/7.0/7.1/7.2/7.3/7.4 - MariaDB 10.3 - GLPI master
Certifié ITILv3 - RPM pour Fedora, RHEL et CentOS sur https://blog.remirepo.net/
Offline
Pages: 1
Topic closed