/** * Raise a notification event event * * @param $event the event raised for the itemtype * @param $item the object which raised the event * @param $options array options used * @param $label used for debugEvent() **/ static function raiseEvent($event, $item, $options = array(), $label = '') { global $CFG_GLPI; //If notifications are enabled in GLPI's configuration if ($CFG_GLPI["use_mailing"]) { $email_processed = array(); $email_notprocessed = array(); //Get template's informations $template = new NotificationTemplate(); $notificationtarget = NotificationTarget::getInstance($item, $event, $options); $entity = $notificationtarget->getEntity(); //Foreach notification foreach (Notification::getNotificationsByEventAndType($event, $item->getType(), $entity) as $data) { $targets = getAllDatasFromTable('glpi_notificationtargets', 'notifications_id = ' . $data['id']); $notificationtarget->clearAddressesList(); //Process more infos (for example for tickets) $notificationtarget->addAdditionnalInfosForTarget(); $template->getFromDB($data['notificationtemplates_id']); $template->resetComputedTemplates(); //Set notification's signature (the one which corresponds to the entity) $template->setSignature(Notification::getMailingSignature($entity)); //Foreach notification targets foreach ($targets as $target) { //Get all users affected by this notification $notificationtarget->getAddressesByTarget($target, $options); foreach ($notificationtarget->getTargets() as $user_email => $users_infos) { if ($label || $notificationtarget->validateSendTo($users_infos)) { //If the user have not yet been notified if (!isset($email_processed[$users_infos['language']][$users_infos['email']])) { //If ther user's language is the same as the template's one if (isset($email_notprocessed[$users_infos['language']][$users_infos['email']])) { unset($email_notprocessed[$users_infos['language']][$users_infos['email']]); } if ($template->getTemplateByLanguage($notificationtarget, $users_infos, $event, $options)) { //Send notification to the user if ($label == '') { Notification::send($template->getDataToSend($notificationtarget, $users_infos, $options)); } else { $notificationtarget->getFromDB($target['id']); echo "<tr class='tab_bg_2'><td>" . $label . "</td>"; echo "<td>" . $notificationtarget->getNameID() . "</td>"; echo "<td>" . $template->getName() . " (" . $users_infos['language'] . ")</td>"; echo "<td>" . $users_infos['email'] . "</td>"; echo "</tr>"; } $email_processed[$users_infos['language']][$users_infos['email']] = $users_infos; } else { $email_notprocessed[$users_infos['language']][$users_infos['email']] = $users_infos; } } } } } } } unset($email_processed); unset($email_notprocessed); $template = null; return true; }
/** * Display debug information for current object * NotificationTemplateTranslation => translation preview * * @since version 0.84 **/ function showDebug() { $template = new NotificationTemplate(); if (!$template->getFromDB($this->fields['notificationtemplates_id'])) { return; } $itemtype = $template->getField('itemtype'); if (!($item = getItemForItemtype($itemtype))) { return; } echo "<div class='spaced'>"; echo "<table class='tab_cadre_fixe'>"; echo "<tr><th colspan='2'>" . __('Preview') . "</th></tr>"; $oktypes = array('CartridgeItem', 'Change', 'ConsumableItem', 'Contract', 'Crontask', 'Problem', 'Project', 'Ticket', 'User'); if (!in_array($itemtype, $oktypes)) { // this itemtype doesn't work, need to be fixed echo "<tr class='tab_bg_2 center'><td>" . NOT_AVAILABLE . "</td>"; echo "</table></div>"; return; } // Criteria Form $key = getForeignKeyFieldForItemType($item->getType()); $id = Session::getSavedOption(__CLASS__, $key, 0); $event = Session::getSavedOption(__CLASS__, $key . '_event', ''); echo "<tr class='tab_bg_2'><td>" . $item->getTypeName(1) . " "; $item->dropdown(array('value' => $id, 'on_change' => 'reloadTab("' . $key . '="+this.value)')); echo "</td><td>" . NotificationEvent::getTypeName(1) . " "; NotificationEvent::dropdownEvents($item->getType(), array('value' => $event, 'on_change' => 'reloadTab("' . $key . '_event="+this.value)')); echo "</td>"; // Preview if ($event && $item->getFromDB($id)) { $options = array('_debug' => true); // TODO Awfull Hack waiting for https://forge.indepnet.net/issues/3439 $multi = array('alert', 'alertnotclosed', 'end', 'notice', 'periodicity', 'periodicitynotice'); if (in_array($event, $multi)) { // Won't work for Cardridge and Consumable $options['entities_id'] = $item->getEntityID(); $options['items'] = array($item->getID() => $item->fields); } $target = NotificationTarget::getInstance($item, $event, $options); $infos = array('language' => $_SESSION['glpilanguage'], 'additionnaloption' => array('usertype' => NotificationTarget::GLPI_USER)); $template->resetComputedTemplates(); $template->setSignature(Notification::getMailingSignature($_SESSION['glpiactive_entity'])); if ($tid = $template->getTemplateByLanguage($target, $infos, $event, $options)) { $data = $template->templates_by_languages[$tid]; echo "<tr><th colspan='2'>" . __('Subject') . "</th></tr>"; echo "<tr class='tab_bg_2 b'><td colspan='2'>" . $data['subject'] . "</td></tr>"; echo "<tr><th>" . __('Email text body') . "</th>"; echo "<th>" . __('Email HTML body') . "</th></tr>"; echo "<tr class='tab_bg_2'><td>" . nl2br($data['content_text']) . "</td>"; echo "<td>" . $data['content_html'] . "</td></tr>"; } } echo "</table></div>"; }
function showForm($ID, $options) { global $DB, $LANG, $CFG_GLPI; if (!haveRight("config", "w")) { return false; } if (empty($ID)) { if ($this->getEmpty()) { $notificationtemplates_id = $options['notificationtemplates_id']; } } else { if ($this->getFromDB($ID)) { $notificationtemplates_id = $this->getField('notificationtemplates_id'); } } $canedit = haveRight("config", "w"); $template = new NotificationTemplate(); $template->getFromDB($notificationtemplates_id); initEditorSystem('content_html'); $this->showTabs($options); $this->showFormHeader($options); echo "<tr class='tab_bg_1'>"; echo "<td>" . $template->getTypeName() . "</td>"; echo "<td colspan='2'><a href='" . getItemTypeFormURL('NotificationTemplate') . "?id=" . $notificationtemplates_id . "'>" . $template->getField('name') . "</a>"; echo "</td><td><a href='#' onClick=\"var w=window.open('" . $CFG_GLPI["root_doc"] . "/front/popup.php?popup=list_notificationtags&sub_type=" . $template->getField('itemtype') . "' ,\n 'glpipopup', 'height=400, width=1000, top=100, left=100," . " scrollbars=yes' );w.focus();\">" . $LANG['mailing'][138] . "</a></td></tr>"; echo "<tr class='tab_bg_1'>"; echo "<td>" . $LANG['setup'][41] . " :</td><td colspan='3'>"; //Get all used languages $used = self::getAllUsedLanguages($notificationtemplates_id); if ($ID > 0) { if (isset($used[$this->getField('language')])) { unset($used[$this->getField('language')]); } } Dropdown::showLanguages("language", array('display_none' => true, 'value' => $this->fields['language'], 'used' => $used)); echo "</td></tr>"; echo "<tr class='tab_bg_1'><td>" . $LANG['knowbase'][14] . " :</td>"; echo "<td colspan='3'>"; echo "<input type='text' name='subject'size='100' value='" . $this->fields["subject"] . "'>"; echo "</td></tr>"; echo "<tr class='tab_bg_1'><td>"; echo $LANG['mailing'][115] . ' ' . $LANG['mailing'][117] . " :<br>(" . $LANG['mailing'][128] . ")"; echo "</td><td colspan='3'>"; echo "<textarea cols='100' rows='15' name='content_text' >" . $this->fields["content_text"]; echo "</textarea></td></tr>"; echo "<tr class='tab_bg_1'>"; echo "<td>" . $LANG['mailing'][115] . ' ' . $LANG['mailing'][116] . " :</td><td colspan='3'>"; echo "<textarea cols='100' rows='15' name='content_html'>" . $this->fields["content_html"]; echo "</textarea>"; echo "<input type='hidden' name='notificationtemplates_id' value='" . $template->getField('id') . "'>"; echo "</td></tr>"; $this->showFormButtons($options); $this->addDivForTabs(); return true; }
*/ // ---------------------------------------------------------------------- // Original Author of file: // Purpose of file: // ---------------------------------------------------------------------- define('GLPI_ROOT', '..'); include GLPI_ROOT . "/inc/includes.php"; header("Content-Type: text/html; charset=UTF-8"); header_nocache(); checkRight("config", 'r'); if (isset($_POST['id']) && $_POST['id'] > 0) { if (!isset($_REQUEST['glpi_tab'])) { exit; } $template = new NotificationTemplate(); $template->getFromDB($_POST['id']); switch ($_REQUEST['glpi_tab']) { case -1: case 1: $templatelanguage = new NotificationTemplateTranslation(); $templatelanguage->showSummary($template); break; case 12: Log::showForItem($template); break; default: if (!Plugin::displayAction($template, $_REQUEST['glpi_tab'])) { } } } ajaxFooter();