Skip to content

Commit

Permalink
comments: Support automated removal
Browse files Browse the repository at this point in the history
  • Loading branch information
nilmerg committed Sep 18, 2024
1 parent 53e384a commit 8da8ce6
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 32 deletions.
66 changes: 39 additions & 27 deletions application/controllers/CommentsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Icinga\Module\Icingadb\Controllers;

use GuzzleHttp\Psr7\ServerRequest;
use Icinga\Module\Icingadb\Common\CommandActions;
use Icinga\Module\Icingadb\Common\Links;
use Icinga\Module\Icingadb\Forms\Command\Object\DeleteCommentForm;
use Icinga\Module\Icingadb\Model\Comment;
Expand All @@ -13,12 +14,16 @@
use Icinga\Module\Icingadb\Widget\ItemList\CommentList;
use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher;
use Icinga\Module\Icingadb\Widget\ShowMore;
use ipl\Orm\Model;
use ipl\Stdlib\Filter;
use ipl\Web\Control\LimitControl;
use ipl\Web\Control\SortControl;
use ipl\Web\Url;

class CommentsController extends Controller
{
use CommandActions;

public function indexAction()
{
$this->addTitleTab(t('Comments'));
Expand Down Expand Up @@ -103,34 +108,9 @@ public function indexAction()

public function deleteAction()
{
$this->assertIsGrantedOnCommandTargets('icingadb/command/comment/delete');
$this->setTitle(t('Remove Comments'));

$db = $this->getDb();

$comments = Comment::on($db)->with([
'host',
'host.state',
'service',
'service.host',
'service.host.state',
'service.state'
]);

$this->filter($comments);

$form = (new DeleteCommentForm())
->setObjects($comments)
->setRedirectUrl(Links::comments()->getAbsoluteUrl())
->on(DeleteCommentForm::ON_SUCCESS, function ($form) {
// This forces the column to reload nearly instantly after the redirect
// and ensures the effect of the command is visible to the user asap
$this->getResponse()->setAutoRefreshInterval(1);

$this->redirectNow($form->getRedirectUrl());
})
->handleRequest(ServerRequest::fromGlobals());

$this->addContent($form);
$this->handleCommandForm(DeleteCommentForm::class);
}

public function detailsAction()
Expand Down Expand Up @@ -194,4 +174,36 @@ public function searchEditorAction()
$this->getDocument()->add($editor);
$this->setTitle(t('Adjust Filter'));
}

protected function getCommandTargetsUrl(): Url
{
return Url::fromPath('__CLOSE__');
}

protected function fetchCommandTargets()
{
$comments = Comment::on($this->getDb())->with([
'host',
'host.state',
'service',
'service.host',
'service.host.state',
'service.state'
]);

$this->filter($comments);

return $comments;
}

public function isGrantedOn(string $permission, Model $object): bool
{
return parent::isGrantedOn($permission, $object->{$object->object_type});
}

public function isGrantedOnType(string $permission, string $type, Filter\Rule $filter, bool $cache = true): bool
{
return parent::isGrantedOnType($permission, 'host', $filter, $cache)
|| parent::isGrantedOnType($permission, 'service', $filter, $cache);
}
}
4 changes: 0 additions & 4 deletions application/forms/Command/Object/DeleteCommentForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,12 @@
use Icinga\Module\Icingadb\Forms\Command\CommandForm;
use Icinga\Web\Notification;
use ipl\Orm\Model;
use ipl\Web\Common\RedirectOption;
use ipl\Web\Widget\Icon;
use Iterator;
use Traversable;

class DeleteCommentForm extends CommandForm
{
use RedirectOption;

protected $defaultAttributes = ['class' => 'inline'];

public function __construct()
Expand All @@ -38,7 +35,6 @@ public function __construct()

protected function assembleElements()
{
$this->addElement($this->createRedirectOption());
}

protected function assembleSubmitButton()
Expand Down
10 changes: 10 additions & 0 deletions doc/09-Automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,16 @@ Please have a look at the [Monitoring Plugins Development Guidelines](https://ww
| expire | n | BoolEnum | - |
| expire_time | y | DateTime | expire |

### Delete Comments

#### Routes

* icingadb/comments/delete

#### Options

None.

### Check Now

#### Routes
Expand Down
1 change: 0 additions & 1 deletion library/Icingadb/Widget/Detail/CommentDetail.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ protected function createRemoveCommentForm()

return (new DeleteCommentForm())
->setObjects([$this->comment])
->populate(['redirect' => '__BACK__'])
->setAction($action->getAbsoluteUrl());
}

Expand Down

0 comments on commit 8da8ce6

Please sign in to comment.