function pre_updateInDB() { global $LANG, $CFG_GLPI; // Check dates change interval due to the fact that second are not displayed in form if (($key = array_search('date', $this->updates)) !== false && substr($this->fields["date"], 0, 16) == substr($this->oldvalues['date'], 0, 16)) { unset($this->updates[$key]); unset($this->oldvalues['date']); } if (($key = array_search('closedate', $this->updates)) !== false && substr($this->fields["closedate"], 0, 16) == substr($this->oldvalues['closedate'], 0, 16)) { unset($this->updates[$key]); unset($this->oldvalues['closedate']); } if (($key = array_search('due_date', $this->updates)) !== false && substr($this->fields["due_date"], 0, 16) == substr($this->oldvalues['due_date'], 0, 16)) { unset($this->updates[$key]); unset($this->oldvalues['due_date']); } if (($key = array_search('solvedate', $this->updates)) !== false && substr($this->fields["solvedate"], 0, 16) == substr($this->oldvalues['solvedate'], 0, 16)) { unset($this->updates[$key]); unset($this->oldvalues['solvedate']); } if ($this->fields['status'] == 'new') { if (in_array("suppliers_id_assign", $this->updates) && $this->input["suppliers_id_assign"] > 0) { if (!in_array('status', $this->updates)) { $this->oldvalues['status'] = $this->fields['status']; $this->updates[] = 'status'; } $this->fields['status'] = 'assign'; $this->input['status'] = 'assign'; } } // Setting a solution or solution type means the ticket is solved if (in_array("ticketsolutiontypes_id", $this->updates) && $this->input["ticketsolutiontypes_id"] > 0 || in_array("solution", $this->updates) && !empty($this->input["solution"])) { if (!in_array('status', $this->updates)) { $this->oldvalues['status'] = $this->fields['status']; $this->updates[] = 'status'; } $entitydata = new EntityData(); if ($entitydata->getFromDB($this->fields['entities_id'])) { $autoclosedelay = $entitydata->getfield('autoclose_delay'); } else { $autoclosedelay = -1; } // -1 = config if ($autoclosedelay == -1) { $autoclosedelay = $CFG_GLPI['autoclose_delay']; } // 0 = immediatly if ($autoclosedelay == 0) { $this->fields['status'] = 'closed'; $this->input['status'] = 'closed'; } else { $this->fields['status'] = 'solved'; $this->input['status'] = 'solved'; } } if (isset($this->input["status"])) { if ($this->input["status"] != 'waiting' && isset($this->input["suppliers_id_assign"]) && $this->input["suppliers_id_assign"] == 0 && $this->countUsers(self::ASSIGN) == 0 && $this->countGroups(self::ASSIGN) == 0 && $this->fields['status'] != 'closed' && $this->fields['status'] != 'solved') { if (!in_array('status', $this->updates)) { $this->oldvalues['status'] = $this->fields['status']; $this->updates[] = 'status'; } $this->fields['status'] = 'new'; } if (in_array("status", $this->updates) && $this->input["status"] == "solved") { $this->updates[] = "solvedate"; $this->oldvalues['solvedate'] = $this->fields["solvedate"]; $this->fields["solvedate"] = $_SESSION["glpi_currenttime"]; // If invalid date : set open date if ($this->fields["solvedate"] < $this->fields["date"]) { $this->fields["solvedate"] = $this->fields["date"]; } } if (in_array("status", $this->updates) && $this->input["status"] == "closed") { $this->updates[] = "closedate"; $this->oldvalues['closedate'] = $this->fields["closedate"]; $this->fields["closedate"] = $_SESSION["glpi_currenttime"]; // If invalid date : set open date if ($this->fields["closedate"] < $this->fields["date"]) { $this->fields["closedate"] = $this->fields["date"]; } // Set solvedate to closedate if (empty($this->fields["solvedate"])) { $this->updates[] = "solvedate"; $this->oldvalues['solvedate'] = $this->fields["solvedate"]; $this->fields["solvedate"] = $this->fields["closedate"]; } } } // check dates // check due_date (SLA) if ((in_array("date", $this->updates) || in_array("due_date", $this->updates)) && !is_null($this->fields["due_date"])) { // Date set if ($this->fields["due_date"] < $this->fields["date"]) { addMessageAfterRedirect($LANG['tracking'][3] . $this->fields["due_date"], false, ERROR); if (($key = array_search('date', $this->updates)) !== false) { unset($this->updates[$key]); unset($this->oldvalues['date']); } if (($key = array_search('due_date', $this->updates)) !== false) { unset($this->updates[$key]); unset($this->oldvalues['due_date']); } } } // Status solved : check dates if ($this->fields["status"] == "solved" && (in_array("date", $this->updates) || in_array("solvedate", $this->updates))) { // Invalid dates : no change // solvedate must be > create date if ($this->fields["solvedate"] < $this->fields["date"]) { addMessageAfterRedirect($LANG['tracking'][3], false, ERROR); if (($key = array_search('date', $this->updates)) !== false) { unset($this->updates[$key]); unset($this->oldvalues['date']); } if (($key = array_search('solvedate', $this->updates)) !== false) { unset($this->updates[$key]); unset($this->oldvalues['solvedate']); } } } // Status close : check dates if ($this->fields["status"] == "closed" && (in_array("date", $this->updates) || in_array("closedate", $this->updates))) { // Invalid dates : no change // closedate must be > solvedate if ($this->fields["closedate"] < $this->fields["solvedate"]) { addMessageAfterRedirect($LANG['tracking'][3], false, ERROR); if (($key = array_search('closedate', $this->updates)) !== false) { unset($this->updates[$key]); unset($this->oldvalues['closedate']); } } // closedate must be > create date if ($this->fields["closedate"] < $this->fields["date"]) { addMessageAfterRedirect($LANG['tracking'][3], false, ERROR); if (($key = array_search('date', $this->updates)) !== false) { unset($this->updates[$key]); unset($this->oldvalues['date']); } if (($key = array_search('closedate', $this->updates)) !== false) { unset($this->updates[$key]); unset($this->oldvalues['closedate']); } } } /* if (in_array("users_id",$this->updates)) { $user = new User; $user->getFromDB($this->input["users_id"]); if (!empty($user->fields["email"])) { $this->updates[] = "user_email"; $this->fields["user_email"] = $user->fields["email"]; } }*/ if (($key = array_search('status', $this->updates)) !== false && $this->oldvalues['status'] == $this->fields['status']) { unset($this->updates[$key]); unset($this->oldvalues['status']); } $sla = new SLA(); // Set begin waiting date if needed if (($key = array_search('status', $this->updates)) !== false && ($this->fields['status'] == 'waiting' || $this->fields['status'] == 'solved')) { $this->updates[] = "begin_waiting_date"; $this->fields["begin_waiting_date"] = $_SESSION["glpi_currenttime"]; if ($this->fields['slas_id'] > 0) { $sla->deleteLevelsToDo($this); } } // Manage come back to waiting state if ($key = array_search('status', $this->updates) !== false && ($this->oldvalues['status'] == 'waiting' || $this->oldvalues['status'] == 'solved' && $this->fields['status'] != 'closed')) { // Compute ticket waiting time use calendar if exists $calendars_id = EntityData::getUsedConfig('calendars_id', $this->fields['entities_id']); $calendar = new Calendar(); $delay_time = 0; // Compute ticket waiting time use calendar if exists // Using calendar if ($calendars_id > 0 && $calendar->getFromDB($calendars_id)) { $delay_time = $calendar->getActiveTimeBetween($this->fields['begin_waiting_date'], $_SESSION["glpi_currenttime"]); } else { // Not calendar defined $delay_time = strtotime($_SESSION["glpi_currenttime"]) - strtotime($this->fields['begin_waiting_date']); } // SLA case : compute sla duration if ($this->fields['slas_id'] > 0) { if ($sla->getFromDB($this->fields['slas_id'])) { $delay_time_sla = $sla->getActiveTimeBetween($this->fields['begin_waiting_date'], $_SESSION["glpi_currenttime"]); $this->updates[] = "sla_waiting_duration"; $this->fields["sla_waiting_duration"] += $delay_time_sla; } // Compute new due date $this->updates[] = "due_date"; $this->fields['due_date'] = $sla->computeDueDate($this->fields['date'], $this->fields["sla_waiting_duration"]); // Add current level to do $sla->addLevelToDo($this); } else { // Using calendar if ($calendars_id > 0 && $calendar->getFromDB($calendars_id)) { if ($this->fields['due_date'] > 0) { // compute new due date using calendar $this->updates[] = "due_date"; $this->fields['due_date'] = $calendar->computeEndDate($this->fields['due_date'], $delay_time); } } else { // Not calendar defined if ($this->fields['due_date'] > 0) { // compute new due date : no calendar so add computed delay_time $this->updates[] = "due_date"; $this->fields['due_date'] = date('Y-m-d H:i:s', $delay_time + strtotime($this->fields['due_date'])); } } } $this->updates[] = "ticket_waiting_duration"; $this->fields["ticket_waiting_duration"] += $delay_time; // Reset begin_waiting_date $this->updates[] = "begin_waiting_date"; $this->fields["begin_waiting_date"] = 'NULL'; } // solve_delay_stat : use delay between opendate and solvedate if (in_array("solvedate", $this->updates)) { $this->updates[] = "solve_delay_stat"; $this->fields['solve_delay_stat'] = $this->computeSolveDelayStat(); } // close_delay_stat : use delay between opendate and closedate if (in_array("closedate", $this->updates)) { $this->updates[] = "close_delay_stat"; $this->fields['close_delay_stat'] = $this->computeCloseDelayStat(); } // takeintoaccount : // - update done by someone who have update right / see also updatedatemod used by ticketfollowup updates if ($this->canUpdateItem() && $this->fields['takeintoaccount_delay_stat'] == 0) { $this->updates[] = "takeintoaccount_delay_stat"; $this->fields['takeintoaccount_delay_stat'] = $this->computeTakeIntoAccountDelayStat(); } // Do not take into account date_mod if no update is done if (count($this->updates) == 1 && ($key = array_search('date_mod', $this->updates)) !== false) { unset($this->updates[$key]); } }
// ---------------------------------------------------------------------- // Original Author of file: Nelly Mahu-Lasson // Purpose of file: // ---------------------------------------------------------------------- // Direct access to file if (strpos($_SERVER['PHP_SELF'], "ticketsatisfaction.php")) { $AJAX_INCLUDE = 1; define('GLPI_ROOT', '..'); include GLPI_ROOT . "/inc/includes.php"; header("Content-Type: text/html; charset=UTF-8"); header_nocache(); } $entity = new EntityData(); if (isset($_REQUEST['inquest_config']) && isset($_REQUEST['entities_id'])) { if ($entity->getFromDB($_REQUEST['entities_id'])) { $inquest_config = $entity->getfield('inquest_config'); $inquest_delay = $entity->getfield('inquest_delay'); $inquest_rate = $entity->getfield('inquest_rate'); $max_closedate = $entity->getfield('max_closedate'); } else { $inquest_config = $_REQUEST['inquest_config']; $inquest_delay = -1; $inquest_rate = -1; $max_closedate = ''; } if ($_REQUEST['inquest_config'] > 0) { echo "<table class='tab_cadre_fixe' width='50%'>"; echo "<tr class='tab_bg_1'><td width='50%'>" . $LANG['entity'][20] . " : </td>"; echo "<td>"; Dropdown::showInteger('inquest_delay', $inquest_delay, 0, 90, 1); echo " " . $LANG['stats'][31] . "</td></tr>";