* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2 * @author Icinga Development Team */ // {{{ICINGA_LICENSE_HEADER}}} namespace Monitoring\Form\Command; use Icinga\Web\Form\Element\DateTimePicker; use \DateTime as PhpDateTime; use \DateInterval; use Icinga\Web\Form\Element\Note; use Icinga\Protocol\Commandpipe\Acknowledgement; use Icinga\Protocol\Commandpipe\Comment; /** * Form for acknowledge commands */ class AcknowledgeForm extends CommandForm { /** * Initialize form */ public function init() { $this->setName('AcknowledgeForm'); } /** * Interface method to build the form * @see CommandForm::create */ protected function create() { $this->addElement($this->createAuthorField()); $this->addElement( 'textarea', 'comment', array( 'label' => t('Comment'), 'rows' => 4, 'required' => true ) ); $this->addElement( 'checkbox', 'persistent', array( 'label' => t('Persistent comment'), 'value' => false ) ); $expireNote = new Note( array( 'name' => 'expirenote', 'value' => t('If the acknowledgement should expire, check the box and enter an expiration timestamp.') ) ); $expireCheck = $this->createElement( 'checkbox', 'expire', array( 'label' => t('Use expire time') ) ); if ($this->getRequest()->getPost('expire', '0') === '1') { $now = new PhpDateTime(); $interval = new DateInterval('PT1H'); // Add 3600 seconds $now->add($interval); $expireTime = new DateTimePicker( array( 'name' => 'expiretime', 'label' => t('Expire time'), 'value' => $now->format($this->getDateFormat()) ) ); $this->addElements(array($expireNote, $expireCheck, $expireTime)); } else { $this->addElements(array($expireNote, $expireCheck)); } $this->enableAutoSubmit(array('expire')); $this->addDisplayGroup( array( 'expirenote', 'expire', 'expiretime' ), 'expire_group', array( 'legend' => t('Expire acknowledgement') ) ); $this->addElement( 'checkbox', 'sticky', array( 'label' => t('Sticky acknowledgement'), 'value' => false ) ); $this->addElement( 'checkbox', 'notify', array( 'label' => t('Send notification'), 'value' => false ) ); $this->setSubmitLabel(t('Acknowledge problem')); parent::create(); } /** * Add validator for dependent fields * @see Form::preValidation * @param array $data */ protected function preValidation(array $data) { if (isset($data['expire']) && intval($data['expire']) === 1) { $expireTime = $this->getElement('expiretime'); $expireTime->setRequired(true); $expireTime->addValidator($this->createDateTimeValidator(), true); } } public function getAcknowledgement() { $expireTime = -1; if ($this->getValue('expire')) { $time = new PhpDateTime($this->getValue('expiretime')); $expireTime = $time->getTimestamp(); } return new Acknowledgement( new Comment( $this->getAuthorName(), $this->getValue('comment'), $this->getValue('persistent') ), $this->getValue('notify'), $expireTime, $this->getValue('sticky') ); } }