diff --git a/modules/monitoring/application/controllers/CommentController.php b/modules/monitoring/application/controllers/CommentController.php index b5b374c12..c3fcd18f8 100644 --- a/modules/monitoring/application/controllers/CommentController.php +++ b/modules/monitoring/application/controllers/CommentController.php @@ -64,25 +64,26 @@ class Monitoring_CommentController extends Controller */ public function showAction() { + $listCommentsLink = Url::fromPath('monitoring/list/comments') + ->setQueryString('comment_type=(comment|ack)'); + $this->view->comment = $this->comment; if ($this->hasPermission('monitoring/command/comment/delete')) { $this->view->delCommentForm = $this->createDelCommentForm(); + $this->view->delCommentForm->populate( + array( + 'redirect' => $listCommentsLink, + 'comment_id' => $this->comment->id, + 'comment_is_service' => isset($this->comment->service_description) + ) + ); } } - /** - * Receive DeleteCommentCommandForm post from other controller - */ - public function removeAction() - { - $this->assertHttpMethod('POST'); - $this->createDelCommentForm(); - } - /** * Create a command form to delete a single comment * - * @return DeleteCommentCommandForm + * @return DeleteCommentsCommandForm */ private function createDelCommentForm() { @@ -93,12 +94,6 @@ class Monitoring_CommentController extends Controller Url::fromPath('monitoring/comment/show') ->setParam('comment_id', $this->comment->id) ); - $delCommentForm->populate( - array( - 'redirect' => Url::fromPath('monitoring/list/comments'), - 'comment_id' => $this->comment->id - ) - ); $delCommentForm->handleRequest(); return $delCommentForm; } diff --git a/modules/monitoring/application/controllers/CommentsController.php b/modules/monitoring/application/controllers/CommentsController.php index 2e8656085..e9a885dbe 100644 --- a/modules/monitoring/application/controllers/CommentsController.php +++ b/modules/monitoring/application/controllers/CommentsController.php @@ -2,9 +2,8 @@ /* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */ use Icinga\Module\Monitoring\Controller; -use Icinga\Module\Monitoring\Forms\Command\Object\DeleteCommentCommandForm; +use Icinga\Module\Monitoring\Forms\Command\Object\DeleteCommentsCommandForm; use Icinga\Web\Url; -use Icinga\Web\Widget\Tabextension\DashboardAction; use Icinga\Data\Filter\Filter; /** @@ -71,28 +70,31 @@ class Monitoring_CommentsController extends Controller $this->view->comments = $this->comments; $this->view->listAllLink = Url::fromPath('monitoring/list/comments') ->setQueryString($this->filter->toQueryString()); - $this->view->removeAllLink = Url::fromPath('monitoring/comments/remove-all') + $this->view->removeAllLink = Url::fromPath('monitoring/comments/delete-all') ->setParams($this->params); } /** * Display the form for removing a comment list */ - public function removeAllAction() + public function deleteAllAction() { $this->assertPermission('monitoring/command/comment/delete'); - $this->view->comments = $this->comments; - $this->view->listAllLink = Url::fromPath('monitoring/list/comments') - ->setQueryString($this->filter->toQueryString()); - $delCommentForm = new DeleteCommentCommandForm(); + + $listCommentsLink = Url::fromPath('monitoring/list/comments') + ->setQueryString('comment_type=(comment|ack)'); + $delCommentForm = new DeleteCommentsCommandForm(); $delCommentForm->setTitle($this->view->translate('Remove all Comments')); $delCommentForm->addDescription(sprintf( $this->translate('Confirm removal of %d comments.'), count($this->comments) )); - $delCommentForm->setObjects($this->comments) - ->setRedirectUrl(Url::fromPath('monitoring/list/downtimes')) - ->handleRequest(); + $delCommentForm->setComments($this->comments) + ->setRedirectUrl($listCommentsLink) + ->handleRequest(); $this->view->delCommentForm = $delCommentForm; + $this->view->comments = $this->comments; + $this->view->listAllLink = Url::fromPath('monitoring/list/comments') + ->setQueryString($this->filter->toQueryString()); } } diff --git a/modules/monitoring/application/controllers/DowntimeController.php b/modules/monitoring/application/controllers/DowntimeController.php index 20eebc6ca..c06e0311d 100644 --- a/modules/monitoring/application/controllers/DowntimeController.php +++ b/modules/monitoring/application/controllers/DowntimeController.php @@ -5,6 +5,7 @@ use Icinga\Module\Monitoring\Controller; use Icinga\Module\Monitoring\Object\Service; use Icinga\Module\Monitoring\Object\Host; use Icinga\Module\Monitoring\Forms\Command\Object\DeleteDowntimeCommandForm; +use Icinga\Module\Monitoring\Command\Object\DeleteDowntimeCommand; use Icinga\Web\Url; use Icinga\Web\Widget\Tabextension\DashboardAction; @@ -81,7 +82,7 @@ class Monitoring_DowntimeController extends Controller 'label' => $this->translate('Downtime'), 'url' =>'monitoring/downtimes/show' ) - )->activate('downtime')->extend(new DashboardAction()); + )->activate('downtime')->extend(new DashboardAction()); } /** @@ -91,7 +92,7 @@ class Monitoring_DowntimeController extends Controller { $this->view->downtime = $this->downtime; $this->view->isService = $this->isService; - $this->view->stateName = isset($this->downtime->service_description) ? + $this->view->stateName = isset($this->downtime->service_description) ? Service::getStateText($this->downtime->service_state) : Host::getStateText($this->downtime->host_state); $this->view->listAllLink = Url::fromPath('monitoring/list/downtimes'); @@ -102,6 +103,13 @@ class Monitoring_DowntimeController extends Controller ->setParam('service', $this->downtime->service_description); if ($this->hasPermission('monitoring/command/downtime/delete')) { $this->view->delDowntimeForm = $this->createDelDowntimeForm(); + $this->view->delDowntimeForm->populate( + array( + 'redirect' => Url::fromPath('monitoring/list/downtimes'), + 'downtime_id' => $this->downtime->id, + 'downtime_is_service' => $this->isService + ) + ); } } @@ -122,18 +130,11 @@ class Monitoring_DowntimeController extends Controller private function createDelDowntimeForm() { $this->assertPermission('monitoring/command/downtime/delete'); - $delDowntimeForm = new DeleteDowntimeCommandForm(); $delDowntimeForm->setAction( Url::fromPath('monitoring/downtime/show') ->setParam('downtime_id', $this->downtime->id) ); - $delDowntimeForm->populate( - array( - 'redirect' => Url::fromPath('monitoring/list/downtimes'), - 'downtime_id' => $this->downtime->id - ) - ); $delDowntimeForm->handleRequest(); return $delDowntimeForm; } diff --git a/modules/monitoring/application/controllers/DowntimesController.php b/modules/monitoring/application/controllers/DowntimesController.php index f6dc53cb3..49424ed3a 100644 --- a/modules/monitoring/application/controllers/DowntimesController.php +++ b/modules/monitoring/application/controllers/DowntimesController.php @@ -104,14 +104,14 @@ class Monitoring_DowntimesController extends Controller $this->view->downtimes = $this->downtimes; $this->view->listAllLink = Url::fromPath('monitoring/list/downtimes') ->setQueryString($this->filter->toQueryString()); - $this->view->removeAllLink = Url::fromPath('monitoring/downtimes/remove-all') + $this->view->removeAllLink = Url::fromPath('monitoring/downtimes/delete-all') ->setParams($this->params); } /** * Display the form for removing a downtime list */ - public function removeAllAction() + public function deleteAllAction() { $this->assertPermission('monitoring/command/downtime/delete'); $this->view->downtimes = $this->downtimes; @@ -123,9 +123,8 @@ class Monitoring_DowntimesController extends Controller $this->translate('Confirm removal of %d downtimes.'), count($this->downtimes) )); - $delDowntimeForm->setDowntimes($this->downtimes) - ->setRedirectUrl(Url::fromPath('monitoring/list/downtimes')) - ->handleRequest(); + $delDowntimeForm->setRedirectUrl(Url::fromPath('monitoring/list/downtimes')); + $delDowntimeForm->setDowntimes($this->downtimes)->handleRequest(); $this->view->delDowntimeForm = $delDowntimeForm; } } \ No newline at end of file diff --git a/modules/monitoring/application/controllers/ListController.php b/modules/monitoring/application/controllers/ListController.php index e6147c31b..518bd6528 100644 --- a/modules/monitoring/application/controllers/ListController.php +++ b/modules/monitoring/application/controllers/ListController.php @@ -295,6 +295,7 @@ class Monitoring_ListController extends Controller if ($this->Auth()->hasPermission('monitoring/command/downtime/delete')) { $this->view->delDowntimeForm = new DeleteDowntimeCommandForm(); + $this->view->delDowntimeForm->handleRequest(); } } @@ -502,6 +503,7 @@ class Monitoring_ListController extends Controller if ($this->Auth()->hasPermission('monitoring/command/comment/delete')) { $this->view->delCommentForm = new DeleteCommentCommandForm(); + $this->view->delCommentForm->handleRequest(); } } diff --git a/modules/monitoring/application/forms/Command/Object/DeleteCommentCommandForm.php b/modules/monitoring/application/forms/Command/Object/DeleteCommentCommandForm.php index 93b928b86..1c8144475 100644 --- a/modules/monitoring/application/forms/Command/Object/DeleteCommentCommandForm.php +++ b/modules/monitoring/application/forms/Command/Object/DeleteCommentCommandForm.php @@ -4,12 +4,13 @@ namespace Icinga\Module\Monitoring\Forms\Command\Object; use Icinga\Module\Monitoring\Command\Object\DeleteCommentCommand; +use Icinga\Module\Monitoring\Forms\Command\CommandForm; use Icinga\Web\Notification; /** * Form for deleting host or service comments */ -class DeleteCommentCommandForm extends ObjectsCommandForm +class DeleteCommentCommandForm extends CommandForm { /** * (non-PHPDoc) @@ -26,23 +27,34 @@ class DeleteCommentCommandForm extends ObjectsCommandForm */ public function createElements(array $formData = array()) { - $this->addElements(array( + $this->addElements( array( - 'hidden', - 'comment_id', array( - 'required' => true, - 'decorators' => array('ViewHelper') - ) - ), - array( - 'hidden', - 'redirect', + 'hidden', + 'comment_id', + array( + 'required' => true, + 'validators' => array('NotEmpty'), + 'decorators' => array('ViewHelper') + ) + ), array( - 'decorators' => array('ViewHelper') + 'hidden', + 'comment_is_service', + array( + 'filters' => array('Boolean'), + 'decorators' => array('ViewHelper') + ) + ), + array( + 'hidden', + 'redirect', + array( + 'decorators' => array('ViewHelper') + ) ) ) - )); + ); return $this; } @@ -74,14 +86,10 @@ class DeleteCommentCommandForm extends ObjectsCommandForm */ public function onSuccess() { - foreach ($this->objects as $object) { - /** @var \Icinga\Module\Monitoring\Object\MonitoredObject $object */ - $delComment = new DeleteCommentCommand(); - $delComment - ->setObject($object) - ->setCommentId($this->getElement('comment_id')->getValue()); - $this->getTransport($this->request)->send($delComment); - } + $cmd = new DeleteCommentCommand(); + $cmd->setIsService($this->getElement('comment_is_service')->getValue()) + ->setCommentId($this->getElement('comment_id')->getValue()); + $this->getTransport($this->request)->send($cmd); $redirect = $this->getElement('redirect')->getValue(); if (! empty($redirect)) { $this->setRedirectUrl($redirect); diff --git a/modules/monitoring/application/forms/Command/Object/DeleteCommentsCommandForm.php b/modules/monitoring/application/forms/Command/Object/DeleteCommentsCommandForm.php new file mode 100644 index 000000000..805002922 --- /dev/null +++ b/modules/monitoring/application/forms/Command/Object/DeleteCommentsCommandForm.php @@ -0,0 +1,88 @@ +setAttrib('class', 'inline'); + } + + /** + * (non-PHPDoc) + * @see \Icinga\Web\Form::createElements() For the method documentation. + */ + public function createElements(array $formData = array()) + { + $this->addElements(array( + array( + 'hidden', + 'redirect', + array('decorators' => array('ViewHelper')) + ) + )); + return $this; + } + + /** + * (non-PHPDoc) + * @see \Icinga\Web\Form::getSubmitLabel() For the method documentation. + */ + public function getSubmitLabel() + { + return $this->translatePlural('Remove', 'Remove All', count($this->downtimes)); + } + + /** + * (non-PHPDoc) + * @see \Icinga\Web\Form::onSuccess() For the method documentation. + */ + public function onSuccess() + { + foreach ($this->comments as $comment) { + $cmd = new DeleteCommentCommand(); + $cmd->setCommentId($comment->id) + ->setIsService(isset($comment->service_description)); + $this->getTransport($this->request)->send($cmd); + } + $redirect = $this->getElement('redirect')->getValue(); + if (! empty($redirect)) { + $this->setRedirectUrl($redirect); + } + Notification::success($this->translate('Deleting comment..')); + return true; + } + + /** + * Set the comments to be deleted upon success + * + * @param array $comments + * + * @return this fluent interface + */ + public function setComments(array $comments) + { + $this->comments = $comments; + return $this; + } +} diff --git a/modules/monitoring/application/forms/Command/Object/DeleteDowntimeCommandForm.php b/modules/monitoring/application/forms/Command/Object/DeleteDowntimeCommandForm.php index 070451e7f..31ec778fa 100644 --- a/modules/monitoring/application/forms/Command/Object/DeleteDowntimeCommandForm.php +++ b/modules/monitoring/application/forms/Command/Object/DeleteDowntimeCommandForm.php @@ -21,7 +21,7 @@ class DeleteDowntimeCommandForm extends CommandForm $this->setAttrib('class', 'inline'); } - /** + /** * (non-PHPDoc) * @see \Icinga\Web\Form::createElements() For the method documentation. */ @@ -33,6 +33,16 @@ class DeleteDowntimeCommandForm extends CommandForm 'hidden', 'downtime_id', array( + 'required' => true, + 'validators' => array('NotEmpty'), + 'decorators' => array('ViewHelper') + ) + ), + array( + 'hidden', + 'downtime_is_service', + array( + 'filters' => array('Boolean'), 'decorators' => array('ViewHelper') ) ), @@ -76,20 +86,11 @@ class DeleteDowntimeCommandForm extends CommandForm */ public function onSuccess() { - $id = $this->getElement('downtime_id')->getValue(); - - // Presence of downtime id, only delete this specific downtime - $firstDowntime = $this->downtimes[0]; - - $delDowntime = new DeleteDowntimeCommand(); - $delDowntime->setDowntimeId($id); - $delDowntime->setDowntimeType( - isset($firstDowntime->service_description) ? - DeleteDowntimeCommand::DOWNTIME_TYPE_SERVICE : - DeleteDowntimeCommand::DOWNTIME_TYPE_HOST - ); - $this->getTransport($this->request)->send($delDowntime); - + $cmd = new DeleteDowntimeCommand(); + $cmd->setDowntimeId($this->getElement('downtime_id')->getValue()); + $cmd->setIsService($this->getElement('downtime_is_service')->getValue()); + $this->getTransport($this->request)->send($cmd); + $redirect = $this->getElement('redirect')->getValue(); if (! empty($redirect)) { $this->setRedirectUrl($redirect); diff --git a/modules/monitoring/application/forms/Command/Object/DeleteDowntimesCommandForm.php b/modules/monitoring/application/forms/Command/Object/DeleteDowntimesCommandForm.php index f11ac1128..4a19cac96 100644 --- a/modules/monitoring/application/forms/Command/Object/DeleteDowntimesCommandForm.php +++ b/modules/monitoring/application/forms/Command/Object/DeleteDowntimesCommandForm.php @@ -38,9 +38,7 @@ class DeleteDowntimesCommandForm extends CommandForm array( 'hidden', 'redirect', - array( - 'decorators' => array('ViewHelper') - ) + array('decorators' => array('ViewHelper')) ) )); return $this; @@ -64,11 +62,7 @@ class DeleteDowntimesCommandForm extends CommandForm foreach ($this->downtimes as $downtime) { $delDowntime = new DeleteDowntimeCommand(); $delDowntime->setDowntimeId($downtime->id); - $delDowntime->setDowntimeType( - isset($downtime->service_description) ? - DeleteDowntimeCommand::DOWNTIME_TYPE_SERVICE : - DeleteDowntimeCommand::DOWNTIME_TYPE_HOST - ); + $delDowntime->setIsService(isset($downtime->service_description)); $this->getTransport($this->request)->send($delDowntime); } $redirect = $this->getElement('redirect')->getValue(); @@ -86,7 +80,7 @@ class DeleteDowntimesCommandForm extends CommandForm * * @return $this */ - public function setDowntimes($downtimes) + public function setDowntimes(array $downtimes) { $this->downtimes = $downtimes; return $this; diff --git a/modules/monitoring/application/views/scripts/comment/show.phtml b/modules/monitoring/application/views/scripts/comment/show.phtml index 88a25a57b..8216a9c70 100644 --- a/modules/monitoring/application/views/scripts/comment/show.phtml +++ b/modules/monitoring/application/views/scripts/comment/show.phtml @@ -16,13 +16,14 @@ comment->objecttype === 'service'): ?>