You are not logged in.
bonjour,
Je cherche à créer un plugin de gestion d'alerte.
j'ai déjà créé les fichiers setup.php et hook.php.
L'installation et la désinstallation du plugin, ainsi que mes INSERT, tous fonctionnent très biens.
Cependant, j'ai l'impression que les classes que j'ai créer ne sont pas reconnues par glpi.
J'ai, alors, effectué un teste : j'ai créer les classes menu.class.php et menu.form.php afin d'ajouter un onglet quelconque dans les outils, mais il n’apparaît pas.
Est ce que quelqu'un pourrait éclairer ma lanterne ?
Merci d'avance.
glpi version : 9.1.2
Last edited by ami du soir (2018-01-18 12:12:09)
Offline
trouvé! il y avait un problème de nommage des classes:
je les avais nommés --> PluginGestionAlertesConfig
et j’aurai due les nommer --> PluginGestionalerteConfig
glpi cherchait le plugin gestion, il ne risquait pas de le trouver x)
voilà, si ça peut aider quelqu'un
En outre, le but final de mon plugin est d'envoyer des notifications lorsque une date arrive à expiration (un contrôle technique par exemple)
Grâce au plugin GenericObjects il est possible d'ajouté des élément au parc, et d'y ajouter des champs, ce sont ces champs qui m'intéressent.
j'aimerais récupérer une date que j'ai associé à un élément ajouté via GenericObjects, et la réutiliser
Mais je ne trouve pas la requête adéquate
Merci d'avance !
Offline
je sais pas si cela peux t aide mais losque tu veux cree une nouvelle notification du as toutes les balise associe a ces dernieres
Kurasul // IT Manager ============ https://discord.gg/qgDXNwS
OS + plugins: Ubuntu 16.04 // GLPI 9.2.1 // Php 7.0 // Sql + phpmyadmin // LDAP //
Fusion Inventory 9.2+1.0 //Cartographie 4.4.0 // Dashboard 1.4.0 // Gestion de baies 1.8.0 // Comptes 2.3.0 // Impression PDF
Imports fabricants 2.0.0 // Liste des taches 1.2.0 // Plus de rapports 1.4.0 // Arrêté du parc 2.4.0
Offline
Merci de ta réponse Kurasul
Dans le plugin que je suis entrain de coder, j'ai ajouté les tables/classes nécessaire à l'ajout des balises associées à la notification que je veux utiliser.
C'est justement une de ces balises que je veux lié à un champ date afin de pouvoir envoyer un mail dans le genre :
Alerte : nom de l'alerte
événement : date de contrôle technique à renouveler
date de fin de validité : ##alerteperso.dateexpiration##
Je cherche la requête SQL qui me permettrai de mettre la date en question à la place de ##alerteperso.dateexpiration##
Encore merci d'avoir pris le temps de répondre
Offline
##FOREACHauthors## ##ENDFOREACHauthors## Demandeurs Tous Liste de valeurs
##FOREACHchanges## ##ENDFOREACHchanges## Changements Tous Liste de valeurs
##FOREACHcosts## ##ENDFOREACHcosts## Coûts Tous Liste de valeurs
##FOREACHdocuments## ##ENDFOREACHdocuments## Documents Tous Liste de valeurs
##FOREACHfollowups## ##ENDFOREACHfollowups## Suivis Tous Liste de valeurs
##FOREACHitems## ##ENDFOREACHitems## Éléments rattachés Tous Liste de valeurs
##FOREACHlinkedtickets## ##ENDFOREACHlinkedtickets## Tickets liés Tous Liste de valeurs
##FOREACHlog## ##ENDFOREACHlog## Historique Tous Liste de valeurs
##FOREACHproblems## ##ENDFOREACHproblems## Problèmes Tous Liste de valeurs
##FOREACHsuppliers## ##ENDFOREACHsuppliers## Fournisseurs Tous Liste de valeurs
##FOREACHtasks## ##ENDFOREACHtasks## Tâches Tous Liste de valeurs
##FOREACHtickets## ##ENDFOREACHtickets## Tickets non résolus Tickets non résolus Liste de valeurs
##FOREACHvalidations## ##ENDFOREACHvalidations## Validations Tous Liste de valeurs
##author.category## Catégorie Tous Valeur unique
##author.email## Courriel Tous Valeur unique
##author.id## ID du demandeur Tous Valeur unique
##author.location## Lieu du demandeur Tous Valeur unique
##author.mobile## Téléphone mobile Tous Valeur unique
##author.name## Demandeur Tous Valeur unique
##author.phone## Téléphone Tous Valeur unique
##author.phone2## Téléphone 2 Tous Valeur unique
##author.title## Titre Tous Valeur unique
##change.content## Changement : Description Tous Valeur unique
##change.date## Changement : Date Tous Valeur unique
##change.id## Changement : ID Tous Valeur unique
##change.title## Changement : Titre Tous Valeur unique
##change.url## Changement : URL Tous Valeur unique
##cost.budget## Coût : Budget Tous Valeur unique
##cost.comment## Coût : Commentaires Tous Valeur unique
##cost.costfixed## Coût : Coût fixe Tous Valeur unique
##cost.costmaterial## Coût : Coût matériel Tous Valeur unique
##cost.costtime## Coût : Coût horaire Tous Valeur unique
##cost.datebegin## Coût : Date de début Tous Valeur unique
##cost.dateend## Coût : Date de fin Tous Valeur unique
##cost.name## Coût : Nom Tous Valeur unique
##cost.time## Coût : Durée Tous Valeur unique
##cost.totalcost## Coût : Coût total Tous Valeur unique
##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
##followup.author## Rédacteur Tous Valeur unique
##followup.date## Date d'ouverture Tous Valeur unique
##followup.description## Description Tous Valeur unique
##followup.isprivate## Privé Tous Valeur unique
##followup.requesttype## Source de la demande Tous Valeur unique
##lang.author.category## Libellé : Catégorie Tous Valeur unique
##lang.author.email## Libellé : Courriel Tous Valeur unique
##lang.author.id## Libellé : ID du demandeur Tous Valeur unique
##lang.author.location## Libellé : Lieu du demandeur Tous Valeur unique
##lang.author.mobile## Libellé : Téléphone mobile Tous Valeur unique
##lang.author.name## Libellé : Demandeur Tous Valeur unique
##lang.author.phone## Libellé : Téléphone Tous Valeur unique
##lang.author.phone2## Libellé : Téléphone 2 Tous Valeur unique
##lang.author.title## Libellé : Titre Tous Valeur unique
##lang.cost.budget## Libellé : Coût : Budget Tous Valeur unique
##lang.cost.comment## Libellé : Coût : Commentaires Tous Valeur unique
##lang.cost.costfixed## Libellé : Coût : Coût fixe Tous Valeur unique
##lang.cost.costmaterial## Libellé : Coût : Coût matériel Tous Valeur unique
##lang.cost.costtime## Libellé : Coût : Coût horaire Tous Valeur unique
##lang.cost.datebegin## Libellé : Coût : Date de début Tous Valeur unique
##lang.cost.dateend## Libellé : Coût : Date de fin Tous Valeur unique
##lang.cost.name## Libellé : Coût : Nom Tous Valeur unique
##lang.cost.time## Libellé : Coût : Durée Tous Valeur unique
##lang.cost.totalcost## Libellé : Coût : Coût total Tous Valeur unique
##lang.followup.author## Libellé : Rédacteur Tous Valeur unique
##lang.followup.date## Libellé : Date d'ouverture Tous Valeur unique
##lang.followup.description## Libellé : Description Tous Valeur unique
##lang.followup.isprivate## Libellé : Privé Tous Valeur unique
##lang.followup.requesttype## Libellé : Source de la demande Tous Valeur unique
##lang.satisfaction.dateanswered## Libellé : Date de réponse à l'enquête de satisfaction Enquête de satisfaction Valeur unique
##lang.satisfaction.datebegin## Libellé : Date de création de l'enquête de satisfaction Enquête de satisfaction Valeur unique
##lang.satisfaction.description## Libellé : Commentaire à l'enquête de satisfaction Enquête de satisfaction Valeur unique
##lang.satisfaction.satisfaction## Libellé : Satisfaction Enquête de satisfaction Valeur unique
##lang.satisfaction.text## Libellé : Invitation à remplir l'enquête Enquête de satisfaction Valeur unique
##lang.supplier.address## Libellé : Adresse Tous Valeur unique
##lang.supplier.comments## Libellé : Commentaires Tous Valeur unique
##lang.supplier.country## Libellé : Pays Tous Valeur unique
##lang.supplier.email## Libellé : Courriel Tous Valeur unique
##lang.supplier.fax## Libellé : Fax Tous Valeur unique
##lang.supplier.id## Libellé : ID fournisseur Tous Valeur unique
##lang.supplier.name## Libellé : Fournisseur Tous Valeur unique
##lang.supplier.phone## Libellé : Téléphone Tous Valeur unique
##lang.supplier.postcode## Libellé : Code postal Tous Valeur unique
##lang.supplier.state## Libellé : État Tous Valeur unique
##lang.supplier.town## Libellé : Ville Tous Valeur unique
##lang.supplier.type## Libellé : Type de tiers Tous Valeur unique
##lang.supplier.website## Libellé : Site Web Tous Valeur unique
##lang.task.author## Libellé : Rédacteur Tous Valeur unique
##lang.task.begin## Libellé : Date de début Tous Valeur unique
##lang.task.category## Libellé : Catégorie Tous Valeur unique
##lang.task.categorycomment## Libellé : Description de la catégorie Tous Valeur unique
##lang.task.categoryid## Libellé : ID de catégorie Tous Valeur unique
##lang.task.date## Libellé : Date d'ouverture Tous Valeur unique
##lang.task.description## Libellé : Description Tous Valeur unique
##lang.task.end## Libellé : Date de fin Tous Valeur unique
##lang.task.group## Libellé : Groupe en charge de la tâche Tous Valeur unique
##lang.task.isprivate## Libellé : Privé Tous Valeur unique
##lang.task.status## Libellé : Statut Tous Valeur unique
##lang.task.time## Libellé : Durée totale Tous Valeur unique
##lang.task.user## Libellé : Utilisateur affecté à la tâche Tous Valeur unique
##lang.ticket.action## Libellé : Événement Tous Valeur unique
##lang.ticket.assigntogroups## Libellé : Assigné aux groupes Tous Valeur unique
##lang.ticket.assigntosupplier## Libellé : Assigné à un fournisseur Tous Valeur unique
##lang.ticket.assigntousers## Libellé : Assigné aux techniciens Tous Valeur unique
##lang.ticket.attribution## Libellé : Attribué à Tous Valeur unique
##lang.ticket.authors## Libellé : Demandeurs Tous Valeur unique
##lang.ticket.autoclose## Libellé : Clôture automatique des tickets résolus après Tous Valeur unique
##lang.ticket.autoclosewarning## Libellé : Sans réponse, le ticket sera automatiquement clos dans ? jours Tous Valeur unique
##lang.ticket.category## Libellé : Catégorie Tous Valeur unique
##lang.ticket.changes## Libellé : Changements Tous Valeur unique
##lang.ticket.closedate## Libellé : Date de clôture Tous Valeur unique
##lang.ticket.content## Libellé : Description Tous Valeur unique
##lang.ticket.costfixed## Libellé : Coût fixe Tous Valeur unique
##lang.ticket.costmaterial## Libellé : Coût matériel Tous Valeur unique
##lang.ticket.costs## Libellé : Coûts Tous Valeur unique
##lang.ticket.costtime## Libellé : Coût horaire Tous Valeur unique
##lang.ticket.creationdate## Libellé : Date d'ouverture Tous Valeur unique
##lang.ticket.days## Libellé : Jours Tous Valeur unique
##lang.ticket.description## Libellé : Ticket : Description Tous Valeur unique
##lang.ticket.duedate## Libellé : Temps de résolution Tous Valeur unique
##lang.ticket.entity## Libellé : Entité Tous Valeur unique
##lang.ticket.entity.address## Libellé : Entité (Adresse) Tous Valeur unique
##lang.ticket.entity.country## Libellé : Entité (Pays) Tous Valeur unique
##lang.ticket.entity.email## Libellé : Entité (Courriel) Tous Valeur unique
##lang.ticket.entity.fax## Libellé : Entité (Fax) Tous Valeur unique
##lang.ticket.entity.phone## Libellé : Entité (Téléphone) Tous Valeur unique
##lang.ticket.entity.postcode## Libellé : Entité (Code postal) Tous Valeur unique
##lang.ticket.entity.state## Libellé : Entité (État) Tous Valeur unique
##lang.ticket.entity.town## Libellé : Entité (Ville) Tous Valeur unique
##lang.ticket.entity.website## Libellé : Entité (Site Web) Tous Valeur unique
##lang.ticket.globalvalidation## Libellé : Statut global de la validation Tous Valeur unique
##lang.ticket.groups## Libellé : Groupes demandeur Tous Valeur unique
##lang.ticket.id## Libellé : ID Tous Valeur unique
##lang.ticket.impact## Libellé : Impact Tous Valeur unique
##lang.ticket.isdeleted## Libellé : Supprimé Tous Valeur unique
##lang.ticket.item.contact## Libellé : Usager Tous Valeur unique
##lang.ticket.item.contactnumber## Libellé : Usager numéro Tous Valeur unique
##lang.ticket.item.group## Libellé : Groupe Tous Valeur unique
##lang.ticket.item.location## Libellé : Éléments associés : Nom du lieu Tous Valeur unique
##lang.ticket.item.locationaltitude## Libellé : Éléments associés : Altitude Tous Valeur unique
##lang.ticket.item.locationbuilding## Libellé : Éléments associés : Code du bâtiment Tous Valeur unique
##lang.ticket.item.locationcomment## Libellé : Éléments associés : Commentaires du lieu Tous Valeur unique
##lang.ticket.item.locationlatitude## Libellé : Éléments associés : Latitude Tous Valeur unique
##lang.ticket.item.locationlongitude## Libellé : Éléments associés : Longitude Tous Valeur unique
##lang.ticket.item.locationroom## Libellé : Éléments associés : Code de la pièce Tous Valeur unique
##lang.ticket.item.model## Libellé : Modèle Tous Valeur unique
##lang.ticket.item.name## Libellé : Élément rattaché Tous Valeur unique
##lang.ticket.item.otherserial## Libellé : Numéro d'inventaire Tous Valeur unique
##lang.ticket.item.serial## Libellé : Numéro de série Tous Valeur unique
##lang.ticket.item.user## Libellé : Utilisateur Tous Valeur unique
##lang.ticket.itemtype## Libellé : Type d'élément Tous Valeur unique
##lang.ticket.lastupdater## Libellé : Auteur de la dernière modification Tous Valeur unique
##lang.ticket.linkedtickets## Libellé : Tickets liés Tous Valeur unique
##lang.ticket.location## Libellé : Lieu Tous Valeur unique
##lang.ticket.location.altitude## Libellé : Altitude Tous Valeur unique
##lang.ticket.location.building## Libellé : Code du bâtiment Tous Valeur unique
##lang.ticket.location.comment## Libellé : Commentaires du lieu Tous Valeur unique
##lang.ticket.location.latitude## Libellé : Latitude Tous Valeur unique
##lang.ticket.location.longitude## Libellé : Longitude Tous Valeur unique
##lang.ticket.location.room## Libellé : Code de la pièce Tous Valeur unique
##lang.ticket.log## Libellé : Historique Tous Valeur unique
##lang.ticket.nocategoryassigned## Libellé : Pas de catégorie attribuée Tous Valeur unique
##lang.ticket.numberofchanges## Libellé : Nombre de changements Tous Valeur unique
##lang.ticket.numberofcosts## Libellé : Nombre de coûts Tous Valeur unique
##lang.ticket.numberofdocuments## Libellé : Nombre de documents Tous Valeur unique
##lang.ticket.numberoffollowups## Libellé : Nombre de suivis Tous Valeur unique
##lang.ticket.numberofitems## Libellé : Nombre d'éléments Tous Valeur unique
##lang.ticket.numberoflinkedtickets## Libellé : Nombre de tickets liés Tous Valeur unique
##lang.ticket.numberofproblems## Libellé : Nombre de problèmes Tous Valeur unique
##lang.ticket.numberoftasks## Libellé : Nombre de tâches Tous Valeur unique
##lang.ticket.numberofunresolved## Libellé : Nombre d'éléments non résolus Tous Valeur unique
##lang.ticket.observergroups## Libellé : Groupes observateur Tous Valeur unique
##lang.ticket.observerusers## Libellé : Observateurs Tous Valeur unique
##lang.ticket.ola_tto## Libellé : OLA / Temps interne de prise en compte Tous Valeur unique
##lang.ticket.ola_ttr## Libellé : OLA / Temps interne de résolution Tous Valeur unique
##lang.ticket.openbyuser## Libellé : Rédacteur Tous Valeur unique
##lang.ticket.priority## Libellé : Priorité Tous Valeur unique
##lang.ticket.problems## Libellé : Problèmes Tous Valeur unique
##lang.ticket.requesttype## Libellé : Source de la demande Tous Valeur unique
##lang.ticket.sla## Libellé : SLAs Tous Valeur unique
##lang.ticket.sla_tto## Libellé : SLAs / Temps de prise en charge Tous Valeur unique
##lang.ticket.sla_ttr## Libellé : SLAs / Temps de résolution Tous Valeur unique
##lang.ticket.solution.approval.author## Libellé : Valideur Tous Valeur unique
##lang.ticket.solution.approval.date## Libellé : Date de rejet de la solution Tous Valeur unique
##lang.ticket.solution.approval.description## Libellé : Commentaire de rejet de la solution Tous Valeur unique
##lang.ticket.solution.description## Libellé : Solution Tous Valeur unique
##lang.ticket.solution.type## Libellé : Type de solution Tous Valeur unique
##lang.ticket.solvedate## Libellé : Date de résolution Tous Valeur unique
##lang.ticket.status## Libellé : Statut Tous Valeur unique
##lang.ticket.suppliers## Libellé : Fournisseurs Tous Valeur unique
##lang.ticket.tasks## Libellé : Tâches Tous Valeur unique
##lang.ticket.time## Libellé : Durée totale Tous Valeur unique
##lang.ticket.title## Libellé : Titre Tous Valeur unique
##lang.ticket.totalcost## Libellé : Coût total Tous Valeur unique
##lang.ticket.type## Libellé : Type Tous Valeur unique
##lang.ticket.urgency## Libellé : Urgence Tous Valeur unique
##lang.ticket.url## Libellé : URL Tous Valeur unique
##lang.validation.author## Libellé : Demandeur Demande de validation, Réponse à une demande de validation Valeur unique
##lang.validation.commentsubmission## Libellé : Demande : Commentaires Demande de validation, Réponse à une demande de validation Valeur unique
##lang.validation.commentvalidation## Libellé : Validation : Commentaires Demande de validation, Réponse à une demande de validation Valeur unique
##lang.validation.status## Libellé : Statut de la demande de validation Demande de validation, Réponse à une demande de validation Valeur unique
##lang.validation.submissiondate## Libellé : Demande : Date Demande de validation, Réponse à une demande de validation Valeur unique
##lang.validation.validationdate## Libellé : Validation : Date Demande de validation, Réponse à une demande de validation Valeur unique
##lang.validation.validator## Libellé : Décideur Demande de validation, Réponse à une demande de validation Valeur unique
##linkedticket.content## Ticket lié : Description Tous Valeur unique
##linkedticket.id## Ticket lié : ID Tous Valeur unique
##linkedticket.link## Ticket lié : Lien Tous Valeur unique
##linkedticket.title## Ticket lié : Titre Tous Valeur unique
##linkedticket.url## Ticket lié : URL Tous Valeur unique
##problem.content## Problème : Description Tous Valeur unique
##problem.date## Problème : Date Tous Valeur unique
##problem.id## Problème : ID Tous Valeur unique
##problem.title## Problème : Titre Tous Valeur unique
##problem.url## Problème : URL Tous Valeur unique
##satisfaction.dateanswered## Date de réponse à l'enquête de satisfaction Enquête de satisfaction Valeur unique
##satisfaction.datebegin## Date de création de l'enquête de satisfaction Enquête de satisfaction Valeur unique
##satisfaction.description## Commentaire à l'enquête de satisfaction Enquête de satisfaction Valeur unique
##satisfaction.satisfaction## Satisfaction Enquête de satisfaction Valeur unique
##satisfaction.type## Type d'enquête Enquête de satisfaction Valeur unique
##supplier.address## Adresse Tous Valeur unique
##supplier.comments## Commentaires Tous Valeur unique
##supplier.country## Pays Tous Valeur unique
##supplier.email## Courriel Tous Valeur unique
##supplier.fax## Fax Tous Valeur unique
##supplier.id## ID fournisseur Tous Valeur unique
##supplier.name## Fournisseur Tous Valeur unique
##supplier.phone## Téléphone Tous Valeur unique
##supplier.postcode## Code postal Tous Valeur unique
##supplier.state## État Tous Valeur unique
##supplier.town## Ville Tous Valeur unique
##supplier.type## Type de tiers Tous Valeur unique
##supplier.website## Site Web Tous Valeur unique
##task.author## Rédacteur Tous Valeur unique
##task.begin## Date de début Tous Valeur unique
##task.category## Catégorie Tous Valeur unique
##task.categorycomment## Description de la catégorie Tous Valeur unique
##task.categoryid## ID de catégorie Tous Valeur unique
##task.date## Date d'ouverture Tous Valeur unique
##task.description## Description Tous Valeur unique
##task.end## Date de fin Tous Valeur unique
##task.group## Groupe en charge de la tâche Tous Valeur unique
##task.isprivate## Privé Tous Valeur unique
##task.status## Statut Tous Valeur unique
##task.time## Durée totale Tous Valeur unique
##task.user## Utilisateur affecté à la tâche Tous Valeur unique
##ticket.action## Événement Tous Valeur unique
##ticket.assigntogroups## Assigné aux groupes Tous Valeur unique
##ticket.assigntosupplier## Assigné à un fournisseur Tous Valeur unique
##ticket.assigntousers## Assigné aux techniciens Tous Valeur unique
##ticket.authors## Demandeurs Tous Valeur unique
##ticket.autoclose## Clôture automatique des tickets résolus après Tous Valeur unique
##ticket.category## Catégorie Tous Valeur unique
##ticket.closedate## Date de clôture Tous Valeur unique
##ticket.content## Description Tous Valeur unique
##ticket.costfixed## Coût fixe Tous Valeur unique
##ticket.costmaterial## Coût matériel Tous Valeur unique
##ticket.costtime## Coût horaire Tous Valeur unique
##ticket.creationdate## Date d'ouverture Tous Valeur unique
##ticket.description## Ticket : Description Tous Valeur unique
##ticket.duedate## Temps de résolution Tous Valeur unique
##ticket.entity## Entité (Nom complet) Tous Valeur unique
##ticket.entity.address## Entité (Adresse) Tous Valeur unique
##ticket.entity.country## Entité (Pays) Tous Valeur unique
##ticket.entity.email## Entité (Courriel) Tous Valeur unique
##ticket.entity.fax## Entité (Fax) Tous Valeur unique
##ticket.entity.phone## Entité (Téléphone) Tous Valeur unique
##ticket.entity.postcode## Entité (Code postal) Tous Valeur unique
##ticket.entity.state## Entité (État) Tous Valeur unique
##ticket.entity.town## Entité (Ville) Tous Valeur unique
##ticket.entity.website## Entité (Site Web) Tous Valeur unique
##ticket.globalvalidation## Statut global de la validation Tous Valeur unique
##ticket.groups## Groupes demandeur Tous Valeur unique
##ticket.id## ID Tous Valeur unique
##ticket.impact## Impact Tous Valeur unique
##ticket.isdeleted## Supprimé Tous Valeur unique
##ticket.item.contact## Usager Tous Valeur unique
##ticket.item.contactnumber## Usager numéro Tous Valeur unique
##ticket.item.group## Groupe Tous Valeur unique
##ticket.item.location## Éléments associés : Nom du lieu Tous Valeur unique
##ticket.item.locationaltitude## Éléments associés : Altitude Tous Valeur unique
##ticket.item.locationbuilding## Éléments associés : Code du bâtiment Tous Valeur unique
##ticket.item.locationcomment## Éléments associés : Commentaires du lieu Tous Valeur unique
##ticket.item.locationlatitude## Éléments associés : Latitude Tous Valeur unique
##ticket.item.locationlongitude## Éléments associés : Longitude Tous Valeur unique
##ticket.item.locationroom## Éléments associés : Code de la pièce Tous Valeur unique
##ticket.item.model## Modèle Tous Valeur unique
##ticket.item.name## Élément rattaché Tous Valeur unique
##ticket.item.otherserial## Numéro d'inventaire Tous Valeur unique
##ticket.item.serial## Numéro de série Tous Valeur unique
##ticket.item.user## Utilisateur Tous Valeur unique
##ticket.itemtype## Type d'élément Tous Valeur unique
##ticket.lastupdater## Auteur de la dernière modification Tous Valeur unique
##ticket.location## Lieu Tous Valeur unique
##ticket.location.altitude## Altitude Tous Valeur unique
##ticket.location.building## Code du bâtiment Tous Valeur unique
##ticket.location.comment## Commentaires du lieu Tous Valeur unique
##ticket.location.latitude## Latitude Tous Valeur unique
##ticket.location.longitude## Longitude Tous Valeur unique
##ticket.location.room## Code de la pièce Tous Valeur unique
##ticket.log.content## Historique : Mise à jour Tous Valeur unique
##ticket.log.date## Historique : Date Tous Valeur unique
##ticket.log.field## Historique : Champ Tous Valeur unique
##ticket.log.user## Historique : Utilisateur Tous Valeur unique
##ticket.numberofchanges## Nombre de changements Tous Valeur unique
##ticket.numberofcosts## Nombre de coûts Tous Valeur unique
##ticket.numberofdocuments## Nombre de documents Tous Valeur unique
##ticket.numberoffollowups## Nombre de suivis Tous Valeur unique
##ticket.numberofitems## Nombre d'éléments Tous Valeur unique
##ticket.numberoflinkedtickets## Nombre de tickets liés Tous Valeur unique
##ticket.numberoflogs## Historique : Nombre d'éléments Tous Valeur unique
##ticket.numberofproblems## Nombre de problèmes Tous Valeur unique
##ticket.numberoftasks## Nombre de tâches Tous Valeur unique
##ticket.numberofunresolved## Nombre d'éléments non résolus Tous Valeur unique
##ticket.observergroups## Groupes observateur Tous Valeur unique
##ticket.observerusers## Observateurs Tous Valeur unique
##ticket.ola_tto## OLA / Temps interne de prise en compte Tous Valeur unique
##ticket.ola_ttr## OLA / Temps interne de résolution Tous Valeur unique
##ticket.openbyuser## Rédacteur Tous Valeur unique
##ticket.priority## Priorité Tous Valeur unique
##ticket.requesttype## Source de la demande Tous Valeur unique
##ticket.shortentity## Entité (Nom) Tous Valeur unique
##ticket.sla## SLAs Tous Valeur unique
##ticket.sla_tto## SLAs / Temps de prise en charge Tous Valeur unique
##ticket.sla_ttr## SLAs / Temps de résolution Tous Valeur unique
##ticket.solution.approval.author## Valideur Tous Valeur unique
##ticket.solution.approval.date## Date de rejet de la solution Tous Valeur unique
##ticket.solution.approval.description## Commentaire de rejet de la solution Tous Valeur unique
##ticket.solution.description## Solution Tous Valeur unique
##ticket.solution.type## Type de solution Tous Valeur unique
##ticket.solvedate## Date de résolution Tous Valeur unique
##ticket.status## Statut Tous Valeur unique
##ticket.storestatus## Valeur du statut en base Tous Valeur unique 1,2,3,4,5,6
##ticket.suppliers## Fournisseurs Tous Valeur unique
##ticket.time## Durée totale Tous Valeur unique
##ticket.title## Titre Tous Valeur unique
##ticket.totalcost## Coût total Tous Valeur unique
##ticket.type## Type Tous Valeur unique
##ticket.urgency## Urgence Tous Valeur unique
##ticket.url## URL Tous Valeur unique
##ticket.urlapprove## Lien web d'approbation de solution Tous Valeur unique
##ticket.urldocument## Documents : URL Tous Valeur unique
##ticket.urlsatisfaction## Satisfaction : URL Tous Valeur unique
##ticket.urlvalidation## Demande de validation : URL Tous Valeur unique
##validation.answer.title## Une réponse à une demande de validation a été fournie Demande de validation, Réponse à une demande de validation Valeur unique
##validation.author## Demandeur Demande de validation, Réponse à une demande de validation Valeur unique
##validation.commentsubmission## Demande : Commentaires Demande de validation, Réponse à une demande de validation Valeur unique
##validation.commentvalidation## Validation : Commentaires Demande de validation, Réponse à une demande de validation Valeur unique
##validation.status## Statut de la demande de validation Demande de validation, Réponse à une demande de validation Valeur unique
##validation.submission.title## Une demande de validation a été envoyée Demande de validation, Réponse à une demande de validation Valeur unique
##validation.submissiondate## Demande : Date Demande de validation, Réponse à une demande de validation Valeur unique
##validation.validationdate## Validation : Date Demande de validation, Réponse à une demande de validation Valeur unique
##validation.validationstatus## Valeur du statut en base Tous Valeur unique 2,4,3,1
##validation.validator## Décideur Demande de validation, Réponse à une demande de validation Valeur unique
Kurasul // IT Manager ============ https://discord.gg/qgDXNwS
OS + plugins: Ubuntu 16.04 // GLPI 9.2.1 // Php 7.0 // Sql + phpmyadmin // LDAP //
Fusion Inventory 9.2+1.0 //Cartographie 4.4.0 // Dashboard 1.4.0 // Gestion de baies 1.8.0 // Comptes 2.3.0 // Impression PDF
Imports fabricants 2.0.0 // Liste des taches 1.2.0 // Plus de rapports 1.4.0 // Arrêté du parc 2.4.0
Offline
Dans votre plugin il faut 2 fonctions :
- getTags() qui défini les nouvelles balises
- getDatasForTemplate() qui défini le contenu de chaque balise
Tout ça à mettre dans la classe NotificationTarget de votre classe
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,
Merci pour vos réponses,
j'ai déjà ces deux fonctions dans notificationtarget.
voici le code de notificationtargetalerte.class.php:
class PluginGestionalertesNotificationTargetAlerte extends NotificationTarget {
const REQUESTER = 30;
const AlertePerso = "AlertePerso";
function getEvents() {
return array(self::AlertePerso => __('Alertes Personalisées', 'gestionalertes');
}
function getDatasForTemplate($event, $options = array()) {
$this->datas['##alerte.entity##'] = Dropdown::getDropdownName('glpi_entities', $options['entities_id']);
$this->datas['##lang.alerte.entity##'] = __('Entity');
$this->datas['##alerte.action##'] = __('Alertes Personalisées', 'gestionalertes');
$this->datas['##lang.alerteperso.name##'] = __('Name');
$this->datas['##lang.alerteperso.dateexpiration##'] = __('Date de fin de validité', 'gestionalertes');
if (isset($options['gestionalertes'])) {
foreach ($options['gestionalertes'] as $id => $alerteperso) {
$tmp = array();
$tmp['##alerteperso.name##'] = $alerteperso['name'];
$tmp['##alerteperso.dateexpiration##'] = Html::convDate($alerteperso['date_expiration']);
$this->datas['gestionalertes'][] = $tmp;
}
}
}
function getTags() {
$tags = array('alerteperso.name' => __('Name'),
'alerteperso.dateexpiration' => __('Date de fin de validité', 'gestionalertes'),
foreach ($tags as $tag => $label) {
$this->addTagToList(array('tag' => $tag,
'label' => $label,
'value' => true));
}
$this->addTagToList(array('tag' => 'alerteperso',
'label' => __('Alerte Perso', 'gestionalertes'),
'value' => false,
'foreach' => true,
'events' => array(self::AlertePerso)));
asort($this->tag_descriptions);
}
Dans alerte.class.php j'ai la fonction queryGestionalertesAlerte() et c'est avec celle ci que je suis perdu.
static function queryGestionalertesAlerte() {
$config=new PluginGestionalertesConfig();
$notif= new PluginGestionalertesNotificationTargetAlerte();
$config->getFromDB();
$delay=$config->fields["delay_whichexpire"];
$query = "SELECT *
FROM
WHERE ;
return $query;
}
je ne sais pas quoi mettre dans cette requête,
je ne comprend pas vraiment le fonctionnement de la base de données de GenericObject,
car je veux pointer la requête sur un objet ajouté vie GenericObject.
Encore merci de m'aider !
Last edited by ami du soir (2018-01-22 10:47:58)
Offline
Là vous êtes dans un plugin et non dans le coeur.
Donc on va commencer par le début.
Comment avez vous défini l'appel au HOOK des notifications dans le setup de votre plugin ?
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
Merci de votre réponse Yllen,
j’ai défini l'appel au HOOK des notifications ainsi:
Plugin::registerClass('PluginGestionalertesAlerte', array(
'notificationtemplates_types' => true,
'addtabon' => 'CronTask'
));
Offline
Bonjour,
J'ai bien avancé, les notifications fonctionnent et les actions automatiques se lancent correctement,
à une exception près
Lorsque j’exécute mon action automatique j’obtiens ce message d'erreur:
PHP Notice: Undefined index: AlerteExtincteur in ****/plugins/gestionalertes/inc/alerteextincteur.class.php at line 72
PHP Notice: Undefined offset: 0 in ****/plugins/gestionalertes/inc/alerteextincteur.class.php at line 72
Voici le code de alerteextincteur.class.php:
class PluginGestionalertesAlerteExtincteur extends CommonDBTM {
static $rightname = "plugin_gestionalertes";
static function getTypeName($nb=0) {
return __("AlerteExtincteur", 'gestionalertes');
}
static function queryAlerteExtincteur() {
$config=new PluginGestionalertesConfig();
$notif= new PluginGestionalertesNotificationState();
$config->getFromDB('1');
$delay=$config->fields["delay_whichexpire"];
$query = "SELECT *
FROM `glpi_plugin_genericobject_extincteurs`
WHERE `expirationdate` IS NOT NULL
AND `is_deleted` = '0'
AND DATEDIFF(CURDATE(),`expirationdate`) > -$delay
AND DATEDIFF(CURDATE(),`expirationdate`) < 0 ";
$query.= "AND `states_id` NOT IN (999999";
$query.= $notif->findStates();
$query.= ") ";
return $query;
}
static function cronInfo($name) {
switch ($name) {
case 'AlerteExtincteur' :
return array ('description' => __("Date de fin de validité d'un extincteur", 'gestionalertes')); // Optional
break;
}
}
static function cronAlerteExtincteur($task=NULL) {
global $DB,$CFG_GLPI;
if (!$CFG_GLPI["use_mailing"] || !TableExists("glpi_plugin_genericobject_extincteurs")) {
return 0;
}
$message=array();
$cron_status = 0;
$query_AlerteExtincteur = self::queryAlerteExtincteur();
$querys = array(PluginGestionalertesNotificationTargetAlerteExtincteur::AlerteExtincteur => $query_AlerteExtincteur);
$extincteurs_infos = array();
$extincteurs_messages = array();
foreach ($querys as $type => $query) {
$extincteurs_infos[$type] = array();
if (!empty($query)) {
foreach ($DB->request($query) as $data) {
$entity = $data['entities_id'];
$message = "Extincteur: ".$data["name"]." Date de fin de validité: ".Html::convdate($data["expirationdate"])."; <br> \n";
$extincteurs_infos[$type][$entity][] = $data;
if (!isset($extincteurs_infos[$type][$entity])) {
$extincteurs_messages[$type][$entity] = __("Date de fin de validité d'un extincteur", 'gestionalertes')."<br/>";
}
$extincteurs_messages[$type][$entity] .= $message;
}
}
}
foreach ($querys as $type => $query) {
foreach ($extincteurs_infos[$type] as $entity => $extincteurs) {
Plugin::loadLang('gestionalertes');
//si l'événement a lieux alors execute l'action automatique
if (NotificationEvent::raiseEvent($type, new PluginGestionalertesAlerteExtincteur(), array('entities_id' => $entity,
'gestionalertes' => $extincteurs))) {
$message = $extincteurs_messages[$type][$entity];
$cron_status = 1;
if ($task) {
$task->log(Dropdown::getDropdownName("glpi_entities",
$entity).": $message\n");
$task->addVolume(1);
} else {
Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities",
$entity).": $message");
}
//sinon r'envoie un message d'erreur
} else {
if ($task) {
$task->log(Dropdown::getDropdownName("glpi_entities",$entity).
": Send alert failed\n");
} else {
Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities",$entity).
": Send alert failed",false,ERROR);
}
}
}
}
return $cron_status;
}
static function configCron($target) {
$config=new PluginGestionalertesConfig();
$config->showForm($target,1);
}
}
le code de config.class.php
class PluginGestionalertesConfig extends CommonDBTM {
function getTabNameForItem(CommonGLPI $item, $withtemplate=0) {
if ($item->getType()=='CronTask'&& $item->getField('name') == 'AlerteExtincteur') {
return __('Configuration du plugin', 'gestionalertes');
}
return '';
}
static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) {
global $CFG_GLPI;
if ($item->getType()=='CronTask' && $item->getField('name') =='AlerteExtincteur') {
$target = $CFG_GLPI["root_doc"]."/plugins/gestionalertes/front/notification.state.php";
PluginGestionalertesAlerteExtincteur::configCron($target);
return true;
}
}
function showForm($target,$ID) {
if(!$this->getFromDB($ID)){
$this->getEmpty();
}
$delay_whichexpire = $this->fields["delay_whichexpire"];
$date_whichexpire = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + $delay_whichexpire, date("y")));
echo "<div align='center'>";
echo "<form method='post' action=\"$target\">";
echo "<table class='tab_cadre_fixe'>";
echo "<tr class='tab_bg_1'>";
echo "<th colspan='4'>";
_e('Delai de verification de validite des objets', 'gestionalertes');
echo "</th>";
echo "</tr>";
echo "<tr class='tab_bg_1'>";
echo "<td>";
_e('validite expire dans moins de ', 'gestionalertes');
echo "</td>";
echo "<td>";
echo " <input type='text' size='15' name='delay_whichexpire' value=\"$delay_whichexpire\">";
echo " "._n('Day', 'Days', 2)." ( < ".Html::convdate($date_whichexpire).")<br>";
echo "</td>";
echo "</tr>";
echo "<tr class='tab_bg_1'>";
echo "<td class='center' colspan='4'>";
echo "<input type='hidden' name='id' value='".$ID."'>";
echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit' >";
echo "</td>";
echo "</tr>";
echo "</table>";
Html::closeForm();
echo "</div>";
}
}
le code de NotificationTargetAlerteExtincteur.class.php
class PluginGestionalertesNotificationTargetAlerteExtincteur extends NotificationTarget {
static $rightname = "plugin_gestionalertes";
const AlerteExtincteur = "AlerteExtincteur";
function getEvents() {
return array (self::AlerteExtincteur => __("Date de fin de validité d'un extincteur",'gestionalertes'));
}
function getDatasForTemplate($event, $options = array()) {
global $CFG_GLPI;
$this->datas['##alerteextincteur.entity##'] = Dropdown::getDropdownName('glpi_entities', $options['entities_id']);
$this->datas['##lang.alerteextincteur.entity##'] = __('Entity');
$events = $this->getAllEvents();
switch ($event) {
case self::AlerteExtincteur:
$this->datas['##alerteextincteur.action##'] = __("Date de fin de validité d'un extincteur", 'gestionalertes');
break;
}
$this->datas['##lang.alerteextincteur.name##'] = __('Name');
$this->datas['##lang.alerteextincteur.expirationdate##'] = __('Date de fin de validité', 'gestionalertes');
foreach ($options['gestionalertes'] as $id => $alerteextincteur) {
$tmp = array();
$tmp['##alerteextincteur.name##'] = $alerteextincteur['name'];
$tmp['##alerteextincteur.expirationdate##'] = Html::convDate($alerteextincteur['expirationdate']);
$this->datas['gestionalertes'][] = $tmp;
}
}
function getTags() {
$tags = array('alerteextincteur.name' => __('Name'),
'alerteextincteur.expirationdate' => __('Date de fin de validite', 'gestionalertes'));
foreach ($tags as $tag => $label) {
$this->addTagToList(array('tag' => $tag,
'label' => $label,
'value' => true));
}
$this->addTagToList(array('tag' => 'gestionalertes',
'label' => __("Date de fin de validité d'un extincteur",'gestionalertes'),
'value' => false,
'foreach' => true,
'events' => array(self::AlerteExtincteur)));
asort($this->tag_descriptions);
}
}
Merci d'avance !
Offline
PHP notice n'est pas une erreur mais une information.
Cela correspond souvent à une variable non définie
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