static function addEvents(NotificationTargetTicket $target)
 {
     $config = PluginBehaviorsConfig::getInstance();
     if ($config->getField('add_notif')) {
         Plugin::loadLang('behaviors');
         $target->events['plugin_behaviors_document_itemnew'] = __('Add document to ticket', 'behaviors');
         $target->events['plugin_behaviors_document_itemdel'] = __('Delete document to ticket', 'behaviors');
     }
 }
Пример #2
0
 static function addEvents(NotificationTargetTicket $target)
 {
     $config = PluginBehaviorsConfig::getInstance();
     if ($config->getField('add_notif')) {
         Plugin::loadLang('behaviors');
         $target->events['plugin_behaviors_ticketnewtech'] = __('Assign to a technician', 'behaviors');
         $target->events['plugin_behaviors_ticketnewgrp'] = __('Assign to a group', 'behaviors');
         $target->events['plugin_behaviors_ticketreopen'] = __('Reopen ticket', 'behaviors');
         $target->events['plugin_behaviors_replysurvey'] = __('Reply to satisfaction survey', 'behaviors');
     }
 }
Пример #3
0
 /**
  * Display entities of the loaded profile
  *
  * @param $myname select name
  * @param $target target for entity change action
  */
 public static function showSelector($target)
 {
     global $CFG_GLPI;
     $rand = mt_rand();
     Plugin::loadLang('order');
     echo "<div class='center' ><span class='b'>" . __("Select the wanted item type", "order") . "</span><br>";
     echo "<a style='font-size:14px;' href='" . $target . "?reset=reset' title=\"" . __("Show all") . "\">" . str_replace(" ", "&nbsp;", __("Show all")) . "</a></div>";
     echo "<div class='left' style='width:100%'>";
     echo "<script type='javascript'>";
     echo "var Tree_Category_Loader{$rand} = new Ext.tree.TreeLoader({\n         dataUrl:'" . $CFG_GLPI["root_doc"] . "/plugins/order/ajax/referencetreetypes.php'\n      });";
     echo "var Tree_Category{$rand} = new Ext.tree.TreePanel({\n         collapsible      : false,\n         animCollapse     : false,\n         border           : false,\n         id               : 'tree_projectcategory{$rand}',\n         el               : 'tree_projectcategory{$rand}',\n         autoScroll       : true,\n         animate          : false,\n         enableDD         : true,\n         containerScroll  : true,\n         height           : 320,\n         width            : 770,\n         loader           : Tree_Category_Loader{$rand},\n         rootVisible     : false\n      });";
     // SET the root node.
     echo "var Tree_Category_Root{$rand} = new Ext.tree.AsyncTreeNode({\n         text     : '',\n         draggable   : false,\n         id    : '-1'                  // this IS the id of the startnode\n      });\n      Tree_Category{$rand}.setRootNode(Tree_Category_Root{$rand});";
     // Render the tree.
     echo "Tree_Category{$rand}.render();\n            Tree_Category_Root{$rand}.expand();";
     echo "</script>";
     echo "<div id='tree_projectcategory{$rand}' ></div>";
     echo "</div>";
 }
