예제 #1
0
 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));
     }
 }
예제 #2
0
 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));
     }
 }
예제 #3
0
 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);
     }
 }