Entity::getEntitiesToNotify PHP Method

getEntitiesToNotify() static public method

get all entities with a notification option set manage CONFIG_PARENT (or NULL) value
static public getEntitiesToNotify ( $field ) : Array
$field String name of the field to search (>0)
return Array of id => value
    static function getEntitiesToNotify($field)
    {
        global $DB, $CFG_GLPI;
        $entities = array();
        // root entity first
        $ent = new self();
        if ($ent->getFromDB(0)) {
            // always exists
            $val = $ent->getField($field);
            if ($val > 0) {
                $entities[0] = $val;
            }
        }
        // Others entities in level order (parent first)
        $query = "SELECT `glpi_entities`.`id` AS `entity`,\n                       `glpi_entities`.`entities_id` AS `parent`,\n                       `glpi_entities`.`{$field}`\n                FROM `glpi_entities`\n                ORDER BY `glpi_entities`.`level` ASC";
        foreach ($DB->request($query) as $entitydatas) {
            if ((is_null($entitydatas[$field]) || $entitydatas[$field] == self::CONFIG_PARENT) && isset($entities[$entitydatas['parent']])) {
                // config inherit from parent
                $entities[$entitydatas['entity']] = $entities[$entitydatas['parent']];
            } else {
                if ($entitydatas[$field] > 0) {
                    // config found in entity
                    $entities[$entitydatas['entity']] = $entitydatas[$field];
                }
            }
        }
        return $entities;
    }

Usage Example

示例#1
0
 /**
  * Cron action on reservation : alert on end of reservations
  *
  * @param $task to log, if NULL use display (default NULL)
  *
  * @return 0 : nothing to do 1 : done with success
  **/
 static function cronReservation($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     $items_infos = array();
     $items_messages = array();
     foreach (Entity::getEntitiesToNotify('use_reservations_alert') as $entity => $value) {
         $secs = $value * HOUR_TIMESTAMP;
         // Reservation already begin and reservation ended in $value hours
         $query_end = "SELECT `glpi_reservationitems`.*,\n                              `glpi_reservations`.`end` AS `end`,\n                              `glpi_reservations`.`id` AS `resaid`\n                       FROM `glpi_reservations`\n                       LEFT JOIN `glpi_alerts`\n                           ON (`glpi_reservations`.`id` = `glpi_alerts`.`items_id`\n                               AND `glpi_alerts`.`itemtype` = 'Reservation'\n                               AND `glpi_alerts`.`type` = '" . Alert::END . "')\n                       LEFT JOIN `glpi_reservationitems`\n                           ON (`glpi_reservations`.`reservationitems_id`\n                                 = `glpi_reservationitems`.`id`)\n                       WHERE `glpi_reservationitems`.`entities_id` = '{$entity}'\n                             AND (UNIX_TIMESTAMP(`glpi_reservations`.`end`) - {$secs}) < UNIX_TIMESTAMP()\n                             AND `glpi_reservations`.`begin` < NOW()\n                             AND `glpi_alerts`.`date` IS NULL";
         foreach ($DB->request($query_end) as $data) {
             if ($item_resa = getItemForItemtype($data['itemtype'])) {
                 if ($item_resa->getFromDB($data["items_id"])) {
                     $data['item_name'] = $item_resa->getName();
                     $data['entity'] = $entity;
                     $items_infos[$entity][$data['resaid']] = $data;
                     if (!isset($items_messages[$entity])) {
                         $items_messages[$entity] = __('Device reservations expiring today') . "<br>";
                     }
                     $items_messages[$entity] .= sprintf(__('%1$s - %2$s'), $item_resa->getTypeName(), $item_resa->getName()) . "<br>";
                 }
             }
         }
     }
     foreach ($items_infos as $entity => $items) {
         $resitem = new self();
         if (NotificationEvent::raiseEvent("alert", new Reservation(), array('entities_id' => $entity, 'items' => $items))) {
             $message = $items_messages[$entity];
             $cron_status = 1;
             if ($task) {
                 $task->addVolume(1);
                 $task->log(sprintf(__('%1$s: %2$s') . "\n", Dropdown::getDropdownName("glpi_entities", $entity), $message));
             } else {
                 //TRANS: %1$s is a name, %2$s is text of message
                 Session::addMessageAfterRedirect(sprintf(__('%1$s: %2$s'), Dropdown::getDropdownName("glpi_entities", $entity), $message));
             }
             $alert = new Alert();
             $input["itemtype"] = 'Reservation';
             $input["type"] = Alert::END;
             foreach ($items as $resaid => $item) {
                 $input["items_id"] = $resaid;
                 $alert->add($input);
                 unset($alert->fields['id']);
             }
         } else {
             $entityname = Dropdown::getDropdownName('glpi_entities', $entity);
             //TRANS: %s is entity name
             $msg = sprintf(__('%1$s: %2$s'), $entityname, __('Send reservation alert failed'));
             if ($task) {
                 $task->log($msg);
             } else {
                 Session::addMessageAfterRedirect($msg, false, ERROR);
             }
         }
     }
     return $cron_status;
 }
All Usage Examples Of Entity::getEntitiesToNotify