/** * {@inheritdoc} */ public function render() { $repo = new AnnouncementIniRepository(); $etag = $repo->getEtag(); $cookie = new AnnouncementCookie(); if ($cookie->getEtag() !== $etag) { $cookie->setEtag($etag); $cookie->setNextActive($repo->findNextActive()); Icinga::app()->getResponse()->setCookie($cookie); } $acked = array(); foreach ($cookie->getAcknowledged() as $hash) { $acked[] = Filter::expression('hash', '!=', $hash); } $acked = Filter::matchAll($acked); $announcements = $repo->findActive(); $announcements->applyFilter($acked); if ($announcements->hasResult()) { $html = '<ul role="alert" id="announcements">'; foreach ($announcements as $announcement) { $ackForm = new AcknowledgeAnnouncementForm(); $ackForm->populate(array('hash' => $announcement->hash)); $html .= '<li><div>' . $this->view()->escape($announcement->message) . '</div>' . $ackForm . '</li>'; } $html .= '</ul>'; return $html; } // Force container update on XHR return '<div style="display: none;"></div>'; }
/** * {@inheritdoc} */ public function onSuccess() { $cookie = new AnnouncementCookie(); $repo = new AnnouncementIniRepository(); $query = $repo->findActive(); $filter = array(); foreach ($cookie->getAcknowledged() as $hash) { $filter[] = Filter::expression('hash', '=', $hash); } $query->addFilter(Filter::matchAny($filter)); $acknowledged = array(); foreach ($query as $row) { $acknowledged[] = $row->hash; } $acknowledged[] = $this->getElement('hash')->getValue(); $cookie->setAcknowledged($acknowledged); $this->getResponse()->setCookie($cookie); return true; }