/**
* 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;
}