/**
  * (non-PHPDoc)
  * @see \Icinga\Web\Form::onSuccess() For the method documentation.
  */
 public function onSuccess()
 {
     foreach ($this->objects as $object) {
         /** @var \Icinga\Module\Monitoring\Object\Host $object */
         $childHosts = (int) $this->getElement('child_hosts')->getValue();
         $allServices = $this->getElement('all_services')->isChecked();
         if ($childHosts === 0) {
             $hostDowntime = new ScheduleHostDowntimeCommand();
             if ($allServices === true) {
                 $hostDowntime->setForAllServices();
             }
         } else {
             $hostDowntime = new PropagateHostDowntimeCommand();
             if ($childHosts === 1) {
                 $hostDowntime->setTriggered();
             }
             if ($allServices === true) {
                 foreach ($object->services as $service) {
                     $serviceDowntime = new ScheduleServiceDowntimeCommand();
                     $serviceDowntime->setObject($service);
                     $this->scheduleDowntime($serviceDowntime, $this->request);
                 }
             }
         }
         $hostDowntime->setObject($object);
         $this->scheduleDowntime($hostDowntime, $this->request);
     }
     Notification::success($this->translatePlural('Scheduling host downtime..', 'Scheduling host downtimes..', count($this->objects)));
     return true;
 }
 /**
  * (non-PHPDoc)
  * @see \Icinga\Web\Form::onSuccess() For the method documentation.
  */
 public function onSuccess()
 {
     $end = $this->getValue('end')->getTimestamp();
     if ($end <= $this->getValue('start')->getTimestamp()) {
         $endElement = $this->_elements['end'];
         $endElement->setValue($endElement->getValue()->format($endElement->getFormat()));
         $endElement->addError($this->translate('The end time must be greater than the start time'));
         return false;
     }
     $now = new DateTime();
     if ($end <= $now->getTimestamp()) {
         $endElement = $this->_elements['end'];
         $endElement->setValue($endElement->getValue()->format($endElement->getFormat()));
         $endElement->addError($this->translate('A downtime must not be in the past'));
         return false;
     }
     foreach ($this->objects as $object) {
         /** @var \Icinga\Module\Monitoring\Object\Host $object */
         if (($childHostsEl = $this->getElement('child_hosts')) !== null) {
             $childHosts = (int) $childHostsEl->getValue();
         } else {
             $childHosts = 0;
         }
         $allServices = $this->getElement('all_services')->isChecked();
         if ($childHosts === 0) {
             $hostDowntime = new ScheduleHostDowntimeCommand();
             if ($allServices === true) {
                 $hostDowntime->setForAllServices();
             }
         } else {
             $hostDowntime = new PropagateHostDowntimeCommand();
             if ($childHosts === 1) {
                 $hostDowntime->setTriggered();
             }
             if ($allServices === true) {
                 foreach ($object->services as $service) {
                     $serviceDowntime = new ScheduleServiceDowntimeCommand();
                     $serviceDowntime->setObject($service);
                     $this->scheduleDowntime($serviceDowntime, $this->request);
                 }
             }
         }
         $hostDowntime->setObject($object);
         $this->scheduleDowntime($hostDowntime, $this->request);
     }
     Notification::success($this->translatePlural('Scheduling host downtime..', 'Scheduling host downtimes..', count($this->objects)));
     return true;
 }
 public function scheduleAction()
 {
     if (!$this->getRequest()->isPost()) {
         return $this->fail('downtime/schedule requires a POST request');
     }
     $hostname = $this->params->get('host');
     $host = $this->getHostObject($hostname);
     // Start is NOW if not set
     if (null === ($start = $this->params->get('start'))) {
         $start = time();
     } else {
         $start = ctype_digit($start) ? $start : strtotime($start);
     }
     // End is NOW + 15 minutes if not set
     if (null === ($end = $this->params->get('end'))) {
         $end = $start + 15 * 60;
     } else {
         $end = ctype_digit($end) ? $end : strtotime($end);
     }
     // Duration is 20 minutes if not set
     $duration = $this->params->get('duration', 20 * 60);
     $fixed = $this->params->get('fixed', false);
     $comment = $this->params->get('comment', 'System went down for reboot');
     $cmd = new ScheduleHostDowntimeCommand();
     $cmd->setObject($host)->setComment($comment)->setAuthor($hostname)->setStart($start)->setEnd($end)->setDuration($duration)->setFixed($fixed);
     $this->getTransport()->send($cmd);
     $cmd = new ScheduleHostDowntimeCommand();
     $cmd->setForAllServices()->setObject($host)->setComment($comment)->setAuthor($hostname)->setStart($start)->setEnd($end)->setDuration($duration)->setFixed($fixed);
     $this->getTransport()->send($cmd);
     $this->view->hostname = $hostname;
     $this->view->duration = $duration;
     $this->view->comment = $comment;
     $this->view->start = $start;
     $this->view->end = $end;
     if ($this->isJson) {
         $this->render('schedule-json');
     }
 }