/** * Get alerts. * * <code> * // Get all alerts * $messages = Alert::get(); * * // Get error alerts * $error_messages = Alert::get(Alert::ERROR); * * // Get error and alert alerts * $messages = Alert::get(array(Alert::ERROR, Alert::ALERT)); * </code> * * @param mixed $type alert type (e.g. Alert::SUCCESS, array(Alert::ERROR, Alert::ALERT)) * @param bool $delete delete the alerts? * * @return array * * @uses Session::instance */ public static function get($type = null, $delete = false) { $alerts = Session::instance()->get(Alert::$_session_key); if ($alerts === null) { return array(); } if ($type !== null) { // Will hold the filtered set of alerts to return $return = array(); // Store the remainder in case `delete` or `get_once` is called $remainder = array(); foreach ($alerts as $alert) { if ($alert['type'] === $type or is_array($type) and in_array($alert['type'], $type)) { $return[] = $alert; } else { $remainder[] = $alert; } } if (empty($return)) { // No alerts of '$type' to return return array(); } $alerts = $return; } if ($delete === true) { if (empty($remainder) or $type === null) { // Nothing to save, delete the key from memory Alert::delete(); } else { // Override alerts with the remainder to simulate a deletion Session::instance()->set(Alert::$_session_key, $remainder); } } return $alerts; }
/** * Cron action on consumables : alert if a stock is behind the threshold * * @param $task to log, if NULL display (default NULL) * * @return 0 : nothing to do 1 : done with success **/ static function cronConsumable($task = NULL) { global $DB, $CFG_GLPI; $cron_status = 1; if ($CFG_GLPI["use_mailing"]) { $message = array(); $items = array(); $alert = new Alert(); foreach (Entity::getEntitiesToNotify('consumables_alert_repeat') as $entity => $repeat) { $query_alert = "SELECT `glpi_consumableitems`.`id` AS consID,\n `glpi_consumableitems`.`entities_id` AS entity,\n `glpi_consumableitems`.`ref` AS ref,\n `glpi_consumableitems`.`name` AS name,\n `glpi_consumableitems`.`alarm_threshold` AS threshold,\n `glpi_alerts`.`id` AS alertID,\n `glpi_alerts`.`date`\n FROM `glpi_consumableitems`\n LEFT JOIN `glpi_alerts`\n ON (`glpi_consumableitems`.`id` = `glpi_alerts`.`items_id`\n AND `glpi_alerts`.`itemtype`='ConsumableItem')\n WHERE `glpi_consumableitems`.`is_deleted` = '0'\n AND `glpi_consumableitems`.`alarm_threshold` >= '0'\n AND `glpi_consumableitems`.`entities_id` = '" . $entity . "'\n AND (`glpi_alerts`.`date` IS NULL\n OR (`glpi_alerts`.date+{$repeat}) < CURRENT_TIMESTAMP());"; $message = ""; $items = array(); foreach ($DB->request($query_alert) as $consumable) { if (($unused = Consumable::getUnusedNumber($consumable["consID"])) <= $consumable["threshold"]) { // define message alert //TRANS: %1$s is the consumable name, %2$s its reference, %3$d the remaining number $message .= sprintf(__('Threshold of alarm reached for the type of consumable: %1$s - Reference %2$s - Remaining %3$d'), $consumable['name'], $consumable['ref'], $unused); $message .= '<br>'; $items[$consumable["consID"]] = $consumable; // if alert exists -> delete if (!empty($consumable["alertID"])) { $alert->delete(array("id" => $consumable["alertID"])); } } } if (!empty($items)) { $options['entities_id'] = $entity; $options['items'] = $items; if (NotificationEvent::raiseEvent('alert', new ConsumableItem(), $options)) { if ($task) { $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . " : {$message}\n"); $task->addVolume(1); } else { Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . " : {$message}"); } $input["type"] = Alert::THRESHOLD; $input["itemtype"] = 'ConsumableItem'; // add alerts foreach ($items as $ID => $consumable) { $input["items_id"] = $ID; $alert->add($input); unset($alert->fields['id']); } } else { $entityname = Dropdown::getDropdownName('glpi_entities', $entity); //TRANS: %s is entity name $msg = sprintf(__('%s: send consumable alert failed'), $entityname); if ($task) { $task->log($msg); } else { Session::addMessageAfterRedirect($msg, false, ERROR); } } } } } return $cron_status; }
/** * Cron action on cartridges : alert if a stock is behind the threshold * * @param $task for log, display informations if NULL? * * @return 0 : nothing to do 1 : done with success * **/ static function cronCartridge($task = NULL) { global $DB, $CFG_GLPI, $LANG; $cron_status = 1; if ($CFG_GLPI["use_mailing"]) { $message = array(); $alert = new Alert(); foreach (Entity::getEntitiesToNotify('cartridges_alert_repeat') as $entity => $repeat) { // if you change this query, please don't forget to also change in showDebug() $query_alert = "SELECT `glpi_cartridgeitems`.`id` AS cartID,\n `glpi_cartridgeitems`.`entities_id` AS entity,\n `glpi_cartridgeitems`.`ref` AS cartref,\n `glpi_cartridgeitems`.`name` AS cartname,\n `glpi_cartridgeitems`.`alarm_threshold` AS threshold,\n `glpi_alerts`.`id` AS alertID,\n `glpi_alerts`.`date`\n FROM `glpi_cartridgeitems`\n LEFT JOIN `glpi_alerts`\n ON (`glpi_cartridgeitems`.`id` = `glpi_alerts`.`items_id`\n AND `glpi_alerts`.`itemtype` = 'CartridgeItem')\n WHERE `glpi_cartridgeitems`.`is_deleted` = '0'\n AND `glpi_cartridgeitems`.`alarm_threshold` >= '0'\n AND `glpi_cartridgeitems`.`entities_id` = '" . $entity . "'\n AND (`glpi_alerts`.`date` IS NULL\n OR (`glpi_alerts`.date+{$repeat}) < CURRENT_TIMESTAMP());"; $message = ""; $items = array(); foreach ($DB->request($query_alert) as $cartridge) { if (($unused = Cartridge::getUnusedNumber($cartridge["cartID"])) <= $cartridge["threshold"]) { // define message alert $message .= $LANG['mailing'][35] . " " . $cartridge["cartname"] . " - " . $LANG['consumables'][2] . " : " . $cartridge["cartref"] . " - " . $LANG['software'][20] . " : " . $unused . "<br>"; $items[$cartridge["cartID"]] = $cartridge; // if alert exists -> delete if (!empty($cartridge["alertID"])) { $alert->delete(array("id" => $cartridge["alertID"])); } } } if (!empty($items)) { $options['entities_id'] = $entity; $options['cartridges'] = $items; if (NotificationEvent::raiseEvent('alert', new Cartridge(), $options)) { if ($task) { $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . " : {$message}\n"); $task->addVolume(1); } else { addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . " : {$message}"); } $input["type"] = Alert::THRESHOLD; $input["itemtype"] = 'CartridgeItem'; // add alerts foreach ($items as $ID => $consumable) { $input["items_id"] = $ID; $alert->add($input); unset($alert->fields['id']); } } else { if ($task) { $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . " : Send cartidge alert failed\n"); } else { addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . " : Send cartidge alert failed", false, ERROR); } } } } } }