function post_updateItem($history = 1) { global $CFG_GLPI; $donotif = count($this->updates); if (isset($this->input['_forcenotif'])) { $donotif = true; } // Manage SLA Level : add actions if (in_array("slas_id", $this->updates) && $this->fields["slas_id"] > 0) { // Add First Level $calendars_id = Entity::getUsedConfig('calendars_id', $this->fields['entities_id']); $sla = new SLA(); if ($sla->getFromDB($this->fields["slas_id"])) { $sla->setTicketCalendar($calendars_id); // Add first level in working table if ($this->fields["slalevels_id"] > 0) { $sla->addLevelToDo($this); } } SlaLevel_Ticket::replayForTicket($this->getID()); } if (count($this->updates)) { // Update Ticket Tco if (in_array("actiontime", $this->updates) || in_array("cost_time", $this->updates) || in_array("cost_fixed", $this->updates) || in_array("cost_material", $this->updates)) { if ($this->fields["itemtype"] && ($item = getItemForItemtype($this->fields["itemtype"]))) { if ($item->getFromDB($this->fields["items_id"])) { $newinput = array(); $newinput['id'] = $this->fields["items_id"]; $newinput['ticket_tco'] = self::computeTco($item); $item->update($newinput); } } } // Setting a solution type means the ticket is solved if ((in_array("solutiontypes_id", $this->updates) || in_array("solution", $this->updates)) && (in_array($this->input["status"], $this->getSolvedStatusArray()) || in_array($this->input["status"], $this->getClosedStatusArray()))) { // auto close case Ticket_Ticket::manageLinkedTicketsOnSolved($this->fields['id']); } // Clean content to mail $this->fields["content"] = stripslashes($this->fields["content"]); $donotif = true; } if (isset($this->input['_disablenotif'])) { $donotif = false; } if ($donotif && $CFG_GLPI["use_mailing"]) { $mailtype = "update"; if (isset($this->input["status"]) && $this->input["status"] && in_array("status", $this->updates) && in_array($this->input["status"], $this->getSolvedStatusArray())) { $mailtype = "solved"; } if (isset($this->input["status"]) && $this->input["status"] && in_array("status", $this->updates) && in_array($this->input["status"], $this->getClosedStatusArray())) { $mailtype = "closed"; } // Read again ticket to be sure that all data are up to date $this->getFromDB($this->fields['id']); NotificationEvent::raiseEvent($mailtype, $this); } // inquest created immediatly if delay = O $inquest = new TicketSatisfaction(); $rate = Entity::getUsedConfig('inquest_config', $this->fields['entities_id'], 'inquest_rate'); $delay = Entity::getUsedConfig('inquest_config', $this->fields['entities_id'], 'inquest_delay'); $type = Entity::getUsedConfig('inquest_config', $this->fields['entities_id']); $max_closedate = $this->fields['closedate']; if (in_array("status", $this->updates) && in_array($this->input["status"], $this->getClosedStatusArray()) && $delay == 0 && $rate > 0 && mt_rand(1, 100) <= $rate) { $inquest->add(array('tickets_id' => $this->fields['id'], 'date_begin' => $_SESSION["glpi_currenttime"], 'entities_id' => $this->fields['entities_id'], 'type' => $type, 'max_closedate' => $max_closedate)); } }
function post_updateItem($history = 1) { global $CFG_GLPI; $donotif = count($this->updates); if (isset($this->input['_forcenotif'])) { $donotif = true; } // Manage SLT Level : add actions foreach (array(SLT::TTR, SLT::TTO) as $sltType) { list($dateField, $sltField) = SLT::getSltFieldNames($sltType); if (in_array($sltField, $this->updates) && $this->fields[$sltField] > 0) { $this->manageSltLevel($this->fields[$sltField]); } } $this->updates[] = "actiontime"; if (count($this->updates)) { // Update Ticket Tco if (in_array("actiontime", $this->updates) || in_array("cost_time", $this->updates) || in_array("cost_fixed", $this->updates) || in_array("cost_material", $this->updates)) { $item_ticket = new Item_Ticket(); $linked_items = $item_ticket->find("`tickets_id` = " . $this->fields['id']); if (!empty($this->input["items_id"])) { foreach ($this->input["items_id"] as $itemtype => $items) { foreach ($items as $items_id) { if ($itemtype && ($item = getItemForItemtype($itemtype))) { if ($item->getFromDB($items_id)) { $newinput = array(); $newinput['id'] = $items_id; $newinput['ticket_tco'] = self::computeTco($item); $item->update($newinput); } } } } } } if (!empty($this->input['items_id'])) { $item_ticket = new Item_Ticket(); foreach ($this->input['items_id'] as $itemtype => $items) { foreach ($items as $items_id) { $item_ticket->add(array('items_id' => $items_id, 'itemtype' => $itemtype, 'tickets_id' => $this->fields['id'], '_disablenotif' => true)); } } } // Setting a solution type means the ticket is solved if ((in_array("solutiontypes_id", $this->updates) || in_array("solution", $this->updates)) && (isset($this->input["status"]) && (in_array($this->input["status"], $this->getSolvedStatusArray()) || in_array($this->input["status"], $this->getClosedStatusArray())))) { // auto close case Ticket_Ticket::manageLinkedTicketsOnSolved($this->fields['id']); } // Clean content to mail //$this->fields["content"] = stripslashes($this->fields["content"]); $donotif = true; } if (isset($this->input['_disablenotif'])) { $donotif = false; } if ($donotif && $CFG_GLPI["use_mailing"]) { $mailtype = "update"; if (isset($this->input["status"]) && $this->input["status"] && in_array("status", $this->updates) && in_array($this->input["status"], $this->getSolvedStatusArray())) { $mailtype = "solved"; } if (isset($this->input["status"]) && $this->input["status"] && in_array("status", $this->updates) && in_array($this->input["status"], $this->getClosedStatusArray())) { $mailtype = "closed"; } // to know if a solution is approved or not if (isset($this->input['solvedate']) && $this->input['solvedate'] == 'NULL' && isset($this->oldvalues['solvedate']) && $this->oldvalues['solvedate'] && (isset($this->input['status']) && $this->input['status'] != $this->oldvalues['status'] && $this->oldvalues['status'] == self::SOLVED)) { $mailtype = "rejectsolution"; } // Read again ticket to be sure that all data are up to date $this->getFromDB($this->fields['id']); NotificationEvent::raiseEvent($mailtype, $this); } // inquest created immediatly if delay = O $inquest = new TicketSatisfaction(); $rate = Entity::getUsedConfig('inquest_config', $this->fields['entities_id'], 'inquest_rate'); $delay = Entity::getUsedConfig('inquest_config', $this->fields['entities_id'], 'inquest_delay'); $duration = Entity::getUsedConfig('inquest_duration', $this->fields['entities_id'], 'inquest_duration'); $type = Entity::getUsedConfig('inquest_config', $this->fields['entities_id']); $max_closedate = $this->fields['closedate']; if (in_array("status", $this->updates) && in_array($this->input["status"], $this->getClosedStatusArray()) && $delay == 0 && $rate > 0 && mt_rand(1, 100) <= $rate) { $inquest->add(array('tickets_id' => $this->fields['id'], 'date_begin' => $_SESSION["glpi_currenttime"], 'entities_id' => $this->fields['entities_id'], 'type' => $type, 'max_closedate' => $max_closedate)); } }
function post_updateItem($history = 1) { global $CFG_GLPI, $LANG; $donotif = false; if (isset($this->input['_forcenotif'])) { $donotif = true; } if (count($this->updates)) { // New values for add followup in change $change_followup_content = ""; if (isset($this->input['_doc_added']) && count($this->input['_doc_added']) > 0) { foreach ($this->input['_doc_added'] as $name) { $change_followup_content .= $LANG['mailing'][26] . " {$name}\n"; } } // Update Ticket Tco if (in_array("actiontime", $this->updates) || in_array("cost_time", $this->updates) || in_array("cost_fixed", $this->updates) || in_array("cost_material", $this->updates)) { if ($this->fields["itemtype"] && class_exists($this->fields["itemtype"])) { $item = new $this->fields["itemtype"](); if ($item->getFromDB($this->fields["items_id"])) { $newinput = array(); $newinput['id'] = $this->fields["items_id"]; $newinput['ticket_tco'] = self::computeTco($item); $item->update($newinput); } } } // Setting a solution type means the ticket is solved if ((in_array("ticketsolutiontypes_id", $this->updates) || in_array("solution", $this->updates)) && ($this->fields["status"] == "solved" || $this->fields["status"] == "closed")) { // auto close case Ticket_Ticket::manageLinkedTicketsOnSolved($this->fields['id']); } // Clean content to mail $this->fields["content"] = stripslashes($this->fields["content"]); $donotif = true; } if (isset($this->input['_disablenotif'])) { $donotif = false; } if ($donotif && $CFG_GLPI["use_mailing"]) { $mailtype = "update"; if (isset($this->input["status"]) && $this->input["status"] && in_array("status", $this->updates) && $this->input["status"] == "solved") { $mailtype = "solved"; } if (isset($this->input["status"]) && $this->input["status"] && in_array("status", $this->updates) && $this->input["status"] == "closed") { $mailtype = "closed"; } // Read again ticket to be sure that all data are up to date $this->getFromDB($this->fields['id']); NotificationEvent::raiseEvent($mailtype, $this); } }