grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026. -------------------------------------------------------------------------- */ if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } /** * SLT Class * @since version 9.1 **/ class SLT extends CommonDBChild { // From CommonDBTM var $dohistory = true; // From CommonDBChild static public $itemtype = 'SLA'; static public $items_id = 'slas_id'; static $rightname = 'sla'; static protected $forward_entity_to = array('SLALevel'); const TTR = 0; // Time to resolve const TTO = 1; // Time to own static function getTypeName($nb=0) { // Acronymous, no plural return __('SLT'); } /** * Define calendar of the ticket using the SLT when using this calendar as slt-s calendar * * @param $calendars_id calendars_id of the ticket **/ function setTicketCalendar($calendars_id) { if ($this->fields['calendars_id'] == -1 ) { $this->fields['calendars_id'] = $calendars_id; } } function defineTabs($options=array()) { $ong = array(); $this->addDefaultFormTab($ong); $this->addStandardTab('SlaLevel', $ong, $options); $this->addStandardTab('Rule', $ong, $options); $this->addStandardTab('Ticket', $ong, $options); return $ong; } /** * @see CommonDBTM::getFromDB **/ function getFromDB($ID) { if (!parent::getFromDB($ID)) { return false; } // get calendar from sla $sla = new SLA; if ($sla->getFromDB($this->fields['slas_id'])) { $this->fields['calendars_id'] = $sla->fields['calendars_id']; return true; } else { return false; } } /** * @see CommonDBTM::post_getEmpty() */ function post_getEmpty() { $this->fields['number_time'] = 4; $this->fields['definition_time'] = 'hour'; } function cleanDBonPurge() { global $DB; // Clean sla_levels $query = "SELECT `id` FROM `glpi_slalevels` WHERE `slts_id` = '".$this->fields['id']."'"; if ($result = $DB->query($query)) { if ($DB->numrows($result) > 0) { $slalevel = new SlaLevel(); while ($data = $DB->fetch_assoc($result)) { $slalevel->delete($data); } } } // Update tickets : clean SLT list($dateField, $sltField) = self::getSltFieldNames($this->fields['type']); $query = "SELECT `id` FROM `glpi_tickets` WHERE `$sltField` = '".$this->fields['id']."'"; if ($result = $DB->query($query)) { if ($DB->numrows($result) > 0) { $ticket = new Ticket(); while ($data = $DB->fetch_assoc($result)) { $ticket->deleteSLT($data['id'], $this->fields['type']); } } } Rule::cleanForItemAction($this); } /** * Print the sla form * * @param $ID integer ID of the item * @param $options array of possible options: * - target filename : where to go when done. * - withtemplate boolean : template or basic item * *@return boolean item found **/ function showForm($ID, $options=array()) { $rowspan = 4; if ($ID > 0) { $rowspan = 6; } // Get SLA object $sla = new SLA(); if (isset($options['parent'])) { $sla = $options['parent']; } else { $sla->getFromDB($this->fields['slas_id']); } if ($ID > 0) { $this->check($ID, READ); } else { // Create item $options[static::$items_id] = $sla->getField('id'); //force itemtype of parent static::$itemtype = get_class($sla); $this->check(-1, CREATE, $options); } $this->showFormHeader($options); echo "
| ".Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand); $header_top .= " | "; $header_bottom .= "".Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand); $header_bottom .= " | "; } $header_end .= "".__('Name')." | "; $header_end .= "".__('Type')." | "; $header_end .= "".__('Maximum time')." | "; $header_end .= "".__('Calendar')." | "; echo $header_begin.$header_top.$header_end; foreach ($sltList as $val) { $edit = ($canedit ? "style='cursor:pointer' onClick=\"viewEditSlt". $instID.$val["id"]."$rand();\"" : ''); echo "\n\n"; echo "
|---|---|---|---|---|---|
| "; if ($canedit) { Html::showMassiveActionCheckBox($slt->getType(), $val['id']); } echo " | "; $slt->getFromDB($val['id']); echo "".$slt->getLink()." | "; echo "".$slt->getSpecificValueToDisplay('type', $slt->fields['type'])." | "; echo ""; echo $slt->getSpecificValueToDisplay('number_time', array('number_time' => $slt->fields['number_time'], 'definition_time' => $slt->fields['definition_time'])); echo " | "; if (!$sla->fields['calendars_id']) { $link = __('24/7'); } else if ($sla->fields['calendars_id'] == -1) { $link = __('Calendar of the ticket'); } else if ($calendar->getFromDB($sla->fields['calendars_id'])) { $link = $calendar->getLink(); } echo "".$link." | "; echo "
| "; echo Html::convDateTime($ticket->fields[$dateField]); echo " | "; echo "".__('SLT')." | "; echo "";
echo Dropdown::getDropdownName('glpi_slts', $ticket->fields[$sltField])." ";
$commentsla = "";
$slalevel = new SlaLevel();
$nextaction = new SlaLevel_Ticket();
if ($nextaction->getFromDBForTicket($ticket->fields["id"], $type)) {
$commentsla .= ''.
sprintf(__('Next escalation: %s'),
Html::convDateTime($nextaction->fields['date'])).
' '; if ($slalevel->getFromDB($nextaction->fields['slalevels_id'])) { $commentsla .= ''. sprintf(__('%1$s: %2$s'), __('Escalation level'), $slalevel->getName()).''; } } $slaoptions = array(); if (Session::haveRight('sla', READ)) { $slaoptions['link'] = Toolbox::getItemTypeFormURL('SLT'). "?id=".$this->fields["id"]; } Html::showToolTip($commentsla,$slaoptions); if ($canupdate) { $fields = array('slt_delete' => 'slt_delete', 'id' => $ticket->getID(), 'type' => $type, '_glpi_csrf_token' => Session::getNewCSRFToken(), '_glpi_simple_form' => 1); $JS = " function delete_date$type(){ if (nativeConfirm('".addslashes(__('Also delete date ?'))."')) { submitGetLink('".$ticket->getFormURL()."', ".json_encode(array_merge($fields, array('delete_date' => 1)))."); } else { submitGetLink('".$ticket->getFormURL()."', ".json_encode(array_merge($fields, array('delete_date' => 0)))."); } }"; echo Html::scriptBlock($JS); echo ""; echo " | ";
} else {
echo ""; echo $tt->getBeginHiddenFieldValue($dateField); if ($canupdate) { Html::showDateTimeField($dateField, array('value' => $ticket->fields[$dateField], 'timestep' => 1, 'maybeempty' => true)); } else { echo Html::convDateTime($ticket->fields[$dateField]); } echo $tt->getEndHiddenFieldValue($dateField, $ticket); echo " | "; $sql_entities = getEntitiesRestrictRequest("", "", "", $ticket->fields['entities_id'], true); $slt_data = $this->getSltData("`type` = '$type' AND $sql_entities"); if ($canupdate && !empty($slt_data)) { echo "";
echo $tt->getBeginHiddenFieldText($sltField);
echo "";
echo " | ";
}
}
} else { // New Ticket
echo ""; echo $tt->getBeginHiddenFieldValue($dateField); Html::showDateTimeField($dateField, array('value' => $ticket->fields[$dateField], 'timestep' => 1, 'maybeempty' => false, 'canedit' => $canupdate)); echo $tt->getEndHiddenFieldValue($dateField, $ticket); echo " | "; $sql_entities = getEntitiesRestrictRequest("", "", "", $ticket->fields['entities_id'], true); $slt_data = $this->getSltData("`type` = '$type' AND $sql_entities"); if ($canupdate && !empty($slt_data)) { echo $tt->getBeginHiddenFieldText($sltField); if (!$tt->isHiddenField($sltField) || $tt->isPredefinedField($sltField)) { echo "".sprintf(__('%1$s%2$s'), __('SLT'), $tt->getMandatoryMark($sltField))." | "; } echo $tt->getEndHiddenFieldText($sltField); echo "".$tt->getBeginHiddenFieldValue($sltField); Slt::dropdown(array('name' => $sltField, 'entity' => $ticket->fields["entities_id"], 'value' => isset($ticket->fields[$sltField]) ? $ticket->fields[$sltField] : 0, 'condition' => "`type` = '".$type."'")); echo $tt->getEndHiddenFieldValue($sltField, $ticket); echo " | "; } } echo "
|---|