Пример #4
0
 /**
  * @param $target             NotificationTarget object
  * @param $user_infos   array
  * @param $event
  * @param $options      array
  *
  * @return id of the template in templates_by_languages / false if computation failed
  **/
 function getTemplateByLanguage(NotificationTarget $target, $user_infos = array(), $event, $options = array())
 {
     $lang = array();
     $language = $user_infos['language'];
     if (isset($user_infos['additionnaloption'])) {
         $additionnaloption = $user_infos['additionnaloption'];
     } else {
         $additionnaloption = array();
     }
     $tid = $language;
     $tid .= serialize($additionnaloption);
     $tid = sha1($tid);
     if (!isset($this->templates_by_languages[$tid])) {
         //Switch to the desired language
         $bak_dropdowntranslations = $_SESSION['glpi_dropdowntranslations'];
         $_SESSION['glpi_dropdowntranslations'] = DropdownTranslation::getAvailableTranslations($language);
         Session::loadLanguage($language);
         $bak_language = $_SESSION["glpilanguage"];
         $_SESSION["glpilanguage"] = $language;
         //If event is raised by a plugin, load it in order to get the language file available
         if ($plug = isPluginItemType(get_class($target->obj))) {
             Plugin::loadLang(strtolower($plug['plugin']), $language);
         }
         //Get template's language data for in this language
         $options['additionnaloption'] = $additionnaloption;
         $data =& $target->getForTemplate($event, $options);
         $footer_string = Html::entity_decode_deep(sprintf(__('Automatically generated by GLPI %s'), GLPI_VERSION));
         $add_header = Html::entity_decode_deep($target->getContentHeader());
         $add_footer = Html::entity_decode_deep($target->getContentFooter());
         //Restore default language
         $_SESSION["glpilanguage"] = $bak_language;
         Session::loadLanguage();
         $_SESSION['glpi_dropdowntranslations'] = $bak_dropdowntranslations;
         if ($plug = isPluginItemType(get_class($target->obj))) {
             Plugin::loadLang(strtolower($plug['plugin']));
         }
         if ($template_datas = $this->getByLanguage($language)) {
             //Template processing
             // Decode html chars to have clean text
             $template_datas['content_text'] = Html::entity_decode_deep($template_datas['content_text']);
             $save_data = $data;
             $data = Html::entity_decode_deep($data);
             $template_datas['subject'] = Html::entity_decode_deep($template_datas['subject']);
             $this->signature = Html::entity_decode_deep($this->signature);
             $lang['subject'] = $target->getSubjectPrefix($event) . self::process($template_datas['subject'], $data);
             $lang['content_html'] = '';
             //If no html content, then send only in text
             if (!empty($template_datas['content_html'])) {
                 // Encode in HTML all chars
                 $data_html = Html::entities_deep($data);
                 $data_html = Html::nl2br_deep($data_html);
                 // Restore HTML tags
                 if (count($target->html_tags)) {
                     foreach ($target->html_tags as $tag) {
                         if (isset($save_data[$tag])) {
                             $data_html[$tag] = $save_data[$tag];
                         }
                     }
                 }
                 $signature_html = Html::entities_deep($this->signature);
                 $signature_html = Html::nl2br_deep($signature_html);
                 $template_datas['content_html'] = self::process($template_datas['content_html'], $data_html);
                 $lang['content_html'] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n                        'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>" . "<html>\n                        <head>\n                         <META http-equiv='Content-Type' content='text/html; charset=utf-8'>\n                         <title>" . Html::entities_deep($lang['subject']) . "</title>\n                         <style type='text/css'>\n                           " . $this->fields['css'] . "\n                         </style>\n                        </head>\n                        <body>\n" . (!empty($add_header) ? $add_header . "\n<br><br>" : '') . $template_datas['content_html'] . "<br><br>-- \n<br>" . $signature_html . "<br>{$footer_string}" . "<br><br>\n" . (!empty($add_footer) ? $add_footer . "\n<br><br>" : '') . "\n</body></html>";
             }
             $lang['content_text'] = (!empty($add_header) ? $add_header . "\n\n" : '') . Html::clean(self::process($template_datas['content_text'], $data) . "\n\n-- \n" . $this->signature . "\n" . Html::entity_decode_deep(sprintf(__('Automatically generated by GLPI %s'), GLPI_VERSION))) . "\n\n" . $add_footer;
             $this->templates_by_languages[$tid] = $lang;
         }
     }
     if (isset($this->templates_by_languages[$tid])) {
         return $tid;
     }
     return false;
 }
 /**
  * Cron action on certificates : ExpiredCertificates or CertificatesWhichExpire
  *
  * @param $task for log, if NULL display
  *
  **/
 static function cronCertificatesAlert($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     $Certificate = new self();
     $query_expired = self::queryExpiredCertificates();
     $query_whichexpire = self::queryCertificatesWhichExpire();
     $querys = array(Alert::NOTICE => $query_whichexpire, Alert::END => $query_expired);
     $certificate_infos = array();
     $certificate_messages = array();
     foreach ($querys as $type => $query) {
         $certificate_infos[$type] = array();
         foreach ($DB->request($query) as $data) {
             $entity = $data['entities_id'];
             $message = $data["name"] . ": " . Html::convdate($data["date_expiration"]) . "<br>\n";
             $certificate_infos[$type][$entity][] = $data;
             if (!isset($certificates_infos[$type][$entity])) {
                 $certificate_messages[$type][$entity] = __('Certificates expired since more', 'certificates') . "<br />";
             }
             $certificate_messages[$type][$entity] .= $message;
         }
     }
     foreach ($querys as $type => $query) {
         foreach ($certificate_infos[$type] as $entity => $certificates) {
             Plugin::loadLang('certificates');
             if (NotificationEvent::raiseEvent($type == Alert::NOTICE ? "CertificatesWhichExpire" : "ExpiredCertificates", new PluginCertificatesCertificate(), array('entities_id' => $entity, 'certificates' => $certificates))) {
                 $message = $certificate_messages[$type][$entity];
                 $cron_status = 1;
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(1);
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             } else {
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send certificates alert failed\n");
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send certificates alert failed", false, ERROR);
                 }
             }
         }
     }
     return $cron_status;
 }
Пример #6
0
 /**
  * Display types of used accounts
  *
  * @param $target target for type change action
  * 
  * @return nothing
  */
 public static function showSelector($target)
 {
     global $CFG_GLPI;
     $rand = mt_rand();
     Plugin::loadLang('accounts');
     echo "<div class='center' ><span class='b'>" . __('Select the wanted account type', 'accounts') . "</span><br>";
     echo "<a style='font-size:14px;' href='" . $target . "?reset=reset' title=\"" . __s('Show all') . "\">" . str_replace(" ", "&nbsp;", __('Show all')) . "</a></div>";
     $js = "\$('#tree_projectcategory{$rand}').jstree({\n         'plugins' : ['themes', 'json_data', 'search'],\n         'core' : {'load_open': true,\n                 'html_titles': true,\n                 'animation' : 0},\n         'themes' : {\n            'theme' : 'classic',\n            'url'   : '" . $CFG_GLPI["root_doc"] . "/css/jstree/style.css'\n         },\n         'search' : {\n            'case_insensitive' : true,\n            'show_only_matches' : true,\n            'ajax' : {\n               'type': 'POST',\n               'url' : '" . $CFG_GLPI["root_doc"] . "/plugins/accounts/ajax/accounttreetypes.php'\n            }\n         },\n         'json_data' : {\n            'ajax' : {\n               'type': 'POST',\n               'url': function (node) {\n                  var nodeId = '';\n                  var url = '';\n                  if (node == -1) {\n                     url = '" . $CFG_GLPI["root_doc"] . "/plugins/accounts/ajax/accounttreetypes.php?node=-1';\n                  } else {\n                     nodeId = node.attr('id');\n                     url = '" . $CFG_GLPI["root_doc"] . "/plugins/accounts/ajax/accounttreetypes.php?node='+nodeId;\n                  }\n                  return url;\n               },\n               'success': function (new_data) {\n                  return new_data;\n               },\n               'progressive_render' : true\n            }\n         }\n      });";
     echo Html::scriptBlock($js);
     echo "<div class='left' style='width:100%'>";
     echo "<div id='tree_projectcategory{$rand}'></div>";
     echo "</div>";
 }
