SlaLevel::getNextSltLevel PHP Метод

getNextSltLevel() статический публичный Метод

Get next level for a SLT
static public getNextSltLevel ( $slts_id, $slalevels_id ) : id
$slts_id integer id of the SLT
$slalevels_id integer id of the current SLT level
Результат id of the sla level : 0 if not exists
    static function getNextSltLevel($slts_id, $slalevels_id)
    {
        global $DB;
        $query = "SELECT `execution_time`\n                FROM `glpi_slalevels`\n                WHERE `id` = '{$slalevels_id}';";
        if ($result = $DB->query($query)) {
            if ($DB->numrows($result)) {
                $execution_time = $DB->result($result, 0, 0);
                $query = "SELECT `id`\n                      FROM `glpi_slalevels`\n                       WHERE `slts_id` = '{$slts_id}'\n                             AND `id` <> '{$slalevels_id}'\n                             AND `execution_time` > '{$execution_time}'\n                             AND `is_active` = 1\n                      ORDER BY `execution_time` ASC LIMIT 1 ;";
                if ($result = $DB->query($query)) {
                    if ($DB->numrows($result)) {
                        return $DB->result($result, 0, 0);
                    }
                }
            }
        }
        return 0;
    }

Usage Example

Пример #1
0
 /**
  * Do a specific SLAlevel for a ticket
  *
  * @param $data          array data of an entry of slalevels_tickets
  * @param $sltType             Type of slt
  *
  * @since version 9.1   2 parameters mandatory
  *
  * @return nothing
  **/
 static function doLevelForTicket(array $data, $sltType)
 {
     $ticket = new Ticket();
     $slalevelticket = new self();
     // existing ticket and not deleted
     if ($ticket->getFromDB($data['tickets_id']) && !$ticket->isDeleted()) {
         // search all actors of a ticket
         foreach ($ticket->getUsers(CommonITILActor::REQUESTER) as $user) {
             $ticket->fields['_users_id_requester'][] = $user['users_id'];
         }
         foreach ($ticket->getUsers(CommonITILActor::ASSIGN) as $user) {
             $ticket->fields['_users_id_assign'][] = $user['users_id'];
         }
         foreach ($ticket->getUsers(CommonITILActor::OBSERVER) as $user) {
             $ticket->fields['_users_id_observer'][] = $user['users_id'];
         }
         foreach ($ticket->getGroups(CommonITILActor::REQUESTER) as $group) {
             $ticket->fields['_groups_id_requester'][] = $group['groups_id'];
         }
         foreach ($ticket->getGroups(CommonITILActor::ASSIGN) as $group) {
             $ticket->fields['_groups_id_assign'][] = $group['groups_id'];
         }
         foreach ($ticket->getGroups(CommonITILActor::OBSERVER) as $group) {
             $ticket->fields['_groups_id_observer'][] = $group['groups_id'];
         }
         foreach ($ticket->getSuppliers(CommonITILActor::ASSIGN) as $supplier) {
             $ticket->fields['_suppliers_id_assign'][] = $supplier['suppliers_id'];
         }
         $slalevel = new SlaLevel();
         $slt = new SLT();
         // Check if slt datas are OK
         list($dateField, $sltField) = SLT::getSltFieldNames($sltType);
         if ($ticket->fields[$sltField] > 0) {
             if ($ticket->fields['status'] == CommonITILObject::CLOSED) {
                 // Drop line when status is closed
                 $slalevelticket->delete(array('id' => $data['id']));
             } else {
                 if ($ticket->fields['status'] != CommonITILObject::SOLVED) {
                     // No execution if ticket has been taken into account
                     if (!($sltType == SLT::TTO && $ticket->fields['takeintoaccount_delay_stat'] > 0)) {
                         // If status = solved : keep the line in case of solution not validated
                         $input['id'] = $ticket->getID();
                         $input['_auto_update'] = true;
                         if ($slalevel->getRuleWithCriteriasAndActions($data['slalevels_id'], 1, 1) && $slt->getFromDB($ticket->fields[$sltField])) {
                             $doit = true;
                             if (count($slalevel->criterias)) {
                                 $doit = $slalevel->checkCriterias($ticket->fields);
                             }
                             // Process rules
                             if ($doit) {
                                 $input = $slalevel->executeActions($input, array());
                             }
                         }
                         // Put next level in todo list
                         $next = $slalevel->getNextSltLevel($ticket->fields[$sltField], $data['slalevels_id']);
                         $slt->addLevelToDo($ticket, $next);
                         // Action done : drop the line
                         $slalevelticket->delete(array('id' => $data['id']));
                         $ticket->update($input);
                     } else {
                         // Drop line
                         $slalevelticket->delete(array('id' => $data['id']));
                     }
                 }
             }
         } else {
             // Drop line
             $slalevelticket->delete(array('id' => $data['id']));
         }
     } else {
         // Drop line
         $slalevelticket->delete(array('id' => $data['id']));
     }
 }