. * --------------------------------------------------------------------- */ if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } /** * LevelAgreement base Class for OLA & SLA * @since 9.2 **/ abstract class LevelAgreement extends CommonDBChild { // From CommonDBTM var $dohistory = true; static $rightname = 'slm'; // From CommonDBChild static public $itemtype = 'SLM'; static public $items_id = 'slms_id'; /** * Display a specific OLA or SLA warning. * Called into the above showForm() function * * @return void */ abstract function showFormWarning(); /** * Return the text needed for a confirmation of adding level agreement to a ticket * * @return array of strings */ abstract function getAddConfirmation(); /** * Get table fields * * @param integer $subtype of OLA/SLA, can be SLM::TTO or SLM::TTR * * @return array of 'date' and 'sla' field names */ static function getFieldNames($subtype) { $dateField = null; $laField = null; switch ($subtype) { case SLM::TTO: $dateField = static::$prefixticket.'time_to_own'; $laField = static::$prefix.'s_id_tto'; break; case SLM::TTR: $dateField = static::$prefixticket.'time_to_resolve'; $laField = static::$prefix.'s_id_ttr'; break; } return [$dateField, $laField]; } function defineTabs($options = []) { $ong = []; $this->addDefaultFormTab($ong); $this->addStandardTab(static::$levelclass, $ong, $options); $this->addStandardTab('Rule', $ong, $options); $this->addStandardTab('Ticket', $ong, $options); return $ong; } /** * Define calendar of the ticket using the SLA/OLA when using this calendar as sla/ola-s calendar * * @param integer $calendars_id calendars_id of the ticket **/ function setTicketCalendar($calendars_id) { if ($this->fields['calendars_id'] == -1) { $this->fields['calendars_id'] = $calendars_id; } } function post_getFromDB() { // get calendar from slm $slm = new SLM; if ($slm->getFromDB($this->fields['slms_id'])) { $this->fields['calendars_id'] = $slm->fields['calendars_id']; } } function post_getEmpty() { $this->fields['number_time'] = 4; $this->fields['definition_time'] = 'hour'; } /** * Print the 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 = []) { $rowspan = 3; if ($ID > 0) { $rowspan = 5; } // Get SLM object $slm = new SLM(); if (isset($options['parent'])) { $slm = $options['parent']; } else { $slm->getFromDB($this->fields['slms_id']); } if ($ID > 0) { $this->check($ID, READ); } else { // Create item $options[static::$items_id] = $slm->getField('id'); //force itemtype of parent static::$itemtype = get_class($slm); $this->check(-1, CREATE, $options); } $this->showFormHeader($options); echo "
| "; echo $tt->getBeginHiddenFieldValue($dateField); echo Html::convDateTime($ticket->fields[$dateField]); echo $tt->getEndHiddenFieldValue($dateField, $ticket); echo " | "; echo "";
echo $tt->getBeginHiddenFieldText($laField);
echo "";
echo Dropdown::getDropdownName(static::getTable(),
$ticket->fields[$laField])." ";
echo Html::hidden($laField, ['value' => $ticket->fields[$laField]]);
$obj = new static();
$obj->getFromDB($ticket->fields[$laField]);
$comment = isset($obj->fields['comment']) ? $obj->fields['comment'] : '';
$level = new static::$levelclass();
$nextaction = new static::$levelticketclass();
if ($nextaction->getFromDBForTicket($ticket->fields["id"], $type)) {
$comment .= ' '. sprintf(__('Next escalation: %s'), Html::convDateTime($nextaction->fields['date'])). ' '; if ($level->getFromDB($nextaction->fields[$pre.'levels_id'])) { $comment .= ''. sprintf(__('%1$s: %2$s'), _n('Escalation level', 'Escalation levels', 1), $level->getName()). ''; } } $options = []; if (Session::haveRight('slm', READ)) { $options['link'] = $this->getLinkURL(); } Html::showToolTip($comment, $options); if ($canupdate) { $delete_field = strtolower(get_called_class())."_delete"; $fields = [$delete_field => $delete_field, 'id' => $ticket->getID(), 'type' => $type, '_glpi_csrf_token' => Session::getNewCSRFToken(), '_glpi_simple_form' => 1]; $ticket_url = $ticket->getFormURL(); echo Html::scriptBlock(" function delete_date$type$rand(e) { e.preventDefault(); if (nativeConfirm('".addslashes(__('Also delete date?'))."')) { submitGetLink('$ticket_url', ".json_encode(array_merge($fields, ['delete_date' => 1]))."); } else { submitGetLink('$ticket_url', ".json_encode(array_merge($fields, ['delete_date' => 0]))."); } }"); echo ""; echo ""._x('button', 'Delete permanently').""; echo ""; } echo $tt->getEndHiddenFieldText($laField); echo " | ";
} else {
echo ""; echo $tt->getBeginHiddenFieldValue($dateField); echo ""; if ($canupdate) { Html::showDateTimeField($dateField, ['value' => $ticket->fields[$dateField], 'maybeempty' => true]); } else { echo Html::convDateTime($ticket->fields[$dateField]); } echo ""; echo $tt->getEndHiddenFieldValue($dateField, $ticket); $data = $this->find( ['type' => $type] + getEntitiesRestrictCriteria('', '', $ticket->fields['entities_id'], true) ); if ($canupdate && !empty($data)) { echo $tt->getBeginHiddenFieldText($laField); echo ""; echo "getAddConfirmation(), "cleanhide('la_action$type$rand');cleandisplay('la_choice$type$rand');"). " class='pointer' title='".static::getTypeName()."'> "; echo ""; echo ""; echo $tt->getEndHiddenFieldText($laField); } echo " | "; } } else { // New Ticket echo ""; echo $tt->getBeginHiddenFieldValue($dateField); Html::showDateTimeField($dateField, ['value' => $ticket->fields[$dateField], 'maybeempty' => false, 'canedit' => $canupdate, 'required' => $tt->isMandatoryField($dateField)]); echo $tt->getEndHiddenFieldValue($dateField, $ticket); echo " | "; $data = $this->find( ['type' => $type] + getEntitiesRestrictCriteria('', '', $ticket->fields['entities_id'], true) ); if ($canupdate && !empty($data)) { echo $tt->getBeginHiddenFieldText($laField); if (!$tt->isHiddenField($laField) || $tt->isPredefinedField($laField)) { echo "".sprintf(__('%1$s%2$s'), static::getTypeName(), $tt->getMandatoryMark($laField))." | "; } echo $tt->getEndHiddenFieldText($laField); echo "".$tt->getBeginHiddenFieldValue($laField); static::dropdown([ 'name' => $laField, 'entity' => $ticket->fields["entities_id"], 'value' => isset($ticket->fields[$laField]) ? $ticket->fields[$laField] : 0, 'condition' => ['type' => $type] ]); echo $tt->getEndHiddenFieldValue($laField, $ticket); echo " | "; } } echo "
|---|
| ".Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand); $header_top .= " | "; $header_bottom .= "".Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand); $header_bottom .= " | "; } $header_end .= "".__('Name')." | "; $header_end .= ""._n('Type', 'Types', 1)." | "; $header_end .= "".__('Maximum time')." | "; $header_end .= ""._n('Calendar', 'Calendars', 1)." | "; echo $header_begin.$header_top.$header_end; foreach ($laList as $val) { $edit = ($canedit ? "style='cursor:pointer' onClick=\"viewEditLa". $instID.$val["id"]."$rand();\"" : ''); echo "\n"; echo "
|---|---|---|---|---|---|
| "; if ($canedit) { Html::showMassiveActionCheckBox($la->getType(), $val['id']); } echo " | "; $la->getFromDB($val['id']); echo "".$la->getLink()." | "; echo "".$la->getSpecificValueToDisplay('type', $la->fields['type'])." | "; echo ""; echo $la->getSpecificValueToDisplay('number_time', ['number_time' => $la->fields['number_time'], 'definition_time' => $la->fields['definition_time']]); echo " | "; if (!$slm->fields['calendars_id']) { $link = __('24/7'); } else if ($slm->fields['calendars_id'] == -1) { $link = __('Calendar of the ticket'); } else if ($calendar->getFromDB($slm->fields['calendars_id'])) { $link = $calendar->getLink(); } echo "".$link." | "; echo "
| " . __('No item found') . " | "; echo "
|---|
| "; $header_top .= Html::getCheckAllAsCheckbox('massRuleTicket'.$rand); $header_bottom .= Html::getCheckAllAsCheckbox('massRuleTicket'.$rand); $header_end .= " | "; } $header_end .= "" . RuleTicket::getTypeName($nb) . " | "; $header_end .= "" . __('Active') . " | "; $header_end .= "" . __('Description') . " | "; $header_end .= "|
|---|---|---|---|---|
| "; Html::showMassiveActionCheckBox("RuleTicket", $rule->fields["id"]); echo " | "; $ruleclassname = get_class($rule); echo "" .$rule->fields["name"] ." | "; } else { echo "" . $rule->fields["name"] . " | "; } echo "" . Dropdown::getYesNo($rule->fields["is_active"]) . " | "; echo "" . $rule->fields["description"] . " | "; echo "