diff --git a/dev/examples/zapier/index.js b/dev/examples/zapier/index.js index bbd745f607b..d1897673b39 100644 --- a/dev/examples/zapier/index.js +++ b/dev/examples/zapier/index.js @@ -1,8 +1,9 @@ /*jshint esversion: 6 */ -const triggerThirdparty = require('./triggers/thirdparty'); -const triggerUser = require('./triggers/user'); -const triggerOrder = require('./triggers/order'); const triggerAction = require('./triggers/action'); +const triggerOrder = require('./triggers/order'); +const triggerThirdparty = require('./triggers/thirdparty'); +const triggerTicket = require('./triggers/ticket'); +const triggerUser = require('./triggers/user'); const searchThirdparty = require('./searches/thirdparty'); @@ -50,7 +51,6 @@ const App = { afterResponse: [ ...afters - //sessionRefreshIf401 ], // If you want to define optional resources to simplify creation of triggers, searches, creates - do that here! @@ -59,10 +59,11 @@ const App = { // If you want your trigger to show up, you better include it here! triggers: { - [triggerThirdparty.key]: triggerThirdparty, - [triggerUser.key]: triggerUser, - [triggerOrder.key]: triggerOrder, [triggerAction.key]: triggerAction, + [triggerOrder.key]: triggerOrder, + [triggerThirdparty.key]: triggerThirdparty, + [triggerTicket.key]: triggerTicket, + [triggerUser.key]: triggerUser, }, // If you want your searches to show up, you better include it here! diff --git a/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php b/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php index a0210fcd9d0..56a683f6f3d 100644 --- a/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php +++ b/htdocs/core/triggers/interface_99_modZapier_ZapierTriggers.class.php @@ -146,6 +146,12 @@ class InterfaceZapierTriggers extends DolibarrTriggers //case 'USERGROUP_MODIFY': //case 'USERGROUP_DELETE': + // Categories + // case 'CATEGORY_CREATE': + // case 'CATEGORY_MODIFY': + // case 'CATEGORY_DELETE': + // case 'CATEGORY_SET_MULTILANGS': + // Companies case 'COMPANY_CREATE': $resql = $this->db->query($sql); @@ -327,12 +333,6 @@ class InterfaceZapierTriggers extends DolibarrTriggers // case 'MEMBER_RESILIATE': // case 'MEMBER_DELETE': - // Categories - // case 'CATEGORY_CREATE': - // case 'CATEGORY_MODIFY': - // case 'CATEGORY_DELETE': - // case 'CATEGORY_SET_MULTILANGS': - // Projects // case 'PROJECT_CREATE': // case 'PROJECT_MODIFY': @@ -347,6 +347,23 @@ class InterfaceZapierTriggers extends DolibarrTriggers // case 'TASK_TIMESPENT_CREATE': // case 'TASK_TIMESPENT_MODIFY': // case 'TASK_TIMESPENT_DELETE': + case 'TICKET_CREATE': + $resql = $this->db->query($sql); + // TODO voir comment regrouper les webhooks en un post + while ($resql && $obj = $this->db->fetch_array($resql)) { + $cleaned = cleanObjectDatas(dol_clone($object)); + $cleaned = cleanAgendaEventsDatas($cleaned); + $json = json_encode($cleaned); + // call the zapierPostWebhook() function + zapierPostWebhook($obj['url'], $json); + //setEventMessages($obj['url'], null); + } + $logtriggeraction = true; + break; + // case 'TICKET_MODIFY': + // break; + // case 'TICKET_DELETE': + // break; // Shipping // case 'SHIPPING_CREATE': diff --git a/htdocs/ticket/class/api_tickets.class.php b/htdocs/ticket/class/api_tickets.class.php index 4a3c9b66203..e4343cccbc6 100644 --- a/htdocs/ticket/class/api_tickets.class.php +++ b/htdocs/ticket/class/api_tickets.class.php @@ -136,11 +136,14 @@ class Tickets extends DolibarrApi } // Check parameters - if (!$id && !$track_id && !$ref) { + if (($id < 0) && !$track_id && !$ref) { throw new RestException(401, 'Wrong parameters'); } - - $result = $this->ticket->fetch($id, $ref, $track_id); + if ($id == 0) { + $result = $this->ticket->initAsSpecimen(); + } else { + $result = $this->ticket->fetch($id, $ref, $track_id); + } if (!$result) { throw new RestException(404, 'Ticket not found'); } @@ -205,7 +208,6 @@ class Tickets extends DolibarrApi $this->ticket->history = $history; } - if (!DolibarrApi::_checkAccessToResource('ticket', $this->ticket->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 4cd7fed23d8..866e06d02b6 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1,7 +1,7 @@ * Copyright (C) 2016 Christophe Battarel - * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019-2020 Frédéric France * Copyright (C) 2020 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify @@ -108,8 +108,13 @@ class Ticket extends CommonObject /** * @var int Ticket statut + * @deprecated + */ + public $fk_statut; + + /** + * @var int Ticket status */ - public $fk_statut; // deprecated public $status; /** @@ -188,10 +193,13 @@ class Ticket extends CommonObject public $cache_category_tickets; /** - * @var int Notify tiers at create + * @var int Notify thirdparty at create */ public $notify_tiers_at_create; + /** + * @var string msgid + */ public $email_msgid; public $lines; @@ -279,8 +287,26 @@ class Ticket extends CommonObject { $this->db = $db; - $this->statuts_short = array(self::STATUS_NOT_READ => 'Unread', self::STATUS_READ => 'Read', self::STATUS_ASSIGNED => 'Assigned', self::STATUS_IN_PROGRESS => 'InProgress', self::STATUS_NEED_MORE_INFO => 'NeedMoreInformation', self::STATUS_WAITING => 'Suspended', self::STATUS_CLOSED => 'Closed', self::STATUS_CANCELED => 'Canceled'); - $this->statuts = array(self::STATUS_NOT_READ => 'Unread', self::STATUS_READ => 'Read', self::STATUS_ASSIGNED => 'Assigned', self::STATUS_IN_PROGRESS => 'InProgress', self::STATUS_NEED_MORE_INFO => 'NeedMoreInformation', self::STATUS_WAITING => 'Suspended', self::STATUS_CLOSED => 'Closed', self::STATUS_CANCELED => 'Canceled'); + $this->statuts_short = array( + self::STATUS_NOT_READ => 'Unread', + self::STATUS_READ => 'Read', + self::STATUS_ASSIGNED => 'Assigned', + self::STATUS_IN_PROGRESS => 'InProgress', + self::STATUS_NEED_MORE_INFO => 'NeedMoreInformation', + self::STATUS_WAITING => 'Suspended', + self::STATUS_CLOSED => 'Closed', + self::STATUS_CANCELED => 'Canceled' + ); + $this->statuts = array( + self::STATUS_NOT_READ => 'Unread', + self::STATUS_READ => 'Read', + self::STATUS_ASSIGNED => 'Assigned', + self::STATUS_IN_PROGRESS => 'InProgress', + self::STATUS_NEED_MORE_INFO => 'NeedMoreInformation', + self::STATUS_WAITING => 'Suspended', + self::STATUS_CLOSED => 'Closed', + self::STATUS_CANCELED => 'Canceled' + ); } /** @@ -1053,12 +1079,12 @@ class Ticket extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { $this->id = 0; - + $this->entity = 1; $this->ref = 'TI0501-001'; $this->track_id = 'XXXXaaaa'; $this->origin_email = 'email@email.com'; @@ -1067,7 +1093,7 @@ class Ticket extends CommonObject $this->fk_user_assign = 1; $this->subject = 'Subject of ticket'; $this->message = 'Message of ticket'; - $this->fk_statut = 0; + $this->status = 0; $this->resolution = '1'; $this->progress = '10'; $this->timing = '30'; @@ -1078,6 +1104,7 @@ class Ticket extends CommonObject $this->date_read = ''; $this->date_close = ''; $this->tms = ''; + return 1; } /**