Пример #7
0
function plugin_init_monitoring()
{
    global $PLUGIN_HOOKS, $LANG;
    $PLUGIN_HOOKS['change_profile']['monitoring'] = array('PluginMonitoringProfile', 'changeprofile');
    $Plugin = new Plugin();
    if ($Plugin->isActivated('monitoring')) {
        if (isset($_SESSION["glpiID"])) {
            Plugin::loadLang("monitoring");
            $PLUGIN_HOOKS['use_massive_action']['monitoring'] = 1;
            $PLUGIN_HOOKS['add_css']['monitoring'] = "css/views.css";
            $plugin = new Plugin();
            if ($plugin->isActivated('monitoring') and isset($_SESSION['glpi_plugin_monitoring_profile'])) {
                $PLUGIN_HOOKS['menu_entry']['monitoring'] = true;
            }
            $PLUGIN_HOOKS['config_page']['monitoring'] = 'front/config.form.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['config'] = 'front/config.form.php';
            // Tabs for each type
            $PLUGIN_HOOKS['headings']['monitoring'] = 'plugin_get_headings_monitoring';
            $PLUGIN_HOOKS['headings_action']['monitoring'] = 'plugin_headings_actions_monitoring';
            // Icons add, search...
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['commands'] = 'front/command.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['commands'] = 'front/command.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['checks'] = 'front/check.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['checks'] = 'front/check.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['componentscatalog'] = 'front/componentscatalog.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['componentscatalog'] = 'front/componentscatalog.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['servicescatalog'] = 'front/servicescatalog.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['servicescatalog'] = 'front/servicescatalog.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['components'] = 'front/component.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['components'] = 'front/component.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['contacttemplates'] = 'front/contacttemplate.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['contacttemplates'] = 'front/contacttemplate.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['displayview'] = 'front/displayview.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['displayview'] = 'front/displayview.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['rrdtemplates'] = 'front/rrdtemplate.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['rrdtemplates'] = 'front/rrdtemplate.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['PluginMonitoringRealm'] = 'front/realm.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['PluginMonitoringRealm'] = 'front/realm.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['add']['weathermap'] = 'front/weathermap.form.php?add=1';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['weathermap'] = 'front/weathermap.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['search']['service'] = 'front/display.php';
            // Fil ariane
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['check']['title'] = $LANG['plugin_monitoring']['check'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['check']['page'] = '/plugins/monitoring/front/check.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['command']['title'] = $LANG['plugin_monitoring']['command'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['command']['page'] = '/plugins/monitoring/front/command.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['components']['title'] = $LANG['plugin_monitoring']['component'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['components']['page'] = '/plugins/monitoring/front/component.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['componentscatalog']['title'] = $LANG['plugin_monitoring']['componentscatalog'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['componentscatalog']['page'] = '/plugins/monitoring/front/componentscatalog.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['contacttemplates']['title'] = $LANG['plugin_monitoring']['contacttemplate'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['contacttemplates']['page'] = '/plugins/monitoring/front/contacttemplate.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['display']['title'] = $LANG['plugin_monitoring']['display'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['display']['page'] = '/plugins/monitoring/front/display.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['displayview']['title'] = $LANG['plugin_monitoring']['displayview'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['displayview']['page'] = '/plugins/monitoring/front/displayview.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['PluginMonitoringRealm']['title'] = $LANG['plugin_monitoring']['realms'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['PluginMonitoringRealm']['page'] = '/plugins/monitoring/front/realm.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['servicescatalog']['title'] = $LANG['plugin_monitoring']['servicescatalog'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['servicescatalog']['page'] = '/plugins/monitoring/front/servicescatalog.php';
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['weathermap']['title'] = $LANG['plugin_monitoring']['weathermap'][0];
            $PLUGIN_HOOKS['submenu_entry']['monitoring']['options']['weathermap']['page'] = '/plugins/monitoring/front/weathermap.php';
            // Define hook item
            $rule_check = array('PluginMonitoringComponentscatalog_rule', 'isThisItemCheckRule');
            $rule_check_networkport = array('PluginMonitoringComponentscatalog_rule', 'isThisItemCheckRuleNetworkport');
            $PLUGIN_HOOKS['item_add']['monitoring'] = array('Computer' => $rule_check, 'NetworkEquipment' => $rule_check, 'Printer' => $rule_check, 'Peripheral' => $rule_check, 'Phone' => $rule_check, 'PluginMonitoringNetworkport' => $rule_check_networkport, 'PluginMonitoringComponentscatalog_rule' => array('PluginMonitoringComponentscatalog_rule', 'getItemsDynamicly'), 'PluginMonitoringComponentscatalog_Host' => array('PluginMonitoringHost', 'addHost'));
            $PLUGIN_HOOKS['item_update']['monitoring'] = array('Computer' => $rule_check, 'NetworkEquipment' => $rule_check, 'Printer' => $rule_check, 'Peripheral' => $rule_check, 'Phone' => $rule_check, 'PluginMonitoringComponentscatalog' => array('PluginMonitoringComponentscatalog', 'replayRulesCatalog'), 'PluginMonitoringComponentscatalog_rule' => array('PluginMonitoringComponentscatalog_rule', 'getItemsDynamicly'));
            $PLUGIN_HOOKS['item_purge']['monitoring'] = array('Computer' => $rule_check, 'NetworkEquipment' => $rule_check, 'Printer' => $rule_check, 'Peripheral' => $rule_check, 'Phone' => $rule_check, 'PluginMonitoringNetworkport' => $rule_check_networkport, 'PluginMonitoringComponentscatalog_rule' => array('PluginMonitoringComponentscatalog_rule', 'getItemsDynamicly'), 'PluginMonitoringComponentscatalog_Host' => array('PluginMonitoringComponentscatalog_Host', 'unlinkComponentsToItem'), 'PluginMonitoringComponentscatalog' => array('PluginMonitoringComponentscatalog', 'removeCatalog'), 'PluginMonitoringBusinessrulegroup' => array('PluginMonitoringBusinessrule', 'removeBusinessruleonDeletegroup'));
            if (!isset($_SESSION['glpi_plugin_monitoring']['_refresh'])) {
                $_SESSION['glpi_plugin_monitoring']['_refresh'] = '60';
            }
        }
        $PLUGIN_HOOKS['webservices']['monitoring'] = 'plugin_monitoring_registerMethods';
    }
    return $PLUGIN_HOOKS;
}
Пример #8
0
 static function cronAdditionalalertsNewOcs($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $CronTask = new CronTask();
     if ($CronTask->getFromDBbyName("PluginAdditionalalertsOcsAlert", "AdditionalalertsNewOcs")) {
         if ($CronTask->fields["state"] == CronTask::STATE_DISABLE) {
             return 0;
         }
     } else {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     foreach (self::getEntitiesToNotify('use_newocs_alert') as $entity => $repeat) {
         foreach ($DB->request("glpi_plugin_ocsinventoryng_ocsservers", "`is_active` = 1") as $config) {
             $query_newocsmachine = self::queryNew($config, $entity);
             $newocsmachine_infos = array();
             $newocsmachine_messages = array();
             $type = Alert::END;
             $newocsmachine_infos[$type] = array();
             foreach ($DB->request($query_newocsmachine) as $data) {
                 $entity = $data['entities_id'];
                 $message = $data["name"];
                 $newocsmachine_infos[$type][$entity][] = $data;
                 if (!isset($newocsmachines_infos[$type][$entity])) {
                     $newocsmachine_messages[$type][$entity] = __('New imported computers from OCS-NG', 'additionalalerts') . "<br />";
                 }
                 $newocsmachine_messages[$type][$entity] .= $message;
             }
             $delay_ocs = 0;
             foreach ($newocsmachine_infos[$type] as $entity => $newocsmachines) {
                 Plugin::loadLang('additionalalerts');
                 if (NotificationEvent::raiseEvent("newocs", new PluginAdditionalalertsOcsAlert(), array('entities_id' => $entity, 'ocsmachines' => $newocsmachines, 'delay_ocs' => $delay_ocs))) {
                     $message = $newocsmachine_messages[$type][$entity];
                     $cron_status = 1;
                     if ($task) {
                         $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                         $task->addVolume(1);
                     } else {
                         Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                     }
                 } else {
                     if ($task) {
                         $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send newocsmachines alert failed\n");
                     } else {
                         Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send newocsmachines alert failed", false, ERROR);
                     }
                 }
             }
         }
     }
     return $cron_status;
 }
Пример #9
0
 /**
  * Cron action on badges : ExpiredBadges or BadgesWhichExpire
  *
  * @param $task for log, if NULL display
  *
  **/
 static function cronBadgesAlert($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     $query_expired = self::queryExpiredBadges();
     $query_whichexpire = self::queryBadgesWhichExpire();
     $querys = array(PluginBadgesNotificationTargetBadge::BadgesWhichExpire => $query_whichexpire, PluginBadgesNotificationTargetBadge::ExpiredBadges => $query_expired);
     $badge_infos = array();
     $badge_messages = array();
     foreach ($querys as $type => $query) {
         $badge_infos[$type] = array();
         if (!empty($query)) {
             foreach ($DB->request($query) as $data) {
                 $entity = $data['entities_id'];
                 $message = $data["name"] . ": " . Html::convdate($data["date_expiration"]) . "<br>\n";
                 $badge_infos[$type][$entity][] = $data;
                 if (!isset($badges_infos[$type][$entity])) {
                     $badge_messages[$type][$entity] = __('Badges at the end of the validity', 'badges') . "<br />";
                 }
                 $badge_messages[$type][$entity] .= $message;
             }
         }
     }
     foreach ($querys as $type => $query) {
         foreach ($badge_infos[$type] as $entity => $badges) {
             Plugin::loadLang('badges');
             if (NotificationEvent::raiseEvent($type, new PluginBadgesBadge(), array('entities_id' => $entity, 'badges' => $badges))) {
                 $message = $badge_messages[$type][$entity];
                 $cron_status = 1;
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(1);
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             } else {
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send badges alert failed\n");
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send badges alert failed", false, ERROR);
                 }
             }
         }
     }
     return $cron_status;
 }
Пример #10
0
 /**
  * Cron action
  *
  * @param $task for log, if NULL display
  *
  **/
 static function cronAdditionalalertsNotInfocom($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $CronTask = new CronTask();
     if ($CronTask->getFromDBbyName("PluginAdditionalalertsInfocomAlert", "AdditionalalertsNotInfocom")) {
         if ($CronTask->fields["state"] == CronTask::STATE_DISABLE) {
             return 0;
         }
     } else {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     foreach (self::getEntitiesToNotify('use_infocom_alert') as $entity => $repeat) {
         $query_notinfocom = self::query($entity);
         $notinfocom_infos = array();
         $notinfocom_messages = array();
         $type = Alert::END;
         $notinfocom_infos[$type] = array();
         foreach ($DB->request($query_notinfocom) as $data) {
             $entity = $data['entities_id'];
             $message = $data["name"];
             $notinfocom_infos[$type][$entity][] = $data;
             if (!isset($notinfocoms_infos[$type][$entity])) {
                 $notinfocom_messages[$type][$entity] = PluginAdditionalalertsInfocomAlert::getTypeName(2) . "<br />";
             }
             $notinfocom_messages[$type][$entity] .= $message;
         }
         foreach ($notinfocom_infos[$type] as $entity => $notinfocoms) {
             Plugin::loadLang('additionalalerts');
             if (NotificationEvent::raiseEvent("notinfocom", new PluginAdditionalalertsInfocomAlert(), array('entities_id' => $entity, 'notinfocoms' => $notinfocoms))) {
                 $message = $notinfocom_messages[$type][$entity];
                 $cron_status = 1;
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(1);
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             } else {
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send infocoms alert failed\n");
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send infocoms alert failed", false, ERROR);
                 }
             }
         }
     }
     return $cron_status;
 }
Пример #11
0
 /**
  * Cron action on tasks : UpdateTypology
  *
  * @param $task for log, if NULL display
  *
  **/
 static function cronNotValidated($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $cron_status = 0;
     $message = array();
     $typo = new self();
     $query_items = $typo->queryNotValidated();
     $querys = array(Alert::END => $query_items);
     $task_infos = array();
     $task_messages = array();
     foreach ($querys as $type => $query) {
         $task_infos[$type] = array();
         foreach ($DB->request($query) as $data) {
             $entity = $data['entities_id'];
             $message = $data["name"] . ": " . $data["error"] . "<br>\n";
             $task_infos[$type][$entity][] = $data;
             if (!isset($tasks_infos[$type][$entity])) {
                 $task_messages[$type][$entity] = __('Elements not match with the typology', 'typology') . "<br />";
             }
             $task_messages[$type][$entity] .= $message;
         }
     }
     foreach ($querys as $type => $query) {
         foreach ($task_infos[$type] as $entity => $items) {
             Plugin::loadLang('typology');
             $message = $task_messages[$type][$entity];
             $cron_status = 1;
             if (NotificationEvent::raiseEvent("AlertNotValidatedTypology", new PluginTypologyTypology(), array('entities_id' => $entity, 'items' => $items))) {
                 $message = $task_messages[$type][$entity];
                 $cron_status = 1;
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(1);
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             } else {
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(count($items));
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             }
         }
     }
     return $cron_status;
 }
Пример #12
0
 /**
  * Cron action on checklists
  *
  * @param $task for log, if NULL display
  *
  **/
 static function cronResourcesChecklist($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     $query_arrival = self::queryChecklists(false);
     $query_leaving = self::queryChecklists(false, 1);
     $querys = array(Alert::NOTICE => $query_arrival, Alert::END => $query_leaving);
     $checklist_infos = array();
     $checklist_messages = array();
     foreach ($querys as $type => $query) {
         $checklist_infos[$type] = array();
         foreach ($DB->request($query) as $data) {
             $entity = $data['entities_id'];
             $message = "checklists" . ": " . $data["resource_name"] . " " . $data["resource_firstname"] . "<br>\n";
             $checklist_infos[$type][$entity][] = $data;
             if (!isset($checklists_infos[$type][$entity])) {
                 $checklist_messages[$type][$entity] = __('Checklists Verification', 'resources') . "<br />";
             }
             $checklist_messages[$type][$entity] .= $message;
         }
     }
     foreach ($querys as $type => $query) {
         foreach ($checklist_infos[$type] as $entity => $checklists) {
             Plugin::loadLang('resources');
             if (NotificationEvent::raiseEvent($type == Alert::NOTICE ? "AlertArrivalChecklists" : "AlertLeavingChecklists", new PluginResourcesResource(), array('entities_id' => $entity, 'checklists' => $checklists, 'tasklists' => $checklists))) {
                 $message = $checklist_messages[$type][$entity];
                 $cron_status = 1;
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(1);
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             } else {
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send checklists resources alert failed\n");
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send checklists resources alert failed", false, ERROR);
                 }
             }
         }
     }
     return $cron_status;
 }
Пример #13
0
 /**
  * Cron action on badges : ExpiredBadges or BadgesWhichExpire
  *
  * @param $task for log, if NULL display
  *
  * */
 static function cronBadgesReturnAlert($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     $query_returnexpire = self::queryBadgesReturnExpire();
     $querys = array(PluginBadgesNotificationTargetBadge::BadgesReturn => $query_returnexpire);
     $badge_infos = array();
     $badge_messages = array();
     foreach ($querys as $type => $query) {
         $badge_infos[$type] = array();
         if (!empty($query)) {
             foreach ($DB->request($query) as $data) {
                 $entity = $data['entities_id'];
                 $message = $data["name"] . "<br>" . __("Arrival date", "badges") . " : " . Html::convdate($data["affectation_date"]) . "<br>\n";
                 $badge_infos[$type][$entity][] = $data;
                 if (!isset($badges_infos[$type][$entity])) {
                     $badge_messages[$type][$entity] = __('Badges at the end of the validity', 'badges') . "<br />";
                 }
                 $badge_messages[$type][$entity] .= $message;
             }
         }
     }
     foreach ($querys as $type => $query) {
         foreach ($badge_infos[$type] as $entity => $badges) {
             Plugin::loadLang('badges');
             // Set badge request fields
             foreach ($badges as $badge) {
                 $badgerequest[] = array('visitor_realname' => $badge['visitor_realname'], 'visitor_firstname' => $badge['visitor_firstname'], 'visitor_society' => $badge['visitor_society'], 'affectation_date' => $badge['affectation_date'], 'requesters_id' => $badge['requesters_id']);
             }
             if (NotificationEvent::raiseEvent($type, new PluginBadgesBadge(), array('entities_id' => $entity, 'badges' => $badges, 'badgerequest' => $badgerequest))) {
                 $message = $badge_messages[$type][$entity];
                 $cron_status = 1;
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(1);
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             } else {
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send badges alert failed\n");
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send badges alert failed", false, ERROR);
                 }
             }
         }
     }
     return $cron_status;
 }
Пример #14
0
 public static function suite()
 {
     $suite = new PHPUnit_Framework_TestSuite('FusionInventory');
     if (file_exists("save.sql")) {
         unlink("save.sql");
     }
     $suite->addTest(GLPIInstall_AllTests::suite());
     $suite->addTest(FusinvInstall_AllTests::suite());
     Plugin::loadLang('fusioninventory');
     if (isset($_SERVER['argv']) && isset($_SERVER['argv'][2]) && !isset($_SERVER['argv'][3])) {
         $class = $_SERVER['argv'][2] . "_AllTests";
         $suite->addTest($class::suite());
     } else {
         $suite->addTest(FormatConvertData_AllTests::suite());
         $suite->addTest(SoftwareUpdate_AllTests::suite());
         $suite->addTest(AgentChangeDeviceid_AllTests::suite());
         $suite->addTest(ComputerTransformation_AllTests::suite());
         $suite->addTest(ComputerUpdate_AllTests::suite());
         $suite->addTest(PrinterTransformation_AllTests::suite());
         $suite->addTest(PrinterUpdate_AllTests::suite());
         $suite->addTest(NetworkEquipmentTransformation_AllTests::suite());
         $suite->addTest(NetworkEquipmentUpdate_AllTests::suite());
         $suite->addTest(NetworkEquipmentUpdateDiscovery_AllTests::suite());
         $suite->addTest(ComputerLog_AllTests::suite());
         $suite->addTest(ComputerEntity_AllTests::suite());
         $suite->addTest(RuleIgnoredImport_AllTests::suite());
         $suite->addTest(RuleImport_AllTests::suite());
         $suite->addTest(SoftwareEntityCreation_AllTests::suite());
         $suite->addTest(SoftwareVersionAdd_AllTests::suite());
         $suite->addTest(ComputerDynamic_AllTests::suite());
         $suite->addTest(UnmanagedManaged_AllTests::suite());
         $suite->addTest(UnmanagedImport_AllTests::suite());
         //$suite->addTest(TaskDeployDynamicGroup_AllTests::suite());
         $suite->addTest(ComputerPrinter_AllTests::suite());
         $suite->addTest(ComputerLicense_AllTests::suite());
         $suite->addTest(NetworkEquipmentLLDP_AllTests::suite());
         $suite->addTest(ComputerMonitor_AllTests::suite());
         $suite->addTest(ComputerPeripheral_AllTests::suite());
     }
     # For travis-CI
     file_put_contents("result.stamp", "test ok");
     return $suite;
 }
Пример #15
0
 /**
  * Include the good language dict.
  *
  * Get the default language from current user in $_SESSION["glpilanguage"].
  * And load the dict that correspond.
  *
  * @param $forcelang Force to load a specific lang (default '')
  *
  * @return nothing (make an include)
  **/
 static function loadLanguage($forcelang = '')
 {
     global $LANG, $CFG_GLPI, $TRANSLATE;
     $file = "";
     if (!isset($_SESSION["glpilanguage"])) {
         if (isset($CFG_GLPI["language"])) {
             // Default config in GLPI >= 0.72
             $_SESSION["glpilanguage"] = $CFG_GLPI["language"];
         } else {
             if (isset($CFG_GLPI["default_language"])) {
                 // Default config in GLPI < 0.72 : keep it for upgrade process
                 $_SESSION["glpilanguage"] = $CFG_GLPI["default_language"];
             } else {
                 $_SESSION["glpilanguage"] = "en_GB";
             }
         }
     }
     $trytoload = $_SESSION["glpilanguage"];
     // Force to load a specific lang
     if (!empty($forcelang)) {
         $trytoload = $forcelang;
     }
     // If not set try default lang file
     if (empty($trytoload)) {
         $trytoload = $CFG_GLPI["language"];
     }
     if (isset($CFG_GLPI["languages"][$trytoload])) {
         $newfile = "/locales/" . $CFG_GLPI["languages"][$trytoload][1];
     }
     if (empty($newfile) || !is_file(GLPI_ROOT . $newfile)) {
         $newfile = "/locales/en_GB.mo";
     }
     $TRANSLATE = new Zend\I18n\Translator\Translator();
     try {
         $cache = Zend\Cache\StorageFactory::factory(array('adapter' => 'apc'));
         $TRANSLATE->setCache($cache);
     } catch (Zend\Cache\Exception\ExtensionNotLoadedException $e) {
         // ignore when APC not available
         // toolbox::logDebug($e->getMessage());
     }
     $TRANSLATE->addTranslationFile('gettext', GLPI_ROOT . $newfile, 'glpi', $trytoload);
     // Test APC version, if is enable with special check for cli
     //      if (version_compare(phpversion('apc'), '3.1.6') >= 0
     //          && ini_get('apc.enabled')
     //          && (!isCommandLine() || ini_get('apc.enable_cli'))) { // Try from APC cache
     ////          $key       = "glpi".sha1_file(GLPI_ROOT.$newfile); // Use content to detect changes
     //         $cache = Zend\Cache\StorageFactory::factory(array('adapter' => 'apc',
     //                                                           'plugins' => array('exception_handler'
     //                                                                               => array('throw_exceptions'
     //                                                                                         => false))));
     //         $TRANSLATE->setCache($cache);
     //         $TRANSLATE->addTranslationFile('gettext', GLPI_ROOT.$newfile, 'glpi', $trytoload);
     //
     //      } else if (function_exists('xcache_get') && !isCommandLine()) { // Try from XCache
     //         // TODO : use xcache adapter of Zend when available (2.1)
     //         // see http://framework.zend.com/issues/browse/ZF2-543
     //         $key = "glpi".sha1_file(GLPI_ROOT.$newfile); // Use content to detect changes
     //         if (@xcache_isset($key)) {
     //            $TRANSLATE = unserialize(xcache_get($key));
     //         }
     //         if (!$TRANSLATE) {
     //            $TRANSLATE = new Zend\I18n\Translator\Translator;
     //            $TRANSLATE->addTranslationFile('gettext', GLPI_ROOT.$newfile, 'glpi', $trytoload);
     //         }
     //         $tmp = xcache_set($key, serialize($TRANSLATE));
     //      } else {
     //         $TRANSLATE = new Zend\I18n\Translator\Translator;
     //         $TRANSLATE->addTranslationFile('gettext', GLPI_ROOT.$newfile, 'glpi', $trytoload);
     //      }
     // Load plugin dicts
     if (isset($_SESSION['glpi_plugins']) && is_array($_SESSION['glpi_plugins'])) {
         if (count($_SESSION['glpi_plugins'])) {
             foreach ($_SESSION['glpi_plugins'] as $plug) {
                 Plugin::loadLang($plug, $forcelang, $trytoload);
             }
         }
     }
     // TRANSLATION_MODE deleted : maybe find another solution ?
     // Debug display lang element with item
     //       if ($_SESSION['glpi_use_mode'] == Session::TRANSLATION_MODE && $CFG_GLPI["debug_lang"]) {
     //          foreach ($LANG as $module => $tab) {
     //             foreach ($tab as $num => $val) {
     //                $LANG[$module][$num] = "".$LANG[$module][$num].
     //                                       "/<span style='font-size:12px; color:red;'>$module/$num</span>";
     //             }
     //          }
     //       }
     $TRANSLATE->setLocale($trytoload);
     return $trytoload;
 }
Пример #16
0
/**
 * Include the good language dict.
 *
 * Get the default language from current user in $_SESSION["glpilanguage"].
 * And load the dict that correspond.
 * @param $forcelang Force to load a specific lang
 *
 * @return nothing (make an include)
**/
function loadLanguage($forcelang = '')
{
    global $LANG, $CFG_GLPI;
    $file = "";
    if (!isset($_SESSION["glpilanguage"])) {
        if (isset($CFG_GLPI["language"])) {
            // Default config in GLPI >= 0.72
            $_SESSION["glpilanguage"] = $CFG_GLPI["language"];
        } else {
            if (isset($CFG_GLPI["default_language"])) {
                // Default config in GLPI < 0.72 : keep it for upgrade process
                $_SESSION["glpilanguage"] = $CFG_GLPI["default_language"];
            }
        }
    }
    $trytoload = $_SESSION["glpilanguage"];
    // Force to load a specific lang
    if (!empty($forcelang)) {
        $trytoload = $forcelang;
    }
    // If not set try default lang file
    if (empty($trytoload)) {
        $trytoload = $CFG_GLPI["language"];
    }
    if (isset($CFG_GLPI["languages"][$trytoload][1])) {
        $file = "/locales/" . $CFG_GLPI["languages"][$trytoload][1];
    }
    if (empty($file) || !is_file(GLPI_ROOT . $file)) {
        $trytoload = 'en_GB';
        $file = "/locales/en_GB.php";
    }
    include GLPI_ROOT . $file;
    // Load plugin dicts
    if (isset($_SESSION['glpi_plugins']) && is_array($_SESSION['glpi_plugins'])) {
        if (count($_SESSION['glpi_plugins'])) {
            foreach ($_SESSION['glpi_plugins'] as $plug) {
                Plugin::loadLang($plug, $forcelang);
            }
        }
    }
    // Debug display lang element with item
    if ($_SESSION['glpi_use_mode'] == TRANSLATION_MODE && $CFG_GLPI["debug_lang"]) {
        foreach ($LANG as $module => $tab) {
            foreach ($tab as $num => $val) {
                $LANG[$module][$num] = "" . $LANG[$module][$num] . "/<span style='font-size:12px; color:red;'>{$module}/{$num}</span>";
            }
        }
    }
    return $trytoload;
}
Пример #17
0
 /**
  * Include the good language dict.
  *
  * Get the default language from current user in $_SESSION["glpilanguage"].
  * And load the dict that correspond.
  *
  * @param $forcelang Force to load a specific lang (default '')
  *
  * @return nothing (make an include)
  **/
 static function loadLanguage($forcelang = '')
 {
     global $LANG, $CFG_GLPI, $TRANSLATE;
     $file = "";
     if (!isset($_SESSION["glpilanguage"])) {
         if (isset($CFG_GLPI["language"])) {
             // Default config in GLPI >= 0.72
             $_SESSION["glpilanguage"] = $CFG_GLPI["language"];
         } else {
             if (isset($CFG_GLPI["default_language"])) {
                 // Default config in GLPI < 0.72 : keep it for upgrade process
                 $_SESSION["glpilanguage"] = $CFG_GLPI["default_language"];
             } else {
                 $_SESSION["glpilanguage"] = "en_GB";
             }
         }
     }
     $trytoload = $_SESSION["glpilanguage"];
     // Force to load a specific lang
     if (!empty($forcelang)) {
         $trytoload = $forcelang;
     }
     // If not set try default lang file
     if (empty($trytoload)) {
         $trytoload = $CFG_GLPI["language"];
     }
     if (isset($CFG_GLPI["languages"][$trytoload])) {
         $newfile = "/locales/" . $CFG_GLPI["languages"][$trytoload][1];
     }
     if (empty($newfile) || !is_file(GLPI_ROOT . $newfile)) {
         $newfile = "/locales/en_GB.mo";
     }
     if (isset($CFG_GLPI["languages"][$trytoload][5])) {
         $_SESSION['glpipluralnumber'] = $CFG_GLPI["languages"][$trytoload][5];
     }
     $TRANSLATE = new Zend\I18n\Translator\Translator();
     try {
         $cache = Zend\Cache\StorageFactory::factory(array('adapter' => 'apc'));
         $TRANSLATE->setCache($cache);
     } catch (Zend\Cache\Exception\ExtensionNotLoadedException $e) {
         // ignore when APC not available
         // toolbox::logDebug($e->getMessage());
     }
     $TRANSLATE->addTranslationFile('gettext', GLPI_ROOT . $newfile, 'glpi', $trytoload);
     // Load plugin dicts
     if (isset($_SESSION['glpi_plugins']) && is_array($_SESSION['glpi_plugins'])) {
         if (count($_SESSION['glpi_plugins'])) {
             foreach ($_SESSION['glpi_plugins'] as $plug) {
                 Plugin::loadLang($plug, $forcelang, $trytoload);
             }
         }
     }
     // TRANSLATION_MODE deleted : maybe find another solution ?
     // Debug display lang element with item
     //       if ($_SESSION['glpi_use_mode'] == Session::TRANSLATION_MODE && $CFG_GLPI["debug_lang"]) {
     //          foreach ($LANG as $module => $tab) {
     //             foreach ($tab as $num => $val) {
     //                $LANG[$module][$num] = "".$LANG[$module][$num].
     //                                       "/<span style='font-size:12px; color:red;'>$module/$num</span>";
     //             }
     //          }
     //       }
     $TRANSLATE->setLocale($trytoload);
     return $trytoload;
 }
Пример #18
0
 /**
  * Cron action on tasks : ExpiredTasks
  *
  * @param $task for log, if NULL display
  *
  **/
 static function cronResourcesTask($task = NULL)
 {
     global $DB, $CFG_GLPI;
     if (!$CFG_GLPI["use_mailing"]) {
         return 0;
     }
     $message = array();
     $cron_status = 0;
     $resourcetask = new self();
     $query_expired = $resourcetask->queryAlert();
     $querys = array(Alert::END => $query_expired);
     $task_infos = array();
     $task_messages = array();
     foreach ($querys as $type => $query) {
         $task_infos[$type] = array();
         foreach ($DB->request($query) as $data) {
             $entity = $data['entities_id'];
             $message = $data["name"] . ": " . Html::convDate($data["date_end"]) . "<br>\n";
             $task_infos[$type][$entity][] = $data;
             if (!isset($tasks_infos[$type][$entity])) {
                 $task_messages[$type][$entity] = __('Not finished tasks', 'resources') . "<br />";
             }
             $task_messages[$type][$entity] .= $message;
         }
     }
     foreach ($querys as $type => $query) {
         foreach ($task_infos[$type] as $entity => $tasks) {
             Plugin::loadLang('resources');
             if (NotificationEvent::raiseEvent("AlertExpiredTasks", new PluginResourcesResource(), array('entities_id' => $entity, 'tasks' => $tasks))) {
                 $message = $task_messages[$type][$entity];
                 $cron_status = 1;
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}\n");
                     $task->addVolume(1);
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  {$message}");
                 }
             } else {
                 if ($task) {
                     $task->log(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send tasks alert failed\n");
                 } else {
                     Session::addMessageAfterRedirect(Dropdown::getDropdownName("glpi_entities", $entity) . ":  Send tasks alert failed", false, ERROR);
                 }
             }
         }
     }
     return $cron_status;
 }
 function getTemplateByLanguage(NotificationTarget $target, $user_infos = array(), $event, $options = array())
 {
     global $LANG;
     $lang = array();
     $language = $user_infos['language'];
     if (isset($user_infos['additionnaloption'])) {
         $additionnaloption = $user_infos['additionnaloption'];
     } else {
         $additionnaloption = NotificationTarget::NO_OPTION;
     }
     if (!isset($this->templates_by_languages[$additionnaloption][$language])) {
         //Switch to the desired language
         $start = microtime(true);
         loadLanguage($language);
         //If event is raised by a plugin, load it in order to get the language file available
         if ($plug = isPluginItemType(get_class($target->obj))) {
             Plugin::loadLang(strtolower($plug['plugin']), $language);
         }
         //Get template's language data for in this language
         $options['additionnaloption'] = $additionnaloption;
         $data =& $target->getForTemplate($event, $options);
         //Restore default language
         loadLanguage();
         if ($plug = isPluginItemType(get_class($target->obj))) {
             Plugin::loadLang(strtolower($plug['plugin']));
         }
         if ($template_datas = $this->getByLanguage($language)) {
             //Template processing
             // Decode html chars to have clean text
             $template_datas['content_text'] = html_entity_decode_deep($template_datas['content_text']);
             $save_data = $data;
             $data = html_entity_decode_deep($data);
             $template_datas['subject'] = html_entity_decode_deep($template_datas['subject']);
             $this->signature = html_entity_decode_deep($this->signature);
             $lang['subject'] = $target->getSubjectPrefix($event) . self::process($template_datas['subject'], $data);
             $lang['content_html'] = '';
             //If no html content, then send only in text
             if (!empty($template_datas['content_html'])) {
                 // Encode in HTML all chars
                 $data_html = htmlentities_deep($data);
                 $data_html = nl2br_deep($data_html);
                 // Restore HTML tags
                 if (count($target->html_tags)) {
                     foreach ($target->html_tags as $tag) {
                         if (isset($save_data[$tag])) {
                             $data_html[$tag] = $save_data[$tag];
                         }
                     }
                 }
                 $signature_html = htmlentities_deep($this->signature);
                 $signature_html = nl2br_deep($signature_html);
                 $lang['content_html'] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n                        'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>" . "<html>\n                        <head>\n                         <META http-equiv='Content-Type' content='text/html; charset=utf-8'>\n                         <title>" . htmlentities_deep($lang['subject']) . "</title>\n                         <style type='text/css'>\n                           " . $this->fields['css'] . "\n                         </style>\n                        </head>\n                        <body>" . self::process($template_datas['content_html'], $data_html) . "<br><br>" . $signature_html . "</body></html>";
             }
             $lang['content_text'] = html_clean(self::process($template_datas['content_text'], $data) . "\n\n" . $this->signature);
             $this->templates_by_languages[$additionnaloption][$language] = $lang;
         }
     }
     return isset($this->templates_by_languages[$additionnaloption][$language]);
 }