From c0b0f82daa1d025577ece4b59581f3883bfb6695 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 14 Mar 2025 16:11:43 +0100 Subject: [PATCH 01/35] Introduce class `RedundancyGroupRenderer` --- .../Icingadb/View/RedundancyGroupRenderer.php | 91 +++++++++++++++++++ .../redundancy-group.less} | 6 +- 2 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 library/Icingadb/View/RedundancyGroupRenderer.php rename public/css/{list/redundancy-group-list-item.less => item/redundancy-group.less} (56%) diff --git a/library/Icingadb/View/RedundancyGroupRenderer.php b/library/Icingadb/View/RedundancyGroupRenderer.php new file mode 100644 index 00000000..8bb6ff5c --- /dev/null +++ b/library/Icingadb/View/RedundancyGroupRenderer.php @@ -0,0 +1,91 @@ + */ +class RedundancyGroupRenderer implements ItemRenderer +{ + use Translation; + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue('redundancy-group'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $ballSize = StateBall::SIZE_LARGE; + if ($layout === 'minimal' || $layout === 'header') { + $ballSize = StateBall::SIZE_BIG; + } + + $stateBall = new StateBall($item->state->getStateText(), $ballSize); + $stateBall->add($item->state->getIcon()); + + $visual->addHtml($stateBall); + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $caption->addHtml(new DependencyNodeStatistics($item->summary)); + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + if ($layout === 'header') { + $subject = new HtmlElement( + 'span', + Attributes::create(['class' => 'subject']), + Text::create($item->display_name) + ); + } else { + $subject = new Link( + $item->display_name, + Url::fromPath('icingadb/redundancygroup', ['id' => bin2hex($item->id)]), + ['class' => 'subject'] + ); + } + + if ($item->state->failed) { + $title->addHtml(Html::sprintf( + $this->translate('%s has no working objects', ' has ...'), + $subject + )); + } else { + $title->addHtml(Html::sprintf( + $this->translate('%s has working objects', ' has ...'), + $subject + )); + } + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + $info->addHtml(new TimeSince($item->state->last_state_change->getTimestamp())); + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return $name === 'icon-image'; // Always add the icon-image section + } +} diff --git a/public/css/list/redundancy-group-list-item.less b/public/css/item/redundancy-group.less similarity index 56% rename from public/css/list/redundancy-group-list-item.less rename to public/css/item/redundancy-group.less index 5fec5aef..ca5dea1e 100644 --- a/public/css/list/redundancy-group-list-item.less +++ b/public/css/item/redundancy-group.less @@ -1,16 +1,16 @@ -.redundancy-group-list-item { +.item-layout.redundancy-group { .caption .object-statistics { justify-self: end; } } -.item-list.minimal > .redundancy-group-list-item { +.minimal-item-layout.redundancy-group { .caption .object-statistics { font-size: 0.75em; } } -.item-list.default-layout > .redundancy-group-list-item { +.default-item-layout.redundancy-group { .title > .subject { margin-right: .28125em; } From ee304ab34b48b1c062a92c533cd0a17085ffdb87 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 14 Mar 2025 16:12:51 +0100 Subject: [PATCH 02/35] RedundancyGroup: Fetch summary as part of a default property --- library/Icingadb/Model/RedundancyGroup.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/library/Icingadb/Model/RedundancyGroup.php b/library/Icingadb/Model/RedundancyGroup.php index f1bd9015..885e288f 100644 --- a/library/Icingadb/Model/RedundancyGroup.php +++ b/library/Icingadb/Model/RedundancyGroup.php @@ -4,13 +4,16 @@ namespace Icinga\Module\Icingadb\Model; +use Icinga\Module\Icingadb\Common\Auth; +use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; -use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behaviors; +use ipl\Orm\Defaults; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Orm\Relations; +use ipl\Stdlib\Filter; /** * Redundancy group model. @@ -22,9 +25,13 @@ use ipl\Orm\Relations; * @property (?RedundancyGroupState)|Query $state * @property DependencyEdge|Query $from * @property DependencyEdge|Query $to + * + * @property RedundancyGroupSummary $summary */ class RedundancyGroup extends Model { + use Auth; + public function getTableName(): string { return 'redundancy_group'; @@ -78,4 +85,16 @@ class RedundancyGroup extends Model ->setTargetForeignKey('id') ->through(DependencyNode::class); } + + public function createDefaults(Defaults $defaults) + { + $defaults->add('summary', function (RedundancyGroup $group) { + $summary = RedundancyGroupSummary::on(Backend::getDb()) + ->filter(Filter::equal('id', $group->id)); + + $this->applyRestrictions($summary); + + return $summary->first(); + }); + } } From 9aff01e8c4837b66b999a9d99d827466aa234f18 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 14 Mar 2025 16:14:03 +0100 Subject: [PATCH 03/35] RedundancyGroupHeader: Use new item layout implementation --- .../controllers/RedundancygroupController.php | 3 +- .../Widget/Detail/RedundancyGroupHeader.php | 66 ++++--------------- 2 files changed, 15 insertions(+), 54 deletions(-) diff --git a/application/controllers/RedundancygroupController.php b/application/controllers/RedundancygroupController.php index 2c368891..853bd418 100644 --- a/application/controllers/RedundancygroupController.php +++ b/application/controllers/RedundancygroupController.php @@ -74,8 +74,9 @@ class RedundancygroupController extends Controller $this->applyRestrictions($summary); $this->groupSummary = $summary->first(); + $this->group->summary = $this->groupSummary; - $this->addControl(new RedundancyGroupHeader($this->group, $this->groupSummary)); + $this->addControl(new RedundancyGroupHeader($this->group)); } public function indexAction(): void diff --git a/library/Icingadb/Widget/Detail/RedundancyGroupHeader.php b/library/Icingadb/Widget/Detail/RedundancyGroupHeader.php index 850a9480..ab27755a 100644 --- a/library/Icingadb/Widget/Detail/RedundancyGroupHeader.php +++ b/library/Icingadb/Widget/Detail/RedundancyGroupHeader.php @@ -5,67 +5,27 @@ namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Model\RedundancyGroup; -use Icinga\Module\Icingadb\Model\RedundancyGroupSummary; -use Icinga\Module\Icingadb\Widget\DependencyNodeStatistics; +use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use ipl\Html\BaseHtmlElement; -use ipl\Html\Html; -use ipl\Html\HtmlElement; -use ipl\Html\Text; -use ipl\Web\Widget\StateBall; +use ipl\Web\Layout\HeaderItemLayout; -/** - * @property RedundancyGroup $object - */ -class RedundancyGroupHeader extends ObjectHeader +class RedundancyGroupHeader extends BaseHtmlElement { - /** @var RedundancyGroupSummary */ - protected $summary; + /** @var RedundancyGroup */ + protected $group; - public function __construct(RedundancyGroup $object, RedundancyGroupSummary $summary) + protected $tag = 'div'; + + public function __construct(RedundancyGroup $group) { - $this->summary = $summary; - - parent::__construct($object); + $this->group = $group; } - protected function assembleVisual(BaseHtmlElement $visual): void + protected function assemble(): void { - $stateBall = new StateBall($this->object->state->getStateText(), $this->getStateBallSize()); - $stateBall->add($this->object->state->getIcon()); + $layout = new HeaderItemLayout($this->group, new RedundancyGroupRenderer()); - $visual->addHtml($stateBall); - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $subject = $this->createSubject(); - if ($this->object->state->failed) { - $title->addHtml(Html::sprintf( - $this->translate('%s has no working objects', ' has ...'), - $subject - )); - } else { - $title->addHtml(Html::sprintf( - $this->translate('%s has working objects', ' has ...'), - $subject - )); - } - } - - protected function createStatistics(): BaseHtmlElement - { - return new DependencyNodeStatistics($this->summary); - } - - protected function assembleHeader(BaseHtmlElement $header): void - { - $header->add($this->createTitle()); - $header->add($this->createStatistics()); - $header->add($this->createTimestamp()); - } - - protected function assembleMain(BaseHtmlElement $main): void - { - $main->add($this->createHeader()); + $this->addAttributes($layout->getAttributes()); + $this->addHtml($layout); } } From c4f5e11d0b3dc18e65242949c934fc07c35a6a95 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 14 Mar 2025 16:16:10 +0100 Subject: [PATCH 04/35] DependencyNodeList: Use new item layout implementation --- .../Widget/ItemList/DependencyNodeList.php | 133 +++++++++++++++--- 1 file changed, 115 insertions(+), 18 deletions(-) diff --git a/library/Icingadb/Widget/ItemList/DependencyNodeList.php b/library/Icingadb/Widget/ItemList/DependencyNodeList.php index 3457b16e..3fd70b4b 100644 --- a/library/Icingadb/Widget/ItemList/DependencyNodeList.php +++ b/library/Icingadb/Widget/ItemList/DependencyNodeList.php @@ -4,51 +4,137 @@ namespace Icinga\Module\Icingadb\Widget\ItemList; +use Icinga\Exception\NotImplementedError; +use Icinga\Module\Icingadb\Common\DetailActions; +use Icinga\Module\Icingadb\Common\NoSubjectLink; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Host; +use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\UnreachableParent; -use ipl\Web\Common\BaseListItem; +use Icinga\Module\Icingadb\Redis\VolatileStateResults; +use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; +use Icinga\Module\Icingadb\Widget\Notice; +use InvalidArgumentException; +use ipl\Html\HtmlDocument; +use ipl\Orm\Model; +use ipl\Web\Layout\DetailedItemLayout; +use ipl\Web\Layout\ItemLayout; +use ipl\Web\Layout\MinimalItemLayout; +use ipl\Web\Widget\ItemList; +use ipl\Web\Widget\ListItem; /** * Dependency node list + * + * @todo This should be the new StateList class + * @extends ItemList */ -class DependencyNodeList extends StateList +class DependencyNodeList extends ItemList { + use DetailActions; + use NoSubjectLink; // TODO: Only for temporary compatibility + protected $defaultAttributes = ['class' => ['dependency-node-list']]; + /** @var bool Whether the list contains at least one item with an icon_image */ + protected $hasIconImages = false; + + public function __construct($data) + { + parent::__construct($data, function (Model $item) { + if ($item instanceof RedundancyGroup) { + return new RedundancyGroupRenderer(); + } else { + throw new NotImplementedError('Not implemented'); + } + }); + } + protected function init(): void { $this->initializeDetailActions(); } - protected function getItemClass(): string + /** + * Get whether the list contains at least one item with an icon_image + * + * @return bool + */ + public function hasIconImages(): bool { - return ''; + return $this->hasIconImages; } - protected function createListItem(object $data): BaseListItem + /** + * Set whether the list contains at least one item with an icon_image + * + * @param bool $hasIconImages + * + * @return $this + */ + public function setHasIconImages(bool $hasIconImages): self + { + $this->hasIconImages = $hasIconImages; + + return $this; + } + + /** + * Set the view mode + * + * @param 'minimal'|'common'|'detailed' $mode + * + * @return $this + */ + public function setViewMode(string $mode): self + { + switch ($mode) { + case 'minimal': + $this->setItemLayoutClass(MinimalItemLayout::class); + + break; + case 'detailed': + $this->setItemLayoutClass(DetailedItemLayout::class); + + break; + case 'common': + $this->setItemLayoutClass(ItemLayout::class); + + break; + default: + throw new InvalidArgumentException('Invalid view mode'); + } + + return $this; + } + + public function getItemLayout($item): ItemLayout + { + $layout = parent::getItemLayout($item); + if ($this->hasIconImages()) { + $layout->after(ItemLayout::VISUAL, 'icon-image'); + } + + return $layout; + } + + protected function createListItem(object $data) { - $viewMode = $this->getViewMode(); /** @var UnreachableParent|DependencyNode $data */ if ($data->redundancy_group_id !== null) { - if ($viewMode === 'minimal') { - return new RedundancyGroupListItemMinimal($data->redundancy_group, $this); - } - - if ($viewMode === 'detailed') { - $this->removeAttribute('class', 'default-layout'); - } - - return new RedundancyGroupListItem($data->redundancy_group, $this); + return (new ListItem($data->redundancy_group, $this)) + ->addAttributes(['data-action-item' => true]); } + // TODO: Adjust the remaining stuff once self::getItemLayout supports host and services + $object = $data->service_id !== null ? $data->service : $data->host; - switch ($viewMode) { - case 'minimal': + switch (false) { + case MinimalItemLayout::class: $class = $object instanceof Host ? HostListItemMinimal::class : ServiceListItemMinimal::class; break; - case 'detailed': + case DetailedItemLayout::class: $this->removeAttribute('class', 'default-layout'); $class = $object instanceof Host ? HostListItemDetailed::class : ServiceListItemDetailed::class; @@ -59,4 +145,15 @@ class DependencyNodeList extends StateList return new $class($object, $this); } + + protected function assemble(): void + { + parent::assemble(); + + if ($this->data instanceof VolatileStateResults && $this->data->isRedisUnavailable()) { + $this->prependWrapper((new HtmlDocument())->addHtml(new Notice( + t('Redis is currently unavailable. The shown information might be outdated.') + ))); + } + } } From 7a6352bc62e31376ff7a6f2c783a27b74061977c Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 14 Mar 2025 16:17:12 +0100 Subject: [PATCH 05/35] Drop old header/list item implementation for redundancy groups --- .../Icingadb/Widget/Detail/ObjectHeader.php | 145 ------------------ .../ItemList/RedundancyGroupListItem.php | 106 ------------- .../RedundancyGroupListItemMinimal.php | 18 --- public/css/widget/object-header.less | 65 -------- 4 files changed, 334 deletions(-) delete mode 100644 library/Icingadb/Widget/Detail/ObjectHeader.php delete mode 100644 library/Icingadb/Widget/ItemList/RedundancyGroupListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/RedundancyGroupListItemMinimal.php delete mode 100644 public/css/widget/object-header.less diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php deleted file mode 100644 index 15862202..00000000 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ /dev/null @@ -1,145 +0,0 @@ - */ - protected $baseAttributes = ['class' => 'object-header']; - - /** @var Model The associated object */ - protected $object; - - protected $tag = 'div'; - - /** - * Create a new object header - * - * @param Model $object - */ - public function __construct(Model $object) - { - $this->object = $object; - - $this->addAttributes($this->baseAttributes); - - $this->init(); - } - - abstract protected function assembleHeader(BaseHtmlElement $header): void; - - abstract protected function assembleMain(BaseHtmlElement $main): void; - - protected function assembleCaption(BaseHtmlElement $caption): void - { - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - } - - protected function getStateBallSize(): string - { - return StateBall::SIZE_BIG; - } - - protected function createCaption(): BaseHtmlElement - { - $caption = new HtmlElement('section', Attributes::create(['class' => 'caption'])); - - $this->assembleCaption($caption); - - return $caption; - } - - protected function createHeader(): BaseHtmlElement - { - $header = new HtmlElement('header'); - - $this->assembleHeader($header); - - return $header; - } - - protected function createMain(): BaseHtmlElement - { - $main = new HtmlElement('div', Attributes::create(['class' => 'main'])); - - $this->assembleMain($main); - - return $main; - } - - protected function createTimestamp(): ?BaseHtmlElement - { - //TODO: add support for host/service - return new TimeSince($this->object->state->last_state_change->getTimestamp()); - } - - protected function createSubject(): BaseHtmlElement - { - return new HtmlElement( - 'span', - Attributes::create(['class' => 'subject']), - Text::create($this->object->display_name) - ); - } - - protected function createTitle(): BaseHtmlElement - { - $title = new HtmlElement('div', Attributes::create(['class' => 'title'])); - - $this->assembleTitle($title); - - return $title; - } - - /** - * @return ?BaseHtmlElement - */ - protected function createVisual(): ?BaseHtmlElement - { - $visual = new HtmlElement('div', Attributes::create(['class' => 'visual'])); - - $this->assembleVisual($visual); - if ($visual->isEmpty()) { - return null; - } - - return $visual; - } - - /** - * Initialize the list item - * - * If you want to adjust the object header after construction, override this method. - */ - protected function init(): void - { - } - - protected function assemble(): void - { - $this->add([ - $this->createVisual(), - $this->createMain() - ]); - } -} diff --git a/library/Icingadb/Widget/ItemList/RedundancyGroupListItem.php b/library/Icingadb/Widget/ItemList/RedundancyGroupListItem.php deleted file mode 100644 index 70a2c782..00000000 --- a/library/Icingadb/Widget/ItemList/RedundancyGroupListItem.php +++ /dev/null @@ -1,106 +0,0 @@ - ['redundancy-group-list-item']]; - - protected function init(): void - { - parent::init(); - - $this->addAttributes(['data-action-item' => true]); - } - - protected function getStateBallSize(): string - { - return StateBall::SIZE_LARGE; - } - - protected function createTimestamp(): BaseHtmlElement - { - return new TimeSince($this->state->last_state_change->getTimestamp()); - } - - protected function createSubject(): Link - { - return new Link( - $this->item->display_name, - Url::fromPath('icingadb/redundancygroup', ['id' => bin2hex($this->item->id)]), - ['class' => 'subject'] - ); - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - $stateBall = new StateBall($this->state->getStateText(), $this->getStateBallSize()); - $stateBall->add($this->state->getIcon()); - - $visual->addHtml($stateBall); - } - - protected function assembleCaption(BaseHtmlElement $caption): void - { - $summary = RedundancyGroupSummary::on($this->getDb()) - ->filter(Filter::equal('id', $this->item->id)); - - $this->applyRestrictions($summary); - - $caption->addHtml(new DependencyNodeStatistics($summary->first())); - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $subject = $this->createSubject(); - if ($this->state->failed) { - $title->addHtml(Html::sprintf( - $this->translate('%s has no working objects', ' has ...'), - $subject - )); - } else { - $title->addHtml(Html::sprintf( - $this->translate('%s has working objects', ' has ...'), - $subject - )); - } - } - - protected function assemble(): void - { - $this->add([ - $this->createVisual(), - $this->createIconImage(), - $this->createMain() - ]); - } -} diff --git a/library/Icingadb/Widget/ItemList/RedundancyGroupListItemMinimal.php b/library/Icingadb/Widget/ItemList/RedundancyGroupListItemMinimal.php deleted file mode 100644 index be6b96cb..00000000 --- a/library/Icingadb/Widget/ItemList/RedundancyGroupListItemMinimal.php +++ /dev/null @@ -1,18 +0,0 @@ - * { - margin: 0 .28125em; // 0 calculated   width - } - - .subject { - .text-ellipsis(); - } - } - - time { - white-space: nowrap; - } - } - } - - .visual, - .main { - padding-bottom: .25em; - padding-top: .25em; - } -} - -.object-header { - color: @default-text-color-light; - - .title { - .subject { - color: @default-text-color; - } - } - - .object-statistics { - margin-left: auto; - margin-right: 1em; - - font-size: .75em; - } -} From 6dd9aa5e814a354d757cd64cf94526f1dcaf2408 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 14 Mar 2025 16:18:55 +0100 Subject: [PATCH 06/35] css: Ensure compatibility with the new item layout --- public/css/common.less | 4 +-- .../list-item.less => item/item-layout.less} | 9 +++++-- public/css/list/downtime-list.less | 1 - public/css/list/item-list.less | 26 +++++++++++-------- 4 files changed, 24 insertions(+), 16 deletions(-) rename public/css/{list/list-item.less => item/item-layout.less} (90%) diff --git a/public/css/common.less b/public/css/common.less index 54c9c06f..f1ed0a08 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -117,7 +117,6 @@ div.show-more { } .list-item .visual { - width: auto; margin-top: 0; } @@ -418,7 +417,8 @@ form[name="form_confirm_removal"] { margin-left: .28125em; // calculated   width; } - &.default-layout .title .affected-objects { + &.default-layout .title .affected-objects, // TODO: Drop once the new list-item layout is used everywhere + .default-item-layout .title .affected-objects { margin-left: 0; } } diff --git a/public/css/list/list-item.less b/public/css/item/item-layout.less similarity index 90% rename from public/css/list/list-item.less rename to public/css/item/item-layout.less index 2e67e3d4..a78672e0 100644 --- a/public/css/list/list-item.less +++ b/public/css/item/item-layout.less @@ -1,6 +1,6 @@ // Style -.list-item { +.item-layout { &.overdue { background-color: @gray-lighter; } @@ -36,7 +36,7 @@ // Layout -.list-item { +.item-layout { &.overdue time { margin-right: -.5em; padding: 0 0.5em; @@ -52,6 +52,11 @@ line-height: 1.5*12/11em; } } + &.minimal-item-layout .caption { + .plugin-output { + .text-ellipsis(); + } + } footer { .status-icons { diff --git a/public/css/list/downtime-list.less b/public/css/list/downtime-list.less index 87680976..7e537e78 100644 --- a/public/css/list/downtime-list.less +++ b/public/css/list/downtime-list.less @@ -66,7 +66,6 @@ justify-content: center; flex-shrink: 0; line-height: 1em; - margin-right: .5em; padding: .5em .25em; text-align: center; width: 6em; diff --git a/public/css/list/item-list.less b/public/css/list/item-list.less index 251eec31..aead7cde 100644 --- a/public/css/list/item-list.less +++ b/public/css/list/item-list.less @@ -51,24 +51,24 @@ } } -.item-list.minimal { +.item-list.minimal, // TODO: Remove this once the new list-item layout is used everywhere +.item-list.minimal-item-layout { > .empty-state { padding: .25em; } + .check-attempt { + display: none; // TODO: The new renderer shouldn't render it in the first place + } +} + +.item-list.minimal { + // TODO: Can be entirely dropped once the new list-item layout is used everywhere .list-item { header { max-width: 100%; } - .visual { - width: 2.2em; - } - - .check-attempt { - display: none; - } - .title { p { display: inline; @@ -96,6 +96,7 @@ } .item-list.detailed .list-item { + // TODO: Can be entirely dropped once the new list-item layout is used everywhere .title { word-break: break-word; -webkit-hyphens: auto; @@ -130,7 +131,8 @@ } } - &.minimal { + &.minimal, // TODO: Remove this once the new list-item layout is used everywhere + &.minimal-item-layout { .icon-image { height: 2em; width: 2em; @@ -139,6 +141,7 @@ } } +// TODO: Can be simplified (`.controls .list-item`) once the only list-items in controls are those in the multi select views .controls .item-list:not(.detailed):not(.minimal) .list-item { .plugin-output { line-height: 1.5 @@ -149,6 +152,7 @@ } } -.controls .item-list.minimal .icon-image { +.controls .item-list.minimal .icon-image, // TODO: Remove this once the new list-item layout is used everywhere +.controls .minimal-item-layout .icon-image { margin-top: 0; } From ce05f5df5ddaae3f162b8996b0213f6ed9bfc586 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Mon, 17 Mar 2025 17:10:44 +0100 Subject: [PATCH 07/35] css: Ensure compatibility with the new table layout --- public/css/common.less | 5 +- public/css/widget/table-layout.less | 72 ----------------------------- 2 files changed, 3 insertions(+), 74 deletions(-) delete mode 100644 public/css/widget/table-layout.less diff --git a/public/css/common.less b/public/css/common.less index f1ed0a08..3a6b5d13 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -9,7 +9,7 @@ padding-right: 0; .list-item, - .table-layout .table-row { + .table-row { padding-left: 1em; padding-right: 1em; } @@ -257,7 +257,7 @@ div.show-more { } } -.footer { +.content + .footer { display: flex; .box-shadow(0, -1px, 0, 0, @gray-lighter); color: @text-color-light; @@ -316,6 +316,7 @@ div.show-more { } .item-table { + // TODO: Drop once the new item table layout is used everywhere &.table-layout { &.hostgroup-table { --columns: 2; diff --git a/public/css/widget/table-layout.less b/public/css/widget/table-layout.less deleted file mode 100644 index f67ec0f0..00000000 --- a/public/css/widget/table-layout.less +++ /dev/null @@ -1,72 +0,0 @@ -// HostGroup- and -ServiceGroupTable styles - -.item-table.table-layout { - --columns: 1; -} - -ul.item-table.table-layout { - grid-template-columns: 1fr repeat(var(--columns), auto); - - > li { - display: contents; - - &:hover, - &.active { - .col, &::before, &::after { - // The li might get a background on hover. Though, this won't be visible - // as it has no box model since we apply display:contents to it. - background-color: inherit; - } - } - } - - li:not(:last-of-type) { - .col { - border-bottom: 1px solid @gray-light; - } - - .visual { - border-bottom: 1px solid @default-bg; - } - } - - > .table-row { - &:not(:last-of-type) .title .visual { - margin-bottom: ~"calc(-.5em - 1px)"; - } - - .col { - padding: .5em 0; - } - - .col:not(:last-child) { - padding-right: 1em; - } - } -} - -.content.full-width ul.item-table.table-layout { - // Again, since the li has no box model, it cannot have padding. So the first - // and last child need to get the left and right padding respectively. - // But we don't want to have a border that spans to the very right or left, - // so pseudo elements are required. We could add empty cells instead, but - // that would require hard coding the width here, which I'd like to avoid. - - grid-template-columns: ~"auto 1fr repeat(calc(var(--columns) + 1), auto)"; - - > li.table-row { - &::before, &::after { - display: inline-block; - content: '\00a0'; - margin-bottom: 1px; - } - - &::before { - padding-left: inherit; - } - - &::after { - padding-right: inherit; - } - } -} From 31b7e66d6134c99bd8cdf7047cc36b961ea0fc58 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Tue, 18 Mar 2025 12:40:37 +0100 Subject: [PATCH 08/35] RedundancygroupController: Remove superfluous summary fetch --- application/controllers/RedundancygroupController.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/application/controllers/RedundancygroupController.php b/application/controllers/RedundancygroupController.php index 853bd418..7f6c8b4d 100644 --- a/application/controllers/RedundancygroupController.php +++ b/application/controllers/RedundancygroupController.php @@ -68,13 +68,7 @@ class RedundancygroupController extends Controller $this->setTitleTab($this->getRequest()->getActionName()); $this->setTitle($this->group->display_name); - $summary = RedundancyGroupSummary::on($this->getDb()) - ->filter(Filter::equal('id', $this->groupId)); - - $this->applyRestrictions($summary); - - $this->groupSummary = $summary->first(); - $this->group->summary = $this->groupSummary; + $this->groupSummary = $this->group->summary; $this->addControl(new RedundancyGroupHeader($this->group)); } From 9f30f53ee662fbcec12c7add5b1cbcf07d5e4110 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 19 Mar 2025 11:41:30 +0100 Subject: [PATCH 09/35] Generalize DependencyNodeList and rename it to ObjectList --- application/controllers/HostController.php | 6 +++--- .../controllers/RedundancygroupController.php | 6 +++--- application/controllers/ServiceController.php | 6 +++--- library/Icingadb/Widget/Detail/ObjectDetail.php | 6 +++--- .../Widget/Detail/RedundancyGroupDetail.php | 6 +++--- .../{DependencyNodeList.php => ObjectList.php} | 13 +++++-------- 6 files changed, 20 insertions(+), 23 deletions(-) rename library/Icingadb/Widget/ItemList/{DependencyNodeList.php => ObjectList.php} (92%) diff --git a/application/controllers/HostController.php b/application/controllers/HostController.php index ed716fd8..63ff03d5 100644 --- a/application/controllers/HostController.php +++ b/application/controllers/HostController.php @@ -27,7 +27,7 @@ use Icinga\Module\Icingadb\Widget\Detail\HostDetail; use Icinga\Module\Icingadb\Widget\Detail\HostInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\HostMetaInfo; use Icinga\Module\Icingadb\Widget\Detail\QuickActions; -use Icinga\Module\Icingadb\Widget\ItemList\DependencyNodeList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemList\HostList; use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; use Icinga\Module\Icingadb\Widget\ItemList\ServiceList; @@ -288,7 +288,7 @@ class HostController extends Controller $this->addControl($searchBar); $this->addContent( - (new DependencyNodeList($nodesQuery)) + (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ); @@ -358,7 +358,7 @@ class HostController extends Controller $this->addControl($searchBar); $this->addContent( - (new DependencyNodeList($nodesQuery)) + (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ); diff --git a/application/controllers/RedundancygroupController.php b/application/controllers/RedundancygroupController.php index 7f6c8b4d..7f690b15 100644 --- a/application/controllers/RedundancygroupController.php +++ b/application/controllers/RedundancygroupController.php @@ -15,7 +15,7 @@ use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\MultiselectQuickActions; use Icinga\Module\Icingadb\Widget\Detail\RedundancyGroupDetail; use Icinga\Module\Icingadb\Widget\Detail\RedundancyGroupHeader; -use Icinga\Module\Icingadb\Widget\ItemList\DependencyNodeList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Generator; use ipl\Orm\Query; use ipl\Stdlib\Filter; @@ -140,7 +140,7 @@ class RedundancygroupController extends Controller $this->addControl($searchBar); $this->addContent( - (new DependencyNodeList($nodesQuery)) + (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ); @@ -209,7 +209,7 @@ class RedundancygroupController extends Controller $this->addControl($searchBar); $this->addContent( - (new DependencyNodeList($nodesQuery)) + (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ); diff --git a/application/controllers/ServiceController.php b/application/controllers/ServiceController.php index c7c540a8..8886aa96 100644 --- a/application/controllers/ServiceController.php +++ b/application/controllers/ServiceController.php @@ -24,7 +24,7 @@ use Icinga\Module\Icingadb\Widget\Detail\QuickActions; use Icinga\Module\Icingadb\Widget\Detail\ServiceDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceMetaInfo; -use Icinga\Module\Icingadb\Widget\ItemList\DependencyNodeList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; use Icinga\Module\Icingadb\Widget\ItemList\ServiceList; use ipl\Orm\Query; @@ -159,7 +159,7 @@ class ServiceController extends Controller $this->addControl($searchBar); $this->addContent( - (new DependencyNodeList($nodesQuery)) + (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ); @@ -230,7 +230,7 @@ class ServiceController extends Controller $this->addControl($searchBar); $this->addContent( - (new DependencyNodeList($nodesQuery)) + (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ); diff --git a/library/Icingadb/Widget/Detail/ObjectDetail.php b/library/Icingadb/Widget/Detail/ObjectDetail.php index c4e0a689..766df633 100644 --- a/library/Icingadb/Widget/Detail/ObjectDetail.php +++ b/library/Icingadb/Widget/Detail/ObjectDetail.php @@ -28,7 +28,7 @@ use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\UnreachableParent; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Navigation\Action; -use Icinga\Module\Icingadb\Widget\ItemList\DependencyNodeList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Common\ServiceLinks; use Icinga\Module\Icingadb\Forms\Command\Object\ToggleObjectFeaturesForm; @@ -668,7 +668,7 @@ class ObjectDetail extends BaseHtmlElement return [ HtmlElement::create('h2', null, Text::create(t('Root Problems'))), - (new DependencyNodeList($rootProblems))->setEmptyStateMessage( + (new ObjectList($rootProblems))->setEmptyStateMessage( t('You are not authorized to view these objects.') ) ]; @@ -744,7 +744,7 @@ class ObjectDetail extends BaseHtmlElement return [ HtmlElement::create('h2', null, Text::create(t('Affected Objects'))), - (new DependencyNodeList($affectedObjects))->setEmptyStateMessage( + (new ObjectList($affectedObjects))->setEmptyStateMessage( t('You are not authorized to view these objects.') ) ]; diff --git a/library/Icingadb/Widget/Detail/RedundancyGroupDetail.php b/library/Icingadb/Widget/Detail/RedundancyGroupDetail.php index 8e7f4f59..8f4ce721 100644 --- a/library/Icingadb/Widget/Detail/RedundancyGroupDetail.php +++ b/library/Icingadb/Widget/Detail/RedundancyGroupDetail.php @@ -10,7 +10,7 @@ use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\UnreachableParent; use Icinga\Module\Icingadb\Redis\VolatileStateResults; -use Icinga\Module\Icingadb\Widget\ItemList\DependencyNodeList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\BaseHtmlElement; @@ -96,7 +96,7 @@ class RedundancyGroupDetail extends BaseHtmlElement return [ HtmlElement::create('h2', null, Text::create($this->translate('Root Problems'))), - (new DependencyNodeList($rootProblems))->setEmptyStateMessage( + (new ObjectList($rootProblems))->setEmptyStateMessage( $this->translate('You are not authorized to view these objects.') ) ]; @@ -129,7 +129,7 @@ class RedundancyGroupDetail extends BaseHtmlElement return [ HtmlElement::create('h2', null, Text::create($this->translate('Group Members'))), - (new DependencyNodeList($members)) + (new ObjectList($members)) ->setEmptyStateMessage($this->translate('You are not authorized to view these objects.')), (new ShowMore($members, Url::fromPath('icingadb/redundancygroup/members', ['id' => $this->group->id]))) ->setBaseTarget('_self') diff --git a/library/Icingadb/Widget/ItemList/DependencyNodeList.php b/library/Icingadb/Widget/ItemList/ObjectList.php similarity index 92% rename from library/Icingadb/Widget/ItemList/DependencyNodeList.php rename to library/Icingadb/Widget/ItemList/ObjectList.php index 3fd70b4b..dfdc6e2b 100644 --- a/library/Icingadb/Widget/ItemList/DependencyNodeList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -1,12 +1,11 @@ */ -class DependencyNodeList extends ItemList +class ObjectList extends ItemList { use DetailActions; - use NoSubjectLink; // TODO: Only for temporary compatibility - - protected $defaultAttributes = ['class' => ['dependency-node-list']]; /** @var bool Whether the list contains at least one item with an icon_image */ protected $hasIconImages = false; From 1ff6c25ec637193c092e2202753eef801c0bb4da Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 19 Mar 2025 12:35:51 +0100 Subject: [PATCH 10/35] Generalize RedundancygroupHeader and rename it to ObjectHeader --- .../controllers/RedundancygroupController.php | 4 +- .../Icingadb/Widget/Detail/ObjectHeader.php | 41 +++++++++++++++++++ .../Widget/Detail/RedundancyGroupHeader.php | 31 -------------- 3 files changed, 43 insertions(+), 33 deletions(-) create mode 100644 library/Icingadb/Widget/Detail/ObjectHeader.php delete mode 100644 library/Icingadb/Widget/Detail/RedundancyGroupHeader.php diff --git a/application/controllers/RedundancygroupController.php b/application/controllers/RedundancygroupController.php index 7f690b15..1ef14a54 100644 --- a/application/controllers/RedundancygroupController.php +++ b/application/controllers/RedundancygroupController.php @@ -14,7 +14,7 @@ use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\MultiselectQuickActions; use Icinga\Module\Icingadb\Widget\Detail\RedundancyGroupDetail; -use Icinga\Module\Icingadb\Widget\Detail\RedundancyGroupHeader; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Generator; use ipl\Orm\Query; @@ -70,7 +70,7 @@ class RedundancygroupController extends Controller $this->groupSummary = $this->group->summary; - $this->addControl(new RedundancyGroupHeader($this->group)); + $this->addControl(new ObjectHeader($this->group)); } public function indexAction(): void diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php new file mode 100644 index 00000000..7f119153 --- /dev/null +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -0,0 +1,41 @@ +object = $object; + } + + protected function assemble(): void + { + switch (true) { + case $this->object instanceof RedundancyGroup: + $renderer = new RedundancyGroupRenderer(); + break; + default: + throw new NotImplementedError('Not implemented'); + } + + $layout = new HeaderItemLayout($this->object, $renderer); + + $this->addAttributes($layout->getAttributes()); + $this->addHtml($layout); + } +} diff --git a/library/Icingadb/Widget/Detail/RedundancyGroupHeader.php b/library/Icingadb/Widget/Detail/RedundancyGroupHeader.php deleted file mode 100644 index ab27755a..00000000 --- a/library/Icingadb/Widget/Detail/RedundancyGroupHeader.php +++ /dev/null @@ -1,31 +0,0 @@ -group = $group; - } - - protected function assemble(): void - { - $layout = new HeaderItemLayout($this->group, new RedundancyGroupRenderer()); - - $this->addAttributes($layout->getAttributes()); - $this->addHtml($layout); - } -} From 36ce426bbeb407b09febb532e7e65fb5bb002c11 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 19 Mar 2025 15:59:29 +0100 Subject: [PATCH 11/35] Introduce Host/Service Renderer - Use these renderers in ObjectHeader and ObjectList class - Remove now superfluous Host/ServiceList and ListItem classes - DetailsAction: Change visibility of url setter to public (These are called in controller now) --- application/controllers/HostController.php | 12 +- .../controllers/HostgroupController.php | 8 +- application/controllers/HostsController.php | 11 +- application/controllers/ServiceController.php | 9 +- .../controllers/ServicegroupController.php | 8 +- .../controllers/ServicesController.php | 11 +- .../View/BaseHostAndServiceRenderer.php | 283 ++++++++++++++++++ library/Icingadb/View/HostRenderer.php | 29 ++ library/Icingadb/View/ServiceRenderer.php | 41 +++ .../Icingadb/Widget/Detail/ObjectHeader.php | 13 + .../Widget/ItemList/BaseHostListItem.php | 56 ---- .../Widget/ItemList/BaseServiceListItem.php | 70 ----- .../Widget/ItemList/HostDetailHeader.php | 69 ----- library/Icingadb/Widget/ItemList/HostList.php | 39 --- .../Icingadb/Widget/ItemList/HostListItem.php | 18 -- .../Widget/ItemList/HostListItemDetailed.php | 108 ------- .../Widget/ItemList/HostListItemMinimal.php | 18 -- .../Icingadb/Widget/ItemList/ObjectList.php | 82 +++-- .../Widget/ItemList/ServiceDetailHeader.php | 69 ----- .../Icingadb/Widget/ItemList/ServiceList.php | 36 --- .../Widget/ItemList/ServiceListItem.php | 18 -- .../ItemList/ServiceListItemDetailed.php | 112 ------- .../ItemList/ServiceListItemMinimal.php | 18 -- .../Icingadb/Widget/ItemList/StateList.php | 60 ---- .../Widget/ItemList/StateListItem.php | 174 ----------- public/css/common.less | 3 +- public/css/list/item-list.less | 7 +- 27 files changed, 460 insertions(+), 922 deletions(-) create mode 100644 library/Icingadb/View/BaseHostAndServiceRenderer.php create mode 100644 library/Icingadb/View/HostRenderer.php create mode 100644 library/Icingadb/View/ServiceRenderer.php delete mode 100644 library/Icingadb/Widget/ItemList/BaseHostListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/BaseServiceListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/HostDetailHeader.php delete mode 100644 library/Icingadb/Widget/ItemList/HostList.php delete mode 100644 library/Icingadb/Widget/ItemList/HostListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/HostListItemDetailed.php delete mode 100644 library/Icingadb/Widget/ItemList/HostListItemMinimal.php delete mode 100644 library/Icingadb/Widget/ItemList/ServiceDetailHeader.php delete mode 100644 library/Icingadb/Widget/ItemList/ServiceList.php delete mode 100644 library/Icingadb/Widget/ItemList/ServiceListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/ServiceListItemDetailed.php delete mode 100644 library/Icingadb/Widget/ItemList/ServiceListItemMinimal.php delete mode 100644 library/Icingadb/Widget/ItemList/StateList.php delete mode 100644 library/Icingadb/Widget/ItemList/StateListItem.php diff --git a/application/controllers/HostController.php b/application/controllers/HostController.php index 63ff03d5..31e41c80 100644 --- a/application/controllers/HostController.php +++ b/application/controllers/HostController.php @@ -26,11 +26,10 @@ use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\HostDetail; use Icinga\Module\Icingadb\Widget\Detail\HostInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\HostMetaInfo; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\QuickActions; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; -use Icinga\Module\Icingadb\Widget\ItemList\HostList; use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; -use Icinga\Module\Icingadb\Widget\ItemList\ServiceList; use ipl\Orm\Query; use ipl\Sql\Expression; use ipl\Sql\Filter\Exists; @@ -69,10 +68,7 @@ class HostController extends Controller $this->host = $host; $this->loadTabsForObject($host); - $this->addControl((new HostList([$host])) - ->setViewMode('objectHeader') - ->setDetailActionsDisabled() - ->setNoSubjectLink()); + $this->addControl(new ObjectHeader($host)); $this->setTitleTab($this->getRequest()->getActionName()); $this->setTitle($host->display_name); @@ -223,7 +219,7 @@ class HostController extends Controller yield $this->export($services); - $serviceList = (new ServiceList($services)) + $serviceList = (new ObjectList($services)) ->setViewMode($viewModeSwitcher->getViewMode()); $this->addControl($paginationControl); @@ -537,7 +533,7 @@ class HostController extends Controller protected function getDefaultTabControls(): array { - return [(new HostList([$this->host]))->setDetailActionsDisabled()->setNoSubjectLink()]; + return [new ObjectHeader($this->host)]; } /** diff --git a/application/controllers/HostgroupController.php b/application/controllers/HostgroupController.php index e48adca2..d5f07afe 100644 --- a/application/controllers/HostgroupController.php +++ b/application/controllers/HostgroupController.php @@ -12,7 +12,7 @@ use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemList\HostList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\HostgroupTableRow; use ipl\Html\Html; use ipl\Stdlib\Filter; @@ -109,8 +109,10 @@ class HostgroupController extends Controller yield $this->export($hosts); - $hostList = (new HostList($hosts->execute())) - ->setViewMode($viewModeSwitcher->getViewMode()); + $hostList = (new ObjectList($hosts)) + ->setViewMode($viewModeSwitcher->getViewMode()) + ->setMultiselectUrl(Links::hostsDetails()) + ->setDetailUrl(Url::fromPath('icingadb/host')); // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { diff --git a/application/controllers/HostsController.php b/application/controllers/HostsController.php index fff7139a..114b46ce 100644 --- a/application/controllers/HostsController.php +++ b/application/controllers/HostsController.php @@ -15,8 +15,8 @@ use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\MultiselectQuickActions; use Icinga\Module\Icingadb\Widget\Detail\ObjectsDetail; -use Icinga\Module\Icingadb\Widget\ItemList\HostList; use Icinga\Module\Icingadb\Widget\HostStatusBar; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\HostItemTable; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ShowMore; @@ -104,8 +104,10 @@ class HostsController extends Controller $hostList = (new HostItemTable($results, HostItemTable::applyColumnMetaData($hosts, $columns))) ->setSort($sortControl->getSort()); } else { - $hostList = (new HostList($results)) - ->setViewMode($viewModeSwitcher->getViewMode()); + $hostList = (new ObjectList($results)) + ->setViewMode($viewModeSwitcher->getViewMode()) + ->setMultiselectUrl(Links::hostsDetails()) + ->setDetailUrl(Url::fromPath('icingadb/host')); } $this->addContent($hostList); @@ -166,9 +168,8 @@ class HostsController extends Controller $summary->comments_total = $comments->count(); $this->addControl( - (new HostList($results)) + (new ObjectList($results)) ->setViewMode('minimal') - ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $results, diff --git a/application/controllers/ServiceController.php b/application/controllers/ServiceController.php index 8886aa96..e68587e0 100644 --- a/application/controllers/ServiceController.php +++ b/application/controllers/ServiceController.php @@ -20,13 +20,13 @@ use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\QuickActions; use Icinga\Module\Icingadb\Widget\Detail\ServiceDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceMetaInfo; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; -use Icinga\Module\Icingadb\Widget\ItemList\ServiceList; use ipl\Orm\Query; use ipl\Sql\Expression; use ipl\Stdlib\Filter; @@ -79,10 +79,7 @@ class ServiceController extends Controller $this->service = $service; $this->loadTabsForObject($service); - $this->addControl((new ServiceList([$service])) - ->setViewMode('objectHeader') - ->setDetailActionsDisabled() - ->setNoSubjectLink()); + $this->addControl(new ObjectHeader($service)); $this->setTitleTab($this->getRequest()->getActionName()); $this->setTitle( @@ -515,6 +512,6 @@ class ServiceController extends Controller protected function getDefaultTabControls(): array { - return [(new ServiceList([$this->service]))->setDetailActionsDisabled()->setNoSubjectLink()]; + return [new ObjectHeader($this->service)]; } } diff --git a/application/controllers/ServicegroupController.php b/application/controllers/ServicegroupController.php index c3dea15b..4e78204a 100644 --- a/application/controllers/ServicegroupController.php +++ b/application/controllers/ServicegroupController.php @@ -12,7 +12,7 @@ use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemList\ServiceList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\ServicegroupTableRow; use ipl\Html\Html; use ipl\Stdlib\Filter; @@ -117,8 +117,10 @@ class ServicegroupController extends Controller yield $this->export($services); - $serviceList = (new ServiceList($services->execute())) - ->setViewMode($viewModeSwitcher->getViewMode()); + $serviceList = (new ObjectList($services)) + ->setViewMode($viewModeSwitcher->getViewMode()) + ->setMultiselectUrl(Links::servicesDetails()) + ->setDetailUrl(Url::fromPath('icingadb/service')); // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { diff --git a/application/controllers/ServicesController.php b/application/controllers/ServicesController.php index c39f8b5d..dcf8281f 100644 --- a/application/controllers/ServicesController.php +++ b/application/controllers/ServicesController.php @@ -17,7 +17,7 @@ use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\MultiselectQuickActions; use Icinga\Module\Icingadb\Widget\Detail\ObjectsDetail; -use Icinga\Module\Icingadb\Widget\ItemList\ServiceList; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\ServiceItemTable; use Icinga\Module\Icingadb\Widget\ServiceStatusBar; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; @@ -115,8 +115,10 @@ class ServicesController extends Controller $serviceList = (new ServiceItemTable($results, ServiceItemTable::applyColumnMetaData($services, $columns))) ->setSort($sortControl->getSort()); } else { - $serviceList = (new ServiceList($results)) - ->setViewMode($viewModeSwitcher->getViewMode()); + $serviceList = (new ObjectList($results)) + ->setViewMode($viewModeSwitcher->getViewMode()) + ->setMultiselectUrl(Links::servicesDetails()) + ->setDetailUrl(Url::fromPath('icingadb/service')); } $this->addContent($serviceList); @@ -182,9 +184,8 @@ class ServicesController extends Controller $summary->comments_total = $comments->count(); $this->addControl( - (new ServiceList($results)) + (new ObjectList($results)) ->setViewMode('minimal') - ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $results, diff --git a/library/Icingadb/View/BaseHostAndServiceRenderer.php b/library/Icingadb/View/BaseHostAndServiceRenderer.php new file mode 100644 index 00000000..81de4aa9 --- /dev/null +++ b/library/Icingadb/View/BaseHostAndServiceRenderer.php @@ -0,0 +1,283 @@ + */ +abstract class BaseHostAndServiceRenderer implements ItemRenderer +{ + use Translation; + + abstract protected function createSubject($item, string $layout): ValidHtml; + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + if ($layout === 'header') { + if ($item->state->state_type === 'soft') { + $stateType = 'soft_state'; + $previousStateType = 'previous_soft_state'; + + if ($item->state->previous_soft_state === 0) { + $previousStateType = 'hard_state'; + } + } else { + $stateType = 'hard_state'; + $previousStateType = 'previous_hard_state'; + + if ($item->state->hard_state === $item->state->previous_hard_state) { + $previousStateType = 'previous_soft_state'; + } + } + + if ($item instanceof Host) { + $state = HostStates::text($item->state->$stateType); + $previousState = HostStates::text($item->state->$previousStateType); + } else { + $state = ServiceStates::text($item->state->$stateType); + $previousState = ServiceStates::text($item->state->$previousStateType); + } + + $stateChange = new StateChange($state, $previousState); + if ($stateType === 'soft_state') { + $stateChange->setCurrentStateBallSize(StateBall::SIZE_MEDIUM_LARGE); + } + + if ($previousStateType === 'previous_soft_state') { + $stateChange->setPreviousStateBallSize(StateBall::SIZE_MEDIUM_LARGE); + if ($stateType === 'soft_state') { + $visual->getAttributes()->add('class', 'small-state-change'); + } + } + + $stateChange->setIcon($item->state->getIcon()); + $stateChange->setHandled( + $item->state->is_problem && ($item->state->is_handled || ! $item->state->is_reachable) + ); + + $visual->addHtml($stateChange); + + return; + } + + $ballSize = $layout === 'minimal' ? StateBall::SIZE_BIG : StateBall::SIZE_LARGE; + + $stateBall = new StateBall($item->state->getStateText(), $ballSize); + $stateBall->add($item->state->getIcon()); + if ($item->state->is_problem && ($item->state->is_handled || ! $item->state->is_reachable)) { + $stateBall->getAttributes()->add('class', 'handled'); + } + + $visual->addHtml($stateBall); + if ($layout !== 'minimal' && $item->state->state_type === 'soft') { + $visual->addHtml( + new CheckAttempt((int) $item->state->check_attempt, (int) $item->max_check_attempts) + ); + } + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + if ($item->state->soft_state === null && $item->state->output === null) { + $caption->addHtml(Text::create($this->translate('Waiting for Icinga DB to synchronize the state.'))); + } else { + if (empty($item->state->output)) { + $pluginOutput = new EmptyState($this->translate('Output unavailable.')); + } else { + $pluginOutput = new PluginOutputContainer(PluginOutput::fromObject($item)); + } + + $caption->addHtml($pluginOutput); + } + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + $title->addHtml(Html::sprintf( + $this->translate('%s is %s', ' is '), + $this->createSubject($item, $layout), + Html::tag('span', ['class' => 'state-text'], $item->state->getStateTextTranslated()) + )); + + if (isset($item->state->affects_children) && $item->state->affects_children) { + $total = (int) $item->total_children; + + if ($total > 1000) { + $total = '1000+'; + $tooltip = $this->translate('Up to 1000+ affected objects'); + } else { + $tooltip = sprintf( + $this->translatePlural( + '%d affected object', + 'Up to %d affected objects', + $total + ), + $total + ); + } + + $icon = new Icon(Icons::UNREACHABLE); + + $title->addHtml(new HtmlElement( + 'span', + Attributes::create([ + 'class' => 'affected-objects', + 'title' => $tooltip + ]), + $icon, + Text::create($total) + )); + } + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + if ($item->state->is_overdue) { + $since = new TimeSince($item->state->next_update->getTimestamp()); + $since->prepend($this->translate('Overdue') . ' '); + $since->prependHtml(new Icon(Icons::WARNING)); + + $info->addHtml($since); + } elseif ($item->state->last_state_change !== null && $item->state->last_state_change->getTimestamp() > 0) { + $info->addHtml(new TimeSince($item->state->last_state_change->getTimestamp())); + } + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + $pieChartLimit = 5; + $statusIcons = new HtmlElement('div', Attributes::create(['class' => 'status-icons'])); + $isService = $item instanceof Service; + + if ( + ($isService && $item->state->last_comment->service_id === $item->id) + || $item->state->last_comment->host_id === $item->id + ) { + $comment = $item->state->last_comment; + + if ($isService) { + $comment->service = $item; + } else { + $comment->host = $item; + } + + $comment = (new CommentList([$comment])) + ->setNoSubjectLink() + ->setObjectLinkDisabled() + ->setDetailActionsDisabled(); + + $statusIcons->addHtml( + new HtmlElement( + 'div', + Attributes::create(['class' => 'comment-wrapper']), + new HtmlElement('div', Attributes::create(['class' => 'comment-popup']), $comment), + (new Icon('comments', ['class' => 'comment-icon'])) + ) + ); + } + + if ($item->state->is_flapping) { + $title = $isService + ? sprintf( + $this->translate('Service "%s" on "%s" is in flapping state'), + $item->display_name, $item->host->display_name + ) + : sprintf( + $this->translate('Host "%s" is in flapping state'), + $item->display_name + ); + + $statusIcons->addHtml(new Icon('random', ['title' => $title])); + } + + if (! $item->notifications_enabled) { + $statusIcons->addHtml( + new Icon('bell-slash', ['title' => $this->translate('Notifications disabled')]) + ); + } + + if (! $item->active_checks_enabled) { + $statusIcons->addHtml( + new Icon('eye-slash', ['title' => $this->translate('Active checks disabled')]) + ); + } + + $performanceData = new HtmlElement('div', Attributes::create(['class' => 'performance-data'])); + if ($item->state->performance_data) { + $pieChartData = PerfDataSet::fromString($item->state->normalized_performance_data)->asArray(); + + $pies = []; + foreach ($pieChartData as $i => $perfdata) { + if ($perfdata->isVisualizable()) { + $pies[] = $perfdata->asInlinePie()->render(); + } + + // Check if number of visualizable pie charts is larger than $PIE_CHART_LIMIT + if (count($pies) > $pieChartLimit) { + break; + } + } + + $maxVisiblePies = $pieChartLimit - 2; + $numOfPies = count($pies); + foreach ($pies as $i => $pie) { + if ( + // Show max. 5 elements: if there are more than 5, show 4 + `…` + $i > $maxVisiblePies && $numOfPies > $pieChartLimit + ) { + $performanceData->addHtml(new HtmlElement('span', null, Text::create('…'))); + break; + } + + $performanceData->addHtml(HtmlString::create($pie)); + } + } + + if (! $statusIcons->isEmpty()) { + $footer->addHtml($statusIcons); + } + + if (! $performanceData->isEmpty()) { + $footer->addHtml($performanceData); + } + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + if ($name === 'icon-image') { + if (isset($item->icon_image->icon_image)) { + $element->addHtml(new IconImage($item->icon_image->icon_image, $item->icon_image_alt)); + } + + return true; + } + + return false; + } +} diff --git a/library/Icingadb/View/HostRenderer.php b/library/Icingadb/View/HostRenderer.php new file mode 100644 index 00000000..7eb0abb5 --- /dev/null +++ b/library/Icingadb/View/HostRenderer.php @@ -0,0 +1,29 @@ +get('class')->addValue('host'); + } + + protected function createSubject($item, string $layout): ValidHtml + { + if ($layout === 'header') { + return new HtmlElement('span', new Attributes(['class' => 'subject']), new Text($item->display_name)); + } + + return new Link($item->display_name, Links::host($item), ['class' => 'subject']); + } +} diff --git a/library/Icingadb/View/ServiceRenderer.php b/library/Icingadb/View/ServiceRenderer.php new file mode 100644 index 00000000..9b0381b4 --- /dev/null +++ b/library/Icingadb/View/ServiceRenderer.php @@ -0,0 +1,41 @@ +get('class')->addValue('service'); + } + + protected function createSubject($item, string $layout): ValidHtml + { + $service = $item->display_name; + $host = [ + new StateBall($item->host->state->getStateText(), StateBall::SIZE_MEDIUM), + ' ', + $item->host->display_name + ]; + + $host = new Link($host, Links::host($item->host), ['class' => 'subject']); + if ($layout === 'header') { + $service = new HtmlElement('span', new Attributes(['class' => 'subject']), new Text($service)); + } else { + $service = new Link($service, Links::service($item, $item->host), ['class' => 'subject']); + } + + return Html::sprintf($this->translate('%s on %s', ' on '), $service, $host); + } +} diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index 7f119153..4178ee59 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -5,8 +5,12 @@ namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Exception\NotImplementedError; +use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; +use Icinga\Module\Icingadb\Model\Service; +use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; +use Icinga\Module\Icingadb\View\ServiceRenderer; use ipl\Html\BaseHtmlElement; use ipl\Orm\Model; use ipl\Web\Layout\HeaderItemLayout; @@ -28,6 +32,15 @@ class ObjectHeader extends BaseHtmlElement switch (true) { case $this->object instanceof RedundancyGroup: $renderer = new RedundancyGroupRenderer(); + + break; + case $this->object instanceof Service: + $renderer = new ServiceRenderer(); + + break; + case $this->object instanceof Host: + $renderer = new HostRenderer(); + break; default: throw new NotImplementedError('Not implemented'); diff --git a/library/Icingadb/Widget/ItemList/BaseHostListItem.php b/library/Icingadb/Widget/ItemList/BaseHostListItem.php deleted file mode 100644 index edaf6c88..00000000 --- a/library/Icingadb/Widget/ItemList/BaseHostListItem.php +++ /dev/null @@ -1,56 +0,0 @@ -getNoSubjectLink()) { - return new HtmlElement( - 'span', - Attributes::create(['class' => 'subject']), - Text::create($this->item->display_name) - ); - } else { - return new Link($this->item->display_name, Links::host($this->item), ['class' => 'subject']); - } - } - - protected function init(): void - { - parent::init(); - - if ($this->list->getNoSubjectLink()) { - $this->setNoSubjectLink(); - } - - $this->list->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)) - ->addMultiselectFilterAttribute($this, Filter::equal('host.name', $this->item->name)); - } -} diff --git a/library/Icingadb/Widget/ItemList/BaseServiceListItem.php b/library/Icingadb/Widget/ItemList/BaseServiceListItem.php deleted file mode 100644 index fe4f0146..00000000 --- a/library/Icingadb/Widget/ItemList/BaseServiceListItem.php +++ /dev/null @@ -1,70 +0,0 @@ -item->display_name; - $host = [ - new StateBall($this->item->host->state->getStateText(), StateBall::SIZE_MEDIUM), - ' ', - $this->item->host->display_name - ]; - - $host = new Link($host, Links::host($this->item->host), ['class' => 'subject']); - if ($this->getNoSubjectLink()) { - $service = new HtmlElement('span', Attributes::create(['class' => 'subject']), Text::create($service)); - } else { - $service = new Link($service, Links::service($this->item, $this->item->host), ['class' => 'subject']); - } - - return [Html::sprintf(t('%s on %s', ' on '), $service, $host)]; - } - - protected function init(): void - { - parent::init(); - - if ($this->list->getNoSubjectLink()) { - $this->setNoSubjectLink(); - } - - $this->list->addMultiselectFilterAttribute( - $this, - Filter::all( - Filter::equal('service.name', $this->item->name), - Filter::equal('host.name', $this->item->host->name) - ) - ); - $this->list->addDetailFilterAttribute( - $this, - Filter::all( - Filter::equal('name', $this->item->name), - Filter::equal('host.name', $this->item->host->name) - ) - ); - } -} diff --git a/library/Icingadb/Widget/ItemList/HostDetailHeader.php b/library/Icingadb/Widget/ItemList/HostDetailHeader.php deleted file mode 100644 index b7afb232..00000000 --- a/library/Icingadb/Widget/ItemList/HostDetailHeader.php +++ /dev/null @@ -1,69 +0,0 @@ -state->state_type === 'soft') { - $stateType = 'soft_state'; - $previousStateType = 'previous_soft_state'; - - if ($this->state->previous_soft_state === 0) { - $previousStateType = 'hard_state'; - } - } else { - $stateType = 'hard_state'; - $previousStateType = 'previous_hard_state'; - - if ($this->state->hard_state === $this->state->previous_hard_state) { - $previousStateType = 'previous_soft_state'; - } - } - - $state = HostStates::text($this->state->$stateType); - $previousState = HostStates::text($this->state->$previousStateType); - - $stateChange = new StateChange($state, $previousState); - if ($stateType === 'soft_state') { - $stateChange->setCurrentStateBallSize(StateBall::SIZE_MEDIUM_LARGE); - } - - if ($previousStateType === 'previous_soft_state') { - $stateChange->setPreviousStateBallSize(StateBall::SIZE_MEDIUM_LARGE); - if ($stateType === 'soft_state') { - $visual->getAttributes()->add('class', 'small-state-change'); - } - } - - $stateChange->setIcon($this->state->getIcon()); - $stateChange->setHandled( - $this->state->is_problem && ($this->state->is_handled || ! $this->state->is_reachable) - ); - - $visual->addHtml($stateChange); - } - - protected function assemble(): void - { - $attributes = $this->list->getAttributes(); - if (! in_array('minimal', $attributes->get('class')->getValue())) { - $attributes->add('class', 'minimal'); - } - - parent::assemble(); - } -} diff --git a/library/Icingadb/Widget/ItemList/HostList.php b/library/Icingadb/Widget/ItemList/HostList.php deleted file mode 100644 index 2be1f84a..00000000 --- a/library/Icingadb/Widget/ItemList/HostList.php +++ /dev/null @@ -1,39 +0,0 @@ - 'host-list']; - - protected function getItemClass(): string - { - switch ($this->getViewMode()) { - case 'minimal': - return HostListItemMinimal::class; - case 'detailed': - $this->removeAttribute('class', 'default-layout'); - - return HostListItemDetailed::class; - case 'objectHeader': - return HostDetailHeader::class; - default: - return HostListItem::class; - } - } - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setMultiselectUrl(Links::hostsDetails()); - $this->setDetailUrl(Url::fromPath('icingadb/host')); - } -} diff --git a/library/Icingadb/Widget/ItemList/HostListItem.php b/library/Icingadb/Widget/ItemList/HostListItem.php deleted file mode 100644 index 2eae6600..00000000 --- a/library/Icingadb/Widget/ItemList/HostListItem.php +++ /dev/null @@ -1,18 +0,0 @@ - 'status-icons'])); - - if ($this->item->state->last_comment->host_id === $this->item->id) { - $comment = $this->item->state->last_comment; - $comment->host = $this->item; - $comment = (new CommentList([$comment])) - ->setNoSubjectLink() - ->setObjectLinkDisabled() - ->setDetailActionsDisabled(); - - $statusIcons->addHtml( - new HtmlElement( - 'div', - Attributes::create(['class' => 'comment-wrapper']), - new HtmlElement('div', Attributes::create(['class' => 'comment-popup']), $comment), - (new Icon('comments', ['class' => 'comment-icon'])) - ) - ); - } - - if ($this->item->state->is_flapping) { - $statusIcons->addHtml(new Icon( - 'random', - [ - 'title' => sprintf(t('Host "%s" is in flapping state'), $this->item->display_name), - ] - )); - } - - if (! $this->item->notifications_enabled) { - $statusIcons->addHtml(new Icon('bell-slash', ['title' => t('Notifications disabled')])); - } - - if (! $this->item->active_checks_enabled) { - $statusIcons->addHtml(new Icon('eye-slash', ['title' => t('Active checks disabled')])); - } - - $performanceData = new HtmlElement('div', Attributes::create(['class' => 'performance-data'])); - if ($this->item->state->performance_data) { - $pieChartData = PerfDataSet::fromString($this->item->state->normalized_performance_data)->asArray(); - - $pies = []; - foreach ($pieChartData as $i => $perfdata) { - if ($perfdata->isVisualizable()) { - $pies[] = $perfdata->asInlinePie()->render(); - } - - // Check if number of visualizable pie charts is larger than PIE_CHART_LIMIT - if (count($pies) > HostListItemDetailed::PIE_CHART_LIMIT) { - break; - } - } - - $maxVisiblePies = HostListItemDetailed::PIE_CHART_LIMIT - 2; - $numOfPies = count($pies); - foreach ($pies as $i => $pie) { - if ( - // Show max. 5 elements: if there are more than 5, show 4 + `…` - $i > $maxVisiblePies && $numOfPies > HostListItemDetailed::PIE_CHART_LIMIT - ) { - $performanceData->addHtml(new HtmlElement('span', null, Text::create('…'))); - break; - } - - $performanceData->addHtml(HtmlString::create($pie)); - } - } - - if (! $statusIcons->isEmpty()) { - $footer->addHtml($statusIcons); - } - - if (! $performanceData->isEmpty()) { - $footer->addHtml($performanceData); - } - } -} diff --git a/library/Icingadb/Widget/ItemList/HostListItemMinimal.php b/library/Icingadb/Widget/ItemList/HostListItemMinimal.php deleted file mode 100644 index f04b991e..00000000 --- a/library/Icingadb/Widget/ItemList/HostListItemMinimal.php +++ /dev/null @@ -1,18 +0,0 @@ - + * @extends ItemList // TODO: fix type */ class ObjectList extends ItemList { @@ -41,6 +45,10 @@ class ObjectList extends ItemList parent::__construct($data, function (Model $item) { if ($item instanceof RedundancyGroup) { return new RedundancyGroupRenderer(); + } elseif ($item instanceof Service) { + return new ServiceRenderer(); + } elseif ($item instanceof Host) { + return new HostRenderer(); } else { throw new NotImplementedError('Not implemented'); } @@ -115,32 +123,64 @@ class ObjectList extends ItemList return $layout; } + /** + * @param object $data + * + * @return ListItem + */ protected function createListItem(object $data) { - /** @var UnreachableParent|DependencyNode $data */ - if ($data->redundancy_group_id !== null) { - return (new ListItem($data->redundancy_group, $this)) - ->addAttributes(['data-action-item' => true]); + if ($data instanceof DependencyNode) { + if (isset($data->redundancy_group_id)) { + $object = $data->redundancy_group; + } else { + $object = isset($data->service_id) ? $data->service : $data->host; + } + } else { + $object = $data; } - // TODO: Adjust the remaining stuff once self::getItemLayout supports host and services - - $object = $data->service_id !== null ? $data->service : $data->host; - - switch (false) { - case MinimalItemLayout::class: - $class = $object instanceof Host ? HostListItemMinimal::class : ServiceListItemMinimal::class; - break; - case DetailedItemLayout::class: - $this->removeAttribute('class', 'default-layout'); - - $class = $object instanceof Host ? HostListItemDetailed::class : ServiceListItemDetailed::class; - break; - default: - $class = $object instanceof Host ? HostListItem::class : ServiceListItem::class; + if (isset($object->icon_image->icon_image)) { + $this->setHasIconImages(true); } - return new $class($object, $this); + $item = parent::createListItem($object); + + if ($this->getDetailActionsDisabled()) { + return $item; + } + + switch (true) { + case $object instanceof RedundancyGroup: + $this->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->id))); + + break; + case $object instanceof Service: + $this->addDetailFilterAttribute( + $item, + Filter::all( + Filter::equal('name', $object->name), + Filter::equal('host.name', $object->host->name) + ) + ); + + $this->addMultiSelectFilterAttribute( + $item, + Filter::all( + Filter::equal('service.name', $object->name), + Filter::equal('host.name', $object->host->name) + ) + ); + + break; + case $object instanceof Host: + $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); + $this->addMultiSelectFilterAttribute($item, Filter::equal('host.name', $object->name)); + + break; + } + + return $item; } protected function assemble(): void diff --git a/library/Icingadb/Widget/ItemList/ServiceDetailHeader.php b/library/Icingadb/Widget/ItemList/ServiceDetailHeader.php deleted file mode 100644 index 8c5094d7..00000000 --- a/library/Icingadb/Widget/ItemList/ServiceDetailHeader.php +++ /dev/null @@ -1,69 +0,0 @@ -state->state_type === 'soft') { - $stateType = 'soft_state'; - $previousStateType = 'previous_soft_state'; - - if ($this->state->previous_soft_state === 0) { - $previousStateType = 'hard_state'; - } - } else { - $stateType = 'hard_state'; - $previousStateType = 'previous_hard_state'; - - if ($this->state->hard_state === $this->state->previous_hard_state) { - $previousStateType = 'previous_soft_state'; - } - } - - $state = ServiceStates::text($this->state->$stateType); - $previousState = ServiceStates::text($this->state->$previousStateType); - - $stateChange = new StateChange($state, $previousState); - if ($stateType === 'soft_state') { - $stateChange->setCurrentStateBallSize(StateBall::SIZE_MEDIUM_LARGE); - } - - if ($previousStateType === 'previous_soft_state') { - $stateChange->setPreviousStateBallSize(StateBall::SIZE_MEDIUM_LARGE); - if ($stateType === 'soft_state') { - $visual->getAttributes()->add('class', 'small-state-change'); - } - } - - $stateChange->setIcon($this->state->getIcon()); - $stateChange->setHandled( - $this->state->is_problem && ($this->state->is_handled || ! $this->state->is_reachable) - ); - - $visual->addHtml($stateChange); - } - - protected function assemble(): void - { - $attributes = $this->list->getAttributes(); - if (! in_array('minimal', $attributes->get('class')->getValue())) { - $attributes->add('class', 'minimal'); - } - - parent::assemble(); - } -} diff --git a/library/Icingadb/Widget/ItemList/ServiceList.php b/library/Icingadb/Widget/ItemList/ServiceList.php deleted file mode 100644 index 8d41a701..00000000 --- a/library/Icingadb/Widget/ItemList/ServiceList.php +++ /dev/null @@ -1,36 +0,0 @@ - 'service-list']; - - protected function getItemClass(): string - { - switch ($this->getViewMode()) { - case 'minimal': - return ServiceListItemMinimal::class; - case 'detailed': - $this->removeAttribute('class', 'default-layout'); - - return ServiceListItemDetailed::class; - case 'objectHeader': - return ServiceDetailHeader::class; - default: - return ServiceListItem::class; - } - } - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setMultiselectUrl(Links::servicesDetails()); - $this->setDetailUrl(Url::fromPath('icingadb/service')); - } -} diff --git a/library/Icingadb/Widget/ItemList/ServiceListItem.php b/library/Icingadb/Widget/ItemList/ServiceListItem.php deleted file mode 100644 index a9745817..00000000 --- a/library/Icingadb/Widget/ItemList/ServiceListItem.php +++ /dev/null @@ -1,18 +0,0 @@ - 'status-icons'])); - - if ($this->item->state->last_comment->service_id === $this->item->id) { - $comment = $this->item->state->last_comment; - $comment->service = $this->item; - $comment = (new CommentList([$comment])) - ->setNoSubjectLink() - ->setObjectLinkDisabled() - ->setDetailActionsDisabled(); - - $statusIcons->addHtml( - new HtmlElement( - 'div', - Attributes::create(['class' => 'comment-wrapper']), - new HtmlElement('div', Attributes::create(['class' => 'comment-popup']), $comment), - (new Icon('comments', ['class' => 'comment-icon'])) - ) - ); - } - - if ($this->item->state->is_flapping) { - $statusIcons->addHtml(new Icon( - 'random', - [ - 'title' => sprintf( - t('Service "%s" on "%s" is in flapping state'), - $this->item->display_name, - $this->item->host->display_name - ), - ] - )); - } - - if (! $this->item->notifications_enabled) { - $statusIcons->addHtml(new Icon('bell-slash', ['title' => t('Notifications disabled')])); - } - - if (! $this->item->active_checks_enabled) { - $statusIcons->addHtml(new Icon('eye-slash', ['title' => t('Active checks disabled')])); - } - - $performanceData = new HtmlElement('div', Attributes::create(['class' => 'performance-data'])); - if ($this->item->state->performance_data) { - $pieChartData = PerfDataSet::fromString($this->item->state->normalized_performance_data)->asArray(); - - $pies = []; - foreach ($pieChartData as $i => $perfdata) { - if ($perfdata->isVisualizable()) { - $pies[] = $perfdata->asInlinePie()->render(); - } - - // Check if number of visualizable pie charts is larger than PIE_CHART_LIMIT - if (count($pies) > ServiceListItemDetailed::PIE_CHART_LIMIT) { - break; - } - } - - $maxVisiblePies = ServiceListItemDetailed::PIE_CHART_LIMIT - 2; - $numOfPies = count($pies); - foreach ($pies as $i => $pie) { - if ( - // Show max. 5 elements: if there are more than 5, show 4 + `…` - $i > $maxVisiblePies && $numOfPies > ServiceListItemDetailed::PIE_CHART_LIMIT - ) { - $performanceData->addHtml(new HtmlElement('span', null, Text::create('…'))); - break; - } - - $performanceData->addHtml(HtmlString::create($pie)); - } - } - - if (! $statusIcons->isEmpty()) { - $footer->addHtml($statusIcons); - } - - if (! $performanceData->isEmpty()) { - $footer->addHtml($performanceData); - } - } -} diff --git a/library/Icingadb/Widget/ItemList/ServiceListItemMinimal.php b/library/Icingadb/Widget/ItemList/ServiceListItemMinimal.php deleted file mode 100644 index e7a1bc66..00000000 --- a/library/Icingadb/Widget/ItemList/ServiceListItemMinimal.php +++ /dev/null @@ -1,18 +0,0 @@ -hasIconImages; - } - - /** - * Set whether the list contains at least one item with an icon_image - * - * @param bool $hasIconImages - * - * @return $this - */ - public function setHasIconImages(bool $hasIconImages): self - { - $this->hasIconImages = $hasIconImages; - - return $this; - } - - protected function assemble(): void - { - $this->addAttributes(['class' => $this->getViewMode()]); - - parent::assemble(); - - if ($this->data instanceof VolatileStateResults && $this->data->isRedisUnavailable()) { - $this->prependWrapper((new HtmlDocument())->addHtml(new Notice( - t('Redis is currently unavailable. The shown information might be outdated.') - ))); - } - } -} diff --git a/library/Icingadb/Widget/ItemList/StateListItem.php b/library/Icingadb/Widget/ItemList/StateListItem.php deleted file mode 100644 index b0d9dc92..00000000 --- a/library/Icingadb/Widget/ItemList/StateListItem.php +++ /dev/null @@ -1,174 +0,0 @@ -state = $this->item->state; - - if (isset($this->item->icon_image->icon_image)) { - $this->list->setHasIconImages(true); - } - } - - abstract protected function createSubject(); - - abstract protected function getStateBallSize(): string; - - /** - * @return ?BaseHtmlElement - */ - protected function createIconImage(): ?BaseHtmlElement - { - if (! $this->list->hasIconImages()) { - return null; - } - - $iconImage = HtmlElement::create('div', [ - 'class' => 'icon-image', - ]); - - $this->assembleIconImage($iconImage); - - return $iconImage; - } - - protected function assembleCaption(BaseHtmlElement $caption): void - { - if ($this->state->soft_state === null && $this->state->output === null) { - $caption->addHtml(Text::create($this->translate('Waiting for Icinga DB to synchronize the state.'))); - } else { - if (empty($this->state->output)) { - $pluginOutput = new EmptyState($this->translate('Output unavailable.')); - } else { - $pluginOutput = new PluginOutputContainer(PluginOutput::fromObject($this->item)); - } - - $caption->addHtml($pluginOutput); - } - } - - protected function assembleIconImage(BaseHtmlElement $iconImage): void - { - if (isset($this->item->icon_image->icon_image)) { - $iconImage->addHtml(new IconImage($this->item->icon_image->icon_image, $this->item->icon_image_alt)); - } else { - $iconImage->addAttributes(['class' => 'placeholder']); - } - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $title->addHtml(Html::sprintf( - $this->translate('%s is %s', ' is '), - $this->createSubject(), - Html::tag('span', ['class' => 'state-text'], $this->state->getStateTextTranslated()) - )); - - if (isset($this->state->affects_children) && $this->state->affects_children) { - $total = (int) $this->item->total_children; - - if ($total > 1000) { - $total = '1000+'; - $tooltip = $this->translate('Up to 1000+ affected objects'); - } else { - $tooltip = sprintf( - $this->translatePlural( - '%d affected object', - 'Up to %d affected objects', - $total - ), - $total - ); - } - - $icon = new Icon(Icons::UNREACHABLE); - - $title->addHtml(new HtmlElement( - 'span', - Attributes::create([ - 'class' => 'affected-objects', - 'title' => $tooltip - ]), - $icon, - Text::create($total) - )); - } - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - $stateBall = new StateBall($this->state->getStateText(), $this->getStateBallSize()); - $stateBall->add($this->state->getIcon()); - if ($this->state->is_problem && ($this->state->is_handled || ! $this->state->is_reachable)) { - $stateBall->getAttributes()->add('class', 'handled'); - } - - $visual->addHtml($stateBall); - if ($this->state->state_type === 'soft') { - $visual->addHtml( - new CheckAttempt((int) $this->state->check_attempt, (int) $this->item->max_check_attempts) - ); - } - } - - protected function createTimestamp(): ?BaseHtmlElement - { - $since = null; - if ($this->state->is_overdue) { - $since = new TimeSince($this->state->next_update->getTimestamp()); - $since->prepend($this->translate('Overdue') . ' '); - $since->prependHtml(new Icon(Icons::WARNING)); - } elseif ($this->state->last_state_change !== null && $this->state->last_state_change->getTimestamp() > 0) { - $since = new TimeSince($this->state->last_state_change->getTimestamp()); - } - - return $since; - } - - protected function assemble(): void - { - if ($this->state->is_overdue) { - $this->addAttributes(['class' => 'overdue']); - } - - $this->add([ - $this->createVisual(), - $this->createIconImage(), - $this->createMain() - ]); - } -} diff --git a/public/css/common.less b/public/css/common.less index 3a6b5d13..b5f17b1a 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -384,7 +384,8 @@ div.show-more { } .history-list, -.objectHeader { +.header-item-layout.host, +.header-item-layout.service { .visual.small-state-change .state-change { padding-top: .25em; } diff --git a/public/css/list/item-list.less b/public/css/list/item-list.less index aead7cde..256ca42f 100644 --- a/public/css/list/item-list.less +++ b/public/css/list/item-list.less @@ -56,10 +56,6 @@ > .empty-state { padding: .25em; } - - .check-attempt { - display: none; // TODO: The new renderer shouldn't render it in the first place - } } .item-list.minimal { @@ -143,7 +139,8 @@ // TODO: Can be simplified (`.controls .list-item`) once the only list-items in controls are those in the multi select views .controls .item-list:not(.detailed):not(.minimal) .list-item { - .plugin-output { + .plugin-output { //TODO: why ?? multiselect items has bigger gap now + //seems dead code, remove it when cleaning up line-height: 1.5 } From bfe1681859805e5fe470f7d0fbba5465f0df019b Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Thu, 20 Mar 2025 09:55:30 +0100 Subject: [PATCH 12/35] Introduce User/UsergroupRenderer - Use it in ObjectList and ObjectHeader - Remove now superfluous (User/Usergroup)Table(Row) classes and css --- application/controllers/UserController.php | 4 +- .../controllers/UsergroupController.php | 4 +- .../controllers/UsergroupsController.php | 8 ++- application/controllers/UsersController.php | 8 ++- library/Icingadb/View/UserRenderer.php | 66 +++++++++++++++++++ library/Icingadb/View/UsergroupRenderer.php | 66 +++++++++++++++++++ .../Icingadb/Widget/Detail/EventDetail.php | 6 +- .../Icingadb/Widget/Detail/ObjectHeader.php | 12 ++++ library/Icingadb/Widget/Detail/UserDetail.php | 5 +- .../Widget/Detail/UsergroupDetail.php | 5 +- .../Icingadb/Widget/ItemList/ObjectList.php | 13 ++++ .../Icingadb/Widget/ItemTable/UserTable.php | 27 -------- .../Widget/ItemTable/UserTableRow.php | 61 ----------------- .../Widget/ItemTable/UsergroupTable.php | 27 -------- .../Widget/ItemTable/UsergroupTableRow.php | 61 ----------------- public/css/common.less | 13 +--- 16 files changed, 185 insertions(+), 201 deletions(-) create mode 100644 library/Icingadb/View/UserRenderer.php create mode 100644 library/Icingadb/View/UsergroupRenderer.php delete mode 100644 library/Icingadb/Widget/ItemTable/UserTable.php delete mode 100644 library/Icingadb/Widget/ItemTable/UserTableRow.php delete mode 100644 library/Icingadb/Widget/ItemTable/UsergroupTable.php delete mode 100644 library/Icingadb/Widget/ItemTable/UsergroupTableRow.php diff --git a/application/controllers/UserController.php b/application/controllers/UserController.php index a80f2b45..6afc0921 100644 --- a/application/controllers/UserController.php +++ b/application/controllers/UserController.php @@ -7,8 +7,8 @@ namespace Icinga\Module\Icingadb\Controllers; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Web\Controller; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\UserDetail; -use Icinga\Module\Icingadb\Widget\ItemTable\UserTableRow; use ipl\Stdlib\Filter; class UserController extends Controller @@ -40,7 +40,7 @@ class UserController extends Controller public function indexAction() { - $this->addControl(new UserTableRow($this->user)); + $this->addControl(new ObjectHeader($this->user)); $this->addContent(new UserDetail($this->user)); $this->setAutorefreshInterval(10); diff --git a/application/controllers/UsergroupController.php b/application/controllers/UsergroupController.php index 8c3fed8b..9ea90b9b 100644 --- a/application/controllers/UsergroupController.php +++ b/application/controllers/UsergroupController.php @@ -7,8 +7,8 @@ namespace Icinga\Module\Icingadb\Controllers; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Web\Controller; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\UsergroupDetail; -use Icinga\Module\Icingadb\Widget\ItemTable\UsergroupTableRow; use ipl\Stdlib\Filter; class UsergroupController extends Controller @@ -40,7 +40,7 @@ class UsergroupController extends Controller public function indexAction() { - $this->addControl(new UsergroupTableRow($this->usergroup)); + $this->addControl(new ObjectHeader($this->usergroup)); $this->addContent(new UsergroupDetail($this->usergroup)); $this->setAutorefreshInterval(10); diff --git a/application/controllers/UsergroupsController.php b/application/controllers/UsergroupsController.php index 99a73a96..13f3db74 100644 --- a/application/controllers/UsergroupsController.php +++ b/application/controllers/UsergroupsController.php @@ -8,10 +8,11 @@ use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemTable\UsergroupTable; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; +use ipl\Web\Url; class UsergroupsController extends Controller { @@ -64,7 +65,10 @@ class UsergroupsController extends Controller $this->addControl($limitControl); $this->addControl($searchBar); - $this->addContent(new UsergroupTable($usergroups)); + $this->addContent( + (new ObjectList($usergroups)) + ->setDetailUrl(Url::fromPath('icingadb/usergroup')) + ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); diff --git a/application/controllers/UsersController.php b/application/controllers/UsersController.php index 83ee96dc..4d6d0804 100644 --- a/application/controllers/UsersController.php +++ b/application/controllers/UsersController.php @@ -8,10 +8,11 @@ use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemTable\UserTable; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; +use ipl\Web\Url; class UsersController extends Controller { @@ -66,7 +67,10 @@ class UsersController extends Controller $this->addControl($limitControl); $this->addControl($searchBar); - $this->addContent(new UserTable($users)); + $this->addContent( + (new ObjectList($users)) + ->setDetailUrl(Url::fromPath('icingadb/user')) + ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); diff --git a/library/Icingadb/View/UserRenderer.php b/library/Icingadb/View/UserRenderer.php new file mode 100644 index 00000000..c2a11e82 --- /dev/null +++ b/library/Icingadb/View/UserRenderer.php @@ -0,0 +1,66 @@ + */ +class UserRenderer implements ItemRenderer +{ + use Translation; + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue('user'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $visual->addHtml(new HtmlElement( + 'div', + Attributes::create(['class' => 'user-ball']), + Text::create($item->display_name[0]) + )); + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + if ($layout === 'header') { + $title->addHtml(new HtmlElement( + 'span', + Attributes::create(['class' => 'subject']), + Text::create($item->display_name) + )); + } else { + $title->addHtml(new Link($item->display_name, Links::user($item), ['class' => 'subject'])); + } + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections + } +} diff --git a/library/Icingadb/View/UsergroupRenderer.php b/library/Icingadb/View/UsergroupRenderer.php new file mode 100644 index 00000000..b6e92976 --- /dev/null +++ b/library/Icingadb/View/UsergroupRenderer.php @@ -0,0 +1,66 @@ + */ +class UsergroupRenderer implements ItemRenderer +{ + use Translation; + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue('user-group'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $visual->addHtml(new HtmlElement( + 'div', + Attributes::create(['class' => 'usergroup-ball']), + Text::create($item->display_name[0]) + )); + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + if ($layout === 'header') { + $title->addHtml(new HtmlElement( + 'span', + Attributes::create(['class' => 'subject']), + Text::create($item->display_name) + )); + } else { + $title->addHtml(new Link($item->display_name, Links::usergroup($item), ['class' => 'subject'])); + } + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections + } +} diff --git a/library/Icingadb/Widget/Detail/EventDetail.php b/library/Icingadb/Widget/Detail/EventDetail.php index ccbfbc92..e2c402bf 100644 --- a/library/Icingadb/Widget/Detail/EventDetail.php +++ b/library/Icingadb/Widget/Detail/EventDetail.php @@ -15,6 +15,7 @@ use Icinga\Module\Icingadb\Common\HostStates; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\TicketLinks; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Common\ServiceStates; @@ -27,10 +28,10 @@ use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Model\StateHistory; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\ShowMore; +use ipl\Web\Url; use ipl\Web\Widget\CopyToClipboard; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; -use Icinga\Module\Icingadb\Widget\ItemTable\UserTable; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use ipl\Html\BaseHtmlElement; use ipl\Html\FormattedString; @@ -169,7 +170,8 @@ class EventDetail extends BaseHtmlElement $users = $users->execute(); /** @var ResultSet $users */ - $notifiedUsers[] = new UserTable($users); + $notifiedUsers[] = (new ObjectList($users)) + ->setDetailUrl(Url::fromPath('icingadb/user')); $notifiedUsers[] = (new ShowMore( $users, Links::users()->addParams(['notification_history.id' => bin2hex($notification->id)]), diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index 4178ee59..15a2978c 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -8,9 +8,13 @@ use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; +use Icinga\Module\Icingadb\Model\User; +use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; +use Icinga\Module\Icingadb\View\UsergroupRenderer; +use Icinga\Module\Icingadb\View\UserRenderer; use ipl\Html\BaseHtmlElement; use ipl\Orm\Model; use ipl\Web\Layout\HeaderItemLayout; @@ -41,6 +45,14 @@ class ObjectHeader extends BaseHtmlElement case $this->object instanceof Host: $renderer = new HostRenderer(); + break; + case $this->object instanceof Usergroup: + $renderer = new UsergroupRenderer(); + + break; + case $this->object instanceof User: + $renderer = new UserRenderer(); + break; default: throw new NotImplementedError('Not implemented'); diff --git a/library/Icingadb/Widget/Detail/UserDetail.php b/library/Icingadb/Widget/Detail/UserDetail.php index 99c23058..e5d291c8 100644 --- a/library/Icingadb/Widget/Detail/UserDetail.php +++ b/library/Icingadb/Widget/Detail/UserDetail.php @@ -9,11 +9,12 @@ use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\User; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\Attributes; +use ipl\Web\Url; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; -use Icinga\Module\Icingadb\Widget\ItemTable\UsergroupTable; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\Text; @@ -89,7 +90,7 @@ class UserDetail extends BaseHtmlElement return [ new HtmlElement('h2', null, Text::create(t('Groups'))), - new UsergroupTable($userGroups), + (new ObjectList($userGroups))->setDetailUrl(Url::fromPath('icingadb/usergroup')), $showMoreLink ]; } diff --git a/library/Icingadb/Widget/Detail/UsergroupDetail.php b/library/Icingadb/Widget/Detail/UsergroupDetail.php index 249c7955..a8d78347 100644 --- a/library/Icingadb/Widget/Detail/UsergroupDetail.php +++ b/library/Icingadb/Widget/Detail/UsergroupDetail.php @@ -9,12 +9,13 @@ use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Usergroup; -use Icinga\Module\Icingadb\Widget\ItemTable\UserTable; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\Text; +use ipl\Web\Url; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; @@ -74,7 +75,7 @@ class UsergroupDetail extends BaseHtmlElement return [ new HtmlElement('h2', null, Text::create(t('Users'))), - new UserTable($users), + (new ObjectList($users))->setDetailUrl(Url::fromPath('icingadb/user')), $showMoreLink ]; } diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 23d6b9d4..959d4463 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -11,10 +11,14 @@ use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\UnreachableParent; +use Icinga\Module\Icingadb\Model\User; +use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; +use Icinga\Module\Icingadb\View\UsergroupRenderer; +use Icinga\Module\Icingadb\View\UserRenderer; use Icinga\Module\Icingadb\Widget\Notice; use InvalidArgumentException; use ipl\Html\HtmlDocument; @@ -49,6 +53,10 @@ class ObjectList extends ItemList return new ServiceRenderer(); } elseif ($item instanceof Host) { return new HostRenderer(); + } elseif ($item instanceof Usergroup) { + return new UsergroupRenderer(); + } elseif ($item instanceof User) { + return new UserRenderer(); } else { throw new NotImplementedError('Not implemented'); } @@ -177,6 +185,11 @@ class ObjectList extends ItemList $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); $this->addMultiSelectFilterAttribute($item, Filter::equal('host.name', $object->name)); + break; + + case $object instanceof Usergroup || $data instanceof User: + $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); + break; } diff --git a/library/Icingadb/Widget/ItemTable/UserTable.php b/library/Icingadb/Widget/ItemTable/UserTable.php deleted file mode 100644 index 432817b5..00000000 --- a/library/Icingadb/Widget/ItemTable/UserTable.php +++ /dev/null @@ -1,27 +0,0 @@ - 'user-table']; - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setDetailUrl(Url::fromPath('icingadb/user')); - } - - protected function getItemClass(): string - { - return UserTableRow::class; - } -} diff --git a/library/Icingadb/Widget/ItemTable/UserTableRow.php b/library/Icingadb/Widget/ItemTable/UserTableRow.php deleted file mode 100644 index c10851e1..00000000 --- a/library/Icingadb/Widget/ItemTable/UserTableRow.php +++ /dev/null @@ -1,61 +0,0 @@ - 'user-table-row']; - - protected function init(): void - { - if (isset($this->table)) { - $this->table->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)); - } - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - $visual->addHtml(new HtmlElement( - 'div', - Attributes::create(['class' => 'user-ball']), - Text::create($this->item->display_name[0]) - )); - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $title->addHtml( - isset($this->table) - ? new Link($this->item->display_name, Links::user($this->item), ['class' => 'subject']) - : new HtmlElement( - 'span', - Attributes::create(['class' => 'subject']), - Text::create($this->item->display_name) - ), - new HtmlElement('span', null, Text::create($this->item->name)) - ); - } - - protected function assembleColumns(HtmlDocument $columns): void - { - } -} diff --git a/library/Icingadb/Widget/ItemTable/UsergroupTable.php b/library/Icingadb/Widget/ItemTable/UsergroupTable.php deleted file mode 100644 index 77d3ba90..00000000 --- a/library/Icingadb/Widget/ItemTable/UsergroupTable.php +++ /dev/null @@ -1,27 +0,0 @@ - 'usergroup-table']; - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setDetailUrl(Url::fromPath('icingadb/usergroup')); - } - - protected function getItemClass(): string - { - return UsergroupTableRow::class; - } -} diff --git a/library/Icingadb/Widget/ItemTable/UsergroupTableRow.php b/library/Icingadb/Widget/ItemTable/UsergroupTableRow.php deleted file mode 100644 index c3cbf74e..00000000 --- a/library/Icingadb/Widget/ItemTable/UsergroupTableRow.php +++ /dev/null @@ -1,61 +0,0 @@ - 'usergroup-table-row']; - - protected function init(): void - { - if (isset($this->table)) { - $this->table->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)); - } - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - $visual->addHtml(new HtmlElement( - 'div', - Attributes::create(['class' => 'usergroup-ball']), - Text::create($this->item->display_name[0]) - )); - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $title->addHtml( - isset($this->table) - ? new Link($this->item->display_name, Links::usergroup($this->item), ['class' => 'subject']) - : new HtmlElement( - 'span', - Attributes::create(['class' => 'subject']), - Text::create($this->item->display_name) - ), - new HtmlElement('span', null, Text::create($this->item->name)) - ); - } - - protected function assembleColumns(HtmlDocument $columns): void - { - } -} diff --git a/public/css/common.less b/public/css/common.less index b5f17b1a..14bd29f3 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -325,18 +325,11 @@ div.show-more { &.servicegroup-table { --columns: 1; } - - &.user-table, // TODO: make them lists..... - &.usergroup-table { - --columns: 0; - } } } .hostgroup-table, -.servicegroup-table, -.usergroup-table, -.user-table { +.servicegroup-table { .title .column-content > * { display: block; max-width: fit-content; @@ -348,9 +341,7 @@ div.show-more { } .controls .hostgroup-table-row, -.controls .servicegroup-table-row, -.controls .usergroup-table-row, -.controls .user-table-row { +.controls .servicegroup-table-row { .title .column-content { display: inline-flex; align-items: center; From c55f1dceb8900cafdfbb35eebc1e08179a1b2dd2 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Fri, 21 Mar 2025 08:52:50 +0100 Subject: [PATCH 13/35] Introduce `TicketLinkObjectList` and `CommentRenderer` TicketLinkObjectList: This class creates object list with ticket links using TicketLinks trait CommentRenderer: Defines the rendering rules for Comment object Cleanup css and unused classes Adjust comment-popup.less --- application/controllers/CommentController.php | 10 +- .../controllers/CommentsController.php | 11 +- library/Icingadb/Common/TicketLinks.php | 7 +- .../View/BaseHostAndServiceRenderer.php | 13 +- library/Icingadb/View/CommentRenderer.php | 161 ++++++++++++++++++ .../Icingadb/Widget/Detail/ObjectDetail.php | 7 +- .../Icingadb/Widget/Detail/ObjectHeader.php | 6 + .../Widget/ItemList/BaseCommentListItem.php | 131 -------------- .../Icingadb/Widget/ItemList/CommentList.php | 49 ------ .../Widget/ItemList/CommentListItem.php | 12 -- .../ItemList/CommentListItemMinimal.php | 21 --- .../Icingadb/Widget/ItemList/ObjectList.php | 13 +- .../Widget/ItemList/TicketLinkObjectList.php | 32 ++++ public/css/common.less | 10 -- public/css/list/comment-list.less | 50 ------ public/css/widget/comment-popup.less | 28 ++- 16 files changed, 254 insertions(+), 307 deletions(-) create mode 100644 library/Icingadb/View/CommentRenderer.php delete mode 100644 library/Icingadb/Widget/ItemList/BaseCommentListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/CommentList.php delete mode 100644 library/Icingadb/Widget/ItemList/CommentListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/CommentListItemMinimal.php create mode 100644 library/Icingadb/Widget/ItemList/TicketLinkObjectList.php delete mode 100644 public/css/list/comment-list.less diff --git a/application/controllers/CommentController.php b/application/controllers/CommentController.php index b184d6b9..ab79ce23 100644 --- a/application/controllers/CommentController.php +++ b/application/controllers/CommentController.php @@ -10,7 +10,7 @@ use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\CommentDetail; -use Icinga\Module\Icingadb\Widget\ItemList\CommentList; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use ipl\Stdlib\Filter; use ipl\Web\Url; @@ -49,13 +49,9 @@ class CommentController extends Controller public function indexAction() { - $this->addControl((new CommentList([$this->comment])) - ->setViewMode('minimal') - ->setDetailActionsDisabled() - ->setCaptionDisabled() - ->setNoSubjectLink()); + $this->addControl(new ObjectHeader($this->comment)); - $this->addContent((new CommentDetail($this->comment))->setTicketLinkEnabled()); + $this->addContent(new CommentDetail($this->comment)); $this->setAutorefreshInterval(10); } diff --git a/application/controllers/CommentsController.php b/application/controllers/CommentsController.php index 2358423d..d84bf8ca 100644 --- a/application/controllers/CommentsController.php +++ b/application/controllers/CommentsController.php @@ -10,8 +10,8 @@ use Icinga\Module\Icingadb\Forms\Command\Object\DeleteCommentForm; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemList\CommentList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; @@ -81,7 +81,12 @@ class CommentsController extends Controller $results = $comments->execute(); - $this->addContent((new CommentList($results))->setViewMode($viewModeSwitcher->getViewMode())); + $this->addContent( + (new ObjectList($results)) + ->setViewMode($viewModeSwitcher->getViewMode()) + ->setMultiselectUrl(Links::commentsDetails()) + ->setDetailUrl(Url::fromPath('icingadb/comment')) + ); if ($compact) { $this->addContent( @@ -156,7 +161,7 @@ class CommentsController extends Controller $rs = $comments->execute(); - $this->addControl((new CommentList($rs))->setViewMode('minimal')); + $this->addControl((new ObjectList($rs))->setViewMode('minimal')); $this->addControl(new ShowMore( $rs, diff --git a/library/Icingadb/Common/TicketLinks.php b/library/Icingadb/Common/TicketLinks.php index 3fb01c60..70bf48f9 100644 --- a/library/Icingadb/Common/TicketLinks.php +++ b/library/Icingadb/Common/TicketLinks.php @@ -5,11 +5,12 @@ namespace Icinga\Module\Icingadb\Common; use Icinga\Application\Hook; +use Icinga\Application\Hook\TicketHook; trait TicketLinks { /** @var bool */ - protected $ticketLinkEnabled = false; + protected $ticketLinkEnabled = false; // TODO: Remove once all usages are removed /** * Set whether list items should render host and service links @@ -43,11 +44,9 @@ trait TicketLinks public function createTicketLinks($text): string { if (Hook::has('ticket')) { + /** @var TicketHook $tickets */ $tickets = Hook::first('ticket'); - } - if ($this->getTicketLinkEnabled() && isset($tickets)) { - /** @var \Icinga\Application\Hook\TicketHook $tickets */ return $tickets->createLinks($text); } diff --git a/library/Icingadb/View/BaseHostAndServiceRenderer.php b/library/Icingadb/View/BaseHostAndServiceRenderer.php index 81de4aa9..2b4c87e9 100644 --- a/library/Icingadb/View/BaseHostAndServiceRenderer.php +++ b/library/Icingadb/View/BaseHostAndServiceRenderer.php @@ -13,7 +13,6 @@ use Icinga\Module\Icingadb\Util\PerfDataSet; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\CheckAttempt; use Icinga\Module\Icingadb\Widget\IconImage; -use Icinga\Module\Icingadb\Widget\ItemList\CommentList; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use Icinga\Module\Icingadb\Widget\StateChange; use ipl\Html\Attributes; @@ -25,6 +24,7 @@ use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; +use ipl\Web\Layout\ItemLayout; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\Icon; use ipl\Web\Widget\StateBall; @@ -187,16 +187,15 @@ abstract class BaseHostAndServiceRenderer implements ItemRenderer $comment->host = $item; } - $comment = (new CommentList([$comment])) - ->setNoSubjectLink() - ->setObjectLinkDisabled() - ->setDetailActionsDisabled(); - $statusIcons->addHtml( new HtmlElement( 'div', Attributes::create(['class' => 'comment-wrapper']), - new HtmlElement('div', Attributes::create(['class' => 'comment-popup']), $comment), + new HtmlElement( + 'div', + Attributes::create(['class' => 'comment-popup']), + new ItemLayout($comment, (new CommentRenderer())->setIsDetailView()) + ), (new Icon('comments', ['class' => 'comment-icon'])) ) ); diff --git a/library/Icingadb/View/CommentRenderer.php b/library/Icingadb/View/CommentRenderer.php new file mode 100644 index 00000000..a258bc25 --- /dev/null +++ b/library/Icingadb/View/CommentRenderer.php @@ -0,0 +1,161 @@ + */ +class CommentRenderer implements ItemRenderer +{ + use Translation; + use TicketLinks; + use HostLink; + use ServiceLink; + + /** + * @var bool Whether the item is being rendered in the detail view of the associated object (host/service) + * + * When true: + * + * - Creation of the link of the associated object (host/service) is omitted from the title + * - The ticket link will be created + */ + protected $isDetailView = false; + + /** + * Set whether the item is being rendered in the detail view of the associated object (host/service) + * + * @param bool $state + * + * @return $this + */ + public function setIsDetailView(bool $state = true): self + { + $this->isDetailView = $state; + + return $this; + } + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue('comment'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $visual->addHtml(new HtmlElement( + 'div', + Attributes::create(['class' => 'user-ball']), + Text::create($item->author[0]) + )); + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + $isAck = $item->entry_type === 'ack'; + $expires = $item->expire_time; + + $subjectText = sprintf( + $isAck + ? $this->translate('%s acknowledged', '..') + : $this->translate('%s commented', '..'), + $item->author + ); + + $headerParts = [ + new Icon(Icons::USER), + $layout === 'header' + ? new HtmlElement('span', Attributes::create(['class' => 'subject']), Text::create($subjectText)) + : new Link($subjectText, Links::comment($item), ['class' => 'subject']) + ]; + + if ($isAck) { + $label = [Text::create('ack')]; + + if ($item->is_persistent) { + array_unshift($label, new Icon(Icons::IS_PERSISTENT)); + } + + $headerParts[] = Text::create(' '); + $headerParts[] = new HtmlElement('span', Attributes::create(['class' => 'ack-badge badge']), ...$label); + } + + if ($expires !== null) { + $headerParts[] = Text::create(' '); + $headerParts[] = new HtmlElement( + 'span', + Attributes::create(['class' => 'ack-badge badge']), + Text::create($this->translate('EXPIRES')) + ); + } + + if ($this->isDetailView) { + // pass + } elseif ($item->object_type === 'host') { + $headerParts[] = $this->createHostLink($item->host, true); + } else { + $headerParts[] = $this->createServiceLink($item->service, $item->service->host, true); + } + + $title->addHtml(...$headerParts); + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $markdownLine = new MarkdownLine($this->isDetailView ? $this->createTicketLinks($item->text) : $item->text); + + $caption->getAttributes()->add($markdownLine->getAttributes()); + $caption->addFrom($markdownLine); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + if ($item->expire_time) { + $info->addHtml(new HtmlElement( + 'span', + null, + FormattedString::create( + $this->translate("expires %s"), + new TimeUntil($item->expire_time->getTimestamp()) + ) + )); + } else { + $info->addHtml(new HtmlElement( + 'span', + null, + FormattedString::create( + $this->translate("created %s"), + new TimeAgo($item->entry_time->getTimestamp()) + ) + )); + } + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections + } +} diff --git a/library/Icingadb/Widget/Detail/ObjectDetail.php b/library/Icingadb/Widget/Detail/ObjectDetail.php index 766df633..6661c7f5 100644 --- a/library/Icingadb/Widget/Detail/ObjectDetail.php +++ b/library/Icingadb/Widget/Detail/ObjectDetail.php @@ -29,6 +29,7 @@ use Icinga\Module\Icingadb\Model\UnreachableParent; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Navigation\Action; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; +use Icinga\Module\Icingadb\Widget\ItemList\TicketLinkObjectList; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Common\ServiceLinks; use Icinga\Module\Icingadb\Forms\Command\Object\ToggleObjectFeaturesForm; @@ -42,11 +43,11 @@ use Icinga\Module\Icingadb\Widget\ItemList\DowntimeList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Sql\Expression; use ipl\Sql\Filter\Exists; +use ipl\Web\Url; use ipl\Web\Widget\CopyToClipboard; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\EmptyStateBar; use ipl\Web\Widget\HorizontalKeyValue; -use Icinga\Module\Icingadb\Widget\ItemList\CommentList; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use Icinga\Module\Icingadb\Widget\TagList; use Icinga\Module\Monitoring\Hook\DetailviewExtensionHook; @@ -231,7 +232,9 @@ class ObjectDetail extends BaseHtmlElement $content = [Html::tag('h2', t('Comments'))]; if ($comments->hasResult()) { - $content[] = (new CommentList($comments))->setObjectLinkDisabled()->setTicketLinkEnabled(); + $content[] = (new TicketLinkObjectList($comments)) + ->setMultiselectUrl(Links::commentsDetails()) + ->setDetailUrl(Url::fromPath('icingadb/comment')); $content[] = (new ShowMore($comments, $link))->setBaseTarget('_next'); } else { $content[] = new EmptyState(t('No comments created.')); diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index 15a2978c..7f279c3f 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -5,11 +5,13 @@ namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Exception\NotImplementedError; +use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; +use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; @@ -53,6 +55,10 @@ class ObjectHeader extends BaseHtmlElement case $this->object instanceof User: $renderer = new UserRenderer(); + break; + case $this->object instanceof Comment: + $renderer = new CommentRenderer(); + break; default: throw new NotImplementedError('Not implemented'); diff --git a/library/Icingadb/Widget/ItemList/BaseCommentListItem.php b/library/Icingadb/Widget/ItemList/BaseCommentListItem.php deleted file mode 100644 index de11c0c9..00000000 --- a/library/Icingadb/Widget/ItemList/BaseCommentListItem.php +++ /dev/null @@ -1,131 +0,0 @@ -createTicketLinks($this->item->text)); - - $caption->getAttributes()->add($markdownLine->getAttributes()); - $caption->addFrom($markdownLine); - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $isAck = $this->item->entry_type === 'ack'; - $expires = $this->item->expire_time; - - $subjectText = sprintf( - $isAck ? t('%s acknowledged', '..') : t('%s commented', '..'), - $this->item->author - ); - - $headerParts = [ - new Icon(Icons::USER), - $this->getNoSubjectLink() - ? new HtmlElement('span', Attributes::create(['class' => 'subject']), Text::create($subjectText)) - : new Link($subjectText, Links::comment($this->item), ['class' => 'subject']) - ]; - - if ($isAck) { - $label = [Text::create('ack')]; - - if ($this->item->is_persistent) { - array_unshift($label, new Icon(Icons::IS_PERSISTENT)); - } - - $headerParts[] = Text::create(' '); - $headerParts[] = new HtmlElement('span', Attributes::create(['class' => 'ack-badge badge']), ...$label); - } - - if ($expires !== null) { - $headerParts[] = Text::create(' '); - $headerParts[] = new HtmlElement( - 'span', - Attributes::create(['class' => 'ack-badge badge']), - Text::create(t('EXPIRES')) - ); - } - - if ($this->getObjectLinkDisabled()) { - // pass - } elseif ($this->item->object_type === 'host') { - $headerParts[] = $this->createHostLink($this->item->host, true); - } else { - $headerParts[] = $this->createServiceLink($this->item->service, $this->item->service->host, true); - } - - $title->addHtml(...$headerParts); - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - $visual->addHtml(new HtmlElement( - 'div', - Attributes::create(['class' => 'user-ball']), - Text::create($this->item->author[0]) - )); - } - - protected function createTimestamp(): ?BaseHtmlElement - { - if ($this->item->expire_time) { - return Html::tag( - 'span', - FormattedString::create(t("expires %s"), new TimeUntil($this->item->expire_time->getTimestamp())) - ); - } - - return Html::tag( - 'span', - FormattedString::create(t("created %s"), new TimeAgo($this->item->entry_time->getTimestamp())) - ); - } - - protected function init(): void - { - $this->setTicketLinkEnabled($this->list->getTicketLinkEnabled()); - $this->list->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)); - $this->list->addMultiselectFilterAttribute($this, Filter::equal('name', $this->item->name)); - $this->setObjectLinkDisabled($this->list->getObjectLinkDisabled()); - $this->setNoSubjectLink($this->list->getNoSubjectLink()); - } -} diff --git a/library/Icingadb/Widget/ItemList/CommentList.php b/library/Icingadb/Widget/ItemList/CommentList.php deleted file mode 100644 index 5cf65aeb..00000000 --- a/library/Icingadb/Widget/ItemList/CommentList.php +++ /dev/null @@ -1,49 +0,0 @@ - 'comment-list']; - - protected function getItemClass(): string - { - $viewMode = $this->getViewMode(); - - $this->addAttributes(['class' => $viewMode]); - - if ($viewMode === 'minimal') { - return CommentListItemMinimal::class; - } elseif ($viewMode === 'detailed') { - $this->removeAttribute('class', 'default-layout'); - } - - return CommentListItem::class; - } - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setMultiselectUrl(Links::commentsDetails()); - $this->setDetailUrl(Url::fromPath('icingadb/comment')); - } -} diff --git a/library/Icingadb/Widget/ItemList/CommentListItem.php b/library/Icingadb/Widget/ItemList/CommentListItem.php deleted file mode 100644 index 3bbd0c2b..00000000 --- a/library/Icingadb/Widget/ItemList/CommentListItem.php +++ /dev/null @@ -1,12 +0,0 @@ -list->isCaptionDisabled()) { - $this->setCaptionDisabled(); - } - } -} diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 959d4463..0787e7ba 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -6,6 +6,7 @@ namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; +use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; @@ -14,6 +15,7 @@ use Icinga\Module\Icingadb\Model\UnreachableParent; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Redis\VolatileStateResults; +use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; @@ -57,9 +59,11 @@ class ObjectList extends ItemList return new UsergroupRenderer(); } elseif ($item instanceof User) { return new UserRenderer(); - } else { - throw new NotImplementedError('Not implemented'); + } elseif ($item instanceof Comment) { + return new CommentRenderer(); } + + throw new NotImplementedError('Not implemented'); }); } @@ -190,6 +194,11 @@ class ObjectList extends ItemList case $object instanceof Usergroup || $data instanceof User: $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); + break; + case $object instanceof Comment: + $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); + $this->addMultiSelectFilterAttribute($item, Filter::equal('name', $object->name)); + break; } diff --git a/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php new file mode 100644 index 00000000..35ff7ab2 --- /dev/null +++ b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php @@ -0,0 +1,32 @@ +setIsDetailView(); + } + + throw new NotImplementedError('Not implemented'); + }); + } +} diff --git a/public/css/common.less b/public/css/common.less index 14bd29f3..d314d46e 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -382,16 +382,6 @@ div.show-more { } } -.comment-popup { - .comment-list .main { - // This is necessary to limit the visible comment lines - // because the popup is shown in detailed list mode only - .caption { - height: 3em; - } - } -} - form[name="form_confirm_removal"] { text-align: center; } diff --git a/public/css/list/comment-list.less b/public/css/list/comment-list.less deleted file mode 100644 index 46b194de..00000000 --- a/public/css/list/comment-list.less +++ /dev/null @@ -1,50 +0,0 @@ -// Style - -// Layout - -.comment-list:not(.detailed) .list-item { - .title > i:first-child { - margin-right: 0; - } - - .title > .subject + .badge, - .title > .badge + .subject, - .title > .badge:last-of-type { - margin-left: 0; - } - - .title a { - &:not(.subject) { - .text-ellipsis(); - } - } - - .title .subject:not(:last-child) { - margin-left: 0; - } - - .title .subject:nth-child(3):last-child { - margin-left: 0; - } -} - -.comment-list.minimal .list-item { - .user-ball { - font-size: .857em; - height: 1.75em; - line-height: 1.5em; - width: 1.75em; - } -} - -.comment-list.detailed .list-item { - .title > .subject:nth-child(3), - .title > .badge + .subject:last-child { - margin-left: .3em; - } - - .caption { - max-height: 4.5em; - white-space: normal; - } -} diff --git a/public/css/widget/comment-popup.less b/public/css/widget/comment-popup.less index 40126974..42686a05 100644 --- a/public/css/widget/comment-popup.less +++ b/public/css/widget/comment-popup.less @@ -35,20 +35,24 @@ } } -ul.item-list li:last-child .comment-wrapper { - .comment-popup { - top: -7em; - } +ul.item-list li:nth-last-child(2):not(:first-child), +ul.item-list li:last-child:not(:first-child) { + .comment-wrapper { + .comment-popup { + top: -7em; + } - .comment-popup:before { - bottom: ~"calc(-0.75em - 1px)"; - top: unset; - transform: rotate(225deg); + .comment-popup:before { + bottom: ~"calc(-0.75em - 1px)"; + top: unset; + transform: rotate(225deg); + } } } .comment-wrapper:hover .comment-popup { - display: block + display: flex; + padding: 0 1em; } #layout { @@ -72,3 +76,9 @@ ul.item-list li:last-child .comment-wrapper { } } } + +.comment-popup .main .caption { + // This is necessary to limit the visible comment lines + // because the popup is shown in detailed list mode only + height: 3em; +} From c15f32a43fdc8a80da4f5484a404647b72aea4ad Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Fri, 21 Mar 2025 15:58:34 +0100 Subject: [PATCH 14/35] Introduce DowntimeRenderer - Use it for ObjectList and ObjectHeader - Remove now unused code and css --- .../controllers/DowntimeController.php | 8 +- .../controllers/DowntimesController.php | 11 +- library/Icingadb/View/DowntimeRenderer.php | 255 ++++++++++++++++++ .../Icingadb/Widget/Detail/DowntimeDetail.php | 7 +- .../Icingadb/Widget/Detail/ObjectDetail.php | 4 +- .../Icingadb/Widget/Detail/ObjectHeader.php | 6 + .../Widget/ItemList/BaseDowntimeListItem.php | 216 --------------- .../Icingadb/Widget/ItemList/DowntimeList.php | 49 ---- .../Widget/ItemList/DowntimeListItem.php | 23 -- .../ItemList/DowntimeListItemMinimal.php | 21 -- .../Icingadb/Widget/ItemList/ObjectList.php | 10 +- .../Widget/ItemList/TicketLinkObjectList.php | 4 + .../downtime-list.less => item/downtime.less} | 73 +++-- 13 files changed, 327 insertions(+), 360 deletions(-) create mode 100644 library/Icingadb/View/DowntimeRenderer.php delete mode 100644 library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/DowntimeList.php delete mode 100644 library/Icingadb/Widget/ItemList/DowntimeListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/DowntimeListItemMinimal.php rename public/css/{list/downtime-list.less => item/downtime.less} (73%) diff --git a/application/controllers/DowntimeController.php b/application/controllers/DowntimeController.php index a0a7fa07..d796df2c 100644 --- a/application/controllers/DowntimeController.php +++ b/application/controllers/DowntimeController.php @@ -10,7 +10,7 @@ use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\DowntimeDetail; -use Icinga\Module\Icingadb\Widget\ItemList\DowntimeList; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use ipl\Stdlib\Filter; use ipl\Web\Url; @@ -61,11 +61,7 @@ class DowntimeController extends Controller { $detail = new DowntimeDetail($this->downtime); - $this->addControl((new DowntimeList([$this->downtime])) - ->setViewMode('minimal') - ->setDetailActionsDisabled() - ->setCaptionDisabled() - ->setNoSubjectLink()); + $this->addControl(new ObjectHeader($this->downtime)); $this->addContent($detail); diff --git a/application/controllers/DowntimesController.php b/application/controllers/DowntimesController.php index c045ffb4..e2b05f44 100644 --- a/application/controllers/DowntimesController.php +++ b/application/controllers/DowntimesController.php @@ -10,8 +10,8 @@ use Icinga\Module\Icingadb\Forms\Command\Object\DeleteDowntimeForm; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemList\DowntimeList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; @@ -87,7 +87,12 @@ class DowntimesController extends Controller $results = $downtimes->execute(); - $this->addContent((new DowntimeList($results))->setViewMode($viewModeSwitcher->getViewMode())); + $this->addContent( + (new ObjectList($results)) + ->setViewMode($viewModeSwitcher->getViewMode()) + ->setMultiselectUrl(Links::downtimesDetails()) + ->setDetailUrl(Url::fromPath('icingadb/downtime')) + ); if ($compact) { $this->addContent( @@ -162,7 +167,7 @@ class DowntimesController extends Controller $rs = $downtimes->execute(); - $this->addControl((new DowntimeList($rs))->setViewMode('minimal')); + $this->addControl((new ObjectList($rs))->setViewMode('minimal')); $this->addControl(new ShowMore( $rs, diff --git a/library/Icingadb/View/DowntimeRenderer.php b/library/Icingadb/View/DowntimeRenderer.php new file mode 100644 index 00000000..94158efc --- /dev/null +++ b/library/Icingadb/View/DowntimeRenderer.php @@ -0,0 +1,255 @@ + */ +class DowntimeRenderer implements ItemRenderer +{ + use Translation; + use TicketLinks; + use HostLink; + use ServiceLink; + + /** @var int Current Time */ + protected $currentTime; + + /** @var int Duration */ + protected $duration; + + /** @var int Downtime end time */ + protected $endTime; + + /** @var bool Whether the downtime is active */ + protected $isActive; + + /** @var int Downtime start time */ + protected $startTime; + + /** @var bool Whether the state has been loaded */ + protected $stateLoaded = false; + + /** + * @var bool Whether the item is being rendered in the detail view of the associated object (host/service) + * + * When true: + * + * - Creation of the link of the associated object (host/service) is omitted from the title + * - The ticket link will be created + */ + protected $isDetailView = false; + + /** + * Set whether the item is being rendered in the detail view of the associated object (host/service) + * + * @param bool $state + * + * @return $this + */ + public function setIsDetailView(bool $state = true): self + { + $this->isDetailView = $state; + + return $this; + } + + /** + * Load the state of the downtime + * + * @param Downtime $item + * + * @return void + */ + protected function loadState(Downtime $item): void + { + if ($this->stateLoaded) { + return; + } + + if ( + isset($item->start_time, $item->end_time) + && $item->is_flexible + && $item->is_in_effect + ) { + $this->startTime = $item->start_time->getTimestamp(); + $this->endTime = $item->end_time->getTimestamp(); + } else { + $this->startTime = $item->scheduled_start_time->getTimestamp(); + $this->endTime = $item->scheduled_end_time->getTimestamp(); + } + + $this->currentTime = time(); + + $this->isActive = $item->is_in_effect + || ($item->is_flexible && $item->scheduled_start_time->getTimestamp() <= $this->currentTime); + + $until = ($this->isActive ? $this->endTime : $this->startTime) - $this->currentTime; + $this->duration = explode(' ', DateFormatter::formatDuration( + $until <= 3600 ? $until : $until + (3600 - ((int) $until % 3600)) + ), 2)[0]; + + $this->stateLoaded = true; + } + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->add(new Attributes(['class' => ['downtime', $item->is_in_effect ? 'in-effect' : '']])); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $this->loadState($item); + + $dateTime = DateFormatter::formatDateTime($this->endTime); + + if ($this->isActive) { + $visual->addHtml(Html::sprintf( + $this->translate('%s left', '..'), + Html::tag( + 'strong', + Html::tag( + 'time', + [ + 'datetime' => $dateTime, + 'title' => $dateTime + ], + $this->duration + ) + ) + )); + } else { + $visual->addHtml(Html::sprintf( + $this->translate('in %s', '..'), + Html::tag('strong', $this->duration) + )); + } + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + if ($this->isDetailView) { + $link = null; + } elseif ($item->object_type === 'host') { + $link = $this->createHostLink($item->host, true); + } else { + $link = $this->createServiceLink($item->service, $item->service->host, true); + } + + if ($item->is_flexible) { + if ($link !== null) { + $template = $this->translate('{{#link}}Flexible Downtime{{/link}} for %s'); + } else { + $template = $this->translate('Flexible Downtime'); + } + } else { + if ($link !== null) { + $template = $this->translate('{{#link}}Fixed Downtime{{/link}} for %s'); + } else { + $template = $this->translate('Fixed Downtime'); + } + } + + if ($layout === 'header') { + if ($link === null) { + $title->addHtml(HtmlElement::create('span', [ 'class' => 'subject'], $template)); + } else { + $title->addHtml(TemplateString::create( + $template, + ['link' => HtmlElement::create('span', [ 'class' => 'subject'])], + $link + )); + } + } else { + if ($link === null) { + $title->addHtml(new Link($template, Links::downtime($item))); + } else { + $title->addHtml(TemplateString::create( + $template, + ['link' => new Link('', Links::downtime($item))], + $link + )); + } + } + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $markdownLine = new MarkdownLine( + $this->isDetailView ? $this->createTicketLinks($item->comment) : $item->comment + ); + $caption->getAttributes()->add($markdownLine->getAttributes()); + $caption->addHtml( + new HtmlElement( + 'span', + null, + new Icon(Icons::USER), + Text::create($item->author) + ), + Text::create(': ') + )->addFrom($markdownLine); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + $this->loadState($item); + + $dateTime = DateFormatter::formatDateTime($this->isActive ? $this->endTime : $this->startTime); + + $info->addHtml(Html::tag( + 'time', + [ + 'datetime' => $dateTime, + 'title' => $dateTime + ], + sprintf( + $this->isActive + ? $this->translate('expires in %s', '..') + : $this->translate('starts in %s', '..'), + $this->duration + ) + )); + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + if ($name === 'progress' && ($layout === 'detailed' || $layout === 'common')) { + $this->loadState($item); + + $element + ->addAttributes(Attributes::create([ + 'data-animate-progress' => true, + 'data-start-time' => $this->startTime, + 'data-end-time' => $this->endTime + ])) + ->addHtml(new HtmlElement('div', Attributes::create(['class' => 'bar']))); + + return true; + } + + return false; + } +} diff --git a/library/Icingadb/Widget/Detail/DowntimeDetail.php b/library/Icingadb/Widget/Detail/DowntimeDetail.php index 9e50f7f2..345c7871 100644 --- a/library/Icingadb/Widget/Detail/DowntimeDetail.php +++ b/library/Icingadb/Widget/Detail/DowntimeDetail.php @@ -10,12 +10,13 @@ use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\Links; +use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Forms\Command\Object\DeleteDowntimeForm; use Icinga\Module\Icingadb\Model\Downtime; -use Icinga\Module\Icingadb\Widget\ItemList\DowntimeList; use Icinga\Module\Icingadb\Widget\ShowMore; +use ipl\Web\Url; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; use ipl\Html\BaseHtmlElement; @@ -180,7 +181,9 @@ class DowntimeDetail extends BaseHtmlElement if ($children->hasResult()) { $this->addHtml( new HtmlElement('h2', null, Text::create(t('Children'))), - new DowntimeList($children), + (new ObjectList($children)) + ->setMultiselectUrl(Links::downtimesDetails()) + ->setDetailUrl(Url::fromPath('icingadb/downtime')), (new ShowMore($children, Links::downtimes()->setQueryString( QueryString::render(Filter::any( Filter::equal('downtime.parent.name', $this->downtime->name), diff --git a/library/Icingadb/Widget/Detail/ObjectDetail.php b/library/Icingadb/Widget/Detail/ObjectDetail.php index 6661c7f5..e22a2d21 100644 --- a/library/Icingadb/Widget/Detail/ObjectDetail.php +++ b/library/Icingadb/Widget/Detail/ObjectDetail.php @@ -285,7 +285,9 @@ class ObjectDetail extends BaseHtmlElement $content = [Html::tag('h2', t('Downtimes'))]; if ($downtimes->hasResult()) { - $content[] = (new DowntimeList($downtimes))->setObjectLinkDisabled()->setTicketLinkEnabled(); + $content[] = (new TicketLinkObjectList($downtimes)) + ->setMultiselectUrl(Links::downtimesDetails()) + ->setDetailUrl(Url::fromPath('icingadb/downtime')); $content[] = (new ShowMore($downtimes, $link))->setBaseTarget('_next'); } else { $content[] = new EmptyState(t('No downtimes scheduled.')); diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index 7f279c3f..e95da021 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -6,12 +6,14 @@ namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Model\Comment; +use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\View\CommentRenderer; +use Icinga\Module\Icingadb\View\DowntimeRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; @@ -59,6 +61,10 @@ class ObjectHeader extends BaseHtmlElement case $this->object instanceof Comment: $renderer = new CommentRenderer(); + break; + case $this->object instanceof Downtime: + $renderer = new DowntimeRenderer(); + break; default: throw new NotImplementedError('Not implemented'); diff --git a/library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php b/library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php deleted file mode 100644 index dedaa721..00000000 --- a/library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php +++ /dev/null @@ -1,216 +0,0 @@ -item->start_time, $this->item->end_time) - && $this->item->is_flexible - && $this->item->is_in_effect - ) { - $this->startTime = $this->item->start_time->getTimestamp(); - $this->endTime = $this->item->end_time->getTimestamp(); - } else { - $this->startTime = $this->item->scheduled_start_time->getTimestamp(); - $this->endTime = $this->item->scheduled_end_time->getTimestamp(); - } - - $this->currentTime = time(); - - $this->isActive = $this->item->is_in_effect - || $this->item->is_flexible && $this->item->scheduled_start_time->getTimestamp() <= $this->currentTime; - - $until = ($this->isActive ? $this->endTime : $this->startTime) - $this->currentTime; - $this->duration = explode(' ', DateFormatter::formatDuration( - $until <= 3600 ? $until : $until + (3600 - ((int) $until % 3600)) - ), 2)[0]; - - $this->list->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)); - $this->list->addMultiselectFilterAttribute($this, Filter::equal('name', $this->item->name)); - $this->setObjectLinkDisabled($this->list->getObjectLinkDisabled()); - $this->setNoSubjectLink($this->list->getNoSubjectLink()); - $this->setTicketLinkEnabled($this->list->getTicketLinkEnabled()); - - if ($this->item->is_in_effect) { - $this->getAttributes()->add('class', 'in-effect'); - } - } - - protected function createProgress(): BaseHtmlElement - { - return new HtmlElement( - 'div', - Attributes::create([ - 'class' => 'progress', - 'data-animate-progress' => true, - 'data-start-time' => $this->startTime, - 'data-end-time' => $this->endTime - ]), - new HtmlElement( - 'div', - Attributes::create(['class' => 'bar']) - ) - ); - } - - protected function assembleCaption(BaseHtmlElement $caption): void - { - $markdownLine = new MarkdownLine($this->createTicketLinks($this->item->comment)); - $caption->getAttributes()->add($markdownLine->getAttributes()); - $caption->addHtml( - new HtmlElement( - 'span', - null, - new Icon(Icons::USER), - Text::create($this->item->author) - ), - Text::create(': ') - )->addFrom($markdownLine); - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - if ($this->getObjectLinkDisabled()) { - $link = null; - } elseif ($this->item->object_type === 'host') { - $link = $this->createHostLink($this->item->host, true); - } else { - $link = $this->createServiceLink($this->item->service, $this->item->service->host, true); - } - - if ($this->item->is_flexible) { - if ($link !== null) { - $template = t('{{#link}}Flexible Downtime{{/link}} for %s'); - } else { - $template = t('Flexible Downtime'); - } - } else { - if ($link !== null) { - $template = t('{{#link}}Fixed Downtime{{/link}} for %s'); - } else { - $template = t('Fixed Downtime'); - } - } - - if ($this->getNoSubjectLink()) { - if ($link === null) { - $title->addHtml(HtmlElement::create('span', [ 'class' => 'subject'], $template)); - } else { - $title->addHtml(TemplateString::create( - $template, - ['link' => HtmlElement::create('span', [ 'class' => 'subject'])], - $link - )); - } - } else { - if ($link === null) { - $title->addHtml(new Link($template, Links::downtime($this->item))); - } else { - $title->addHtml(TemplateString::create( - $template, - ['link' => new Link('', Links::downtime($this->item))], - $link - )); - } - } - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - $dateTime = DateFormatter::formatDateTime($this->endTime); - - if ($this->isActive) { - $visual->addHtml(Html::sprintf( - t('%s left', '..'), - Html::tag( - 'strong', - Html::tag( - 'time', - [ - 'datetime' => $dateTime, - 'title' => $dateTime - ], - $this->duration - ) - ) - )); - } else { - $visual->addHtml(Html::sprintf( - t('in %s', '..'), - Html::tag('strong', $this->duration) - )); - } - } - - protected function createTimestamp(): ?BaseHtmlElement - { - $dateTime = DateFormatter::formatDateTime($this->isActive ? $this->endTime : $this->startTime); - - return Html::tag( - 'time', - [ - 'datetime' => $dateTime, - 'title' => $dateTime - ], - sprintf( - $this->isActive - ? t('expires in %s', '..') - : t('starts in %s', '..'), - $this->duration - ) - ); - } -} diff --git a/library/Icingadb/Widget/ItemList/DowntimeList.php b/library/Icingadb/Widget/ItemList/DowntimeList.php deleted file mode 100644 index 591ad984..00000000 --- a/library/Icingadb/Widget/ItemList/DowntimeList.php +++ /dev/null @@ -1,49 +0,0 @@ - 'downtime-list']; - - protected function getItemClass(): string - { - $viewMode = $this->getViewMode(); - - $this->addAttributes(['class' => $viewMode]); - - if ($viewMode === 'minimal') { - return DowntimeListItemMinimal::class; - } elseif ($viewMode === 'detailed') { - $this->removeAttribute('class', 'default-layout'); - } - - return DowntimeListItem::class; - } - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setMultiselectUrl(Links::downtimesDetails()); - $this->setDetailUrl(Url::fromPath('icingadb/downtime')); - } -} diff --git a/library/Icingadb/Widget/ItemList/DowntimeListItem.php b/library/Icingadb/Widget/ItemList/DowntimeListItem.php deleted file mode 100644 index cb7e9b38..00000000 --- a/library/Icingadb/Widget/ItemList/DowntimeListItem.php +++ /dev/null @@ -1,23 +0,0 @@ -item->is_in_effect) { - $main->add($this->createProgress()); - } - - $main->add($this->createHeader()); - $main->add($this->createCaption()); - } -} diff --git a/library/Icingadb/Widget/ItemList/DowntimeListItemMinimal.php b/library/Icingadb/Widget/ItemList/DowntimeListItemMinimal.php deleted file mode 100644 index b8581d29..00000000 --- a/library/Icingadb/Widget/ItemList/DowntimeListItemMinimal.php +++ /dev/null @@ -1,21 +0,0 @@ -list->isCaptionDisabled()) { - $this->setCaptionDisabled(); - } - } -} diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 0787e7ba..0ce90f89 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -8,6 +8,7 @@ use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\DependencyNode; +use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; @@ -16,6 +17,7 @@ use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\View\CommentRenderer; +use Icinga\Module\Icingadb\View\DowntimeRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; @@ -61,6 +63,8 @@ class ObjectList extends ItemList return new UserRenderer(); } elseif ($item instanceof Comment) { return new CommentRenderer(); + } elseif ($item instanceof Downtime) { + return new DowntimeRenderer(); } throw new NotImplementedError('Not implemented'); @@ -132,6 +136,10 @@ class ObjectList extends ItemList $layout->after(ItemLayout::VISUAL, 'icon-image'); } + if ($item instanceof Downtime) { + $layout->before(ItemLayout::HEADER, 'progress'); + } + return $layout; } @@ -195,7 +203,7 @@ class ObjectList extends ItemList $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); break; - case $object instanceof Comment: + case $object instanceof Comment || $object instanceof Downtime: $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); $this->addMultiSelectFilterAttribute($item, Filter::equal('name', $object->name)); diff --git a/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php index 35ff7ab2..d4d9f17c 100644 --- a/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php +++ b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php @@ -6,7 +6,9 @@ namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Model\Comment; +use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\View\CommentRenderer; +use Icinga\Module\Icingadb\View\DowntimeRenderer; use ipl\Orm\Model; use ipl\Web\Widget\ItemList; @@ -24,6 +26,8 @@ class TicketLinkObjectList extends ObjectList ItemList::__construct($data, function (Model $item) { if ($item instanceof Comment) { return (new CommentRenderer())->setIsDetailView(); + } elseif ($item instanceof Downtime) { + return (new DowntimeRenderer())->setIsDetailView(); } throw new NotImplementedError('Not implemented'); diff --git a/public/css/list/downtime-list.less b/public/css/item/downtime.less similarity index 73% rename from public/css/list/downtime-list.less rename to public/css/item/downtime.less index 7e537e78..b55a3d87 100644 --- a/public/css/list/downtime-list.less +++ b/public/css/item/downtime.less @@ -1,17 +1,22 @@ // Style +.item-layout.downtime { + .visual { + background-color: @gray-lighter; + } -.downtime-list .list-item, -.downtime-detail .list-item { + &.in-effect .visual { + background-color: @color-ok; + color: @text-color-on-icinga-blue; + } +} + +.list-item.downtime { .progress { > .bar { background-color: @color-ok; } } - .visual { - background-color: @gray-lighter; - } - .main { border-top: 1px solid @gray-light; } @@ -23,44 +28,14 @@ border-top: 1px solid @gray-light; } } - - &.in-effect { - .visual { - background-color: @color-ok; - color: @text-color-on-icinga-blue; - } - - .main { - padding-top: 0; // If active the progress bar represents the padding top - } - } } // Layout -.downtime-list .list-item { +.item-layout.downtime { .caption > * { display: inline; } -} - -.downtime-list .list-item, -.downtime-detail .list-item { - .progress { - height: 2px; - margin-bottom: ~"calc(.5em - 2px)"; - min-width: 100%; - position: relative; - - > .bar { - height: 100%; - max-width: 100%; - } - } - - &:first-child .main .progress > .bar { - height: ~"calc(100% + 1px)"; // +1px due to the border added exclusively for the first item - } .visual { justify-content: center; @@ -77,7 +52,29 @@ } } -.item-list.downtime-list.minimal .list-item { +.list-item.downtime { + .progress { + height: 2px; + margin-bottom: ~"calc(.5em - 2px)"; + min-width: 100%; + position: relative; + + > .bar { + height: 100%; + max-width: 100%; + } + } + + &:first-child .main .progress > .bar { + height: ~"calc(100% + 1px)"; // +1px due to the border added exclusively for the first item + } + + .main:has(.progress) { + padding-top: 0; + } +} + +.minimal-item-layout.downtime { .visual { display: block; line-height: 1.5; From 3252ff892590391600e7d938715aecd2131dd38d Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Mon, 24 Mar 2025 13:02:27 +0100 Subject: [PATCH 15/35] Introduce class `LoadMoreObjectList` and `NotificationRenderer` - Remove now obsolete ItemList classes - Fix load-more element's css - LoadMore: Replace `list-item` css class with new `item-layout` class, as this class is now responsible for list items --- .../controllers/NotificationsController.php | 7 +- .../NotificationRenderer.php} | 271 +++++++++--------- .../Widget/ItemList/LoadMoreObjectList.php | 37 +++ .../Widget/ItemList/NotificationList.php | 55 ---- .../Widget/ItemList/NotificationListItem.php | 18 -- .../ItemList/NotificationListItemDetailed.php | 18 -- .../ItemList/NotificationListItemMinimal.php | 27 -- .../Icingadb/Widget/ItemList/ObjectList.php | 5 + public/css/list/item-list.less | 6 +- 9 files changed, 190 insertions(+), 254 deletions(-) rename library/Icingadb/{Widget/ItemList/BaseNotificationListItem.php => View/NotificationRenderer.php} (54%) create mode 100644 library/Icingadb/Widget/ItemList/LoadMoreObjectList.php delete mode 100644 library/Icingadb/Widget/ItemList/NotificationList.php delete mode 100644 library/Icingadb/Widget/ItemList/NotificationListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/NotificationListItemDetailed.php delete mode 100644 library/Icingadb/Widget/ItemList/NotificationListItemMinimal.php diff --git a/application/controllers/NotificationsController.php b/application/controllers/NotificationsController.php index 2d23604c..286bb140 100644 --- a/application/controllers/NotificationsController.php +++ b/application/controllers/NotificationsController.php @@ -8,13 +8,11 @@ use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemList\NotificationList; +use Icinga\Module\Icingadb\Widget\ItemList\LoadMoreObjectList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; -use ipl\Sql\Sql; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; -use ipl\Web\Filter\QueryString; use ipl\Web\Url; class NotificationsController extends Controller @@ -94,7 +92,8 @@ class NotificationsController extends Controller ->onlyWith($preserveParams) ->setFilter($filter); - $notificationList = (new NotificationList($notifications->execute())) + $notificationList = (new LoadMoreObjectList($notifications->execute())) + ->setDetailUrl(Url::fromPath('icingadb/event')) ->setPageSize($limitControl->getLimit()) ->setViewMode($viewModeSwitcher->getViewMode()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/library/Icingadb/Widget/ItemList/BaseNotificationListItem.php b/library/Icingadb/View/NotificationRenderer.php similarity index 54% rename from library/Icingadb/Widget/ItemList/BaseNotificationListItem.php rename to library/Icingadb/View/NotificationRenderer.php index b538ac4a..9b88eaaf 100644 --- a/library/Icingadb/Widget/ItemList/BaseNotificationListItem.php +++ b/library/Icingadb/View/NotificationRenderer.php @@ -1,43 +1,168 @@ */ +class NotificationRenderer implements ItemRenderer { + use Translation; use HostLink; - use NoSubjectLink; use ServiceLink; - /** @var NotificationList */ - protected $list; - - protected function init(): void + public function assembleAttributes($item, Attributes $attributes, string $layout): void { - $this->setNoSubjectLink($this->list->getNoSubjectLink()); - $this->list->addDetailFilterAttribute($this, Filter::equal('id', bin2hex($this->item->history->id))); + $attributes->get('class')->addValue('notification'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $ballSize = StateBall::SIZE_LARGE; + if ($layout === 'minimal' || $layout === 'header') { + $ballSize = StateBall::SIZE_BIG; + } + + switch ($item->type) { + case 'acknowledgement': + $visual->addHtml(HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::IS_ACKNOWLEDGED) + )); + + break; + case 'custom': + $visual->addHtml(HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::NOTIFICATION) + )); + + break; + case 'downtime_end': + case 'downtime_removed': + case 'downtime_start': + $visual->addHtml(HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::IN_DOWNTIME) + )); + + break; + case 'flapping_end': + case 'flapping_start': + $visual->addHtml(HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::IS_FLAPPING) + )); + + break; + case 'problem': + case 'recovery': + if ($item->object_type === 'host') { + $state = HostStates::text($item->state); + $previousHardState = HostStates::text($item->previous_hard_state); + } else { + $state = ServiceStates::text($item->state); + $previousHardState = ServiceStates::text($item->previous_hard_state); + } + + $visual->addHtml(new StateChange($state, $previousHardState)); + + break; + } + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + if ($layout === 'header') { + $title->addHtml(HtmlElement::create( + 'span', + ['class' => 'subject'], + sprintf(self::phraseForType($item->type), ucfirst($item->object_type)) + )); + } else { + $title->addHtml(new Link( + sprintf(self::phraseForType($item->type), ucfirst($item->object_type)), + Links::event($item->history), + ['class' => 'subject'] + )); + } + + if ($item->object_type === 'host') { + $link = $this->createHostLink($item->host, true); + } else { + $link = $this->createServiceLink($item->service, $item->host, true); + } + + $title->addHtml(Text::create(' '), $link); + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + if (in_array($item->type, ['flapping_end', 'flapping_start', 'problem', 'recovery'])) { + $commandName = $item->object_type === 'host' + ? $item->host->checkcommand_name + : $item->service->checkcommand_name; + if (isset($commandName)) { + if (empty($item->text)) { + $caption->addHtml(new EmptyState($this->translate('Output unavailable.'))); + } else { + $caption->addHtml(new PluginOutputContainer( + (new PluginOutput($item->text)) + ->setCommandName($commandName) + )); + } + } else { + $caption->addHtml(new EmptyState($this->translate('Waiting for Icinga DB to synchronize the config.'))); + } + } else { + $caption->add([ + new Icon(Icons::USER), + $item->author, + ': ', + $item->text + ]); + } + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + $info->addHtml(new TimeAgo($item->send_time->getTimestamp())); + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections } /** @@ -72,118 +197,4 @@ abstract class BaseNotificationListItem extends BaseListItem throw new InvalidArgumentException(sprintf('Type %s is not a valid notification type', $type)); } } - - abstract protected function getStateBallSize(); - - protected function assembleCaption(BaseHtmlElement $caption): void - { - if (in_array($this->item->type, ['flapping_end', 'flapping_start', 'problem', 'recovery'])) { - $commandName = $this->item->object_type === 'host' - ? $this->item->host->checkcommand_name - : $this->item->service->checkcommand_name; - if (isset($commandName)) { - if (empty($this->item->text)) { - $caption->addHtml(new EmptyState(t('Output unavailable.'))); - } else { - $caption->addHtml(new PluginOutputContainer( - (new PluginOutput($this->item->text)) - ->setCommandName($commandName) - )); - } - } else { - $caption->addHtml(new EmptyState(t('Waiting for Icinga DB to synchronize the config.'))); - } - } else { - $caption->add([ - new Icon(Icons::USER), - $this->item->author, - ': ', - $this->item->text - ]); - } - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - switch ($this->item->type) { - case 'acknowledgement': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::IS_ACKNOWLEDGED) - )); - - break; - case 'custom': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::NOTIFICATION) - )); - - break; - case 'downtime_end': - case 'downtime_removed': - case 'downtime_start': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::IN_DOWNTIME) - )); - - break; - case 'flapping_end': - case 'flapping_start': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::IS_FLAPPING) - )); - - break; - case 'problem': - case 'recovery': - if ($this->item->object_type === 'host') { - $state = HostStates::text($this->item->state); - $previousHardState = HostStates::text($this->item->previous_hard_state); - } else { - $state = ServiceStates::text($this->item->state); - $previousHardState = ServiceStates::text($this->item->previous_hard_state); - } - - $visual->addHtml(new StateChange($state, $previousHardState)); - - break; - } - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - if ($this->getNoSubjectLink()) { - $title->addHtml(HtmlElement::create( - 'span', - ['class' => 'subject'], - sprintf(self::phraseForType($this->item->type), ucfirst($this->item->object_type)) - )); - } else { - $title->addHtml(new Link( - sprintf(self::phraseForType($this->item->type), ucfirst($this->item->object_type)), - Links::event($this->item->history), - ['class' => 'subject'] - )); - } - - if ($this->item->object_type === 'host') { - $link = $this->createHostLink($this->item->host, true); - } else { - $link = $this->createServiceLink($this->item->service, $this->item->host, true); - } - - $title->addHtml(Text::create(' '), $link); - } - - protected function createTimestamp(): ?BaseHtmlElement - { - return new TimeAgo($this->item->send_time->getTimestamp()); - } } diff --git a/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php new file mode 100644 index 00000000..7044c8bb --- /dev/null +++ b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php @@ -0,0 +1,37 @@ +data = $this->getIterator($data); + } +} diff --git a/library/Icingadb/Widget/ItemList/NotificationList.php b/library/Icingadb/Widget/ItemList/NotificationList.php deleted file mode 100644 index 3a16b0b3..00000000 --- a/library/Icingadb/Widget/ItemList/NotificationList.php +++ /dev/null @@ -1,55 +0,0 @@ - 'notification-list']; - - protected function init(): void - { - /** @var ResultSet $data */ - $data = $this->data; - $this->data = $this->getIterator($data); - $this->initializeDetailActions(); - $this->setDetailUrl(Url::fromPath('icingadb/event')); - } - - protected function getItemClass(): string - { - switch ($this->getViewMode()) { - case 'minimal': - return NotificationListItemMinimal::class; - case 'detailed': - $this->removeAttribute('class', 'default-layout'); - - return NotificationListItemDetailed::class; - default: - return NotificationListItem::class; - } - } - - protected function assemble(): void - { - $this->addAttributes(['class' => $this->getViewMode()]); - - parent::assemble(); - } -} diff --git a/library/Icingadb/Widget/ItemList/NotificationListItem.php b/library/Icingadb/Widget/ItemList/NotificationListItem.php deleted file mode 100644 index 683762f9..00000000 --- a/library/Icingadb/Widget/ItemList/NotificationListItem.php +++ /dev/null @@ -1,18 +0,0 @@ -list->isCaptionDisabled()) { - $this->setCaptionDisabled(); - } - } - - protected function getStateBallSize(): string - { - return StateBall::SIZE_BIG; - } -} diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 0ce90f89..1f1efa6b 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -10,6 +10,7 @@ use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Model\Host; +use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\UnreachableParent; @@ -207,6 +208,10 @@ class ObjectList extends ItemList $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); $this->addMultiSelectFilterAttribute($item, Filter::equal('name', $object->name)); + break; + case $object instanceof NotificationHistory: + $this->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->history->id))); + break; } diff --git a/public/css/list/item-list.less b/public/css/list/item-list.less index 256ca42f..e19326ec 100644 --- a/public/css/list/item-list.less +++ b/public/css/list/item-list.less @@ -43,8 +43,10 @@ // Layout -.item-list .list-item { - &.load-more a { +.item-list .load-more { + display: flex; + + a { flex: 1; margin: 1.5em 0; padding: .5em 0; From 183d5ee7bad8fbfb01f729bc1c2d80c4cc7883a7 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Mon, 24 Mar 2025 13:34:08 +0100 Subject: [PATCH 16/35] Introduce `HistoryRenderer` - Remove now obsolete ItemList classes --- application/controllers/EventController.php | 13 +- application/controllers/HistoryController.php | 5 +- application/controllers/HostController.php | 5 +- application/controllers/ServiceController.php | 5 +- library/Icingadb/View/HistoryRenderer.php | 440 ++++++++++++++++++ .../Icingadb/Widget/Detail/ObjectHeader.php | 6 + .../Widget/ItemList/BaseHistoryListItem.php | 407 ---------------- .../Icingadb/Widget/ItemList/HistoryList.php | 57 --- .../Widget/ItemList/HistoryListItem.php | 18 - .../ItemList/HistoryListItemDetailed.php | 18 - .../ItemList/HistoryListItemMinimal.php | 27 -- .../Widget/ItemList/LoadMoreObjectList.php | 4 + .../Icingadb/Widget/ItemList/ObjectList.php | 6 + public/css/common.less | 4 +- 14 files changed, 470 insertions(+), 545 deletions(-) create mode 100644 library/Icingadb/View/HistoryRenderer.php delete mode 100644 library/Icingadb/Widget/ItemList/BaseHistoryListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/HistoryList.php delete mode 100644 library/Icingadb/Widget/ItemList/HistoryListItem.php delete mode 100644 library/Icingadb/Widget/ItemList/HistoryListItemDetailed.php delete mode 100644 library/Icingadb/Widget/ItemList/HistoryListItemMinimal.php diff --git a/application/controllers/EventController.php b/application/controllers/EventController.php index 7108606d..ae325621 100644 --- a/application/controllers/EventController.php +++ b/application/controllers/EventController.php @@ -4,12 +4,10 @@ namespace Icinga\Module\Icingadb\Controllers; -use ArrayObject; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\EventDetail; -use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; -use ipl\Orm\ResultSet; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use ipl\Stdlib\Filter; class EventController extends Controller @@ -60,12 +58,7 @@ class EventController extends Controller public function indexAction() { - $this->addControl((new HistoryList(new ResultSet(new ArrayObject([$this->event])))) - ->setViewMode('minimal') - ->setPageSize(1) - ->setCaptionDisabled() - ->setNoSubjectLink() - ->setDetailActionsDisabled()); - $this->addContent((new EventDetail($this->event))->setTicketLinkEnabled()); + $this->addControl(new ObjectHeader($this->event)); + $this->addContent(new EventDetail($this->event)); } } diff --git a/application/controllers/HistoryController.php b/application/controllers/HistoryController.php index a1b873b2..1dd938a9 100644 --- a/application/controllers/HistoryController.php +++ b/application/controllers/HistoryController.php @@ -8,8 +8,8 @@ use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; +use Icinga\Module\Icingadb\Widget\ItemList\LoadMoreObjectList; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; @@ -98,7 +98,8 @@ class HistoryController extends Controller ->onlyWith($preserveParams) ->setFilter($filter); - $historyList = (new HistoryList($history->execute())) + $historyList = (new LoadMoreObjectList($history->execute())) + ->setDetailUrl(Url::fromPath('icingadb/event')) ->setPageSize($limitControl->getLimit()) ->setViewMode($viewModeSwitcher->getViewMode()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/application/controllers/HostController.php b/application/controllers/HostController.php index 31e41c80..fba845e6 100644 --- a/application/controllers/HostController.php +++ b/application/controllers/HostController.php @@ -28,8 +28,8 @@ use Icinga\Module\Icingadb\Widget\Detail\HostInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\HostMetaInfo; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\QuickActions; +use Icinga\Module\Icingadb\Widget\ItemList\LoadMoreObjectList; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; -use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; use ipl\Orm\Query; use ipl\Sql\Expression; use ipl\Sql\Filter\Exists; @@ -167,7 +167,8 @@ class HostController extends Controller $this->addControl($limitControl); $this->addControl($viewModeSwitcher); - $historyList = (new HistoryList($history->execute())) + $historyList = (new LoadMoreObjectList($history->execute())) + ->setDetailUrl(Url::fromPath('icingadb/event')) ->setViewMode($viewModeSwitcher->getViewMode()) ->setPageSize($limitControl->getLimit()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/application/controllers/ServiceController.php b/application/controllers/ServiceController.php index e68587e0..f00e01fc 100644 --- a/application/controllers/ServiceController.php +++ b/application/controllers/ServiceController.php @@ -25,8 +25,8 @@ use Icinga\Module\Icingadb\Widget\Detail\QuickActions; use Icinga\Module\Icingadb\Widget\Detail\ServiceDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceMetaInfo; +use Icinga\Module\Icingadb\Widget\ItemList\LoadMoreObjectList; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; -use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; use ipl\Orm\Query; use ipl\Sql\Expression; use ipl\Stdlib\Filter; @@ -313,7 +313,8 @@ class ServiceController extends Controller $this->addControl($limitControl); $this->addControl($viewModeSwitcher); - $historyList = (new HistoryList($history->execute())) + $historyList = (new LoadMoreObjectList($history->execute())) + ->setDetailUrl(Url::fromPath('icingadb/event')) ->setViewMode($viewModeSwitcher->getViewMode()) ->setPageSize($limitControl->getLimit()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/library/Icingadb/View/HistoryRenderer.php b/library/Icingadb/View/HistoryRenderer.php new file mode 100644 index 00000000..69846d1d --- /dev/null +++ b/library/Icingadb/View/HistoryRenderer.php @@ -0,0 +1,440 @@ + */ +class HistoryRenderer implements ItemRenderer +{ + use Translation; + use TicketLinks; + use HostLink; + use ServiceLink; + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue('history'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $ballSize = StateBall::SIZE_LARGE; + if ($layout === 'minimal' || $layout === 'header') { + $ballSize = StateBall::SIZE_BIG; + } + + switch ($item->event_type) { + case 'comment_add': + $visual->addHtml( + HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::COMMENT) + ) + ); + + break; + case 'comment_remove': + case 'downtime_end': + case 'ack_clear': + $visual->addHtml( + HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::REMOVE) + ) + ); + + break; + case 'downtime_start': + $visual->addHtml( + HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::IN_DOWNTIME) + ) + ); + + break; + case 'ack_set': + $visual->addHtml( + HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::IS_ACKNOWLEDGED) + ) + ); + + break; + case 'flapping_end': + case 'flapping_start': + $visual->addHtml( + HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::IS_FLAPPING) + ) + ); + + break; + case 'notification': + $visual->addHtml( + HtmlElement::create( + 'div', + ['class' => ['icon-ball', 'ball-size-' . $ballSize]], + new Icon(Icons::NOTIFICATION) + ) + ); + + break; + case 'state_change': + if ($item->state->state_type === 'soft') { + $stateType = 'soft_state'; + $previousStateType = 'previous_soft_state'; + + if ($item->state->previous_soft_state === 0) { + $previousStateType = 'hard_state'; + } + + $visual->addHtml( + new CheckAttempt( + (int) $item->state->check_attempt, + (int) $item->state->max_check_attempts + ) + ); + } else { + $stateType = 'hard_state'; + $previousStateType = 'previous_hard_state'; + + if ($item->state->hard_state === $item->state->previous_hard_state) { + $previousStateType = 'previous_soft_state'; + } + } + + if ($item->object_type === 'host') { + $state = HostStates::text($item->state->$stateType); + $previousState = HostStates::text($item->state->$previousStateType); + } else { + $state = ServiceStates::text($item->state->$stateType); + $previousState = ServiceStates::text($item->state->$previousStateType); + } + + $stateChange = new StateChange($state, $previousState); + if ($stateType === 'soft_state') { + $stateChange->setCurrentStateBallSize(StateBall::SIZE_MEDIUM_LARGE); + } + + if ($previousStateType === 'previous_soft_state') { + $stateChange->setPreviousStateBallSize(StateBall::SIZE_MEDIUM_LARGE); + if ($stateType === 'soft_state') { + $visual->getAttributes()->add('class', 'small-state-change'); + } + } + + $visual->prependHtml($stateChange); + + break; + } + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + switch ($item->event_type) { + case 'comment_add': + $subjectLabel = $this->translate('Comment added'); + + break; + case 'comment_remove': + if (! empty($item->comment->removed_by)) { + if ($item->comment->removed_by !== $item->comment->author) { + $subjectLabel = sprintf( + $this->translate('Comment removed by %s', '..'), + $item->comment->removed_by + ); + } else { + $subjectLabel = $this->translate('Comment removed by author'); + } + } elseif (isset($item->comment->expire_time)) { + $subjectLabel = $this->translate('Comment expired'); + } else { + $subjectLabel = $this->translate('Comment removed'); + } + + break; + case 'downtime_end': + if (! empty($item->downtime->cancelled_by)) { + if ($item->downtime->cancelled_by !== $item->downtime->author) { + $subjectLabel = sprintf( + $this->translate('Downtime cancelled by %s', '..'), + $item->downtime->cancelled_by + ); + } else { + $subjectLabel = $this->translate('Downtime cancelled by author'); + } + } elseif ($item->downtime->has_been_cancelled === 'y') { + $subjectLabel = $this->translate('Downtime cancelled'); + } else { + $subjectLabel = $this->translate('Downtime ended'); + } + + break; + case 'downtime_start': + $subjectLabel = $this->translate('Downtime started'); + + break; + case 'flapping_start': + $subjectLabel = $this->translate('Flapping started'); + + break; + case 'flapping_end': + $subjectLabel = $this->translate('Flapping stopped'); + + break; + case 'ack_set': + $subjectLabel = $this->translate('Acknowledgement set'); + + break; + case 'ack_clear': + if (! empty($item->acknowledgement->cleared_by)) { + if ($item->acknowledgement->cleared_by !== $item->acknowledgement->author) { + $subjectLabel = sprintf( + $this->translate('Acknowledgement cleared by %s', '..'), + $item->acknowledgement->cleared_by + ); + } else { + $subjectLabel = $this->translate('Acknowledgement cleared by author'); + } + } elseif (isset($item->acknowledgement->expire_time)) { + $subjectLabel = $this->translate('Acknowledgement expired'); + } else { + $subjectLabel = $this->translate('Acknowledgement cleared'); + } + + break; + case 'notification': + $subjectLabel = isset($item->notification->type) ? sprintf( + NotificationRenderer::phraseForType($item->notification->type), + ucfirst($item->object_type) + ) : $item->event_type; + + break; + case 'state_change': + $state = $item->state->state_type === 'hard' + ? $item->state->hard_state + : $item->state->soft_state; + if ($state === 0) { + if ($item->object_type === 'service') { + $subjectLabel = $this->translate('Service recovered'); + } else { + $subjectLabel = $this->translate('Host recovered'); + } + } else { + if ($item->state->state_type === 'hard') { + $subjectLabel = $this->translate('Hard state changed'); + } else { + $subjectLabel = $this->translate('Soft state changed'); + } + } + + break; + default: + $subjectLabel = $item->event_type; + + break; + } + + if ($layout === 'header') { + $title->addHtml(HtmlElement::create('span', ['class' => 'subject'], $subjectLabel)); + } else { + $title->addHtml(new Link($subjectLabel, Links::event($item), ['class' => 'subject'])); + } + + if ($item->object_type === 'host') { + if (isset($item->host->id)) { + $link = $this->createHostLink($item->host, true); + } + } else { + if (isset($item->host->id, $item->service->id)) { + $link = $this->createServiceLink($item->service, $item->host, true); + } + } + + $title->addHtml(Text::create(' ')); + if (isset($link)) { + $title->addHtml($link); + } + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + switch ($item->event_type) { + case 'comment_add': + case 'comment_remove': + $markdownLine = new MarkdownLine($this->createTicketLinks($item->comment->comment)); + $caption->getAttributes()->add($markdownLine->getAttributes()); + $caption->add([ + new Icon(Icons::USER), + $item->comment->author, + ': ' + ])->addFrom($markdownLine); + + break; + case 'downtime_end': + case 'downtime_start': + $markdownLine = new MarkdownLine($this->createTicketLinks($item->downtime->comment)); + $caption->getAttributes()->add($markdownLine->getAttributes()); + $caption->add([ + new Icon(Icons::USER), + $item->downtime->author, + ': ' + ])->addFrom($markdownLine); + + break; + case 'flapping_start': + $caption + ->add( + sprintf( + $this->translate('State Change Rate: %.2f%%; Start Threshold: %.2f%%'), + $item->flapping->percent_state_change_start, + $item->flapping->flapping_threshold_high + ) + ) + ->getAttributes() + ->add('class', 'plugin-output'); + + break; + case 'flapping_end': + $caption + ->add( + sprintf( + $this->translate('State Change Rate: %.2f%%; End Threshold: %.2f%%; Flapping for %s'), + $item->flapping->percent_state_change_end, + $item->flapping->flapping_threshold_low, + isset($item->flapping->end_time) + ? DateFormatter::formatDuration( + $item->flapping->end_time->getTimestamp() + - $item->flapping->start_time->getTimestamp() + ) + : $this->translate('n. a.') + ) + ) + ->getAttributes() + ->add('class', 'plugin-output'); + + break; + case 'ack_clear': + case 'ack_set': + if (! isset($item->acknowledgement->comment) && ! isset($item->acknowledgement->author)) { + $caption->addHtml( + new EmptyState( + $this->translate('This acknowledgement was set before Icinga DB history recording') + ) + ); + } else { + $markdownLine = new MarkdownLine($this->createTicketLinks($item->acknowledgement->comment)); + $caption->getAttributes()->add($markdownLine->getAttributes()); + $caption->add([ + new Icon(Icons::USER), + $item->acknowledgement->author, + ': ' + ])->addFrom($markdownLine); + } + + break; + case 'notification': + if (! empty($item->notification->author)) { + $caption->add([ + new Icon(Icons::USER), + $item->notification->author, + ': ', + $item->notification->text + ]); + } else { + $commandName = $item->object_type === 'host' + ? $item->host->checkcommand_name + : $item->service->checkcommand_name; + if (isset($commandName)) { + if (empty($item->notification->text)) { + $caption->addHtml(new EmptyState(t('Output unavailable.'))); + } else { + $caption->addHtml( + new PluginOutputContainer( + (new PluginOutput($item->notification->text)) + ->setCommandName($commandName) + ) + ); + } + } else { + $caption->addHtml( + new EmptyState($this->translate('Waiting for Icinga DB to synchronize the config.')) + ); + } + } + + break; + case 'state_change': + $commandName = $item->object_type === 'host' + ? $item->host->checkcommand_name + : $item->service->checkcommand_name; + if (isset($commandName)) { + if (empty($item->state->output)) { + $caption->addHtml(new EmptyState($this->translate('Output unavailable.'))); + } else { + $caption->addHtml( + new PluginOutputContainer( + (new PluginOutput($item->state->output)) + ->setCommandName($commandName) + ) + ); + } + } else { + $caption->addHtml( + new EmptyState($this->translate('Waiting for Icinga DB to synchronize the config.')) + ); + } + + break; + } + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + $info->addHtml(new TimeAgo($item->event_time->getTimestamp())); + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections + } +} diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index e95da021..d425db63 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -7,6 +7,7 @@ namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\Downtime; +use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; @@ -14,6 +15,7 @@ use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\DowntimeRenderer; +use Icinga\Module\Icingadb\View\HistoryRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; @@ -65,6 +67,10 @@ class ObjectHeader extends BaseHtmlElement case $this->object instanceof Downtime: $renderer = new DowntimeRenderer(); + break; + case $this->object instanceof History: + $renderer = new HistoryRenderer(); + break; default: throw new NotImplementedError('Not implemented'); diff --git a/library/Icingadb/Widget/ItemList/BaseHistoryListItem.php b/library/Icingadb/Widget/ItemList/BaseHistoryListItem.php deleted file mode 100644 index 61da9fd1..00000000 --- a/library/Icingadb/Widget/ItemList/BaseHistoryListItem.php +++ /dev/null @@ -1,407 +0,0 @@ -setNoSubjectLink($this->list->getNoSubjectLink()); - $this->setTicketLinkEnabled($this->list->getTicketLinkEnabled()); - $this->list->addDetailFilterAttribute($this, Filter::equal('id', bin2hex($this->item->id))); - } - - abstract protected function getStateBallSize(): string; - - protected function assembleCaption(BaseHtmlElement $caption): void - { - switch ($this->item->event_type) { - case 'comment_add': - case 'comment_remove': - $markdownLine = new MarkdownLine($this->createTicketLinks($this->item->comment->comment)); - $caption->getAttributes()->add($markdownLine->getAttributes()); - $caption->add([ - new Icon(Icons::USER), - $this->item->comment->author, - ': ' - ])->addFrom($markdownLine); - - break; - case 'downtime_end': - case 'downtime_start': - $markdownLine = new MarkdownLine($this->createTicketLinks($this->item->downtime->comment)); - $caption->getAttributes()->add($markdownLine->getAttributes()); - $caption->add([ - new Icon(Icons::USER), - $this->item->downtime->author, - ': ' - ])->addFrom($markdownLine); - - break; - case 'flapping_start': - $caption - ->add(sprintf( - t('State Change Rate: %.2f%%; Start Threshold: %.2f%%'), - $this->item->flapping->percent_state_change_start, - $this->item->flapping->flapping_threshold_high - )) - ->getAttributes() - ->add('class', 'plugin-output'); - - break; - case 'flapping_end': - $caption - ->add(sprintf( - t('State Change Rate: %.2f%%; End Threshold: %.2f%%; Flapping for %s'), - $this->item->flapping->percent_state_change_end, - $this->item->flapping->flapping_threshold_low, - isset($this->item->flapping->end_time) - ? DateFormatter::formatDuration( - $this->item->flapping->end_time->getTimestamp() - - $this->item->flapping->start_time->getTimestamp() - ) - : t('n. a.') - )) - ->getAttributes() - ->add('class', 'plugin-output'); - - break; - case 'ack_clear': - case 'ack_set': - if (! isset($this->item->acknowledgement->comment) && ! isset($this->item->acknowledgement->author)) { - $caption->addHtml(new EmptyState( - t('This acknowledgement was set before Icinga DB history recording') - )); - } else { - $markdownLine = new MarkdownLine($this->createTicketLinks($this->item->acknowledgement->comment)); - $caption->getAttributes()->add($markdownLine->getAttributes()); - $caption->add([ - new Icon(Icons::USER), - $this->item->acknowledgement->author, - ': ' - ])->addFrom($markdownLine); - } - - break; - case 'notification': - if (! empty($this->item->notification->author)) { - $caption->add([ - new Icon(Icons::USER), - $this->item->notification->author, - ': ', - $this->item->notification->text - ]); - } else { - $commandName = $this->item->object_type === 'host' - ? $this->item->host->checkcommand_name - : $this->item->service->checkcommand_name; - if (isset($commandName)) { - if (empty($this->item->notification->text)) { - $caption->addHtml(new EmptyState(t('Output unavailable.'))); - } else { - $caption->addHtml(new PluginOutputContainer( - (new PluginOutput($this->item->notification->text)) - ->setCommandName($commandName) - )); - } - } else { - $caption->addHtml(new EmptyState(t('Waiting for Icinga DB to synchronize the config.'))); - } - } - - break; - case 'state_change': - $commandName = $this->item->object_type === 'host' - ? $this->item->host->checkcommand_name - : $this->item->service->checkcommand_name; - if (isset($commandName)) { - if (empty($this->item->state->output)) { - $caption->addHtml(new EmptyState(t('Output unavailable.'))); - } else { - $caption->addHtml(new PluginOutputContainer( - (new PluginOutput($this->item->state->output)) - ->setCommandName($commandName) - )); - } - } else { - $caption->addHtml(new EmptyState(t('Waiting for Icinga DB to synchronize the config.'))); - } - - break; - } - } - - protected function assembleVisual(BaseHtmlElement $visual): void - { - switch ($this->item->event_type) { - case 'comment_add': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::COMMENT) - )); - - break; - case 'comment_remove': - case 'downtime_end': - case 'ack_clear': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::REMOVE) - )); - - break; - case 'downtime_start': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::IN_DOWNTIME) - )); - - break; - case 'ack_set': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::IS_ACKNOWLEDGED) - )); - - break; - case 'flapping_end': - case 'flapping_start': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::IS_FLAPPING) - )); - - break; - case 'notification': - $visual->addHtml(HtmlElement::create( - 'div', - ['class' => ['icon-ball', 'ball-size-' . $this->getStateBallSize()]], - new Icon(Icons::NOTIFICATION) - )); - - break; - case 'state_change': - if ($this->item->state->state_type === 'soft') { - $stateType = 'soft_state'; - $previousStateType = 'previous_soft_state'; - - if ($this->item->state->previous_soft_state === 0) { - $previousStateType = 'hard_state'; - } - - $visual->addHtml(new CheckAttempt( - (int) $this->item->state->check_attempt, - (int) $this->item->state->max_check_attempts - )); - } else { - $stateType = 'hard_state'; - $previousStateType = 'previous_hard_state'; - - if ($this->item->state->hard_state === $this->item->state->previous_hard_state) { - $previousStateType = 'previous_soft_state'; - } - } - - if ($this->item->object_type === 'host') { - $state = HostStates::text($this->item->state->$stateType); - $previousState = HostStates::text($this->item->state->$previousStateType); - } else { - $state = ServiceStates::text($this->item->state->$stateType); - $previousState = ServiceStates::text($this->item->state->$previousStateType); - } - - $stateChange = new StateChange($state, $previousState); - if ($stateType === 'soft_state') { - $stateChange->setCurrentStateBallSize(StateBall::SIZE_MEDIUM_LARGE); - } - - if ($previousStateType === 'previous_soft_state') { - $stateChange->setPreviousStateBallSize(StateBall::SIZE_MEDIUM_LARGE); - if ($stateType === 'soft_state') { - $visual->getAttributes()->add('class', 'small-state-change'); - } - } - - $visual->prependHtml($stateChange); - - break; - } - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - switch ($this->item->event_type) { - case 'comment_add': - $subjectLabel = t('Comment added'); - - break; - case 'comment_remove': - if (! empty($this->item->comment->removed_by)) { - if ($this->item->comment->removed_by !== $this->item->comment->author) { - $subjectLabel = sprintf( - t('Comment removed by %s', '..'), - $this->item->comment->removed_by - ); - } else { - $subjectLabel = t('Comment removed by author'); - } - } elseif (isset($this->item->comment->expire_time)) { - $subjectLabel = t('Comment expired'); - } else { - $subjectLabel = t('Comment removed'); - } - - break; - case 'downtime_end': - if (! empty($this->item->downtime->cancelled_by)) { - if ($this->item->downtime->cancelled_by !== $this->item->downtime->author) { - $subjectLabel = sprintf( - t('Downtime cancelled by %s', '..'), - $this->item->downtime->cancelled_by - ); - } else { - $subjectLabel = t('Downtime cancelled by author'); - } - } elseif ($this->item->downtime->has_been_cancelled === 'y') { - $subjectLabel = t('Downtime cancelled'); - } else { - $subjectLabel = t('Downtime ended'); - } - - break; - case 'downtime_start': - $subjectLabel = t('Downtime started'); - - break; - case 'flapping_start': - $subjectLabel = t('Flapping started'); - - break; - case 'flapping_end': - $subjectLabel = t('Flapping stopped'); - - break; - case 'ack_set': - $subjectLabel = t('Acknowledgement set'); - - break; - case 'ack_clear': - if (! empty($this->item->acknowledgement->cleared_by)) { - if ($this->item->acknowledgement->cleared_by !== $this->item->acknowledgement->author) { - $subjectLabel = sprintf( - t('Acknowledgement cleared by %s', '..'), - $this->item->acknowledgement->cleared_by - ); - } else { - $subjectLabel = t('Acknowledgement cleared by author'); - } - } elseif (isset($this->item->acknowledgement->expire_time)) { - $subjectLabel = t('Acknowledgement expired'); - } else { - $subjectLabel = t('Acknowledgement cleared'); - } - - break; - case 'notification': - $subjectLabel = isset($this->item->notification->type) ? sprintf( - NotificationListItem::phraseForType($this->item->notification->type), - ucfirst($this->item->object_type) - ) : $this->item->event_type; - - break; - case 'state_change': - $state = $this->item->state->state_type === 'hard' - ? $this->item->state->hard_state - : $this->item->state->soft_state; - if ($state === 0) { - if ($this->item->object_type === 'service') { - $subjectLabel = t('Service recovered'); - } else { - $subjectLabel = t('Host recovered'); - } - } else { - if ($this->item->state->state_type === 'hard') { - $subjectLabel = t('Hard state changed'); - } else { - $subjectLabel = t('Soft state changed'); - } - } - - break; - default: - $subjectLabel = $this->item->event_type; - - break; - } - - if ($this->getNoSubjectLink()) { - $title->addHtml(HtmlElement::create('span', ['class' => 'subject'], $subjectLabel)); - } else { - $title->addHtml(new Link($subjectLabel, Links::event($this->item), ['class' => 'subject'])); - } - - if ($this->item->object_type === 'host') { - if (isset($this->item->host->id)) { - $link = $this->createHostLink($this->item->host, true); - } - } else { - if (isset($this->item->host->id, $this->item->service->id)) { - $link = $this->createServiceLink($this->item->service, $this->item->host, true); - } - } - - $title->addHtml(Text::create(' ')); - if (isset($link)) { - $title->addHtml($link); - } - } - - protected function createTimestamp(): ?BaseHtmlElement - { - return new TimeAgo($this->item->event_time->getTimestamp()); - } -} diff --git a/library/Icingadb/Widget/ItemList/HistoryList.php b/library/Icingadb/Widget/ItemList/HistoryList.php deleted file mode 100644 index d3b62328..00000000 --- a/library/Icingadb/Widget/ItemList/HistoryList.php +++ /dev/null @@ -1,57 +0,0 @@ - 'history-list']; - - protected function init(): void - { - /** @var ResultSet $data */ - $data = $this->data; - $this->data = $this->getIterator($data); - $this->initializeDetailActions(); - $this->setDetailUrl(Url::fromPath('icingadb/event')); - } - - protected function getItemClass(): string - { - switch ($this->getViewMode()) { - case 'minimal': - return HistoryListItemMinimal::class; - case 'detailed': - $this->removeAttribute('class', 'default-layout'); - - return HistoryListItemDetailed::class; - default: - return HistoryListItem::class; - } - } - - protected function assemble(): void - { - $this->addAttributes(['class' => $this->getViewMode()]); - - parent::assemble(); - } -} diff --git a/library/Icingadb/Widget/ItemList/HistoryListItem.php b/library/Icingadb/Widget/ItemList/HistoryListItem.php deleted file mode 100644 index c44a8076..00000000 --- a/library/Icingadb/Widget/ItemList/HistoryListItem.php +++ /dev/null @@ -1,18 +0,0 @@ -list->isCaptionDisabled()) { - $this->setCaptionDisabled(); - } - } - - protected function getStateBallSize(): string - { - return StateBall::SIZE_BIG; - } -} diff --git a/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php index 7044c8bb..81fb2df5 100644 --- a/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php +++ b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php @@ -6,7 +6,9 @@ namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\LoadMore; +use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\NotificationHistory; +use Icinga\Module\Icingadb\View\HistoryRenderer; use Icinga\Module\Icingadb\View\NotificationRenderer; use ipl\Orm\Model; use ipl\Web\Widget\ItemList; @@ -27,6 +29,8 @@ class LoadMoreObjectList extends ObjectList ItemList::__construct($data, function (Model $item) { if ($item instanceof NotificationHistory) { return new NotificationRenderer(); + } elseif ($item instanceof History) { + return new HistoryRenderer(); } throw new NotImplementedError('Not implemented'); diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 1f1efa6b..c541b15d 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -9,6 +9,7 @@ use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Downtime; +use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Model\RedundancyGroup; @@ -212,6 +213,11 @@ class ObjectList extends ItemList case $object instanceof NotificationHistory: $this->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->history->id))); + break; + + case $object instanceof History: + $this->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->id))); + break; } diff --git a/public/css/common.less b/public/css/common.less index d314d46e..3fc3e5d4 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -374,9 +374,9 @@ div.show-more { } } -.history-list, .header-item-layout.host, -.header-item-layout.service { +.header-item-layout.service, +.item-layout.history { .visual.small-state-change .state-change { padding-top: .25em; } From 1c36123a871eb09da9d19feee19237e4f06040b5 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Tue, 25 Mar 2025 11:31:29 +0100 Subject: [PATCH 17/35] Introduce `(Host|Service)(Grid)groupRenderer` - Fix and remove obsolete css --- .../controllers/HostgroupController.php | 5 +- .../controllers/HostgroupsController.php | 26 ++- .../controllers/ServicegroupController.php | 6 +- .../controllers/ServicegroupsController.php | 26 ++- .../Icingadb/View/HostgroupGridRenderer.php | 170 +++++++++++++++++ library/Icingadb/View/HostgroupRenderer.php | 115 ++++++++++++ .../ServicegroupGridRenderer.php} | 175 ++++++++++++------ .../Icingadb/View/ServicegroupRenderer.php | 107 +++++++++++ .../Icingadb/Widget/Detail/ObjectHeader.php | 12 ++ .../Widget/ItemTable/BaseHostGroupItem.php | 67 ------- .../Widget/ItemTable/BaseServiceGroupItem.php | 67 ------- .../Widget/ItemTable/GridCellLayout.php | 39 ---- .../Widget/ItemTable/HostgroupGridCell.php | 114 ------------ .../Widget/ItemTable/HostgroupTable.php | 38 ---- .../Widget/ItemTable/HostgroupTableRow.php | 55 ------ .../Widget/ItemTable/ServicegroupTable.php | 38 ---- .../Widget/ItemTable/ServicegroupTableRow.php | 42 ----- .../Widget/ItemTable/TableRowLayout.php | 26 --- public/css/common.less | 59 ------ public/css/item/item-layout.less | 11 +- public/css/widget/group-grid.less | 14 +- 21 files changed, 583 insertions(+), 629 deletions(-) create mode 100644 library/Icingadb/View/HostgroupGridRenderer.php create mode 100644 library/Icingadb/View/HostgroupRenderer.php rename library/Icingadb/{Widget/ItemTable/ServicegroupGridCell.php => View/ServicegroupGridRenderer.php} (54%) create mode 100644 library/Icingadb/View/ServicegroupRenderer.php delete mode 100644 library/Icingadb/Widget/ItemTable/BaseHostGroupItem.php delete mode 100644 library/Icingadb/Widget/ItemTable/BaseServiceGroupItem.php delete mode 100644 library/Icingadb/Widget/ItemTable/GridCellLayout.php delete mode 100644 library/Icingadb/Widget/ItemTable/HostgroupGridCell.php delete mode 100644 library/Icingadb/Widget/ItemTable/HostgroupTable.php delete mode 100644 library/Icingadb/Widget/ItemTable/HostgroupTableRow.php delete mode 100644 library/Icingadb/Widget/ItemTable/ServicegroupTable.php delete mode 100644 library/Icingadb/Widget/ItemTable/ServicegroupTableRow.php delete mode 100644 library/Icingadb/Widget/ItemTable/TableRowLayout.php diff --git a/application/controllers/HostgroupController.php b/application/controllers/HostgroupController.php index d5f07afe..bd176fb7 100644 --- a/application/controllers/HostgroupController.php +++ b/application/controllers/HostgroupController.php @@ -12,6 +12,7 @@ use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\HostgroupTableRow; use ipl\Html\Html; @@ -116,10 +117,10 @@ class HostgroupController extends Controller // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { - $this->addContent(new HostgroupTableRow($hostgroup)); + $this->addContent(new ObjectHeader($hostgroup)); $this->addContent(Html::tag('h2', null, t('Hosts'))); } else { - $this->addControl(new HostgroupTableRow($hostgroup)); + $this->addControl(new ObjectHeader($hostgroup)); } $this->addControl($paginationControl); diff --git a/application/controllers/HostgroupsController.php b/application/controllers/HostgroupsController.php index 700c6fd7..26941c94 100644 --- a/application/controllers/HostgroupsController.php +++ b/application/controllers/HostgroupsController.php @@ -7,14 +7,18 @@ namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\Hostgroup; use Icinga\Module\Icingadb\Model\Hostgroupsummary; +use Icinga\Module\Icingadb\View\HostgroupGridRenderer; +use Icinga\Module\Icingadb\View\HostgroupRenderer; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemTable\HostgroupTable; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ShowMore; +use ipl\Html\Attributes; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; +use ipl\Web\Widget\ItemList; +use ipl\Web\Widget\ItemTable; class HostgroupsController extends Controller { @@ -99,11 +103,21 @@ class HostgroupsController extends Controller $results = $hostgroups->execute(); - $this->addContent( - (new HostgroupTable($results)) - ->setBaseFilter($filter) - ->setViewMode($viewModeSwitcher->getViewMode()) - ); + if ($viewModeSwitcher->getViewMode() === 'grid') { + $table = new ItemList( + $results, + (new HostgroupGridRenderer())->setBaseFilter($filter) + ); + + $table->addAttributes(new Attributes(['class' => 'group-grid'])); + } else { + $table = new ItemTable( + $results, + (new HostgroupRenderer())->setBaseFilter($filter) + ); + } + + $this->addContent($table); if ($compact) { $this->addContent( diff --git a/application/controllers/ServicegroupController.php b/application/controllers/ServicegroupController.php index 4e78204a..2d3c036c 100644 --- a/application/controllers/ServicegroupController.php +++ b/application/controllers/ServicegroupController.php @@ -12,8 +12,8 @@ use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; +use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; -use Icinga\Module\Icingadb\Widget\ItemTable\ServicegroupTableRow; use ipl\Html\Html; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; @@ -124,10 +124,10 @@ class ServicegroupController extends Controller // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { - $this->addContent(new ServicegroupTableRow($servicegroup)); + $this->addContent(new ObjectHeader($servicegroup)); $this->addContent(Html::tag('h2', null, t('Services'))); } else { - $this->addControl(new ServicegroupTableRow($servicegroup)); + $this->addControl(new ObjectHeader($servicegroup)); } $this->addControl($paginationControl); diff --git a/application/controllers/ServicegroupsController.php b/application/controllers/ServicegroupsController.php index 299d001b..3e849e64 100644 --- a/application/controllers/ServicegroupsController.php +++ b/application/controllers/ServicegroupsController.php @@ -7,14 +7,18 @@ namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\Servicegroup; use Icinga\Module\Icingadb\Model\ServicegroupSummary; +use Icinga\Module\Icingadb\View\ServicegroupGridRenderer; +use Icinga\Module\Icingadb\View\ServicegroupRenderer; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; -use Icinga\Module\Icingadb\Widget\ItemTable\ServicegroupTable; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ShowMore; +use ipl\Html\Attributes; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; +use ipl\Web\Widget\ItemList; +use ipl\Web\Widget\ItemTable; class ServicegroupsController extends Controller { @@ -87,11 +91,21 @@ class ServicegroupsController extends Controller $results = $servicegroups->execute(); - $this->addContent( - (new ServicegroupTable($results)) - ->setBaseFilter($filter) - ->setViewMode($viewModeSwitcher->getViewMode()) - ); + if ($viewModeSwitcher->getViewMode() === 'grid') { + $table = new ItemList( + $results, + (new ServicegroupGridRenderer())->setBaseFilter($filter) + ); + + $table->addAttributes(new Attributes(['class' => 'group-grid'])); + } else { + $table = new ItemTable( + $results, + (new ServicegroupRenderer())->setBaseFilter($filter) + ); + } + + $this->addContent($table); if ($compact) { $this->addContent( diff --git a/library/Icingadb/View/HostgroupGridRenderer.php b/library/Icingadb/View/HostgroupGridRenderer.php new file mode 100644 index 00000000..734b8c89 --- /dev/null +++ b/library/Icingadb/View/HostgroupGridRenderer.php @@ -0,0 +1,170 @@ + */ +class HostgroupGridRenderer implements ItemRenderer +{ + use Translation; + use BaseFilter; + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue(['group-grid-cell', 'hostgroup']); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + $url = Url::fromPath('icingadb/hosts'); + $urlFilter = Filter::all(Filter::equal('hostgroup.name', $item->name)); + + + if ($item->hosts_down_unhandled > 0) { + $urlFilter->add(Filter::equal('host.state.soft_state', 1)) + ->add(Filter::equal('host.state.is_handled', 'n')) + ->add(Filter::equal('host.state.is_reachable', 'y')); + + $link = new Link( + new StateBadge($item->hosts_down_unhandled, 'down'), + $url->setFilter($urlFilter), + [ + 'title' => sprintf( + $this->translatePlural( + 'List %d host that is currently in DOWN state in host group "%s"', + 'List %d hosts which are currently in DOWN state in host group "%s"', + $item->hosts_down_unhandled + ), + $item->hosts_down_unhandled, + $item->display_name + ) + ] + ); + } elseif ($item->hosts_down_handled > 0) { + $urlFilter->add(Filter::equal('host.state.soft_state', 1)) + ->add(Filter::any( + Filter::equal('host.state.is_handled', 'y'), + Filter::equal('host.state.is_reachable', 'n') + )); + + $link = new Link( + new StateBadge($item->hosts_down_handled, 'down', true), + $url->setFilter($urlFilter), + [ + 'title' => sprintf( + $this->translatePlural( + 'List %d host that is currently in DOWN (Acknowledged) state in host group "%s"', + 'List %d hosts which are currently in DOWN (Acknowledged) state in host group "%s"', + $item->hosts_down_handled + ), + $item->hosts_down_handled, + $item->display_name + ) + ] + ); + } elseif ($item->hosts_pending > 0) { + $urlFilter->add(Filter::equal('host.state.soft_state', 99)); + + $link = new Link( + new StateBadge($item->hosts_pending, 'pending'), + $url->setFilter($urlFilter), + [ + 'title' => sprintf( + $this->translatePlural( + 'List %d host that is currently in PENDING state in host group "%s"', + 'List %d hosts which are currently in PENDING state in host group "%s"', + $item->hosts_pending + ), + $item->hosts_pending, + $item->display_name + ) + ] + ); + } elseif ($item->hosts_up > 0) { + $urlFilter->add(Filter::equal('host.state.soft_state', 0)); + + $link = new Link( + new StateBadge($item->hosts_up, 'up'), + $url->setFilter($urlFilter), + [ + 'title' => sprintf( + $this->translatePlural( + 'List %d host that is currently in UP state in host group "%s"', + 'List %d hosts which are currently in UP state in host group "%s"', + $item->hosts_up + ), + $item->hosts_up, + $item->display_name + ) + ] + ); + } else { + $link = new Link( + new StateBadge(0, 'none'), + $url, + [ + 'title' => sprintf( + $this->translate('There are no hosts in host group "%s"'), + $item->display_name + ) + ] + ); + } + + $visual->addHtml($link); + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + $link = new Link( + $item->display_name, + Links::hostgroup($item), + [ + 'class' => 'subject', + 'title' => sprintf( + $this->translate('List all hosts in the group "%s"'), + $item->display_name + ) + ] + ); + + if ($this->hasBaseFilter()) { + $link->getUrl()->setFilter($this->getBaseFilter()); + } + + $title->addHtml($link); + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections + } +} diff --git a/library/Icingadb/View/HostgroupRenderer.php b/library/Icingadb/View/HostgroupRenderer.php new file mode 100644 index 00000000..d1f02a07 --- /dev/null +++ b/library/Icingadb/View/HostgroupRenderer.php @@ -0,0 +1,115 @@ + */ +class HostgroupRenderer implements ItemTableRenderer +{ + use Translation; + use BaseFilter; + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue('hostgroup'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + if ($layout === 'header') { + $title->addHtml(new HtmlElement( + 'span', + Attributes::create(['class' => 'subject']), + Text::create($item->display_name) + )); + } else { + $link = new Link( + $item->display_name, + Links::hostgroup($item), + [ + 'class' => 'subject', + 'title' => sprintf( + $this->translate('List all hosts in the group "%s"'), + $item->display_name + ) + ] + ); + + if ($this->hasBaseFilter()) { + $link->getUrl()->setFilter($this->getBaseFilter()); + } + + $title->addHtml($link); + } + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + // assembleExtendedInfo() is only called when $layout == header + $info->addHtml(...$this->createStatistics($item)); + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections + } + + public function assembleColumns($item, HtmlDocument $columns, string $layout): void + { + [$hostStats, $serviceStats] = $this->createStatistics($item); + + if ($this->hasBaseFilter()) { + $hostStats->setBaseFilter(Filter::all($hostStats->getBaseFilter(), $this->getBaseFilter())); + $serviceStats->setBaseFilter(Filter::all($serviceStats->getBaseFilter(), $this->getBaseFilter())); + } + + $columns->addHtml($hostStats, $serviceStats); + } + + /** + * Create statistics for the given item + * + * @param Hostgroupsummary $item + * + * @return array{0: HostStatistics, 1: ServiceStatistics} + */ + protected function createStatistics(Hostgroupsummary $item): array + { + $hostStats = (new HostStatistics($item)) + ->setBaseFilter(Filter::equal('hostgroup.name', $item->name)); + + + $serviceStats = (new ServiceStatistics($item)) + ->setBaseFilter(Filter::equal('hostgroup.name', $item->name)); + + return [$hostStats, $serviceStats]; + } +} diff --git a/library/Icingadb/Widget/ItemTable/ServicegroupGridCell.php b/library/Icingadb/View/ServicegroupGridRenderer.php similarity index 54% rename from library/Icingadb/Widget/ItemTable/ServicegroupGridCell.php rename to library/Icingadb/View/ServicegroupGridRenderer.php index 16e50e19..e79f915d 100644 --- a/library/Icingadb/Widget/ItemTable/ServicegroupGridCell.php +++ b/library/Icingadb/View/ServicegroupGridRenderer.php @@ -1,54 +1,68 @@ */ +class ServicegroupGridRenderer implements ItemRenderer { - use GridCellLayout; + use Translation; + use BaseFilter; - protected $defaultAttributes = ['class' => ['group-grid-cell', 'servicegroup-grid-cell']]; + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue(['group-grid-cell', 'servicegroup']); + } - protected function createGroupBadge(): Link + public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $url = Url::fromPath('icingadb/services/grid'); - $urlFilter = Filter::all(Filter::equal('servicegroup.name', $this->item->name)); + $urlFilter = Filter::all(Filter::equal('servicegroup.name', $item->name)); - if ($this->item->services_critical_unhandled > 0) { + if ($item->services_critical_unhandled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 2)) ->add(Filter::equal('service.state.is_handled', 'n')) ->add(Filter::equal('service.state.is_reachable', 'y')); - return new Link( - new StateBadge($this->item->services_critical_unhandled, 'critical'), + $link = new Link( + new StateBadge($item->services_critical_unhandled, 'critical'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in CRITICAL state in service group "%s"', 'List %d services which are currently in CRITICAL state in service group "%s"', - $this->item->services_critical_unhandled + $item->services_critical_unhandled ), - $this->item->services_critical_unhandled, - $this->item->display_name + $item->services_critical_unhandled, + $item->display_name ) ] ); - } elseif ($this->item->services_critical_handled > 0) { + } elseif ($item->services_critical_handled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 2)) ->add(Filter::any( Filter::equal('service.state.is_handled', 'y'), Filter::equal('service.state.is_reachable', 'n') )); - return new Link( - new StateBadge($this->item->services_critical_handled, 'critical', true), + $link = new Link( + new StateBadge($item->services_critical_handled, 'critical', true), $url->setFilter($urlFilter), [ 'title' => sprintf( @@ -57,42 +71,42 @@ class ServicegroupGridCell extends BaseServiceGroupItem . ' "%s"', 'List %d services which are currently in CRITICAL (Acknowledged) state in service group' . ' "%s"', - $this->item->services_critical_handled + $item->services_critical_handled ), - $this->item->services_critical_handled, - $this->item->display_name + $item->services_critical_handled, + $item->display_name ) ] ); - } elseif ($this->item->services_warning_unhandled > 0) { + } elseif ($item->services_warning_unhandled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 1)) ->add(Filter::equal('service.state.is_handled', 'n')) ->add(Filter::equal('service.state.is_reachable', 'y')); - return new Link( - new StateBadge($this->item->services_warning_unhandled, 'warning'), + $link = new Link( + new StateBadge($item->services_warning_unhandled, 'warning'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in WARNING state in service group "%s"', 'List %d services which are currently in WARNING state in service group "%s"', - $this->item->services_warning_unhandled + $item->services_warning_unhandled ), - $this->item->services_warning_unhandled, - $this->item->display_name + $item->services_warning_unhandled, + $item->display_name ) ] ); - } elseif ($this->item->services_warning_handled > 0) { + } elseif ($item->services_warning_handled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 1)) ->add(Filter::any( Filter::equal('service.state.is_handled', 'y'), Filter::equal('service.state.is_reachable', 'n') )); - return new Link( - new StateBadge($this->item->services_warning_handled, 'warning', true), + $link = new Link( + new StateBadge($item->services_warning_handled, 'warning', true), $url->setFilter($urlFilter), [ 'title' => sprintf( @@ -101,42 +115,42 @@ class ServicegroupGridCell extends BaseServiceGroupItem . ' "%s"', 'List %d services which are currently in WARNING (Acknowledged) state in service group' . ' "%s"', - $this->item->services_warning_handled + $item->services_warning_handled ), - $this->item->services_warning_handled, - $this->item->display_name + $item->services_warning_handled, + $item->display_name ) ] ); - } elseif ($this->item->services_unknown_unhandled > 0) { + } elseif ($item->services_unknown_unhandled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 3)) ->add(Filter::equal('service.state.is_handled', 'n')) ->add(Filter::equal('service.state.is_reachable', 'y')); - return new Link( - new StateBadge($this->item->services_unknown_unhandled, 'unknown'), + $link = new Link( + new StateBadge($item->services_unknown_unhandled, 'unknown'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in UNKNOWN state in service group "%s"', 'List %d services which are currently in UNKNOWN state in service group "%s"', - $this->item->services_unknown_unhandled + $item->services_unknown_unhandled ), - $this->item->services_unknown_unhandled, - $this->item->display_name + $item->services_unknown_unhandled, + $item->display_name ) ] ); - } elseif ($this->item->services_unknown_handled > 0) { + } elseif ($item->services_unknown_handled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 3)) ->add(Filter::any( Filter::equal('service.state.is_handled', 'y'), Filter::equal('service.state.is_reachable', 'n') )); - return new Link( - new StateBadge($this->item->services_unknown_handled, 'unknown', true), + $link = new Link( + new StateBadge($item->services_unknown_handled, 'unknown', true), $url->setFilter($urlFilter), [ 'title' => sprintf( @@ -145,60 +159,101 @@ class ServicegroupGridCell extends BaseServiceGroupItem . ' "%s"', 'List %d services which are currently in UNKNOWN (Acknowledged) state in service group' . ' "%s"', - $this->item->services_unknown_handled + $item->services_unknown_handled ), - $this->item->services_unknown_handled, - $this->item->display_name + $item->services_unknown_handled, + $item->display_name ) ] ); - } elseif ($this->item->services_pending > 0) { + } elseif ($item->services_pending > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 99)); - return new Link( - new StateBadge($this->item->services_pending, 'pending'), + $link = new Link( + new StateBadge($item->services_pending, 'pending'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in PENDING state in service group "%s"', 'List %d services which are currently in PENDING state in service group "%s"', - $this->item->services_pending + $item->services_pending ), - $this->item->services_pending, - $this->item->display_name + $item->services_pending, + $item->display_name ) ] ); - } elseif ($this->item->services_ok > 0) { + } elseif ($item->services_ok > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 0)); - return new Link( - new StateBadge($this->item->services_ok, 'ok'), + $link = new Link( + new StateBadge($item->services_ok, 'ok'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in OK state in service group "%s"', 'List %d services which are currently in OK state in service group "%s"', - $this->item->services_ok + $item->services_ok ), - $this->item->services_ok, - $this->item->display_name + $item->services_ok, + $item->display_name + ) + ] + ); + } else { + $link = new Link( + new StateBadge(0, 'none'), + $url, + [ + 'title' => sprintf( + $this->translate('There are no services in service group "%s"'), + $item->display_name ) ] ); } - return new Link( - new StateBadge(0, 'none'), - $url, + $visual->addHtml($link); + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + $link = new Link( + $item->display_name, + Links::servicegroup($item), [ + 'class' => 'subject', 'title' => sprintf( - $this->translate('There are no services in service group "%s"'), - $this->item->display_name + $this->translate('List all services in the group "%s"'), + $item->display_name ) ] ); + + if ($this->hasBaseFilter()) { + $link->getUrl()->setFilter($this->getBaseFilter()); + } + + $title->addHtml($link); + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections } } diff --git a/library/Icingadb/View/ServicegroupRenderer.php b/library/Icingadb/View/ServicegroupRenderer.php new file mode 100644 index 00000000..392c2678 --- /dev/null +++ b/library/Icingadb/View/ServicegroupRenderer.php @@ -0,0 +1,107 @@ + */ +class ServicegroupRenderer implements ItemTableRenderer +{ + use Translation; + use BaseFilter; + + public function assembleAttributes($item, Attributes $attributes, string $layout): void + { + $attributes->get('class')->addValue('servicegroup'); + } + + public function assembleVisual($item, HtmlDocument $visual, string $layout): void + { + } + + public function assembleTitle($item, HtmlDocument $title, string $layout): void + { + if ($layout === 'header') { + $title->addHtml(new HtmlElement( + 'span', + Attributes::create(['class' => 'subject']), + Text::create($item->display_name) + )); + } else { + $link = new Link( + $item->display_name, + Links::servicegroup($item), + [ + 'class' => 'subject', + 'title' => sprintf( + $this->translate('List all services in the group "%s"'), + $item->display_name + ) + ] + ); + + if ($this->hasBaseFilter()) { + $link->getUrl()->setFilter($this->getBaseFilter()); + } + + $title->addHtml($link); + } + } + + public function assembleCaption($item, HtmlDocument $caption, string $layout): void + { + $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + } + + public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void + { + // assembleExtendedInfo() is only called when $layout == header + $info->addHtml($this->createStatistics($item)); + } + + public function assembleFooter($item, HtmlDocument $footer, string $layout): void + { + } + + public function assemble($item, string $name, HtmlDocument $element, string $layout): bool + { + return false; // no custom sections + } + + public function assembleColumns($item, HtmlDocument $columns, string $layout): void + { + $serviceStats = $this->createStatistics($item); + + if ($this->hasBaseFilter()) { + $serviceStats->setBaseFilter(Filter::all($serviceStats->getBaseFilter(), $this->getBaseFilter())); + } + + $columns->addHtml($serviceStats); + } + + /** + * Create statistics for the given item + * + * @param ServicegroupSummary $item + * + * @return ServiceStatistics + */ + protected function createStatistics(ServicegroupSummary $item): ServiceStatistics + { + return (new ServiceStatistics($item)) + ->setBaseFilter(Filter::equal('servicegroup.name', $item->name)); + } +} diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index d425db63..dd298f52 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -9,15 +9,19 @@ use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; +use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; +use Icinga\Module\Icingadb\Model\ServicegroupSummary; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\DowntimeRenderer; use Icinga\Module\Icingadb\View\HistoryRenderer; +use Icinga\Module\Icingadb\View\HostgroupRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; +use Icinga\Module\Icingadb\View\ServicegroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; use Icinga\Module\Icingadb\View\UsergroupRenderer; use Icinga\Module\Icingadb\View\UserRenderer; @@ -71,6 +75,14 @@ class ObjectHeader extends BaseHtmlElement case $this->object instanceof History: $renderer = new HistoryRenderer(); + break; + case $this->object instanceof Hostgroupsummary: + $renderer = new HostgroupRenderer(); + + break; + case $this->object instanceof ServicegroupSummary: + $renderer = new ServicegroupRenderer(); + break; default: throw new NotImplementedError('Not implemented'); diff --git a/library/Icingadb/Widget/ItemTable/BaseHostGroupItem.php b/library/Icingadb/Widget/ItemTable/BaseHostGroupItem.php deleted file mode 100644 index aa581eed..00000000 --- a/library/Icingadb/Widget/ItemTable/BaseHostGroupItem.php +++ /dev/null @@ -1,67 +0,0 @@ -table)) { - $this->table->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)); - } - } - - protected function createSubject(): BaseHtmlElement - { - if (isset($this->table)) { - $link = new Link( - $this->item->display_name, - Links::hostgroup($this->item), - [ - 'class' => 'subject', - 'title' => sprintf( - $this->translate('List all hosts in the group "%s"'), - $this->item->display_name - ) - ] - ); - if ($this->table->hasBaseFilter()) { - $link->getUrl()->setFilter($this->table->getBaseFilter()); - } - - return $link; - } - - return new HtmlElement( - 'span', - Attributes::create(['class' => 'subject']), - Text::create($this->item->display_name) - ); - } - - protected function createCaption(): BaseHtmlElement - { - return new HtmlElement('span', null, Text::create($this->item->name)); - } -} diff --git a/library/Icingadb/Widget/ItemTable/BaseServiceGroupItem.php b/library/Icingadb/Widget/ItemTable/BaseServiceGroupItem.php deleted file mode 100644 index 4719bb9e..00000000 --- a/library/Icingadb/Widget/ItemTable/BaseServiceGroupItem.php +++ /dev/null @@ -1,67 +0,0 @@ -table)) { - $this->table->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)); - } - } - - protected function createSubject(): BaseHtmlElement - { - if (isset($this->table)) { - $link = new Link( - $this->item->display_name, - Links::servicegroup($this->item), - [ - 'class' => 'subject', - 'title' => sprintf( - $this->translate('List all services in the group "%s"'), - $this->item->display_name - ) - ] - ); - if ($this->table->hasBaseFilter()) { - $link->getUrl()->setFilter($this->table->getBaseFilter()); - } - - return $link; - } - - return new HtmlElement( - 'span', - Attributes::create(['class' => 'subject']), - Text::create($this->item->display_name) - ); - } - - protected function createCaption(): BaseHtmlElement - { - return new HtmlElement('span', null, Text::create($this->item->name)); - } -} diff --git a/library/Icingadb/Widget/ItemTable/GridCellLayout.php b/library/Icingadb/Widget/ItemTable/GridCellLayout.php deleted file mode 100644 index 95b1a0af..00000000 --- a/library/Icingadb/Widget/ItemTable/GridCellLayout.php +++ /dev/null @@ -1,39 +0,0 @@ -add($this->createGroupBadge()); - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $title->addHtml( - $this->createSubject(), - $this->createCaption() - ); - } - - protected function assemble(): void - { - $this->add([ - $this->createTitle() - ]); - } -} diff --git a/library/Icingadb/Widget/ItemTable/HostgroupGridCell.php b/library/Icingadb/Widget/ItemTable/HostgroupGridCell.php deleted file mode 100644 index 53967475..00000000 --- a/library/Icingadb/Widget/ItemTable/HostgroupGridCell.php +++ /dev/null @@ -1,114 +0,0 @@ - ['group-grid-cell', 'hostgroup-grid-cell']]; - - protected function createGroupBadge(): Link - { - $url = Url::fromPath('icingadb/hosts'); - $urlFilter = Filter::all(Filter::equal('hostgroup.name', $this->item->name)); - - if ($this->item->hosts_down_unhandled > 0) { - $urlFilter->add(Filter::equal('host.state.soft_state', 1)) - ->add(Filter::equal('host.state.is_handled', 'n')) - ->add(Filter::equal('host.state.is_reachable', 'y')); - - return new Link( - new StateBadge($this->item->hosts_down_unhandled, 'down'), - $url->setFilter($urlFilter), - [ - 'title' => sprintf( - $this->translatePlural( - 'List %d host that is currently in DOWN state in host group "%s"', - 'List %d hosts which are currently in DOWN state in host group "%s"', - $this->item->hosts_down_unhandled - ), - $this->item->hosts_down_unhandled, - $this->item->display_name - ) - ] - ); - } elseif ($this->item->hosts_down_handled > 0) { - $urlFilter->add(Filter::equal('host.state.soft_state', 1)) - ->add(Filter::any( - Filter::equal('host.state.is_handled', 'y'), - Filter::equal('host.state.is_reachable', 'n') - )); - - return new Link( - new StateBadge($this->item->hosts_down_handled, 'down', true), - $url->setFilter($urlFilter), - [ - 'title' => sprintf( - $this->translatePlural( - 'List %d host that is currently in DOWN (Acknowledged) state in host group "%s"', - 'List %d hosts which are currently in DOWN (Acknowledged) state in host group "%s"', - $this->item->hosts_down_handled - ), - $this->item->hosts_down_handled, - $this->item->display_name - ) - ] - ); - } elseif ($this->item->hosts_pending > 0) { - $urlFilter->add(Filter::equal('host.state.soft_state', 99)); - - return new Link( - new StateBadge($this->item->hosts_pending, 'pending'), - $url->setFilter($urlFilter), - [ - 'title' => sprintf( - $this->translatePlural( - 'List %d host that is currently in PENDING state in host group "%s"', - 'List %d hosts which are currently in PENDING state in host group "%s"', - $this->item->hosts_pending - ), - $this->item->hosts_pending, - $this->item->display_name - ) - ] - ); - } elseif ($this->item->hosts_up > 0) { - $urlFilter->add(Filter::equal('host.state.soft_state', 0)); - - return new Link( - new StateBadge($this->item->hosts_up, 'up'), - $url->setFilter($urlFilter), - [ - 'title' => sprintf( - $this->translatePlural( - 'List %d host that is currently in UP state in host group "%s"', - 'List %d hosts which are currently in UP state in host group "%s"', - $this->item->hosts_up - ), - $this->item->hosts_up, - $this->item->display_name - ) - ] - ); - } - - return new Link( - new StateBadge(0, 'none'), - $url, - [ - 'title' => sprintf( - $this->translate('There are no hosts in host group "%s"'), - $this->item->display_name - ) - ] - ); - } -} diff --git a/library/Icingadb/Widget/ItemTable/HostgroupTable.php b/library/Icingadb/Widget/ItemTable/HostgroupTable.php deleted file mode 100644 index 6b40f762..00000000 --- a/library/Icingadb/Widget/ItemTable/HostgroupTable.php +++ /dev/null @@ -1,38 +0,0 @@ - 'hostgroup-table']; - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setDetailUrl(Url::fromPath('icingadb/hostgroup')); - } - - protected function getLayout(): string - { - return $this->getViewMode() === 'grid' - ? 'group-grid' - : parent::getLayout(); - } - - protected function getItemClass(): string - { - return $this->getViewMode() === 'grid' - ? HostgroupGridCell::class - : HostgroupTableRow::class; - } -} diff --git a/library/Icingadb/Widget/ItemTable/HostgroupTableRow.php b/library/Icingadb/Widget/ItemTable/HostgroupTableRow.php deleted file mode 100644 index cb3f06a9..00000000 --- a/library/Icingadb/Widget/ItemTable/HostgroupTableRow.php +++ /dev/null @@ -1,55 +0,0 @@ - 'hostgroup-table-row']; - - /** - * Create Host and service statistics columns - * - * @return BaseHtmlElement[] - */ - protected function createStatistics(): array - { - $hostStats = new HostStatistics($this->item); - - $hostStats->setBaseFilter(Filter::equal('hostgroup.name', $this->item->name)); - if (isset($this->table) && $this->table->hasBaseFilter()) { - $hostStats->setBaseFilter( - Filter::all($hostStats->getBaseFilter(), $this->table->getBaseFilter()) - ); - } - - $serviceStats = new ServiceStatistics($this->item); - - $serviceStats->setBaseFilter(Filter::equal('hostgroup.name', $this->item->name)); - if (isset($this->table) && $this->table->hasBaseFilter()) { - $serviceStats->setBaseFilter( - Filter::all($serviceStats->getBaseFilter(), $this->table->getBaseFilter()) - ); - } - - return [ - $this->createColumn($hostStats), - $this->createColumn($serviceStats) - ]; - } -} diff --git a/library/Icingadb/Widget/ItemTable/ServicegroupTable.php b/library/Icingadb/Widget/ItemTable/ServicegroupTable.php deleted file mode 100644 index 2378a77d..00000000 --- a/library/Icingadb/Widget/ItemTable/ServicegroupTable.php +++ /dev/null @@ -1,38 +0,0 @@ - 'servicegroup-table']; - - protected function init(): void - { - $this->initializeDetailActions(); - $this->setDetailUrl(Url::fromPath('icingadb/servicegroup')); - } - - protected function getLayout(): string - { - return $this->getViewMode() === 'grid' - ? 'group-grid' - : parent::getLayout(); - } - - protected function getItemClass(): string - { - return $this->getViewMode() === 'grid' - ? ServicegroupGridCell::class - : ServicegroupTableRow::class; - } -} diff --git a/library/Icingadb/Widget/ItemTable/ServicegroupTableRow.php b/library/Icingadb/Widget/ItemTable/ServicegroupTableRow.php deleted file mode 100644 index e34c029f..00000000 --- a/library/Icingadb/Widget/ItemTable/ServicegroupTableRow.php +++ /dev/null @@ -1,42 +0,0 @@ - 'servicegroup-table-row']; - - /** - * Create Service statistics cell - * - * @return BaseHtmlElement[] - */ - protected function createStatistics(): array - { - $serviceStats = new ServiceStatistics($this->item); - - $serviceStats->setBaseFilter(Filter::equal('servicegroup.name', $this->item->name)); - if (isset($this->table) && $this->table->hasBaseFilter()) { - $serviceStats->setBaseFilter( - Filter::all($serviceStats->getBaseFilter(), $this->table->getBaseFilter()) - ); - } - - return [$this->createColumn($serviceStats)]; - } -} diff --git a/library/Icingadb/Widget/ItemTable/TableRowLayout.php b/library/Icingadb/Widget/ItemTable/TableRowLayout.php deleted file mode 100644 index b9ce0226..00000000 --- a/library/Icingadb/Widget/ItemTable/TableRowLayout.php +++ /dev/null @@ -1,26 +0,0 @@ -createStatistics() as $objectStatistic) { - $columns->addHtml($objectStatistic); - } - } - - protected function assembleTitle(BaseHtmlElement $title): void - { - $title->addHtml( - $this->createSubject(), - $this->createCaption() - ); - } -} diff --git a/public/css/common.less b/public/css/common.less index 3fc3e5d4..ef4341d5 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -315,65 +315,6 @@ div.show-more { } } -.item-table { - // TODO: Drop once the new item table layout is used everywhere - &.table-layout { - &.hostgroup-table { - --columns: 2; - } - - &.servicegroup-table { - --columns: 1; - } - } -} - -.hostgroup-table, -.servicegroup-table { - .title .column-content > * { - display: block; - max-width: fit-content; - } - - .object-statistics-total { - width: 3.75em; - } -} - -.controls .hostgroup-table-row, -.controls .servicegroup-table-row { - .title .column-content { - display: inline-flex; - align-items: center; - - > :first-child { - flex: 0 1 auto; - } - - > :last-child { - flex: 1 1 auto; - } - - .subject { - margin-right: .5em; - } - } - - .vertical-key-value { - br { - display: none; - } - - .key { - padding-left: .417em; - } - - .value { - vertical-align: middle; - } - } -} - .header-item-layout.host, .header-item-layout.service, .item-layout.history { diff --git a/public/css/item/item-layout.less b/public/css/item/item-layout.less index a78672e0..5db60ac1 100644 --- a/public/css/item/item-layout.less +++ b/public/css/item/item-layout.less @@ -52,10 +52,17 @@ line-height: 1.5*12/11em; } } - &.minimal-item-layout .caption { - .plugin-output { + + &.minimal-item-layout { + .caption .plugin-output { .text-ellipsis(); } + + &.hostgroup .extended-info { + > :not(:last-child) { + margin-right: 1em; + } + } } footer { diff --git a/public/css/widget/group-grid.less b/public/css/widget/group-grid.less index 22dce939..ca4ca488 100644 --- a/public/css/widget/group-grid.less +++ b/public/css/widget/group-grid.less @@ -1,13 +1,13 @@ // HostGroup- and -ServiceGroupGrid styles -ul.item-table.group-grid { +ul.item-list.group-grid { + display: grid; grid-template-columns: repeat(auto-fit, 15em); grid-gap: 1em 2em; - .table-row { + .list-item { margin: -.25em; padding: .25em; - border-radius: .5em; } li.group-grid-cell { @@ -19,7 +19,11 @@ ul.item-table.group-grid { margin-right: 1em; } - .column-content { + .main { + border-top: none; + } + + .title, .caption { line-height: 1; a { @@ -37,6 +41,6 @@ ul.item-table.group-grid { } } -.content.full-width ul.item-table.group-grid { +.content.full-width ul.item-list.group-grid { margin: 0 1em; } From a60cb7dc4257e649596b1b50c21139ce2948cbb2 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Tue, 25 Mar 2025 13:31:29 +0100 Subject: [PATCH 18/35] ObjectList: Use Translation trait --- library/Icingadb/Widget/ItemList/ObjectList.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index c541b15d..5b4e14ad 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -28,6 +28,7 @@ use Icinga\Module\Icingadb\View\UserRenderer; use Icinga\Module\Icingadb\Widget\Notice; use InvalidArgumentException; use ipl\Html\HtmlDocument; +use ipl\I18n\Translation; use ipl\Orm\Model; use ipl\Stdlib\Filter; use ipl\Web\Layout\DetailedItemLayout; @@ -46,6 +47,7 @@ use ipl\Web\Widget\ListItem; class ObjectList extends ItemList { use DetailActions; + use Translation; /** @var bool Whether the list contains at least one item with an icon_image */ protected $hasIconImages = false; @@ -230,7 +232,7 @@ class ObjectList extends ItemList if ($this->data instanceof VolatileStateResults && $this->data->isRedisUnavailable()) { $this->prependWrapper((new HtmlDocument())->addHtml(new Notice( - t('Redis is currently unavailable. The shown information might be outdated.') + $this->translate('Redis is currently unavailable. The shown information might be outdated.') ))); } } From 9febe3bf36a69bec70d9db6a878b861649518376 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Tue, 25 Mar 2025 14:48:57 +0100 Subject: [PATCH 19/35] Introduce class `ObjectTable` and `ObjectGrid` - Update css --- .../controllers/HostgroupsController.php | 21 +++---- .../controllers/ServicegroupsController.php | 19 +++--- .../Icingadb/View/HostgroupGridRenderer.php | 2 +- .../View/ServicegroupGridRenderer.php | 2 +- .../Icingadb/Widget/ItemTable/ObjectGrid.php | 63 +++++++++++++++++++ .../Icingadb/Widget/ItemTable/ObjectTable.php | 61 ++++++++++++++++++ .../{group-grid.less => object-grid.less} | 6 +- 7 files changed, 143 insertions(+), 31 deletions(-) create mode 100644 library/Icingadb/Widget/ItemTable/ObjectGrid.php create mode 100644 library/Icingadb/Widget/ItemTable/ObjectTable.php rename public/css/widget/{group-grid.less => object-grid.less} (85%) diff --git a/application/controllers/HostgroupsController.php b/application/controllers/HostgroupsController.php index 26941c94..46173fae 100644 --- a/application/controllers/HostgroupsController.php +++ b/application/controllers/HostgroupsController.php @@ -12,13 +12,12 @@ use Icinga\Module\Icingadb\View\HostgroupRenderer; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; +use Icinga\Module\Icingadb\Widget\ItemTable\ObjectGrid; +use Icinga\Module\Icingadb\Widget\ItemTable\ObjectTable; use Icinga\Module\Icingadb\Widget\ShowMore; -use ipl\Html\Attributes; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; -use ipl\Web\Widget\ItemList; -use ipl\Web\Widget\ItemTable; class HostgroupsController extends Controller { @@ -104,20 +103,14 @@ class HostgroupsController extends Controller $results = $hostgroups->execute(); if ($viewModeSwitcher->getViewMode() === 'grid') { - $table = new ItemList( - $results, - (new HostgroupGridRenderer())->setBaseFilter($filter) - ); - - $table->addAttributes(new Attributes(['class' => 'group-grid'])); + $content = new ObjectGrid($results, (new HostgroupGridRenderer())->setBaseFilter($filter)); } else { - $table = new ItemTable( - $results, - (new HostgroupRenderer())->setBaseFilter($filter) - ); + $content = new ObjectTable($results, (new HostgroupRenderer())->setBaseFilter($filter)); } - $this->addContent($table); + $content->setDetailUrl(Url::fromPath('icingadb/hostgroup')); + + $this->addContent($content); if ($compact) { $this->addContent( diff --git a/application/controllers/ServicegroupsController.php b/application/controllers/ServicegroupsController.php index 3e849e64..5e34d2bb 100644 --- a/application/controllers/ServicegroupsController.php +++ b/application/controllers/ServicegroupsController.php @@ -12,13 +12,14 @@ use Icinga\Module\Icingadb\View\ServicegroupRenderer; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; +use Icinga\Module\Icingadb\Widget\ItemTable\ObjectGrid; +use Icinga\Module\Icingadb\Widget\ItemTable\ObjectTable; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\Attributes; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; use ipl\Web\Widget\ItemList; -use ipl\Web\Widget\ItemTable; class ServicegroupsController extends Controller { @@ -92,20 +93,14 @@ class ServicegroupsController extends Controller $results = $servicegroups->execute(); if ($viewModeSwitcher->getViewMode() === 'grid') { - $table = new ItemList( - $results, - (new ServicegroupGridRenderer())->setBaseFilter($filter) - ); - - $table->addAttributes(new Attributes(['class' => 'group-grid'])); + $content = new ObjectGrid($results, (new ServicegroupGridRenderer())->setBaseFilter($filter)); } else { - $table = new ItemTable( - $results, - (new ServicegroupRenderer())->setBaseFilter($filter) - ); + $content = new ObjectTable($results, (new ServicegroupRenderer())->setBaseFilter($filter)); } - $this->addContent($table); + $content->setDetailUrl(Url::fromPath('icingadb/servicegroup')); + + $this->addContent($content); if ($compact) { $this->addContent( diff --git a/library/Icingadb/View/HostgroupGridRenderer.php b/library/Icingadb/View/HostgroupGridRenderer.php index 734b8c89..50743ee2 100644 --- a/library/Icingadb/View/HostgroupGridRenderer.php +++ b/library/Icingadb/View/HostgroupGridRenderer.php @@ -26,7 +26,7 @@ class HostgroupGridRenderer implements ItemRenderer public function assembleAttributes($item, Attributes $attributes, string $layout): void { - $attributes->get('class')->addValue(['group-grid-cell', 'hostgroup']); + $attributes->get('class')->addValue(['object-grid-cell', 'hostgroup']); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void diff --git a/library/Icingadb/View/ServicegroupGridRenderer.php b/library/Icingadb/View/ServicegroupGridRenderer.php index e79f915d..789a80ce 100644 --- a/library/Icingadb/View/ServicegroupGridRenderer.php +++ b/library/Icingadb/View/ServicegroupGridRenderer.php @@ -26,7 +26,7 @@ class ServicegroupGridRenderer implements ItemRenderer public function assembleAttributes($item, Attributes $attributes, string $layout): void { - $attributes->get('class')->addValue(['group-grid-cell', 'servicegroup']); + $attributes->get('class')->addValue(['object-grid-cell', 'servicegroup']); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void diff --git a/library/Icingadb/Widget/ItemTable/ObjectGrid.php b/library/Icingadb/Widget/ItemTable/ObjectGrid.php new file mode 100644 index 00000000..c92c71e9 --- /dev/null +++ b/library/Icingadb/Widget/ItemTable/ObjectGrid.php @@ -0,0 +1,63 @@ + 'object-grid']; + + public function __construct($data, ItemRenderer $renderer) + { + parent::__construct($data, function (Model $item) use ($renderer) { + if ($item instanceof Hostgroupsummary && $renderer instanceof HostgroupGridRenderer) { + return $renderer; + } + + if ($item instanceof ServicegroupSummary && $renderer instanceof ServicegroupGridRenderer) { + return $renderer; + } + + throw new NotImplementedError('Not implemented'); + }); + } + + protected function init(): void + { + parent::init(); + + $this->initializeDetailActions(); + } + + protected function createListItem(object $data): ValidHtml + { + $item = parent::createListItem($data); + + if (! $this->getDetailActionsDisabled()) { + $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); + } + + return $item; + } +} diff --git a/library/Icingadb/Widget/ItemTable/ObjectTable.php b/library/Icingadb/Widget/ItemTable/ObjectTable.php new file mode 100644 index 00000000..73996300 --- /dev/null +++ b/library/Icingadb/Widget/ItemTable/ObjectTable.php @@ -0,0 +1,61 @@ +initializeDetailActions(); + } + + protected function createListItem(object $data): ValidHtml + { + $item = parent::createListItem($data); + + if (! $this->getDetailActionsDisabled()) { + $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); + } + + return $item; + } +} diff --git a/public/css/widget/group-grid.less b/public/css/widget/object-grid.less similarity index 85% rename from public/css/widget/group-grid.less rename to public/css/widget/object-grid.less index ca4ca488..36b6f71d 100644 --- a/public/css/widget/group-grid.less +++ b/public/css/widget/object-grid.less @@ -1,6 +1,6 @@ // HostGroup- and -ServiceGroupGrid styles -ul.item-list.group-grid { +ul.item-list.object-grid { display: grid; grid-template-columns: repeat(auto-fit, 15em); grid-gap: 1em 2em; @@ -10,7 +10,7 @@ ul.item-list.group-grid { padding: .25em; } - li.group-grid-cell { + li.object-grid-cell { .title { align-items: center; } @@ -41,6 +41,6 @@ ul.item-list.group-grid { } } -.content.full-width ul.item-list.group-grid { +.content.full-width ul.item-list.object-grid { margin: 0 1em; } From 0d9bcc985f41b4755d922993ea6bb99b289c861f Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 26 Mar 2025 11:43:23 +0100 Subject: [PATCH 20/35] Rename HistoryRenderer to EventRenderer - use `NotificationRenderer` instance as class property NotificationRenderer: - Make the phraseForType() method non-static and protected, as it is only used internally. --- ...{HistoryRenderer.php => EventRenderer.php} | 66 ++++++++----------- .../Icingadb/View/NotificationRenderer.php | 24 +++---- .../Icingadb/Widget/Detail/ObjectHeader.php | 4 +- .../Widget/ItemList/LoadMoreObjectList.php | 4 +- 4 files changed, 43 insertions(+), 55 deletions(-) rename library/Icingadb/View/{HistoryRenderer.php => EventRenderer.php} (89%) diff --git a/library/Icingadb/View/HistoryRenderer.php b/library/Icingadb/View/EventRenderer.php similarity index 89% rename from library/Icingadb/View/HistoryRenderer.php rename to library/Icingadb/View/EventRenderer.php index 69846d1d..e0b7951f 100644 --- a/library/Icingadb/View/HistoryRenderer.php +++ b/library/Icingadb/View/EventRenderer.php @@ -31,13 +31,21 @@ use ipl\Web\Widget\StateBall; use ipl\Web\Widget\TimeAgo; /** @implements ItemRenderer */ -class HistoryRenderer implements ItemRenderer +class EventRenderer implements ItemRenderer { use Translation; use TicketLinks; use HostLink; use ServiceLink; + /** @var NotificationRenderer To render NotificationHistory event */ + protected $notificationRenderer; + + public function __construct() + { + $this->notificationRenderer = new NotificationRenderer(); + } + public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('history'); @@ -166,6 +174,16 @@ class HistoryRenderer implements ItemRenderer public function assembleTitle($item, HtmlDocument $title, string $layout): void { + if ($item->event_type === 'notification' && isset($item->notification->id)) { + $item->notification->history = $item; + $item->notification->host = $item->host; + $item->notification->service = $item->service; + + $this->notificationRenderer->assembleTitle($item->notification, $title, $layout); + + return; + } + switch ($item->event_type) { case 'comment_add': $subjectLabel = $this->translate('Comment added'); @@ -237,13 +255,6 @@ class HistoryRenderer implements ItemRenderer $subjectLabel = $this->translate('Acknowledgement cleared'); } - break; - case 'notification': - $subjectLabel = isset($item->notification->type) ? sprintf( - NotificationRenderer::phraseForType($item->notification->type), - ucfirst($item->object_type) - ) : $item->event_type; - break; case 'state_change': $state = $item->state->state_type === 'hard' @@ -294,6 +305,14 @@ class HistoryRenderer implements ItemRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { + if ($item->event_type === 'notification') { + $item->notification->host = $item->host; + $item->notification->service = $item->service; + $this->notificationRenderer->assembleCaption($item->notification, $caption, $layout); + + return; + } + switch ($item->event_type) { case 'comment_add': case 'comment_remove': @@ -367,37 +386,6 @@ class HistoryRenderer implements ItemRenderer ])->addFrom($markdownLine); } - break; - case 'notification': - if (! empty($item->notification->author)) { - $caption->add([ - new Icon(Icons::USER), - $item->notification->author, - ': ', - $item->notification->text - ]); - } else { - $commandName = $item->object_type === 'host' - ? $item->host->checkcommand_name - : $item->service->checkcommand_name; - if (isset($commandName)) { - if (empty($item->notification->text)) { - $caption->addHtml(new EmptyState(t('Output unavailable.'))); - } else { - $caption->addHtml( - new PluginOutputContainer( - (new PluginOutput($item->notification->text)) - ->setCommandName($commandName) - ) - ); - } - } else { - $caption->addHtml( - new EmptyState($this->translate('Waiting for Icinga DB to synchronize the config.')) - ); - } - } - break; case 'state_change': $commandName = $item->object_type === 'host' diff --git a/library/Icingadb/View/NotificationRenderer.php b/library/Icingadb/View/NotificationRenderer.php index 9b88eaaf..7885a30d 100644 --- a/library/Icingadb/View/NotificationRenderer.php +++ b/library/Icingadb/View/NotificationRenderer.php @@ -104,11 +104,11 @@ class NotificationRenderer implements ItemRenderer $title->addHtml(HtmlElement::create( 'span', ['class' => 'subject'], - sprintf(self::phraseForType($item->type), ucfirst($item->object_type)) + sprintf($this->phraseForType($item->type), ucfirst($item->object_type)) )); } else { $title->addHtml(new Link( - sprintf(self::phraseForType($item->type), ucfirst($item->object_type)), + sprintf($this->phraseForType($item->type), ucfirst($item->object_type)), Links::event($item->history), ['class' => 'subject'] )); @@ -172,27 +172,27 @@ class NotificationRenderer implements ItemRenderer * * @return string */ - public static function phraseForType(string $type): string + protected function phraseForType(string $type): string { switch ($type) { case 'acknowledgement': - return t('Problem acknowledged'); + return $this->translate('Problem acknowledged'); case 'custom': - return t('Custom Notification triggered'); + return $this->translate('Custom Notification triggered'); case 'downtime_end': - return t('Downtime ended'); + return $this->translate('Downtime ended'); case 'downtime_removed': - return t('Downtime removed'); + return $this->translate('Downtime removed'); case 'downtime_start': - return t('Downtime started'); + return $this->translate('Downtime started'); case 'flapping_end': - return t('Flapping stopped'); + return $this->translate('Flapping stopped'); case 'flapping_start': - return t('Flapping started'); + return $this->translate('Flapping started'); case 'problem': - return t('%s ran into a problem'); + return $this->translate('%s ran into a problem'); case 'recovery': - return t('%s recovered'); + return $this->translate('%s recovered'); default: throw new InvalidArgumentException(sprintf('Type %s is not a valid notification type', $type)); } diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index dd298f52..57d22df0 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -17,7 +17,7 @@ use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\DowntimeRenderer; -use Icinga\Module\Icingadb\View\HistoryRenderer; +use Icinga\Module\Icingadb\View\EventRenderer; use Icinga\Module\Icingadb\View\HostgroupRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; @@ -73,7 +73,7 @@ class ObjectHeader extends BaseHtmlElement break; case $this->object instanceof History: - $renderer = new HistoryRenderer(); + $renderer = new EventRenderer(); break; case $this->object instanceof Hostgroupsummary: diff --git a/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php index 81fb2df5..2232786b 100644 --- a/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php +++ b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php @@ -8,7 +8,7 @@ use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\LoadMore; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\NotificationHistory; -use Icinga\Module\Icingadb\View\HistoryRenderer; +use Icinga\Module\Icingadb\View\EventRenderer; use Icinga\Module\Icingadb\View\NotificationRenderer; use ipl\Orm\Model; use ipl\Web\Widget\ItemList; @@ -30,7 +30,7 @@ class LoadMoreObjectList extends ObjectList if ($item instanceof NotificationHistory) { return new NotificationRenderer(); } elseif ($item instanceof History) { - return new HistoryRenderer(); + return new EventRenderer(); } throw new NotImplementedError('Not implemented'); From 3035bb053858f42069bc1fcc82513b50b0a6a79f Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 26 Mar 2025 16:15:43 +0100 Subject: [PATCH 21/35] Update trait TicketLinks and (Comment/Downtime)Renderer class TicketLinks: Add setter to disable ticket links. By default, ticket links should be created. Comment/DowntimeRenderer: Add setter noObjectLink() CommentRenderer: Add setter noSubjectLink(), only used for the comment-popup --- library/Icingadb/Common/TicketLinks.php | 28 ++++++------- .../View/BaseHostAndServiceRenderer.php | 12 +++++- library/Icingadb/View/CommentRenderer.php | 40 ++++++++++++------- library/Icingadb/View/DowntimeRenderer.php | 23 ++++------- .../Icingadb/Widget/Detail/ObjectHeader.php | 4 +- .../Widget/ItemList/TicketLinkObjectList.php | 4 +- public/css/widget/comment-popup.less | 7 ++-- 7 files changed, 63 insertions(+), 55 deletions(-) diff --git a/library/Icingadb/Common/TicketLinks.php b/library/Icingadb/Common/TicketLinks.php index 70bf48f9..b66c1b69 100644 --- a/library/Icingadb/Common/TicketLinks.php +++ b/library/Icingadb/Common/TicketLinks.php @@ -9,31 +9,31 @@ use Icinga\Application\Hook\TicketHook; trait TicketLinks { - /** @var bool */ - protected $ticketLinkEnabled = false; // TODO: Remove once all usages are removed + /** @var bool Whether the ticket link is disabled */ + protected $ticketLinkDisabled = false; /** - * Set whether list items should render host and service links + * Set whether the ticket link is disabled * * @param bool $state * * @return $this */ - public function setTicketLinkEnabled(bool $state = true): self + public function setTicketLinkDisabled(bool $state = true): self { - $this->ticketLinkEnabled = $state; + $this->ticketLinkDisabled = $state; return $this; } /** - * Get whether list items should render host and service links + * Get whether the ticket link is disabled * * @return bool */ - public function getTicketLinkEnabled(): bool + public function isTicketLinkDisabled(): bool { - return $this->ticketLinkEnabled; + return $this->ticketLinkDisabled; } /** @@ -43,13 +43,13 @@ trait TicketLinks */ public function createTicketLinks($text): string { - if (Hook::has('ticket')) { - /** @var TicketHook $tickets */ - $tickets = Hook::first('ticket'); - - return $tickets->createLinks($text); + if ($this->isTicketLinkDisabled() || ! Hook::has('ticket')) { + return $text ?? ''; } - return $text ?? ''; + /** @var TicketHook $tickets */ + $tickets = Hook::first('ticket'); + + return $tickets->createLinks($text); } } diff --git a/library/Icingadb/View/BaseHostAndServiceRenderer.php b/library/Icingadb/View/BaseHostAndServiceRenderer.php index 2b4c87e9..f84f72e7 100644 --- a/library/Icingadb/View/BaseHostAndServiceRenderer.php +++ b/library/Icingadb/View/BaseHostAndServiceRenderer.php @@ -187,14 +187,22 @@ abstract class BaseHostAndServiceRenderer implements ItemRenderer $comment->host = $item; } + $commentItem = new ItemLayout( + $comment, + (new CommentRenderer()) + ->setTicketLinkDisabled() + ->setNoObjectLink() + ->setNoSubjectLink() + ); + $statusIcons->addHtml( new HtmlElement( 'div', Attributes::create(['class' => 'comment-wrapper']), new HtmlElement( 'div', - Attributes::create(['class' => 'comment-popup']), - new ItemLayout($comment, (new CommentRenderer())->setIsDetailView()) + $commentItem->getAttributes()->add('class', 'comment-popup'), + $commentItem ), (new Icon('comments', ['class' => 'comment-icon'])) ) diff --git a/library/Icingadb/View/CommentRenderer.php b/library/Icingadb/View/CommentRenderer.php index a258bc25..541d9866 100644 --- a/library/Icingadb/View/CommentRenderer.php +++ b/library/Icingadb/View/CommentRenderer.php @@ -31,26 +31,36 @@ class CommentRenderer implements ItemRenderer use HostLink; use ServiceLink; - /** - * @var bool Whether the item is being rendered in the detail view of the associated object (host/service) - * - * When true: - * - * - Creation of the link of the associated object (host/service) is omitted from the title - * - The ticket link will be created - */ - protected $isDetailView = false; + /** @var bool Whether the object link for th item should be omitted */ + protected $noObjectLink = false; + + /** @var bool Whether item's subject should be a link */ + protected $noSubjectLink = false; /** - * Set whether the item is being rendered in the detail view of the associated object (host/service) + * Set whether the object link for th item should be omitted * * @param bool $state * * @return $this */ - public function setIsDetailView(bool $state = true): self + public function setNoObjectLink(bool $state = true): self { - $this->isDetailView = $state; + $this->noObjectLink = $state; + + return $this; + } + + /** + * Set whether item's subject should be a link + * + * @param bool $state + * + * @return $this + */ + public function setNoSubjectLink(bool $state = true): self + { + $this->noSubjectLink = $state; return $this; } @@ -83,7 +93,7 @@ class CommentRenderer implements ItemRenderer $headerParts = [ new Icon(Icons::USER), - $layout === 'header' + $layout === 'header' || $this->noSubjectLink ? new HtmlElement('span', Attributes::create(['class' => 'subject']), Text::create($subjectText)) : new Link($subjectText, Links::comment($item), ['class' => 'subject']) ]; @@ -108,7 +118,7 @@ class CommentRenderer implements ItemRenderer ); } - if ($this->isDetailView) { + if ($this->noObjectLink) { // pass } elseif ($item->object_type === 'host') { $headerParts[] = $this->createHostLink($item->host, true); @@ -121,7 +131,7 @@ class CommentRenderer implements ItemRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $markdownLine = new MarkdownLine($this->isDetailView ? $this->createTicketLinks($item->text) : $item->text); + $markdownLine = new MarkdownLine($this->createTicketLinks($item->text)); $caption->getAttributes()->add($markdownLine->getAttributes()); $caption->addFrom($markdownLine); diff --git a/library/Icingadb/View/DowntimeRenderer.php b/library/Icingadb/View/DowntimeRenderer.php index 94158efc..d50d147b 100644 --- a/library/Icingadb/View/DowntimeRenderer.php +++ b/library/Icingadb/View/DowntimeRenderer.php @@ -49,26 +49,19 @@ class DowntimeRenderer implements ItemRenderer /** @var bool Whether the state has been loaded */ protected $stateLoaded = false; - /** - * @var bool Whether the item is being rendered in the detail view of the associated object (host/service) - * - * When true: - * - * - Creation of the link of the associated object (host/service) is omitted from the title - * - The ticket link will be created - */ - protected $isDetailView = false; + /** @var bool Whether the object link for th item should be omitted */ + protected $noObjectLink = false; /** - * Set whether the item is being rendered in the detail view of the associated object (host/service) + * Set whether the object link for th item should be omitted * * @param bool $state * * @return $this */ - public function setIsDetailView(bool $state = true): self + public function setNoObjectLink(bool $state = true): self { - $this->isDetailView = $state; + $this->noObjectLink = $state; return $this; } @@ -147,7 +140,7 @@ class DowntimeRenderer implements ItemRenderer public function assembleTitle($item, HtmlDocument $title, string $layout): void { - if ($this->isDetailView) { + if ($this->noObjectLink) { $link = null; } elseif ($item->object_type === 'host') { $link = $this->createHostLink($item->host, true); @@ -194,9 +187,7 @@ class DowntimeRenderer implements ItemRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $markdownLine = new MarkdownLine( - $this->isDetailView ? $this->createTicketLinks($item->comment) : $item->comment - ); + $markdownLine = new MarkdownLine($this->createTicketLinks($item->comment)); $caption->getAttributes()->add($markdownLine->getAttributes()); $caption->addHtml( new HtmlElement( diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index 57d22df0..1e7cea8d 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -65,11 +65,11 @@ class ObjectHeader extends BaseHtmlElement break; case $this->object instanceof Comment: - $renderer = new CommentRenderer(); + $renderer = (new CommentRenderer())->setTicketLinkDisabled(); break; case $this->object instanceof Downtime: - $renderer = new DowntimeRenderer(); + $renderer = (new DowntimeRenderer())->setTicketLinkDisabled(); break; case $this->object instanceof History: diff --git a/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php index d4d9f17c..40322965 100644 --- a/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php +++ b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php @@ -25,9 +25,9 @@ class TicketLinkObjectList extends ObjectList { ItemList::__construct($data, function (Model $item) { if ($item instanceof Comment) { - return (new CommentRenderer())->setIsDetailView(); + return (new CommentRenderer())->setNoObjectLink(); } elseif ($item instanceof Downtime) { - return (new DowntimeRenderer())->setIsDetailView(); + return (new DowntimeRenderer())->setNoObjectLink(); } throw new NotImplementedError('Not implemented'); diff --git a/public/css/widget/comment-popup.less b/public/css/widget/comment-popup.less index 42686a05..43a7306e 100644 --- a/public/css/widget/comment-popup.less +++ b/public/css/widget/comment-popup.less @@ -15,8 +15,8 @@ top: 2.5em; left: -1.6em; z-index: 1; - display: none; width: 50em; + padding: 0 1em; } .comment-popup:before { @@ -50,9 +50,8 @@ ul.item-list li:last-child:not(:first-child) { } } -.comment-wrapper:hover .comment-popup { - display: flex; - padding: 0 1em; +.comment-wrapper:not(:hover) .comment-popup { + display: none; } #layout { From 80fc6a42299d23bf67bb6113fccb27d54eb08867 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 26 Mar 2025 16:30:04 +0100 Subject: [PATCH 22/35] Cleanup css and php code --- library/Icingadb/Common/CaptionDisabled.php | 31 -------- .../Icingadb/Common/ListItemCommonLayout.php | 26 ------- .../Common/ListItemDetailedLayout.php | 23 ------ .../Icingadb/Common/ListItemMinimalLayout.php | 26 ------- library/Icingadb/Common/NoSubjectLink.php | 35 --------- .../Icingadb/Common/ObjectLinkDisabled.php | 35 --------- library/Icingadb/Common/ViewMode.php | 35 --------- library/Icingadb/View/EventRenderer.php | 13 ++-- .../Icingadb/View/HostgroupGridRenderer.php | 1 - library/Icingadb/View/UserRenderer.php | 3 - library/Icingadb/View/UsergroupRenderer.php | 3 - public/css/common.less | 19 ----- public/css/list/item-list.less | 73 ------------------- public/css/widget/comment-popup.less | 6 -- 14 files changed, 5 insertions(+), 324 deletions(-) delete mode 100644 library/Icingadb/Common/CaptionDisabled.php delete mode 100644 library/Icingadb/Common/ListItemCommonLayout.php delete mode 100644 library/Icingadb/Common/ListItemDetailedLayout.php delete mode 100644 library/Icingadb/Common/ListItemMinimalLayout.php delete mode 100644 library/Icingadb/Common/NoSubjectLink.php delete mode 100644 library/Icingadb/Common/ObjectLinkDisabled.php delete mode 100644 library/Icingadb/Common/ViewMode.php diff --git a/library/Icingadb/Common/CaptionDisabled.php b/library/Icingadb/Common/CaptionDisabled.php deleted file mode 100644 index 2cee178b..00000000 --- a/library/Icingadb/Common/CaptionDisabled.php +++ /dev/null @@ -1,31 +0,0 @@ -captionDisabled; - } - - /** - * @param bool $captionDisabled - * - * @return $this - */ - public function setCaptionDisabled(bool $captionDisabled = true): self - { - $this->captionDisabled = $captionDisabled; - - return $this; - } -} diff --git a/library/Icingadb/Common/ListItemCommonLayout.php b/library/Icingadb/Common/ListItemCommonLayout.php deleted file mode 100644 index 5a11be30..00000000 --- a/library/Icingadb/Common/ListItemCommonLayout.php +++ /dev/null @@ -1,26 +0,0 @@ -addHtml($this->createTitle()); - $header->add($this->createTimestamp()); - } - - protected function assembleMain(BaseHtmlElement $main): void - { - $main->addHtml($this->createHeader()); - if (!$this->isCaptionDisabled()) { - $main->addHtml($this->createCaption()); - } - } -} diff --git a/library/Icingadb/Common/ListItemDetailedLayout.php b/library/Icingadb/Common/ListItemDetailedLayout.php deleted file mode 100644 index 23aa0179..00000000 --- a/library/Icingadb/Common/ListItemDetailedLayout.php +++ /dev/null @@ -1,23 +0,0 @@ -add($this->createTitle()); - $header->add($this->createTimestamp()); - } - - protected function assembleMain(BaseHtmlElement $main): void - { - $main->add($this->createHeader()); - $main->add($this->createCaption()); - $main->add($this->createFooter()); - } -} diff --git a/library/Icingadb/Common/ListItemMinimalLayout.php b/library/Icingadb/Common/ListItemMinimalLayout.php deleted file mode 100644 index 3cdf3a9e..00000000 --- a/library/Icingadb/Common/ListItemMinimalLayout.php +++ /dev/null @@ -1,26 +0,0 @@ -add($this->createTitle()); - if (! $this->isCaptionDisabled()) { - $header->add($this->createCaption()); - } - $header->add($this->createTimestamp()); - } - - protected function assembleMain(BaseHtmlElement $main): void - { - $main->add($this->createHeader()); - } -} diff --git a/library/Icingadb/Common/NoSubjectLink.php b/library/Icingadb/Common/NoSubjectLink.php deleted file mode 100644 index 76c9a84d..00000000 --- a/library/Icingadb/Common/NoSubjectLink.php +++ /dev/null @@ -1,35 +0,0 @@ -noSubjectLink = $state; - - return $this; - } - - /** - * Get whether a list item's subject should be a link - * - * @return bool - */ - public function getNoSubjectLink(): bool - { - return $this->noSubjectLink; - } -} diff --git a/library/Icingadb/Common/ObjectLinkDisabled.php b/library/Icingadb/Common/ObjectLinkDisabled.php deleted file mode 100644 index ca8283f5..00000000 --- a/library/Icingadb/Common/ObjectLinkDisabled.php +++ /dev/null @@ -1,35 +0,0 @@ -objectLinkDisabled = $state; - - return $this; - } - - /** - * Get whether list items should render host and service links - * - * @return bool - */ - public function getObjectLinkDisabled(): bool - { - return $this->objectLinkDisabled; - } -} diff --git a/library/Icingadb/Common/ViewMode.php b/library/Icingadb/Common/ViewMode.php deleted file mode 100644 index 841f28b1..00000000 --- a/library/Icingadb/Common/ViewMode.php +++ /dev/null @@ -1,35 +0,0 @@ -viewMode; - } - - /** - * Set the view mode - * - * @param string $viewMode - * - * @return $this - */ - public function setViewMode(string $viewMode): self - { - $this->viewMode = $viewMode; - - return $this; - } -} diff --git a/library/Icingadb/View/EventRenderer.php b/library/Icingadb/View/EventRenderer.php index e0b7951f..3a3225c5 100644 --- a/library/Icingadb/View/EventRenderer.php +++ b/library/Icingadb/View/EventRenderer.php @@ -287,14 +287,10 @@ class EventRenderer implements ItemRenderer $title->addHtml(new Link($subjectLabel, Links::event($item), ['class' => 'subject'])); } - if ($item->object_type === 'host') { - if (isset($item->host->id)) { - $link = $this->createHostLink($item->host, true); - } - } else { - if (isset($item->host->id, $item->service->id)) { - $link = $this->createServiceLink($item->service, $item->host, true); - } + if ($item->object_type === 'host' && isset($item->host->id)) { + $link = $this->createHostLink($item->host, true); + } elseif (isset($item->host->id, $item->service->id)) { + $link = $this->createServiceLink($item->service, $item->host, true); } $title->addHtml(Text::create(' ')); @@ -308,6 +304,7 @@ class EventRenderer implements ItemRenderer if ($item->event_type === 'notification') { $item->notification->host = $item->host; $item->notification->service = $item->service; + $this->notificationRenderer->assembleCaption($item->notification, $caption, $layout); return; diff --git a/library/Icingadb/View/HostgroupGridRenderer.php b/library/Icingadb/View/HostgroupGridRenderer.php index 50743ee2..55d1bd7a 100644 --- a/library/Icingadb/View/HostgroupGridRenderer.php +++ b/library/Icingadb/View/HostgroupGridRenderer.php @@ -34,7 +34,6 @@ class HostgroupGridRenderer implements ItemRenderer $url = Url::fromPath('icingadb/hosts'); $urlFilter = Filter::all(Filter::equal('hostgroup.name', $item->name)); - if ($item->hosts_down_unhandled > 0) { $urlFilter->add(Filter::equal('host.state.soft_state', 1)) ->add(Filter::equal('host.state.is_handled', 'n')) diff --git a/library/Icingadb/View/UserRenderer.php b/library/Icingadb/View/UserRenderer.php index c2a11e82..6eb64d3c 100644 --- a/library/Icingadb/View/UserRenderer.php +++ b/library/Icingadb/View/UserRenderer.php @@ -10,15 +10,12 @@ use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; -use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\Link; /** @implements ItemRenderer */ class UserRenderer implements ItemRenderer { - use Translation; - public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('user'); diff --git a/library/Icingadb/View/UsergroupRenderer.php b/library/Icingadb/View/UsergroupRenderer.php index b6e92976..da29e5ac 100644 --- a/library/Icingadb/View/UsergroupRenderer.php +++ b/library/Icingadb/View/UsergroupRenderer.php @@ -10,15 +10,12 @@ use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; -use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\Link; /** @implements ItemRenderer */ class UsergroupRenderer implements ItemRenderer { - use Translation; - public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('user-group'); diff --git a/public/css/common.less b/public/css/common.less index ef4341d5..291b79e7 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -109,24 +109,6 @@ div.show-more { margin-bottom: 0; } - .item-list { - width: 100%; - - .list-item .main { - border-top: none; - } - - .list-item .visual { - margin-top: 0; - } - - .list-item .visual, - .list-item .main { - padding-bottom: .25em; - padding-top: .25em; - } - } - .search-controls .continue-with { margin-right: -.5em; margin-left: .5em; @@ -341,7 +323,6 @@ form[name="form_confirm_removal"] { margin-left: .28125em; // calculated   width; } - &.default-layout .title .affected-objects, // TODO: Drop once the new list-item layout is used everywhere .default-item-layout .title .affected-objects { margin-left: 0; } diff --git a/public/css/list/item-list.less b/public/css/list/item-list.less index e19326ec..61fa9bb8 100644 --- a/public/css/list/item-list.less +++ b/public/css/list/item-list.less @@ -53,65 +53,6 @@ } } -.item-list.minimal, // TODO: Remove this once the new list-item layout is used everywhere -.item-list.minimal-item-layout { - > .empty-state { - padding: .25em; - } -} - -.item-list.minimal { - // TODO: Can be entirely dropped once the new list-item layout is used everywhere - .list-item { - header { - max-width: 100%; - } - - .title { - p { - display: inline; - - & + p { - margin-left: .417em; - } - } - } - - .caption { - flex: 1 1 auto; - height: 1.5em; - margin-right: 1em; - width: 0; - - .line-clamp("reset"); - } - - .caption, - .caption .plugin-output { - .text-ellipsis(); - } - } -} - -.item-list.detailed .list-item { - // TODO: Can be entirely dropped once the new list-item layout is used everywhere - .title { - word-break: break-word; - -webkit-hyphens: auto; - -ms-hyphens: auto; - hyphens: auto; - } - - .caption { - display: block; - height: auto; - max-height: 7.5em; /* 5 lines */ - position: relative; - - .line-clamp(4) - } -} - .item-list { .icon-image { width: 3em; @@ -129,7 +70,6 @@ } } - &.minimal, // TODO: Remove this once the new list-item layout is used everywhere &.minimal-item-layout { .icon-image { height: 2em; @@ -139,19 +79,6 @@ } } -// TODO: Can be simplified (`.controls .list-item`) once the only list-items in controls are those in the multi select views -.controls .item-list:not(.detailed):not(.minimal) .list-item { - .plugin-output { //TODO: why ?? multiselect items has bigger gap now - //seems dead code, remove it when cleaning up - line-height: 1.5 - } - - .caption { - height: 2.5em; - } -} - -.controls .item-list.minimal .icon-image, // TODO: Remove this once the new list-item layout is used everywhere .controls .minimal-item-layout .icon-image { margin-top: 0; } diff --git a/public/css/widget/comment-popup.less b/public/css/widget/comment-popup.less index 43a7306e..e361981d 100644 --- a/public/css/widget/comment-popup.less +++ b/public/css/widget/comment-popup.less @@ -75,9 +75,3 @@ ul.item-list li:last-child:not(:first-child) { } } } - -.comment-popup .main .caption { - // This is necessary to limit the visible comment lines - // because the popup is shown in detailed list mode only - height: 3em; -} From 62b9c24e45894bdf055b74e7b0451522c87d407c Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 26 Mar 2025 17:33:59 +0100 Subject: [PATCH 23/35] Define Php generics and phpdoc --- .../Icingadb/View/BaseHostAndServiceRenderer.php | 15 ++++++++++++++- library/Icingadb/View/HostRenderer.php | 2 ++ library/Icingadb/View/ServiceRenderer.php | 2 ++ .../Widget/ItemList/LoadMoreObjectList.php | 7 +++++-- library/Icingadb/Widget/ItemList/ObjectList.php | 12 ++++-------- .../Widget/ItemList/TicketLinkObjectList.php | 4 +++- 6 files changed, 30 insertions(+), 12 deletions(-) diff --git a/library/Icingadb/View/BaseHostAndServiceRenderer.php b/library/Icingadb/View/BaseHostAndServiceRenderer.php index f84f72e7..58d17f3b 100644 --- a/library/Icingadb/View/BaseHostAndServiceRenderer.php +++ b/library/Icingadb/View/BaseHostAndServiceRenderer.php @@ -30,11 +30,24 @@ use ipl\Web\Widget\Icon; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\TimeSince; -/** @implements ItemRenderer */ +/** + * @template Item of Host|Service + * + * @implements ItemRenderer + */ abstract class BaseHostAndServiceRenderer implements ItemRenderer { use Translation; + /** + * Create subject for the given item + * + * @param Item $item The item to create subject for + * + * @param string $layout The name of the layout + * + * @return ValidHtml + */ abstract protected function createSubject($item, string $layout): ValidHtml; public function assembleVisual($item, HtmlDocument $visual, string $layout): void diff --git a/library/Icingadb/View/HostRenderer.php b/library/Icingadb/View/HostRenderer.php index 7eb0abb5..1f7a95a8 100644 --- a/library/Icingadb/View/HostRenderer.php +++ b/library/Icingadb/View/HostRenderer.php @@ -5,12 +5,14 @@ namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; +use Icinga\Module\Icingadb\Model\Host; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\Web\Widget\Link; +/** @extends BaseHostAndServiceRenderer */ class HostRenderer extends BaseHostAndServiceRenderer { public function assembleAttributes($item, Attributes $attributes, string $layout): void diff --git a/library/Icingadb/View/ServiceRenderer.php b/library/Icingadb/View/ServiceRenderer.php index 9b0381b4..cbdd523d 100644 --- a/library/Icingadb/View/ServiceRenderer.php +++ b/library/Icingadb/View/ServiceRenderer.php @@ -5,6 +5,7 @@ namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; +use Icinga\Module\Icingadb\Model\Service; use ipl\Html\Attributes; use ipl\Html\Html; use ipl\Html\HtmlElement; @@ -13,6 +14,7 @@ use ipl\Html\ValidHtml; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; +/** @extends BaseHostAndServiceRenderer */ class ServiceRenderer extends BaseHostAndServiceRenderer { public function assembleAttributes($item, Attributes $attributes, string $layout): void diff --git a/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php index 2232786b..03db94c5 100644 --- a/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php +++ b/library/Icingadb/Widget/ItemList/LoadMoreObjectList.php @@ -11,6 +11,7 @@ use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\View\EventRenderer; use Icinga\Module\Icingadb\View\NotificationRenderer; use ipl\Orm\Model; +use ipl\Orm\ResultSet; use ipl\Web\Widget\ItemList; /** @@ -18,13 +19,15 @@ use ipl\Web\Widget\ItemList; * * Create a list of icingadb objects with Load more link * - * @extends ObjectList //TODO: define object type + * @template Item of NotificationHistory|History + * + * @extends ObjectList */ class LoadMoreObjectList extends ObjectList { use LoadMore; - public function __construct($data) + public function __construct(ResultSet $data) { ItemList::__construct($data, function (Model $item) { if ($item instanceof NotificationHistory) { diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 5b4e14ad..8a0915ad 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -14,7 +14,6 @@ use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; -use Icinga\Module\Icingadb\Model\UnreachableParent; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Redis\VolatileStateResults; @@ -35,14 +34,16 @@ use ipl\Web\Layout\DetailedItemLayout; use ipl\Web\Layout\ItemLayout; use ipl\Web\Layout\MinimalItemLayout; use ipl\Web\Widget\ItemList; -use ipl\Web\Widget\ListItem; /** * ObjectList * * Create a list of icingadb objects * - * @extends ItemList // TODO: fix type + * @template Result of DependencyNode|Service|Host|Usergroup|User|Comment|Downtime + * @template Item of RedundancyGroup|Service|Host|Usergroup|User|Comment|Downtime = Result + * + * @extends ItemList */ class ObjectList extends ItemList { @@ -147,11 +148,6 @@ class ObjectList extends ItemList return $layout; } - /** - * @param object $data - * - * @return ListItem - */ protected function createListItem(object $data) { if ($data instanceof DependencyNode) { diff --git a/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php index 40322965..251b6849 100644 --- a/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php +++ b/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php @@ -17,7 +17,9 @@ use ipl\Web\Widget\ItemList; * * Create a list of icingadb objects with ticket links * - * @extends ObjectList //TODO: define object type + * @template Result of Comment|Downtime + * + * @extends ObjectList */ class TicketLinkObjectList extends ObjectList { From 0ea3b63458bd12b707be620e7f5b581027ff6c7f Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Thu, 27 Mar 2025 09:33:39 +0100 Subject: [PATCH 24/35] Controller: Remove obsolete if condition Ipl-web manages this now --- library/Icingadb/Web/Controller.php | 6 +----- library/Icingadb/Widget/ItemTable/StateItemTable.php | 2 +- public/css/common.less | 11 ----------- 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/library/Icingadb/Web/Controller.php b/library/Icingadb/Web/Controller.php index ffa711ac..ae812047 100644 --- a/library/Icingadb/Web/Controller.php +++ b/library/Icingadb/Web/Controller.php @@ -37,8 +37,6 @@ use ipl\Html\ValidHtml; use ipl\Orm\Query; use ipl\Orm\UnionQuery; use ipl\Stdlib\Filter; -use ipl\Web\Common\BaseItemList; -use ipl\Web\Common\BaseItemTable; use ipl\Web\Compat\CompatController; use ipl\Web\Control\LimitControl; use ipl\Web\Control\PaginationControl; @@ -486,9 +484,7 @@ class Controller extends CompatController protected function addContent(ValidHtml $content) { - if ($content instanceof BaseItemList || $content instanceof BaseItemTable) { - $this->content->getAttributes()->add('class', 'full-width'); - } elseif ($content instanceof StateItemTable) { + if ($content instanceof StateItemTable) { $this->content->getAttributes()->add('class', 'full-height'); } diff --git a/library/Icingadb/Widget/ItemTable/StateItemTable.php b/library/Icingadb/Widget/ItemTable/StateItemTable.php index f392322a..251ed7c4 100644 --- a/library/Icingadb/Widget/ItemTable/StateItemTable.php +++ b/library/Icingadb/Widget/ItemTable/StateItemTable.php @@ -16,7 +16,7 @@ use ipl\Web\Control\SortControl; use ipl\Web\Widget\EmptyStateBar; use ipl\Web\Widget\Icon; -/** @todo Figure out what this might (should) have in common with the new BaseItemTable implementation */ +/** @todo Figure out what this might (should) have in common with the new ItemTable implementation */ abstract class StateItemTable extends BaseHtmlElement { protected $baseAttributes = [ diff --git a/public/css/common.less b/public/css/common.less index 291b79e7..73d51663 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -4,17 +4,6 @@ @iplWebAssets: "../lib/icinga/icinga-php-library"; }; -& > .content.full-width { - padding-left: 0; - padding-right: 0; - - .list-item, - .table-row { - padding-left: 1em; - padding-right: 1em; - } -} - & > .content.full-height { padding-top: 0; padding-bottom: 0; From b4e6f32f419a5c78a83a5e2ad011dfba5e6fe572 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Thu, 27 Mar 2025 14:34:56 +0100 Subject: [PATCH 25/35] Let the Object(List|Grid|Table) call setDetailUrl() and setMultiselectUrl() - Make all the calls in one place --- .../controllers/CommentsController.php | 2 - .../controllers/DowntimesController.php | 2 - application/controllers/HistoryController.php | 1 - application/controllers/HostController.php | 1 - .../controllers/HostgroupController.php | 4 +- .../controllers/HostgroupsController.php | 2 - application/controllers/HostsController.php | 4 +- .../controllers/NotificationsController.php | 1 - application/controllers/ServiceController.php | 1 - .../controllers/ServicegroupController.php | 4 +- .../controllers/ServicegroupsController.php | 2 - .../controllers/ServicesController.php | 4 +- .../controllers/UsergroupsController.php | 5 +- application/controllers/UsersController.php | 5 +- .../Icingadb/Widget/Detail/DowntimeDetail.php | 4 +- .../Icingadb/Widget/Detail/EventDetail.php | 3 +- .../Icingadb/Widget/Detail/ObjectDetail.php | 8 +-- library/Icingadb/Widget/Detail/UserDetail.php | 2 +- .../Widget/Detail/UsergroupDetail.php | 2 +- .../Icingadb/Widget/ItemList/ObjectList.php | 51 +++++++++++++++---- .../Icingadb/Widget/ItemTable/ObjectGrid.php | 18 ++++++- .../Icingadb/Widget/ItemTable/ObjectTable.php | 18 ++++++- 22 files changed, 85 insertions(+), 59 deletions(-) diff --git a/application/controllers/CommentsController.php b/application/controllers/CommentsController.php index d84bf8ca..07431cdf 100644 --- a/application/controllers/CommentsController.php +++ b/application/controllers/CommentsController.php @@ -84,8 +84,6 @@ class CommentsController extends Controller $this->addContent( (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()) - ->setMultiselectUrl(Links::commentsDetails()) - ->setDetailUrl(Url::fromPath('icingadb/comment')) ); if ($compact) { diff --git a/application/controllers/DowntimesController.php b/application/controllers/DowntimesController.php index e2b05f44..10eb9077 100644 --- a/application/controllers/DowntimesController.php +++ b/application/controllers/DowntimesController.php @@ -90,8 +90,6 @@ class DowntimesController extends Controller $this->addContent( (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()) - ->setMultiselectUrl(Links::downtimesDetails()) - ->setDetailUrl(Url::fromPath('icingadb/downtime')) ); if ($compact) { diff --git a/application/controllers/HistoryController.php b/application/controllers/HistoryController.php index 1dd938a9..08a96889 100644 --- a/application/controllers/HistoryController.php +++ b/application/controllers/HistoryController.php @@ -99,7 +99,6 @@ class HistoryController extends Controller ->setFilter($filter); $historyList = (new LoadMoreObjectList($history->execute())) - ->setDetailUrl(Url::fromPath('icingadb/event')) ->setPageSize($limitControl->getLimit()) ->setViewMode($viewModeSwitcher->getViewMode()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/application/controllers/HostController.php b/application/controllers/HostController.php index fba845e6..1fa4a24c 100644 --- a/application/controllers/HostController.php +++ b/application/controllers/HostController.php @@ -168,7 +168,6 @@ class HostController extends Controller $this->addControl($viewModeSwitcher); $historyList = (new LoadMoreObjectList($history->execute())) - ->setDetailUrl(Url::fromPath('icingadb/event')) ->setViewMode($viewModeSwitcher->getViewMode()) ->setPageSize($limitControl->getLimit()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/application/controllers/HostgroupController.php b/application/controllers/HostgroupController.php index bd176fb7..dbf75dda 100644 --- a/application/controllers/HostgroupController.php +++ b/application/controllers/HostgroupController.php @@ -111,9 +111,7 @@ class HostgroupController extends Controller yield $this->export($hosts); $hostList = (new ObjectList($hosts)) - ->setViewMode($viewModeSwitcher->getViewMode()) - ->setMultiselectUrl(Links::hostsDetails()) - ->setDetailUrl(Url::fromPath('icingadb/host')); + ->setViewMode($viewModeSwitcher->getViewMode()); // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { diff --git a/application/controllers/HostgroupsController.php b/application/controllers/HostgroupsController.php index 46173fae..94df4a78 100644 --- a/application/controllers/HostgroupsController.php +++ b/application/controllers/HostgroupsController.php @@ -108,8 +108,6 @@ class HostgroupsController extends Controller $content = new ObjectTable($results, (new HostgroupRenderer())->setBaseFilter($filter)); } - $content->setDetailUrl(Url::fromPath('icingadb/hostgroup')); - $this->addContent($content); if ($compact) { diff --git a/application/controllers/HostsController.php b/application/controllers/HostsController.php index 114b46ce..645a7212 100644 --- a/application/controllers/HostsController.php +++ b/application/controllers/HostsController.php @@ -105,9 +105,7 @@ class HostsController extends Controller ->setSort($sortControl->getSort()); } else { $hostList = (new ObjectList($results)) - ->setViewMode($viewModeSwitcher->getViewMode()) - ->setMultiselectUrl(Links::hostsDetails()) - ->setDetailUrl(Url::fromPath('icingadb/host')); + ->setViewMode($viewModeSwitcher->getViewMode()); } $this->addContent($hostList); diff --git a/application/controllers/NotificationsController.php b/application/controllers/NotificationsController.php index 286bb140..ba805a5a 100644 --- a/application/controllers/NotificationsController.php +++ b/application/controllers/NotificationsController.php @@ -93,7 +93,6 @@ class NotificationsController extends Controller ->setFilter($filter); $notificationList = (new LoadMoreObjectList($notifications->execute())) - ->setDetailUrl(Url::fromPath('icingadb/event')) ->setPageSize($limitControl->getLimit()) ->setViewMode($viewModeSwitcher->getViewMode()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/application/controllers/ServiceController.php b/application/controllers/ServiceController.php index f00e01fc..f75fc74d 100644 --- a/application/controllers/ServiceController.php +++ b/application/controllers/ServiceController.php @@ -314,7 +314,6 @@ class ServiceController extends Controller $this->addControl($viewModeSwitcher); $historyList = (new LoadMoreObjectList($history->execute())) - ->setDetailUrl(Url::fromPath('icingadb/event')) ->setViewMode($viewModeSwitcher->getViewMode()) ->setPageSize($limitControl->getLimit()) ->setLoadMoreUrl($url->setParam('before', $before)); diff --git a/application/controllers/ServicegroupController.php b/application/controllers/ServicegroupController.php index 2d3c036c..b4359f83 100644 --- a/application/controllers/ServicegroupController.php +++ b/application/controllers/ServicegroupController.php @@ -118,9 +118,7 @@ class ServicegroupController extends Controller yield $this->export($services); $serviceList = (new ObjectList($services)) - ->setViewMode($viewModeSwitcher->getViewMode()) - ->setMultiselectUrl(Links::servicesDetails()) - ->setDetailUrl(Url::fromPath('icingadb/service')); + ->setViewMode($viewModeSwitcher->getViewMode()); // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { diff --git a/application/controllers/ServicegroupsController.php b/application/controllers/ServicegroupsController.php index 5e34d2bb..0134c034 100644 --- a/application/controllers/ServicegroupsController.php +++ b/application/controllers/ServicegroupsController.php @@ -98,8 +98,6 @@ class ServicegroupsController extends Controller $content = new ObjectTable($results, (new ServicegroupRenderer())->setBaseFilter($filter)); } - $content->setDetailUrl(Url::fromPath('icingadb/servicegroup')); - $this->addContent($content); if ($compact) { diff --git a/application/controllers/ServicesController.php b/application/controllers/ServicesController.php index dcf8281f..34df538e 100644 --- a/application/controllers/ServicesController.php +++ b/application/controllers/ServicesController.php @@ -116,9 +116,7 @@ class ServicesController extends Controller ->setSort($sortControl->getSort()); } else { $serviceList = (new ObjectList($results)) - ->setViewMode($viewModeSwitcher->getViewMode()) - ->setMultiselectUrl(Links::servicesDetails()) - ->setDetailUrl(Url::fromPath('icingadb/service')); + ->setViewMode($viewModeSwitcher->getViewMode()); } $this->addContent($serviceList); diff --git a/application/controllers/UsergroupsController.php b/application/controllers/UsergroupsController.php index 13f3db74..4a024117 100644 --- a/application/controllers/UsergroupsController.php +++ b/application/controllers/UsergroupsController.php @@ -65,10 +65,7 @@ class UsergroupsController extends Controller $this->addControl($limitControl); $this->addControl($searchBar); - $this->addContent( - (new ObjectList($usergroups)) - ->setDetailUrl(Url::fromPath('icingadb/usergroup')) - ); + $this->addContent(new ObjectList($usergroups)); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); diff --git a/application/controllers/UsersController.php b/application/controllers/UsersController.php index 4d6d0804..ea4a87f3 100644 --- a/application/controllers/UsersController.php +++ b/application/controllers/UsersController.php @@ -67,10 +67,7 @@ class UsersController extends Controller $this->addControl($limitControl); $this->addControl($searchBar); - $this->addContent( - (new ObjectList($users)) - ->setDetailUrl(Url::fromPath('icingadb/user')) - ); + $this->addContent(new ObjectList($users)); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); diff --git a/library/Icingadb/Widget/Detail/DowntimeDetail.php b/library/Icingadb/Widget/Detail/DowntimeDetail.php index 345c7871..ccc886a7 100644 --- a/library/Icingadb/Widget/Detail/DowntimeDetail.php +++ b/library/Icingadb/Widget/Detail/DowntimeDetail.php @@ -181,9 +181,7 @@ class DowntimeDetail extends BaseHtmlElement if ($children->hasResult()) { $this->addHtml( new HtmlElement('h2', null, Text::create(t('Children'))), - (new ObjectList($children)) - ->setMultiselectUrl(Links::downtimesDetails()) - ->setDetailUrl(Url::fromPath('icingadb/downtime')), + new ObjectList($children), (new ShowMore($children, Links::downtimes()->setQueryString( QueryString::render(Filter::any( Filter::equal('downtime.parent.name', $this->downtime->name), diff --git a/library/Icingadb/Widget/Detail/EventDetail.php b/library/Icingadb/Widget/Detail/EventDetail.php index e2c402bf..f0d0fb07 100644 --- a/library/Icingadb/Widget/Detail/EventDetail.php +++ b/library/Icingadb/Widget/Detail/EventDetail.php @@ -170,8 +170,7 @@ class EventDetail extends BaseHtmlElement $users = $users->execute(); /** @var ResultSet $users */ - $notifiedUsers[] = (new ObjectList($users)) - ->setDetailUrl(Url::fromPath('icingadb/user')); + $notifiedUsers[] = new ObjectList($users); $notifiedUsers[] = (new ShowMore( $users, Links::users()->addParams(['notification_history.id' => bin2hex($notification->id)]), diff --git a/library/Icingadb/Widget/Detail/ObjectDetail.php b/library/Icingadb/Widget/Detail/ObjectDetail.php index e22a2d21..3b8e4678 100644 --- a/library/Icingadb/Widget/Detail/ObjectDetail.php +++ b/library/Icingadb/Widget/Detail/ObjectDetail.php @@ -232,9 +232,7 @@ class ObjectDetail extends BaseHtmlElement $content = [Html::tag('h2', t('Comments'))]; if ($comments->hasResult()) { - $content[] = (new TicketLinkObjectList($comments)) - ->setMultiselectUrl(Links::commentsDetails()) - ->setDetailUrl(Url::fromPath('icingadb/comment')); + $content[] = new TicketLinkObjectList($comments); $content[] = (new ShowMore($comments, $link))->setBaseTarget('_next'); } else { $content[] = new EmptyState(t('No comments created.')); @@ -285,9 +283,7 @@ class ObjectDetail extends BaseHtmlElement $content = [Html::tag('h2', t('Downtimes'))]; if ($downtimes->hasResult()) { - $content[] = (new TicketLinkObjectList($downtimes)) - ->setMultiselectUrl(Links::downtimesDetails()) - ->setDetailUrl(Url::fromPath('icingadb/downtime')); + $content[] = new TicketLinkObjectList($downtimes); $content[] = (new ShowMore($downtimes, $link))->setBaseTarget('_next'); } else { $content[] = new EmptyState(t('No downtimes scheduled.')); diff --git a/library/Icingadb/Widget/Detail/UserDetail.php b/library/Icingadb/Widget/Detail/UserDetail.php index e5d291c8..6a8036b8 100644 --- a/library/Icingadb/Widget/Detail/UserDetail.php +++ b/library/Icingadb/Widget/Detail/UserDetail.php @@ -90,7 +90,7 @@ class UserDetail extends BaseHtmlElement return [ new HtmlElement('h2', null, Text::create(t('Groups'))), - (new ObjectList($userGroups))->setDetailUrl(Url::fromPath('icingadb/usergroup')), + new ObjectList($userGroups), $showMoreLink ]; } diff --git a/library/Icingadb/Widget/Detail/UsergroupDetail.php b/library/Icingadb/Widget/Detail/UsergroupDetail.php index a8d78347..c980ed57 100644 --- a/library/Icingadb/Widget/Detail/UsergroupDetail.php +++ b/library/Icingadb/Widget/Detail/UsergroupDetail.php @@ -75,7 +75,7 @@ class UsergroupDetail extends BaseHtmlElement return [ new HtmlElement('h2', null, Text::create(t('Users'))), - (new ObjectList($users))->setDetailUrl(Url::fromPath('icingadb/user')), + new ObjectList($users), $showMoreLink ]; } diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 8a0915ad..82db7d22 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -6,6 +6,7 @@ namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; +use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Downtime; @@ -33,6 +34,7 @@ use ipl\Stdlib\Filter; use ipl\Web\Layout\DetailedItemLayout; use ipl\Web\Layout\ItemLayout; use ipl\Web\Layout\MinimalItemLayout; +use ipl\Web\Url; use ipl\Web\Widget\ItemList; /** @@ -176,7 +178,10 @@ class ObjectList extends ItemList break; case $object instanceof Service: - $this->addDetailFilterAttribute( + $this + ->setDetailUrl(Url::fromPath('icingadb/service')) + ->setMultiselectUrl(Links::servicesDetails()) + ->addDetailFilterAttribute( $item, Filter::all( Filter::equal('name', $object->name), @@ -194,27 +199,53 @@ class ObjectList extends ItemList break; case $object instanceof Host: - $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); - $this->addMultiSelectFilterAttribute($item, Filter::equal('host.name', $object->name)); + $this + ->setDetailUrl(Url::fromPath('icingadb/host')) + ->setMultiselectUrl(Links::hostsDetails()) + ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)) + ->addMultiSelectFilterAttribute($item, Filter::equal('host.name', $object->name)); break; - case $object instanceof Usergroup || $data instanceof User: - $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); + case $data instanceof User: + $this + ->setDetailUrl(Url::fromPath('icingadb/user')) + ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); break; - case $object instanceof Comment || $object instanceof Downtime: - $this->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); - $this->addMultiSelectFilterAttribute($item, Filter::equal('name', $object->name)); + case $object instanceof Usergroup: + $this + ->setDetailUrl(Url::fromPath('icingadb/usergroup')) + ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); + + break; + case $object instanceof Comment: + $this + ->setDetailUrl(Url::fromPath('icingadb/comment')) + ->setMultiselectUrl(Links::commentsDetails()) + ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)) + ->addMultiSelectFilterAttribute($item, Filter::equal('name', $object->name)); + + break; + case $object instanceof Downtime: + $this + ->setDetailUrl(Url::fromPath('icingadb/downtime')) + ->setMultiselectUrl(Links::downtimesDetails()) + ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)) + ->addMultiSelectFilterAttribute($item, Filter::equal('name', $object->name)); break; case $object instanceof NotificationHistory: - $this->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->history->id))); + $this + ->setDetailUrl(Url::fromPath('icingadb/event')) + ->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->history->id))); break; case $object instanceof History: - $this->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->id))); + $this + ->setDetailUrl(Url::fromPath('icingadb/event')) + ->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->id))); break; } diff --git a/library/Icingadb/Widget/ItemTable/ObjectGrid.php b/library/Icingadb/Widget/ItemTable/ObjectGrid.php index c92c71e9..d92c69f0 100644 --- a/library/Icingadb/Widget/ItemTable/ObjectGrid.php +++ b/library/Icingadb/Widget/ItemTable/ObjectGrid.php @@ -14,6 +14,7 @@ use ipl\Html\ValidHtml; use ipl\Orm\Model; use ipl\Stdlib\Filter; use ipl\Web\Common\ItemRenderer; +use ipl\Web\Url; use ipl\Web\Widget\ItemList; /** @@ -54,10 +55,23 @@ class ObjectGrid extends ItemList { $item = parent::createListItem($data); - if (! $this->getDetailActionsDisabled()) { - $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); + if ($this->getDetailActionsDisabled()) { + return $item; } + switch (true) { + case $data instanceof Hostgroupsummary: + $this->setDetailUrl(Url::fromPath('icingadb/hostgroup')); + + break; + case $data instanceof ServicegroupSummary: + $this->setDetailUrl(Url::fromPath('icingadb/servicegroup')); + + break; + } + + $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); + return $item; } } diff --git a/library/Icingadb/Widget/ItemTable/ObjectTable.php b/library/Icingadb/Widget/ItemTable/ObjectTable.php index 73996300..5eab6d2b 100644 --- a/library/Icingadb/Widget/ItemTable/ObjectTable.php +++ b/library/Icingadb/Widget/ItemTable/ObjectTable.php @@ -14,6 +14,7 @@ use ipl\Html\ValidHtml; use ipl\Orm\Model; use ipl\Stdlib\Filter; use ipl\Web\Common\ItemRenderer; +use ipl\Web\Url; use ipl\Web\Widget\ItemTable; /** @@ -52,10 +53,23 @@ class ObjectTable extends ItemTable { $item = parent::createListItem($data); - if (! $this->getDetailActionsDisabled()) { - $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); + if ($this->getDetailActionsDisabled()) { + return $item; } + switch (true) { + case $data instanceof Hostgroupsummary: + $this->setDetailUrl(Url::fromPath('icingadb/hostgroup')); + + break; + case $data instanceof ServicegroupSummary: + $this->setDetailUrl(Url::fromPath('icingadb/servicegroup')); + + break; + } + + $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); + return $item; } } From 49cbafc386d36a487ab8e23368ba0acf5c714ced Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Thu, 27 Mar 2025 16:53:08 +0100 Subject: [PATCH 26/35] Fix ObjectGrid and add php generic types - Fix object-grid css --- .../Icingadb/Widget/ItemTable/ObjectGrid.php | 80 ++++++++++++++----- .../Icingadb/Widget/ItemTable/ObjectTable.php | 32 +++----- public/css/widget/object-grid.less | 20 ++--- 3 files changed, 77 insertions(+), 55 deletions(-) diff --git a/library/Icingadb/Widget/ItemTable/ObjectGrid.php b/library/Icingadb/Widget/ItemTable/ObjectGrid.php index d92c69f0..9313f7d6 100644 --- a/library/Icingadb/Widget/ItemTable/ObjectGrid.php +++ b/library/Icingadb/Widget/ItemTable/ObjectGrid.php @@ -8,52 +8,73 @@ use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Model\ServicegroupSummary; -use Icinga\Module\Icingadb\View\HostgroupGridRenderer; -use Icinga\Module\Icingadb\View\ServicegroupGridRenderer; +use InvalidArgumentException; +use ipl\Html\BaseHtmlElement; +use ipl\Html\HtmlElement; use ipl\Html\ValidHtml; -use ipl\Orm\Model; +use ipl\Orm\ResultSet; use ipl\Stdlib\Filter; use ipl\Web\Common\ItemRenderer; +use ipl\Web\Layout\ItemLayout; use ipl\Web\Url; -use ipl\Web\Widget\ItemList; +use ipl\Web\Widget\EmptyStateBar; /** * ObjectGrid * * @internal The only reason this class exists is due to the detail actions. In case those are part of the ipl * some time, this class is obsolete, and we must be able to safely drop it. + * + * @template Item of Hostgroupsummary|ServicegroupSummary */ -class ObjectGrid extends ItemList +class ObjectGrid extends BaseHtmlElement { use DetailActions; - protected $defaultAttributes = ['class' => 'object-grid']; + protected $defaultAttributes = [ + 'class' => 'object-grid', + 'data-base-target' => '_next' + ]; + protected $tag = 'ul'; + + /** @var ItemRenderer */ + protected $itemRenderer; + + /** @var ResultSet|iterable */ + protected $data; + + /** + * Create a new object grid + * + * @param ResultSet|iterable $data + * @param ItemRenderer $renderer + */ public function __construct($data, ItemRenderer $renderer) { - parent::__construct($data, function (Model $item) use ($renderer) { - if ($item instanceof Hostgroupsummary && $renderer instanceof HostgroupGridRenderer) { - return $renderer; - } + if (! is_iterable($data)) { + throw new InvalidArgumentException('Data must be an array or an instance of Traversable'); + } - if ($item instanceof ServicegroupSummary && $renderer instanceof ServicegroupGridRenderer) { - return $renderer; - } - - throw new NotImplementedError('Not implemented'); - }); - } - - protected function init(): void - { - parent::init(); + $this->data = $data; + $this->itemRenderer = $renderer; $this->initializeDetailActions(); } + /** + * Create a list item for the given data + * + * @param Item $data + * + * @return ValidHtml + * + * @throws NotImplementedError When the data is not of the expected type + */ protected function createListItem(object $data): ValidHtml { - $item = parent::createListItem($data); + $layout = new ItemLayout($data, $this->itemRenderer); + $item = new HtmlElement('li', $layout->getAttributes(), $layout); if ($this->getDetailActionsDisabled()) { return $item; @@ -68,10 +89,25 @@ class ObjectGrid extends ItemList $this->setDetailUrl(Url::fromPath('icingadb/servicegroup')); break; + default: + throw new NotImplementedError('Not implemented'); } $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); return $item; } + + protected function assemble(): void + { + /** @var Item $data */ + foreach ($this->data as $data) { + $this->addHtml($this->createListItem($data)); + } + + if ($this->isEmpty()) { + $this->setTag('div'); + $this->addHtml(new EmptyStateBar(t('No items found.'))); + } + } } diff --git a/library/Icingadb/Widget/ItemTable/ObjectTable.php b/library/Icingadb/Widget/ItemTable/ObjectTable.php index 5eab6d2b..0080d215 100644 --- a/library/Icingadb/Widget/ItemTable/ObjectTable.php +++ b/library/Icingadb/Widget/ItemTable/ObjectTable.php @@ -8,12 +8,8 @@ use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Model\ServicegroupSummary; -use Icinga\Module\Icingadb\View\HostgroupRenderer; -use Icinga\Module\Icingadb\View\ServicegroupRenderer; use ipl\Html\ValidHtml; -use ipl\Orm\Model; use ipl\Stdlib\Filter; -use ipl\Web\Common\ItemRenderer; use ipl\Web\Url; use ipl\Web\Widget\ItemTable; @@ -22,26 +18,15 @@ use ipl\Web\Widget\ItemTable; * * @internal The only reason this class exists is due to the detail actions. In case those are part of the ipl * some time, this class is obsolete, and we must be able to safely drop it. + * + * @template Item of Hostgroupsummary|ServicegroupSummary + * + * @extends ItemTable */ class ObjectTable extends ItemTable { use DetailActions; - public function __construct($data, ItemRenderer $renderer) - { - parent::__construct($data, function (Model $item) use ($renderer) { - if ($item instanceof Hostgroupsummary && $renderer instanceof HostgroupRenderer) { - return $renderer; - } - - if ($item instanceof ServicegroupSummary && $renderer instanceof ServicegroupRenderer) { - return $renderer; - } - - throw new NotImplementedError('Not implemented'); - }); - } - protected function init(): void { parent::init(); @@ -49,6 +34,13 @@ class ObjectTable extends ItemTable $this->initializeDetailActions(); } + /** + * @param Item $data + * + * @return ValidHtml + * + * @throws NotImplementedError When the data is not of the expected type + */ protected function createListItem(object $data): ValidHtml { $item = parent::createListItem($data); @@ -66,6 +58,8 @@ class ObjectTable extends ItemTable $this->setDetailUrl(Url::fromPath('icingadb/servicegroup')); break; + default: + throw new NotImplementedError('Not implemented'); } $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); diff --git a/public/css/widget/object-grid.less b/public/css/widget/object-grid.less index 36b6f71d..8f5a6c9f 100644 --- a/public/css/widget/object-grid.less +++ b/public/css/widget/object-grid.less @@ -1,26 +1,21 @@ // HostGroup- and -ServiceGroupGrid styles -ul.item-list.object-grid { +ul.object-grid { display: grid; grid-template-columns: repeat(auto-fit, 15em); grid-gap: 1em 2em; - .list-item { + li.item-layout.object-grid-cell { margin: -.25em; padding: .25em; - } - - li.object-grid-cell { - .title { - align-items: center; - } + border-radius: .5em; .visual { - margin-right: 1em; + padding: 0; } - .main { - border-top: none; + .caption { + height: auto; } .title, .caption { @@ -41,6 +36,3 @@ ul.item-list.object-grid { } } -.content.full-width ul.item-list.object-grid { - margin: 0 1em; -} From eef90e0212bec93300b9f8727094e268cfe7ec1f Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Thu, 27 Mar 2025 17:00:15 +0100 Subject: [PATCH 27/35] Disable detailActions for Multiselected list items --- application/controllers/CommentsController.php | 6 +++++- application/controllers/DowntimesController.php | 6 +++++- application/controllers/HostsController.php | 1 + application/controllers/ServicesController.php | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/application/controllers/CommentsController.php b/application/controllers/CommentsController.php index 07431cdf..a7c23e2b 100644 --- a/application/controllers/CommentsController.php +++ b/application/controllers/CommentsController.php @@ -159,7 +159,11 @@ class CommentsController extends Controller $rs = $comments->execute(); - $this->addControl((new ObjectList($rs))->setViewMode('minimal')); + $this->addControl( + (new ObjectList($rs)) + ->setViewMode('minimal') + ->setDetailActionsDisabled() + ); $this->addControl(new ShowMore( $rs, diff --git a/application/controllers/DowntimesController.php b/application/controllers/DowntimesController.php index 10eb9077..2b7d9a5e 100644 --- a/application/controllers/DowntimesController.php +++ b/application/controllers/DowntimesController.php @@ -165,7 +165,11 @@ class DowntimesController extends Controller $rs = $downtimes->execute(); - $this->addControl((new ObjectList($rs))->setViewMode('minimal')); + $this->addControl( + (new ObjectList($rs)) + ->setViewMode('minimal') + ->setDetailActionsDisabled() + ); $this->addControl(new ShowMore( $rs, diff --git a/application/controllers/HostsController.php b/application/controllers/HostsController.php index 645a7212..226e6db8 100644 --- a/application/controllers/HostsController.php +++ b/application/controllers/HostsController.php @@ -168,6 +168,7 @@ class HostsController extends Controller $this->addControl( (new ObjectList($results)) ->setViewMode('minimal') + ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $results, diff --git a/application/controllers/ServicesController.php b/application/controllers/ServicesController.php index 34df538e..04b93056 100644 --- a/application/controllers/ServicesController.php +++ b/application/controllers/ServicesController.php @@ -184,6 +184,7 @@ class ServicesController extends Controller $this->addControl( (new ObjectList($results)) ->setViewMode('minimal') + ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $results, From dde5771b81f4a341149841e830306d9cb708936c Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Thu, 27 Mar 2025 17:34:58 +0100 Subject: [PATCH 28/35] css: Drop obsolete user(group)-list rules --- public/css/list/user-list.less | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 public/css/list/user-list.less diff --git a/public/css/list/user-list.less b/public/css/list/user-list.less deleted file mode 100644 index 078d1b94..00000000 --- a/public/css/list/user-list.less +++ /dev/null @@ -1,26 +0,0 @@ -// Layout - -.controls .user-list, -.controls .usergroup-list { - .usergroup-ball, - .user-ball { - height: 1.5em; - width: 1.5em; - line-height: ~"calc(1.5em - 4px)"; - display: block; - } - - .title br { - display: none; - } - - .list-item { - & > .visual { - padding-top: 0.25em; - } - - & > .col { - padding: .25em 0; - } - } -} From 7bb92faa56c2d54dbf7f5cf6a89d93403adc5025 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Thu, 27 Mar 2025 17:35:33 +0100 Subject: [PATCH 29/35] css: Adjust host|servicegroup layout --- public/css/item/hostgroup.less | 22 ++++++++++++++++++++++ public/css/item/servicegroup.less | 3 +++ 2 files changed, 25 insertions(+) create mode 100644 public/css/item/hostgroup.less create mode 100644 public/css/item/servicegroup.less diff --git a/public/css/item/hostgroup.less b/public/css/item/hostgroup.less new file mode 100644 index 00000000..7a4d6617 --- /dev/null +++ b/public/css/item/hostgroup.less @@ -0,0 +1,22 @@ +.hostgroup { + &.table-row.item-layout { + > .col:has(.object-statistics) { + align-content: center; // Actually, not sure why this works… .col is not a grid container + } + + > .main > .caption { + height: auto; + .text-ellipsis(); + .line-clamp("reset"); + } + } + + &.header-item-layout > .main { + padding-top: 0; + padding-bottom: 0; + + > header { + align-items: center; + } + } +} diff --git a/public/css/item/servicegroup.less b/public/css/item/servicegroup.less new file mode 100644 index 00000000..9c79e9a2 --- /dev/null +++ b/public/css/item/servicegroup.less @@ -0,0 +1,3 @@ +.servicegroup { + .hostgroup; +} From 95a6992bb01728017e4cd7a9540160f3bac779fe Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Fri, 28 Mar 2025 09:15:45 +0100 Subject: [PATCH 30/35] Remove superfluous `span` wrapper without attribute of `Text` --- library/Icingadb/View/CommentRenderer.php | 12 ++++-------- library/Icingadb/View/HostgroupGridRenderer.php | 2 +- library/Icingadb/View/HostgroupRenderer.php | 2 +- library/Icingadb/View/ServicegroupGridRenderer.php | 2 +- library/Icingadb/View/ServicegroupRenderer.php | 2 +- library/Icingadb/View/UserRenderer.php | 2 +- library/Icingadb/View/UsergroupRenderer.php | 2 +- 7 files changed, 10 insertions(+), 14 deletions(-) diff --git a/library/Icingadb/View/CommentRenderer.php b/library/Icingadb/View/CommentRenderer.php index 541d9866..f54ff4e8 100644 --- a/library/Icingadb/View/CommentRenderer.php +++ b/library/Icingadb/View/CommentRenderer.php @@ -140,23 +140,19 @@ class CommentRenderer implements ItemRenderer public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { if ($item->expire_time) { - $info->addHtml(new HtmlElement( - 'span', - null, + $info->addHtml( FormattedString::create( $this->translate("expires %s"), new TimeUntil($item->expire_time->getTimestamp()) ) - )); + ); } else { - $info->addHtml(new HtmlElement( - 'span', - null, + $info->addHtml( FormattedString::create( $this->translate("created %s"), new TimeAgo($item->entry_time->getTimestamp()) ) - )); + ); } } diff --git a/library/Icingadb/View/HostgroupGridRenderer.php b/library/Icingadb/View/HostgroupGridRenderer.php index 55d1bd7a..04cf2a28 100644 --- a/library/Icingadb/View/HostgroupGridRenderer.php +++ b/library/Icingadb/View/HostgroupGridRenderer.php @@ -151,7 +151,7 @@ class HostgroupGridRenderer implements ItemRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void diff --git a/library/Icingadb/View/HostgroupRenderer.php b/library/Icingadb/View/HostgroupRenderer.php index d1f02a07..d0a6c39e 100644 --- a/library/Icingadb/View/HostgroupRenderer.php +++ b/library/Icingadb/View/HostgroupRenderer.php @@ -64,7 +64,7 @@ class HostgroupRenderer implements ItemTableRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void diff --git a/library/Icingadb/View/ServicegroupGridRenderer.php b/library/Icingadb/View/ServicegroupGridRenderer.php index 789a80ce..96a41841 100644 --- a/library/Icingadb/View/ServicegroupGridRenderer.php +++ b/library/Icingadb/View/ServicegroupGridRenderer.php @@ -241,7 +241,7 @@ class ServicegroupGridRenderer implements ItemRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void diff --git a/library/Icingadb/View/ServicegroupRenderer.php b/library/Icingadb/View/ServicegroupRenderer.php index 392c2678..56df0e91 100644 --- a/library/Icingadb/View/ServicegroupRenderer.php +++ b/library/Icingadb/View/ServicegroupRenderer.php @@ -63,7 +63,7 @@ class ServicegroupRenderer implements ItemTableRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void diff --git a/library/Icingadb/View/UserRenderer.php b/library/Icingadb/View/UserRenderer.php index 6eb64d3c..077739ef 100644 --- a/library/Icingadb/View/UserRenderer.php +++ b/library/Icingadb/View/UserRenderer.php @@ -45,7 +45,7 @@ class UserRenderer implements ItemRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void diff --git a/library/Icingadb/View/UsergroupRenderer.php b/library/Icingadb/View/UsergroupRenderer.php index da29e5ac..50c7f672 100644 --- a/library/Icingadb/View/UsergroupRenderer.php +++ b/library/Icingadb/View/UsergroupRenderer.php @@ -45,7 +45,7 @@ class UsergroupRenderer implements ItemRenderer public function assembleCaption($item, HtmlDocument $caption, string $layout): void { - $caption->addHtml(new HtmlElement('span', null, Text::create($item->name))); + $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void From 2b060a4f2a13e24efcb4777f743ea4b774ef46e1 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Thu, 27 Mar 2025 11:29:37 +0100 Subject: [PATCH 31/35] Cleanup phpstan baseline and fix code sniffer issues - Baseline: Nothing new added, only obsolete paths removed Phpstan now uses single instead of double quotes for messages. Thats why each message is updated. --- .../View/BaseHostAndServiceRenderer.php | 3 +- .../Icingadb/Widget/ItemList/ObjectList.php | 12 +- phpstan-baseline-standard.neon | 5023 +++++++++-------- 3 files changed, 2820 insertions(+), 2218 deletions(-) diff --git a/library/Icingadb/View/BaseHostAndServiceRenderer.php b/library/Icingadb/View/BaseHostAndServiceRenderer.php index 58d17f3b..77d86a27 100644 --- a/library/Icingadb/View/BaseHostAndServiceRenderer.php +++ b/library/Icingadb/View/BaseHostAndServiceRenderer.php @@ -226,7 +226,8 @@ abstract class BaseHostAndServiceRenderer implements ItemRenderer $title = $isService ? sprintf( $this->translate('Service "%s" on "%s" is in flapping state'), - $item->display_name, $item->host->display_name + $item->display_name, + $item->host->display_name ) : sprintf( $this->translate('Host "%s" is in flapping state'), diff --git a/library/Icingadb/Widget/ItemList/ObjectList.php b/library/Icingadb/Widget/ItemList/ObjectList.php index 82db7d22..d471647b 100644 --- a/library/Icingadb/Widget/ItemList/ObjectList.php +++ b/library/Icingadb/Widget/ItemList/ObjectList.php @@ -182,12 +182,12 @@ class ObjectList extends ItemList ->setDetailUrl(Url::fromPath('icingadb/service')) ->setMultiselectUrl(Links::servicesDetails()) ->addDetailFilterAttribute( - $item, - Filter::all( - Filter::equal('name', $object->name), - Filter::equal('host.name', $object->host->name) - ) - ); + $item, + Filter::all( + Filter::equal('name', $object->name), + Filter::equal('host.name', $object->host->name) + ) + ); $this->addMultiSelectFilterAttribute( $item, diff --git a/phpstan-baseline-standard.neon b/phpstan-baseline-standard.neon index a1f2cac6..ce60b3f7 100644 --- a/phpstan-baseline-standard.neon +++ b/phpstan-baseline-standard.neon @@ -1,7716 +1,8317 @@ parameters: ignoreErrors: - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 1 path: application/controllers/CommandTransportController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommandTransportController\\:\\:addAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:addAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommandTransportController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommandTransportController\\:\\:removeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:removeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommandTransportController\\:\\:showAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:showAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommandTransportController\\:\\:sortAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:sortAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - - message: "#^Parameter \\#2 \\$filter of static method Icinga\\\\Data\\\\Filter\\\\Filter\\:\\:where\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#2 \$filter of static method Icinga\\Data\\Filter\\Filter\:\:where\(\) expects string, mixed given\.$#' + identifier: argument.type count: 2 path: application/controllers/CommandTransportController.php - - message: "#^Parameter \\#2 \\$offset of function array_splice expects int, int\\|false given\\.$#" - count: 1 - path: application/controllers/CommandTransportController.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 2 path: application/controllers/CommandTransportController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:acknowledgeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:acknowledgeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:addCommentAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:addCommentAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:assertIsGrantedOnCommandTargets\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:checkNowAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:checkNowAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:fetchCommandTargets\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:fetchCommandTargets\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:processCheckresultAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:processCheckresultAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:removeAcknowledgementAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:scheduleCheckAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:scheduleCheckAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:scheduleDowntimeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:sendCustomNotificationAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:toggleFeaturesAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentController.php - - message: "#^Parameter \\#1 \\$form of method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:handleCommandForm\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\|string, Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\|null given\\.$#" + message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/CommentController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/CommentController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:\\$commandTargetModel \\(ipl\\\\Orm\\\\Model\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: application/controllers/CommentController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentController\\:\\:\\$comment \\(Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Comment\\) does not accept ipl\\\\Orm\\\\Model\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:\$comment \(Icinga\\Module\\Icingadb\\Model\\Comment\) does not accept ipl\\Orm\\Model\.$#' + identifier: assign.propertyType count: 1 path: application/controllers/CommentController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentsController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentsController\\:\\:deleteAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:deleteAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentsController\\:\\:detailsAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:detailsAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentsController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\CommentsController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - - message: "#^Parameter \\#1 \\$peekAhead of method ipl\\\\Orm\\\\Query\\:\\:peekAhead\\(\\) expects bool, null given\\.$#" + message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' + identifier: argument.type count: 1 path: application/controllers/CommentsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ConfigController\\:\\:addFormToContent\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ConfigController\:\:addFormToContent\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ConfigController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ConfigController\\:\\:databaseAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ConfigController\:\:databaseAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ConfigController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ConfigController\\:\\:redisAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ConfigController\:\:redisAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ConfigController.php - - message: "#^Parameter \\#1 \\$name of method ipl\\\\Web\\\\Widget\\\\Tabs\\:\\:add\\(\\) expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$name of method ipl\\Web\\Widget\\Tabs\:\:add\(\) expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ConfigController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:acknowledgeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:acknowledgeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:addCommentAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:addCommentAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:assertIsGrantedOnCommandTargets\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:checkNowAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:checkNowAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:fetchCommandTargets\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:fetchCommandTargets\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:processCheckresultAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:processCheckresultAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:removeAcknowledgementAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:scheduleCheckAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:scheduleCheckAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:scheduleDowntimeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:sendCustomNotificationAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:toggleFeaturesAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - - message: "#^Parameter \\#1 \\$form of method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:handleCommandForm\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\|string, Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\|null given\\.$#" + message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/DowntimeController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/DowntimeController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:\\$commandTargetModel \\(ipl\\\\Orm\\\\Model\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: application/controllers/DowntimeController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimeController\\:\\:\\$downtime \\(Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Downtime\\) does not accept ipl\\\\Orm\\\\Model\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:\$downtime \(Icinga\\Module\\Icingadb\\Model\\Downtime\) does not accept ipl\\Orm\\Model\.$#' + identifier: assign.propertyType count: 1 path: application/controllers/DowntimeController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimesController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimesController\\:\\:deleteAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:deleteAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimesController\\:\\:detailsAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:detailsAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimesController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\DowntimesController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - - message: "#^Parameter \\#1 \\$peekAhead of method ipl\\\\Orm\\\\Query\\:\\:peekAhead\\(\\) expects bool, null given\\.$#" + message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' + identifier: argument.type count: 1 path: application/controllers/DowntimesController.php - - message: "#^Cannot access property \\$exception on mixed\\.$#" + message: '#^Cannot access property \$exception on mixed\.$#' + identifier: property.nonObject count: 1 path: application/controllers/ErrorController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ErrorController\\:\\:errorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ErrorController\:\:errorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ErrorController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ErrorController\\:\\:postDispatchXhr\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ErrorController\:\:postDispatchXhr\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ErrorController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ErrorController\\:\\:prepareInit\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ErrorController\:\:prepareInit\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ErrorController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\EventController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\EventController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/EventController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\EventController\\:\\:\\$event \\(Icinga\\\\Module\\\\Icingadb\\\\Model\\\\History\\) does not accept ipl\\\\Orm\\\\Model\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\EventController\:\:\$event \(Icinga\\Module\\Icingadb\\Model\\History\) does not accept ipl\\Orm\\Model\.$#' + identifier: assign.propertyType count: 1 path: application/controllers/EventController.php - - message: "#^Cannot access property \\$hosts_active_checks_enabled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$hosts_active_checks_enabled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - - message: "#^Cannot access property \\$hosts_passive_checks_enabled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$hosts_passive_checks_enabled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - - message: "#^Cannot access property \\$services_active_checks_enabled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_active_checks_enabled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - - message: "#^Cannot access property \\$services_passive_checks_enabled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_passive_checks_enabled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HealthController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HealthController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HealthController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HistoryController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HistoryController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HistoryController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HistoryController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HistoryController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HistoryController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HistoryController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HistoryController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HistoryController.php - - message: "#^Parameter \\#2 \\$default of method Icinga\\\\Web\\\\UrlParams\\:\\:shift\\(\\) expects string\\|null, int\\<1, max\\> given\\.$#" + message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' + identifier: argument.type count: 1 path: application/controllers/HistoryController.php - - message: "#^Parameter \\#2 \\$value of method Icinga\\\\Web\\\\Url\\:\\:setParam\\(\\) expects array\\|bool\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/HistoryController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:lessThanOrEqual\\(\\) expects float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/HistoryController.php - - message: "#^Cannot access property \\$is_overdue on mixed\\.$#" + message: '#^Cannot access property \$is_overdue on mixed\.$#' + identifier: property.nonObject count: 4 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:acknowledgeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:acknowledgeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:addCommentAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:addCommentAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:assertIsGrantedOnCommandTargets\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:checkNowAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:checkNowAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:fetchCommandTargets\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:fetchCommandTargets\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:getDefaultTabControls\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:processCheckresultAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:historyAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:scheduleCheckAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:processCheckresultAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:removeAcknowledgementAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:scheduleCheckAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:scheduleDowntimeAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#1 \$array of function reset expects array\|object, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:sendCustomNotificationAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:servicesAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#2 \$apiResult of class Icinga\\Module\\Icingadb\\Widget\\Detail\\HostInspectionDetail constructor expects array, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:setTitleTab\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:sourceAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#2 \$serviceSummary of class Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail constructor expects Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:toggleFeaturesAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Parameter \\#1 \\$array of function reset expects array\\|object, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Parameter \\#1 \\$form of method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:handleCommandForm\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\|string, Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\|null given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostController.php - - message: "#^Parameter \\#2 \\$apiResult of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostInspectionDetail constructor expects array, mixed given\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: application/controllers/HostController.php - - message: "#^Parameter \\#2 \\$default of method Icinga\\\\Web\\\\UrlParams\\:\\:shift\\(\\) expects string\\|null, int\\<1, max\\> given\\.$#" - count: 1 - path: application/controllers/HostController.php - - - - message: "#^Parameter \\#2 \\$serviceSummary of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostDetail constructor expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary, ipl\\\\Orm\\\\Model\\|null given\\.$#" - count: 1 - path: application/controllers/HostController.php - - - - message: "#^Parameter \\#2 \\$value of method Icinga\\\\Web\\\\Url\\:\\:setParam\\(\\) expects array\\|bool\\|string, mixed given\\.$#" - count: 1 - path: application/controllers/HostController.php - - - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" - count: 1 - path: application/controllers/HostController.php - - - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:lessThanOrEqual\\(\\) expects float\\|int\\|string, mixed given\\.$#" - count: 1 - path: application/controllers/HostController.php - - - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostController\\:\\:\\$commandTargetModel \\(ipl\\\\Orm\\\\Model\\) in isset\\(\\) is not nullable\\.$#" - count: 1 - path: application/controllers/HostController.php - - - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostgroupController\\:\\:\\$hostgroupName \\(string\\) does not accept mixed\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\HostgroupController\:\:\$hostgroupName \(string\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: application/controllers/HostgroupController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostgroupsController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostgroupsController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostgroupsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostgroupsController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostgroupsController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostgroupsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostgroupsController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostgroupsController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostgroupsController.php - - message: "#^Parameter \\#1 \\$peekAhead of method ipl\\\\Orm\\\\Query\\:\\:peekAhead\\(\\) expects bool, null given\\.$#" + message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostgroupsController.php - - message: "#^Cannot access property \\$comments_total on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$comments_total on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/HostsController.php - - message: "#^Cannot access property \\$downtimes_total on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$downtimes_total on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/HostsController.php - - message: "#^Cannot call method first\\(\\) on ipl\\\\Orm\\\\Query\\|null\\.$#" + message: '#^Cannot call method first\(\) on ipl\\Orm\\Query\|null\.$#' + identifier: method.nonObject count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:acknowledgeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:acknowledgeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:addCommentAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:addCommentAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:assertIsGrantedOnCommandTargets\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:checkNowAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:checkNowAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:detailsAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:detailsAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:getFeatureStatus\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:getFeatureStatus\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:processCheckresultAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:processCheckresultAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:removeAcknowledgementAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:scheduleCheckAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:scheduleCheckAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:scheduleDowntimeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:sendCustomNotificationAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:toggleFeaturesAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/HostsController.php - - message: "#^Parameter \\#1 \\$form of method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:handleCommandForm\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\|string, Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\|null given\\.$#" + message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostsController.php - - message: "#^Parameter \\#1 \\$peekAhead of method ipl\\\\Orm\\\\Query\\:\\:peekAhead\\(\\) expects bool, null given\\.$#" + message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostsController.php - - message: "#^Parameter \\#1 \\$query of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:filter\\(\\) expects ipl\\\\Orm\\\\Query, ipl\\\\Orm\\\\Query\\|null given\\.$#" + message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:filter\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostsController.php - - message: "#^Parameter \\#2 \\$summary of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail constructor expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HoststateSummary\\|Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary, ipl\\\\Orm\\\\Model\\|null given\\.$#" + message: '#^Parameter \#2 \$summary of class Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail constructor expects Icinga\\Module\\Icingadb\\Model\\HoststateSummary\|Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostsController.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$queries of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:export\\(\\) expects ipl\\\\Orm\\\\Query, ipl\\\\Orm\\\\Query\\|null given\\.$#" + message: '#^Parameter \#2 \.\.\.\$queries of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:export\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/HostsController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\HostsController\\:\\:\\$commandTargetModel \\(ipl\\\\Orm\\\\Model\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: application/controllers/HostsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\MigrateController\\:\\:backendSupportAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\MigrateController\:\:backendSupportAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/MigrateController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\MigrateController\\:\\:checkboxStateAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\MigrateController\:\:checkboxStateAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/MigrateController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\MigrateController\\:\\:checkboxSubmitAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\MigrateController\:\:checkboxSubmitAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/MigrateController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\MigrateController\\:\\:monitoringUrlAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\MigrateController\:\:monitoringUrlAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/MigrateController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\MigrateController\\:\\:searchUrlAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\MigrateController\:\:searchUrlAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/MigrateController.php - - message: "#^Parameter \\#1 \\$url of static method Icinga\\\\Web\\\\Url\\:\\:fromPath\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$url of static method Icinga\\Web\\Url\:\:fromPath\(\) expects string, mixed given\.$#' + identifier: argument.type count: 2 path: application/controllers/MigrateController.php - - message: "#^Parameter \\#2 \\$subject of function preg_match expects string, string\\|false given\\.$#" + message: '#^Parameter \#2 \$subject of function preg_match expects string, string\|false given\.$#' + identifier: argument.type count: 3 path: application/controllers/MigrateController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\NotificationsController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\NotificationsController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/NotificationsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\NotificationsController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\NotificationsController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/NotificationsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\NotificationsController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\NotificationsController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/NotificationsController.php - - message: "#^Parameter \\#2 \\$default of method Icinga\\\\Web\\\\UrlParams\\:\\:shift\\(\\) expects string\\|null, int\\<1, max\\> given\\.$#" + message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' + identifier: argument.type count: 1 path: application/controllers/NotificationsController.php - - message: "#^Parameter \\#2 \\$value of method Icinga\\\\Web\\\\Url\\:\\:setParam\\(\\) expects array\\|bool\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/NotificationsController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:lessThanOrEqual\\(\\) expects float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/NotificationsController.php - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 1 path: application/controllers/ServiceController.php - - message: "#^Cannot access property \\$is_overdue on mixed\\.$#" + message: '#^Cannot access property \$is_overdue on mixed\.$#' + identifier: property.nonObject count: 3 path: application/controllers/ServiceController.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:acknowledgeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:acknowledgeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:addCommentAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:addCommentAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:assertIsGrantedOnCommandTargets\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:checkNowAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:checkNowAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:createTabs\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:fetchCommandTargets\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:fetchCommandTargets\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:processCheckresultAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:getDefaultTabControls\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:historyAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:scheduleCheckAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:processCheckresultAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:removeAcknowledgementAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:scheduleCheckAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#1 \$array of function reset expects array\|object, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:scheduleDowntimeAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:sendCustomNotificationAction\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#2 \$apiResult of class Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceInspectionDetail constructor expects array, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:setTitleTab\\(\\) has no return type specified\\.$#" + message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:sourceAction\\(\\) has no return type specified\\.$#" - count: 1 - path: application/controllers/ServiceController.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:toggleFeaturesAction\\(\\) has no return type specified\\.$#" - count: 1 - path: application/controllers/ServiceController.php - - - - message: "#^Parameter \\#1 \\$array of function reset expects array\\|object, mixed given\\.$#" - count: 1 - path: application/controllers/ServiceController.php - - - - message: "#^Parameter \\#1 \\$form of method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:handleCommandForm\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\|string, Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\|null given\\.$#" - count: 1 - path: application/controllers/ServiceController.php - - - - message: "#^Parameter \\#2 \\$apiResult of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ServiceInspectionDetail constructor expects array, mixed given\\.$#" - count: 1 - path: application/controllers/ServiceController.php - - - - message: "#^Parameter \\#2 \\$default of method Icinga\\\\Web\\\\UrlParams\\:\\:shift\\(\\) expects string\\|null, int\\<1, max\\> given\\.$#" - count: 1 - path: application/controllers/ServiceController.php - - - - message: "#^Parameter \\#2 \\$host of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:service\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" + message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:service\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' + identifier: argument.type count: 2 path: application/controllers/ServiceController.php - - message: "#^Parameter \\#2 \\$host of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:serviceSource\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" + message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:serviceSource\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Parameter \\#2 \\$host of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ServiceLinks\\:\\:history\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" + message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\ServiceLinks\:\:history\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Parameter \\#2 \\$value of method Icinga\\\\Web\\\\Url\\:\\:setParam\\(\\) expects array\\|bool\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 2 path: application/controllers/ServiceController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:lessThanOrEqual\\(\\) expects float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServiceController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServiceController\\:\\:\\$commandTargetModel \\(ipl\\\\Orm\\\\Model\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: application/controllers/ServiceController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicegroupController\\:\\:\\$servicegroupName \\(string\\) does not accept mixed\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\ServicegroupController\:\:\$servicegroupName \(string\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: application/controllers/ServicegroupController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicegroupsController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicegroupsController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicegroupsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicegroupsController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicegroupsController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicegroupsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicegroupsController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicegroupsController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicegroupsController.php - - message: "#^Parameter \\#1 \\$peekAhead of method ipl\\\\Orm\\\\Query\\:\\:peekAhead\\(\\) expects bool, null given\\.$#" + message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServicegroupsController.php - - message: "#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\\:\\:getResponseSegment\\(\\)\\.$#" + message: '#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\:\:getResponseSegment\(\)\.$#' + identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - - message: "#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\\:\\:setNoRender\\(\\)\\.$#" + message: '#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\:\:setNoRender\(\)\.$#' + identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - - message: "#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\\:\\:setScriptAction\\(\\)\\.$#" + message: '#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\:\:setScriptAction\(\)\.$#' + identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - - message: "#^Cannot access property \\$comments_total on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$comments_total on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/ServicesController.php - - message: "#^Cannot access property \\$downtimes_total on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$downtimes_total on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: application/controllers/ServicesController.php - - message: "#^Cannot call method first\\(\\) on ipl\\\\Orm\\\\Query\\|null\\.$#" + message: '#^Cannot call method first\(\) on ipl\\Orm\\Query\|null\.$#' + identifier: method.nonObject count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:acknowledgeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:acknowledgeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:addCommentAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:addCommentAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:assertIsGrantedOnCommandTargets\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:checkNowAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:checkNowAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:detailsAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:detailsAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:getFeatureStatus\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:getFeatureStatus\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:gridAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:gridAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:gridSearchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:gridSearchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:prepareSearchFilter\\(\\) has parameter \\$additionalColumns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:prepareSearchFilter\(\) has parameter \$additionalColumns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:processCheckresultAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:processCheckresultAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:removeAcknowledgementAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:scheduleCheckAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:scheduleCheckAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:scheduleDowntimeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:sendCustomNotificationAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:toggleFeaturesAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - - message: "#^Parameter \\#1 \\$form of method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:handleCommandForm\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\|string, Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\|null given\\.$#" + message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServicesController.php - - message: "#^Parameter \\#1 \\$peekAhead of method ipl\\\\Orm\\\\Query\\:\\:peekAhead\\(\\) expects bool, null given\\.$#" + message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServicesController.php - - message: "#^Parameter \\#1 \\$query of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:filter\\(\\) expects ipl\\\\Orm\\\\Query, ipl\\\\Orm\\\\Query\\|null given\\.$#" + message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:filter\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServicesController.php - - message: "#^Parameter \\#2 \\$default of method Icinga\\\\Web\\\\UrlParams\\:\\:shift\\(\\) expects string\\|null, false given\\.$#" + message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, false given\.$#' + identifier: argument.type count: 2 path: application/controllers/ServicesController.php - - message: "#^Parameter \\#2 \\$summary of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail constructor expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HoststateSummary\\|Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary, ipl\\\\Orm\\\\Model\\|null given\\.$#" + message: '#^Parameter \#2 \$summary of class Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail constructor expects Icinga\\Module\\Icingadb\\Model\\HoststateSummary\|Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServicesController.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$queries of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:export\\(\\) expects ipl\\\\Orm\\\\Query, ipl\\\\Orm\\\\Query\\|null given\\.$#" + message: '#^Parameter \#2 \.\.\.\$queries of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:export\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/ServicesController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\ServicesController\\:\\:\\$commandTargetModel \\(ipl\\\\Orm\\\\Model\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: application/controllers/ServicesController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\TacticalController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\TacticalController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/TacticalController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\TacticalController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\TacticalController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/TacticalController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\TacticalController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\TacticalController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/TacticalController.php - - message: "#^Parameter \\#1 \\$summary of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\HostSummaryDonut constructor expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HoststateSummary, ipl\\\\Orm\\\\Model\\|null given\\.$#" + message: '#^Parameter \#1 \$summary of class Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut constructor expects Icinga\\Module\\Icingadb\\Model\\HoststateSummary, ipl\\Orm\\Model\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/TacticalController.php - - message: "#^Parameter \\#1 \\$summary of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ServiceSummaryDonut constructor expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary, ipl\\\\Orm\\\\Model\\|null given\\.$#" + message: '#^Parameter \#1 \$summary of class Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut constructor expects Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' + identifier: argument.type count: 1 path: application/controllers/TacticalController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UserController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UserController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UserController.php - - message: "#^Parameter \\#1 \\$title of method ipl\\\\Web\\\\Compat\\\\CompatController\\:\\:setTitle\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$title of method ipl\\Web\\Compat\\CompatController\:\:setTitle\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/UserController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/UserController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UserController\\:\\:\\$user \\(Icinga\\\\Module\\\\Icingadb\\\\Model\\\\User\\) does not accept ipl\\\\Orm\\\\Model\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\UserController\:\:\$user \(Icinga\\Module\\Icingadb\\Model\\User\) does not accept ipl\\Orm\\Model\.$#' + identifier: assign.propertyType count: 1 path: application/controllers/UserController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsergroupController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UsergroupController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UsergroupController.php - - message: "#^Parameter \\#1 \\$title of method ipl\\\\Web\\\\Compat\\\\CompatController\\:\\:setTitle\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$title of method ipl\\Web\\Compat\\CompatController\:\:setTitle\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/UsergroupController.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: application/controllers/UsergroupController.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsergroupController\\:\\:\\$usergroup \\(Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Usergroup\\) does not accept ipl\\\\Orm\\\\Model\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\UsergroupController\:\:\$usergroup \(Icinga\\Module\\Icingadb\\Model\\Usergroup\) does not accept ipl\\Orm\\Model\.$#' + identifier: assign.propertyType count: 1 path: application/controllers/UsergroupController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsergroupsController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UsergroupsController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UsergroupsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsergroupsController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UsergroupsController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UsergroupsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsergroupsController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UsergroupsController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UsergroupsController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsersController\\:\\:completeAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UsersController\:\:completeAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UsersController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsersController\\:\\:indexAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UsersController\:\:indexAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UsersController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Controllers\\\\UsersController\\:\\:searchEditorAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\UsersController\:\:searchEditorAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/controllers/UsersController.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\ApiTransportForm\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\ApiTransportForm\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/ApiTransportForm.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/CommandForm.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/CommandForm.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/CommandForm.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: application/forms/Command/CommandForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/Command/CommandForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\:\\:onSuccess\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:onSuccess\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/Command/CommandForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: application/forms/Command/CommandForm.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/CommandForm.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: application/forms/Command/CommandForm.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\CommandForm\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: application/forms/Command/CommandForm.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: application/forms/Command/CommandForm.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: application/forms/Command/CommandForm.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: application/forms/Command/CommandForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Instance\\\\ToggleInstanceFeaturesForm\\:\\:__construct\\(\\) has parameter \\$featureStatus with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\Instance\\ToggleInstanceFeaturesForm\:\:__construct\(\) has parameter \$featureStatus with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Instance\\\\ToggleInstanceFeaturesForm\\:\\:\\$featureStatus has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Instance\\ToggleInstanceFeaturesForm\:\:\$featureStatus has no type specified\.$#' + identifier: missingType.property count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Instance\\\\ToggleInstanceFeaturesForm\\:\\:\\$features has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Instance\\ToggleInstanceFeaturesForm\:\:\$features has no type specified\.$#' + identifier: missingType.property count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 4 path: application/forms/Command/Object/AcknowledgeProblemForm.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/AcknowledgeProblemForm.php - - message: "#^Parameter \\#1 \\$comment of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\WithCommentCommand\\:\\:setComment\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/AcknowledgeProblemForm.php - - message: "#^Parameter \\#1 \\$duration of class DateInterval constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/AcknowledgeProblemForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/Object/AddCommentForm.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/AddCommentForm.php - - message: "#^Parameter \\#1 \\$comment of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\WithCommentCommand\\:\\:setComment\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/AddCommentForm.php - - message: "#^Parameter \\#1 \\$duration of class DateInterval constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/AddCommentForm.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/DeleteCommentForm.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/DeleteDowntimeForm.php - - message: "#^Parameter \\#1 \\$output of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\ProcessCheckResultCommand\\:\\:setOutput\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$output of method Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:setOutput\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/ProcessCheckResultForm.php - - message: "#^Parameter \\#1 \\$performanceData of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\ProcessCheckResultCommand\\:\\:setPerformanceData\\(\\) expects string\\|null, mixed given\\.$#" + message: '#^Parameter \#1 \$performanceData of method Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:setPerformanceData\(\) expects string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/ProcessCheckResultForm.php - - message: "#^Parameter \\#1 \\$status of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\ProcessCheckResultCommand\\:\\:setStatus\\(\\) expects int, mixed given\\.$#" + message: '#^Parameter \#1 \$status of method Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:setStatus\(\) expects int, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/ProcessCheckResultForm.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/RemoveAcknowledgementForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/Object/ScheduleCheckForm.php - - message: "#^Cannot call method getTimestamp\\(\\) on mixed\\.$#" + message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/ScheduleCheckForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" - count: 2 - path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - - - - message: "#^Cannot call method getTimestamp\\(\\) on mixed\\.$#" - count: 2 - path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - - - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - - - - message: "#^Parameter \\#1 \\$comment of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\WithCommentCommand\\:\\:setComment\\(\\) expects string, mixed given\\.$#" - count: 1 - path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - - - - message: "#^Parameter \\#1 \\$duration of class DateInterval constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' + identifier: argument.type count: 3 path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - - message: "#^Cannot call method getTimestamp\\(\\) on mixed\\.$#" + message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' + identifier: method.nonObject count: 2 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - - message: "#^Cannot call method on\\(\\) on ipl\\\\Html\\\\Contract\\\\Wrappable\\|null\\.$#" + message: '#^Cannot call method on\(\) on ipl\\Html\\Contract\\Wrappable\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - - message: "#^Parameter \\#1 \\$comment of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\WithCommentCommand\\:\\:setComment\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - - message: "#^Parameter \\#1 \\$duration of class DateInterval constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' + identifier: argument.type count: 3 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ScheduleServiceDowntimeForm\\:\\:\\$flexibleEnd has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ScheduleServiceDowntimeForm\:\:\$flexibleEnd has no type specified\.$#' + identifier: missingType.property count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Command/Object/SendCustomNotificationForm.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/SendCustomNotificationForm.php - - message: "#^Parameter \\#1 \\$comment of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\WithCommentCommand\\:\\:setComment\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/SendCustomNotificationForm.php - - message: "#^Cannot call method getAttributes\\(\\) on ipl\\\\Html\\\\Contract\\\\Wrappable\\|null\\.$#" + message: '#^Cannot call method getAttributes\(\) on ipl\\Html\\Contract\\Wrappable\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 2 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\:\\:__construct\\(\\) has parameter \\$featureStatus with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\:\:__construct\(\) has parameter \$featureStatus with no type specified\.$#' + identifier: missingType.parameter count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - - message: "#^Parameter \\#1 \\$enabled of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\ToggleObjectFeatureCommand\\:\\:setEnabled\\(\\) expects bool, int given\\.$#" + message: '#^Parameter \#1 \$enabled of method Icinga\\Module\\Icingadb\\Command\\Object\\ToggleObjectFeatureCommand\:\:setEnabled\(\) expects bool, int given\.$#' + identifier: argument.type count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\:\\:\\$featureStatus has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\:\:\$featureStatus has no type specified\.$#' + identifier: missingType.property count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Command\\\\Object\\\\ToggleObjectFeaturesForm\\:\\:\\$features has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\:\:\$features has no type specified\.$#' + identifier: missingType.property count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\DatabaseConfigForm\\:\\:createElements\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\DatabaseConfigForm\:\:createElements\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/DatabaseConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\DatabaseConfigForm\\:\\:createElements\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\DatabaseConfigForm\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/DatabaseConfigForm.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Cannot call method addError\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method addError\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: application/forms/Navigation/ActionForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Navigation\\\\ActionForm\\:\\:createElements\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:createElements\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Navigation\\\\ActionForm\\:\\:createElements\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Navigation\\\\ActionForm\\:\\:isValid\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Navigation\\\\ActionForm\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Navigation\\\\ActionForm\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: application/forms/Navigation/ActionForm.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Navigation\\\\ActionForm\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: application/forms/Navigation/ActionForm.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\Navigation\\\\ActionForm\\:\\:parseRestriction\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseRestriction\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/Navigation/ActionForm.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: application/forms/Navigation/ActionForm.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: application/forms/Navigation/ActionForm.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: application/forms/Navigation/ActionForm.php - - message: "#^Call to an undefined method Zend_Form_Element\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method Zend_Form_Element\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Call to an undefined method object\\:\\:getMessages\\(\\)\\.$#" + message: '#^Call to an undefined method object\:\:getMessages\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Call to an undefined method object\\:\\:isValid\\(\\)\\.$#" + message: '#^Call to an undefined method object\:\:isValid\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method addError\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method addError\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 3 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method getElements\\(\\) on Zend_Form_DisplayGroup\\|null\\.$#" + message: '#^Cannot call method getElements\(\) on Zend_Form_DisplayGroup\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method getValidator\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method getValidator\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method getValue\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method getValue\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 3 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method isChecked\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method isChecked\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 5 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method setDecorators\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method setDecorators\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method setElements\\(\\) on Zend_Form_DisplayGroup\\|null\\.$#" + message: '#^Cannot call method setElements\(\) on Zend_Form_DisplayGroup\|null\.$#' + identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Cannot call method setValue\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method setValue\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 11 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:addInsecureCheckboxIfTls\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:addInsecureCheckboxIfTls\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:addSkipValidationCheckbox\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:addSkipValidationCheckbox\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:createElements\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:createElements\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:createElements\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:isValid\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:isValidPartial\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:onRequest\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:onRequest\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\RedisConfigForm\\:\\:wrapIplValidator\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:wrapIplValidator\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Parameter \\#1 \\$filename of function file_exists expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$filename of function file_exists expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Parameter \\#1 \\$filename of function file_get_contents expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$filename of function file_get_contents expects string, mixed given\.$#' + identifier: argument.type count: 2 path: application/forms/RedisConfigForm.php - - message: "#^Parameter \\#1 \\$path of function basename expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$path of function basename expects string, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: application/forms/RedisConfigForm.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: application/forms/SetAsBackendForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\SetAsBackendForm\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\SetAsBackendForm\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/SetAsBackendForm.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Forms\\\\SetAsBackendForm\\:\\:onSuccess\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Forms\\SetAsBackendForm\:\:onSuccess\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: application/forms/SetAsBackendForm.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Cannot access property \$id on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Cannot access property \\$id on mixed\\.$#" - count: 1 - path: library/Icingadb/Authentication/ObjectAuthorization.php - - - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 3 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Authentication\\\\ObjectAuthorization\\:\\:checkGrants\\(\\) has parameter \\$roles with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:checkGrants\(\) has parameter \$roles with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Authentication\\\\ObjectAuthorization\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Parameter \\#1 \\$column of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects string, array\\\\|string given\\.$#" + message: '#^Parameter \#1 \$column of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects string, array\\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Authentication\\\\ObjectAuthorization\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Authentication\\\\ObjectAuthorization\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 6 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Authentication/ObjectAuthorization.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Authentication\\\\ObjectAuthorization\\:\\:\\$knownGrants type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:\$knownGrants type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Authentication\\\\ObjectAuthorization\\:\\:\\$matchedFilters type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:\$matchedFilters type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\IcingaApiCommand\\:\\:create\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:create\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\IcingaApiCommand\\:\\:getData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:getData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\IcingaApiCommand\\:\\:setData\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:setData\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Command\\\\IcingaApiCommand\\:\\:\\$data type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\GetObjectCommand\\:\\:getAttributes\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\Object\\GetObjectCommand\:\:getAttributes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Object/GetObjectCommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\GetObjectCommand\\:\\:setAttributes\\(\\) has parameter \\$attributes with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\Object\\GetObjectCommand\:\:setAttributes\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Object/GetObjectCommand.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\GetObjectCommand\\:\\:\\$attributes type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Command\\Object\\GetObjectCommand\:\:\$attributes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Object/GetObjectCommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\ObjectsCommand\\:\\:getObjects\\(\\) return type has no value type specified in iterable type Traversable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\Object\\ObjectsCommand\:\:getObjects\(\) return type has no value type specified in iterable type Traversable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Object/ObjectsCommand.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Object\\\\ProcessCheckResultCommand\\:\\:\\$performanceData \\(string\\) does not accept string\\|null\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:\$performanceData \(string\) does not accept string\|null\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Command/Object/ProcessCheckResultCommand.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Command/Renderer/IcingaApiCommandRenderer.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Renderer\\\\IcingaApiCommandRenderer\\:\\:applyFilter\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\Renderer\\IcingaApiCommandRenderer\:\:applyFilter\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Renderer/IcingaApiCommandRenderer.php - - message: "#^Parameter \\#1 \\$object of method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Renderer\\\\IcingaApiCommandRenderer\\:\\:getObjectPluralType\\(\\) expects ipl\\\\Orm\\\\Model, ipl\\\\Orm\\\\Model\\|null given\\.$#" + message: '#^Parameter \#1 \$object of method Icinga\\Module\\Icingadb\\Command\\Renderer\\IcingaApiCommandRenderer\:\:getObjectPluralType\(\) expects ipl\\Orm\\Model, ipl\\Orm\\Model\|null given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Command/Renderer/IcingaApiCommandRenderer.php - - message: "#^Cannot access offset 'code' on mixed\\.$#" + message: '#^Cannot access offset ''code'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - - message: "#^Cannot access offset 'error' on mixed\\.$#" + message: '#^Cannot access offset ''error'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - - message: "#^Cannot access offset 'results' on mixed\\.$#" + message: '#^Cannot access offset ''results'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - - message: "#^Cannot access offset 'status' on mixed\\.$#" + message: '#^Cannot access offset ''status'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - - message: "#^Cannot access offset 'user' on mixed\\.$#" + message: '#^Cannot access offset ''user'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - - message: "#^Cannot access offset 0 on mixed\\.$#" + message: '#^Cannot access offset 0 on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Transport\\\\CommandTransportConfig\\:\\:\\$configs type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Command\\Transport\\CommandTransportConfig\:\:\$configs type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Transport/CommandTransportConfig.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Transport\\\\CommandTransportConfig\\:\\:\\$queryColumns type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Command\\Transport\\CommandTransportConfig\:\:\$queryColumns type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Transport/CommandTransportConfig.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Command\\\\Transport\\\\CommandTransportInterface\\:\\:send\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Command\\Transport\\CommandTransportInterface\:\:send\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Command/Transport/CommandTransportInterface.php - - message: "#^Cannot access offset 'in_downtime' on mixed\\.$#" + message: '#^Cannot access offset ''in_downtime'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Cannot access offset 'is_acknowledged' on mixed\\.$#" + message: '#^Cannot access offset ''is_acknowledged'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Cannot access offset 'state_type' on mixed\\.$#" + message: '#^Cannot access offset ''state_type'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\IcingaRedis\\:\\:fetchHostState\\(\\) has parameter \\$columns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchHostState\(\) has parameter \$columns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\IcingaRedis\\:\\:fetchHostState\\(\\) has parameter \\$ids with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchHostState\(\) has parameter \$ids with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\IcingaRedis\\:\\:fetchServiceState\\(\\) has parameter \\$columns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchServiceState\(\) has parameter \$columns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\IcingaRedis\\:\\:fetchServiceState\\(\\) has parameter \\$ids with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchServiceState\(\) has parameter \$ids with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\IcingaRedis\\:\\:fetchState\\(\\) has parameter \\$columns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchState\(\) has parameter \$columns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\IcingaRedis\\:\\:fetchState\\(\\) has parameter \\$ids with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchState\(\) has parameter \$ids with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\IcingaRedis\\:\\:getTlsParams\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:getTlsParams\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:hostgroup\\(\\) has parameter \\$hostgroup with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\Links\:\:hostgroup\(\) has parameter \$hostgroup with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Common/Links.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:servicegroup\\(\\) has parameter \\$servicegroup with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\Links\:\:servicegroup\(\) has parameter \$servicegroup with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Common/Links.php - - message: "#^Call to an undefined method Predis\\\\Client\\:\\:hGet\\(\\)\\.$#" + message: '#^Call to an undefined method Predis\\Client\:\:hGet\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Cannot call method columns\\(\\) on mixed\\.$#" + message: '#^Cannot call method columns\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Cannot call method setTimezone\\(\\) on DateTime\\|false\\.$#" + message: '#^Cannot call method setTimezone\(\) on DateTime\|false\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:__construct\\(\\) has parameter \\$apiResult with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:__construct\(\) has parameter \$apiResult with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createAttributes\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createAttributes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createCustomVariables\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createCustomVariables\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createLastCheckResult\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createLastCheckResult\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createLastCheckResult\\(\\) should return array\\|null but empty return statement found\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createLastCheckResult\(\) should return array\|null but empty return statement found\.$#' + identifier: return.empty count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createNameValueTable\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createNameValueTable\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createNameValueTable\\(\\) has parameter \\$formatters with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createNameValueTable\(\) has parameter \$formatters with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createRedisInfo\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createRedisInfo\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createSourceLocation\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createSourceLocation\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:createSourceLocation\\(\\) should return array\\|null but empty return statement found\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createSourceLocation\(\) should return array\|null but empty return statement found\.$#' + identifier: return.empty count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:formatMilliseconds\\(\\) has parameter \\$ms with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:formatMilliseconds\(\) has parameter \$ms with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:formatSeconds\\(\\) has parameter \\$s with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:formatSeconds\(\) has parameter \$s with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:formatState\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:formatState\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Parameter \\#1 \\$content of static method ipl\\\\Html\\\\Table\\:\\:td\\(\\) expects array\\|ipl\\\\Html\\\\Html\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#1 \$content of static method ipl\\Html\\Table\:\:td\(\) expects array\|ipl\\Html\\Html\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:\\$attrs type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:\$attrs type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Common\\\\ObjectInspectionDetail\\:\\:\\$joins type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:\$joins type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - - message: "#^Parameter \\#1 \\$rule of method ipl\\\\Stdlib\\\\Filter\\\\Chain\\:\\:add\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#1 \$rule of method ipl\\Stdlib\\Filter\\Chain\:\:add\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Common/StateBadges.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Cannot access property \$customvar on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$customvar on mixed\\.$#" - count: 1 - path: library/Icingadb/Compat/CompatHost.php - - - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$hostgroup on mixed\\.$#" + message: '#^Cannot access property \$hostgroup on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 5 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_critical_handled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_critical_handled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_critical_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_critical_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_ok on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_ok on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_pending on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_pending on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_total on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_total on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_unknown_handled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_unknown_handled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_unknown_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_unknown_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_warning_handled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_warning_handled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot access property \\$services_warning_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_warning_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot call method columns\\(\\) on mixed\\.$#" + message: '#^Cannot call method columns\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot call method execute\\(\\) on mixed\\.$#" + message: '#^Cannot call method execute\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot call method filter\\(\\) on mixed\\.$#" + message: '#^Cannot call method filter\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Cannot clone mixed\\.$#" + message: '#^Cannot clone mixed\.$#' + identifier: clone.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:__get\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:__get\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:__get\\(\\) has parameter \\$name with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:__get\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:__isset\\(\\) has parameter \\$name with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:__isset\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:fromModel\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:fromModel\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:getName\\(\\) should return string but returns mixed\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:getName\(\) should return string but returns mixed\.$#' + identifier: return.type count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Parameter \\#1 \\$flattenedVars of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CustomvarFlat\\:\\:unFlattenVars\\(\\) expects Traversable, mixed given\\.$#" + message: '#^Parameter \#1 \$flattenedVars of method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) expects Traversable, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Compat/CompatHost.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:\\$legacyColumns has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:\$legacyColumns has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:\\$rawCustomvars type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:\$rawCustomvars type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost\\:\\:\\$rawHostCustomvars type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:\$rawHostCustomvars type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Property Icinga\\\\Module\\\\Monitoring\\\\Object\\\\MonitoredObject\\:\\:\\$eventhistory \\(Icinga\\\\Module\\\\Monitoring\\\\DataView\\\\EventHistory\\) does not accept array\\.$#" + message: '#^Property Icinga\\Module\\Monitoring\\Object\\MonitoredObject\:\:\$eventhistory \(Icinga\\Module\\Monitoring\\DataView\\EventHistory\) does not accept array\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Property Icinga\\\\Module\\\\Monitoring\\\\Object\\\\MonitoredObject\\:\\:\\$hostVariables \\(array\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Monitoring\\Object\\MonitoredObject\:\:\$hostVariables \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Property Icinga\\\\Module\\\\Monitoring\\\\Object\\\\MonitoredObject\\:\\:\\$serviceVariables \\(array\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Monitoring\\Object\\MonitoredObject\:\:\$serviceVariables \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Unreachable statement \\- code above always terminates\\.$#" + message: '#^Unreachable statement \- code above always terminates\.$#' + identifier: deadCode.unreachable count: 2 path: library/Icingadb/Compat/CompatHost.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Cannot access property \$customvar on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$customvar on mixed\\.$#" - count: 1 - path: library/Icingadb/Compat/CompatService.php - - - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$hostgroup on mixed\\.$#" + message: '#^Cannot access property \$hostgroup on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 5 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_critical_handled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_critical_handled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_critical_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_critical_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_ok on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_ok on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_pending on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_pending on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_total on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_total on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_unknown_handled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_unknown_handled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_unknown_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_unknown_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_warning_handled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_warning_handled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot access property \\$services_warning_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_warning_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot call method columns\\(\\) on mixed\\.$#" + message: '#^Cannot call method columns\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot call method execute\\(\\) on mixed\\.$#" + message: '#^Cannot call method execute\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot call method filter\\(\\) on mixed\\.$#" + message: '#^Cannot call method filter\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Compat/CompatService.php - - message: "#^Cannot clone mixed\\.$#" + message: '#^Cannot clone mixed\.$#' + identifier: clone.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:__get\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:__get\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:__get\\(\\) has parameter \\$name with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:__get\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:__isset\\(\\) has parameter \\$name with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:__isset\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:fetchHost\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:fetchHost\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:fromModel\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:fromModel\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:getHost\\(\\) should return Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost but returns Icinga\\\\Module\\\\Monitoring\\\\Object\\\\Host\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:getHost\(\) should return Icinga\\Module\\Icingadb\\Compat\\CompatHost but returns Icinga\\Module\\Monitoring\\Object\\Host\.$#' + identifier: return.type count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:getName\\(\\) should return string but returns mixed\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:getName\(\) should return string but returns mixed\.$#' + identifier: return.type count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#1 \\$flattenedVars of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CustomvarFlat\\:\\:unFlattenVars\\(\\) expects Traversable, mixed given\\.$#" + message: '#^Parameter \#1 \$flattenedVars of method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) expects Traversable, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#1 \\$object of class Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatHost constructor expects ipl\\\\Orm\\\\Model, mixed given\\.$#" + message: '#^Parameter \#1 \$object of class Icinga\\Module\\Icingadb\\Compat\\CompatHost constructor expects ipl\\Orm\\Model, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Compat/CompatService.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Compat/CompatService.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:\\$legacyColumns has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:\$legacyColumns has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:\\$rawCustomvars type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:\$rawCustomvars type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\CompatService\\:\\:\\$rawHostCustomvars type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:\$rawHostCustomvars type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Property Icinga\\\\Module\\\\Monitoring\\\\Object\\\\MonitoredObject\\:\\:\\$eventhistory \\(Icinga\\\\Module\\\\Monitoring\\\\DataView\\\\EventHistory\\) does not accept array\\.$#" + message: '#^Property Icinga\\Module\\Monitoring\\Object\\MonitoredObject\:\:\$eventhistory \(Icinga\\Module\\Monitoring\\DataView\\EventHistory\) does not accept array\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Property Icinga\\\\Module\\\\Monitoring\\\\Object\\\\MonitoredObject\\:\\:\\$hostVariables \\(array\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Monitoring\\Object\\MonitoredObject\:\:\$hostVariables \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Property Icinga\\\\Module\\\\Monitoring\\\\Object\\\\MonitoredObject\\:\\:\\$serviceVariables \\(array\\) in isset\\(\\) is not nullable\\.$#" + message: '#^Property Icinga\\Module\\Monitoring\\Object\\MonitoredObject\:\:\$serviceVariables \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property count: 1 path: library/Icingadb/Compat/CompatService.php - - message: "#^Unreachable statement \\- code above always terminates\\.$#" + message: '#^Unreachable statement \- code above always terminates\.$#' + identifier: deadCode.unreachable count: 2 path: library/Icingadb/Compat/CompatService.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:commentsColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:commentsColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:commonColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:commonColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:commonParameters\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:commonParameters\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:contactgroupsColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:contactgroupsColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:contactsColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:contactsColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:downtimesColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:downtimesColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:historyColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:historyColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:hostColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:hostgroupsColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostgroupsColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:hostsColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostsColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:hostsParameters\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostsParameters\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:multipleHostsColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:multipleHostsColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:multipleServicesColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:multipleServicesColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:notificationHistoryColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:notificationHistoryColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:rewrite\\(\\) has parameter \\$legacyColumns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:rewrite\(\) has parameter \$legacyColumns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:serviceColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:serviceColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:servicegridColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicegridColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:servicegroupsColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicegroupsColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:servicesColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicesColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:servicesParameters\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicesParameters\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:transformParams\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:transformParams\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Compat\\\\UrlMigrator\\:\\:transformWildcardFilter\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:transformWildcardFilter\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Parameter \\#1 \\$column of method ipl\\\\Stdlib\\\\Filter\\\\Condition\\:\\:setColumn\\(\\) expects string, int\\|string\\|null given\\.$#" + message: '#^Parameter \#1 \$column of method ipl\\Stdlib\\Filter\\Condition\:\:setColumn\(\) expects string, int\|string\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Compat/UrlMigrator.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\CsvResultSet\\:\\:extractKeysAndValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:extractKeysAndValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/CsvResultSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\CsvResultSet\\:\\:formatValue\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:formatValue\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Data/CsvResultSet.php - - message: "#^Parameter \\#1 \\$key of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\CsvResultSet\\:\\:formatValue\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:formatValue\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/CsvResultSet.php - - message: "#^Parameter \\#1 \\$model of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\CsvResultSet\\:\\:extractKeysAndValues\\(\\) expects ipl\\\\Orm\\\\Model, mixed given\\.$#" + message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:extractKeysAndValues\(\) expects ipl\\Orm\\Model, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/CsvResultSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\JsonResultSet\\:\\:createObject\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:createObject\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/JsonResultSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\JsonResultSet\\:\\:formatValue\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:formatValue\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Data/JsonResultSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\JsonResultSet\\:\\:formatValue\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:formatValue\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Data/JsonResultSet.php - - message: "#^Parameter \\#1 \\$key of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\JsonResultSet\\:\\:formatValue\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:formatValue\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/JsonResultSet.php - - message: "#^Parameter \\#1 \\$model of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\JsonResultSet\\:\\:createObject\\(\\) expects ipl\\\\Orm\\\\Model, mixed given\\.$#" + message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:createObject\(\) expects ipl\\Orm\\Model, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/JsonResultSet.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type array\|null supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\PivotTable\\:\\:__construct\\(\\) has parameter \\$gridcols with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:__construct\(\) has parameter \$gridcols with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\PivotTable\\:\\:toArray\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Parameter \\#1 \\$haystack of function strpos expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$haystack of function strpos expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Data\\\\PivotTable\\:\\:\\$gridcols type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$gridcols type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Data\\\\PivotTable\\:\\:\\$order type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$order type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Data\\\\PivotTable\\:\\:\\$xAxisFilter \\(ipl\\\\Stdlib\\\\Filter\\\\Rule\\) does not accept ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$xAxisFilter \(ipl\\Stdlib\\Filter\\Rule\) does not accept ipl\\Stdlib\\Filter\\Rule\|null\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Data\\\\PivotTable\\:\\:\\$yAxisFilter \\(ipl\\\\Stdlib\\\\Filter\\\\Rule\\) does not accept ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$yAxisFilter \(ipl\\Stdlib\\Filter\\Rule\) does not accept ipl\\Stdlib\\Filter\\Rule\|null\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Data/PivotTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileCsvResults\\:\\:extractKeysAndValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:extractKeysAndValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileCsvResults\\:\\:formatValue\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:formatValue\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - - message: "#^Parameter \\#1 \\$key of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileCsvResults\\:\\:formatValue\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:formatValue\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - - message: "#^Parameter \\#1 \\$model of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileCsvResults\\:\\:extractKeysAndValues\\(\\) expects ipl\\\\Orm\\\\Model, mixed given\\.$#" + message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:extractKeysAndValues\(\) expects ipl\\Orm\\Model, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileJsonResults\\:\\:createObject\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:createObject\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileJsonResults\\:\\:formatValue\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:formatValue\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileJsonResults\\:\\:formatValue\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:formatValue\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - - message: "#^Parameter \\#1 \\$key of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileJsonResults\\:\\:formatValue\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:formatValue\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - - message: "#^Parameter \\#1 \\$model of method Icinga\\\\Module\\\\Icingadb\\\\Data\\\\VolatileJsonResults\\:\\:createObject\\(\\) expects ipl\\\\Orm\\\\Model, mixed given\\.$#" + message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:createObject\(\) expects ipl\\Orm\\Model, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\ActionsHook\\\\ObjectActionsHook\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ActionsHook\\ObjectActionsHook\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Hook/ActionsHook/ObjectActionsHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\CustomVarRendererHook\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\CustomVarRendererHook\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Hook/CustomVarRendererHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\ExtensionHook\\\\BaseExtensionHook\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\ExtensionHook\\\\BaseExtensionHook\\:\\:injectExtensions\\(\\) has parameter \\$coreElements with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:injectExtensions\(\) has parameter \$coreElements with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\ExtensionHook\\\\BaseExtensionHook\\:\\:injectExtensions\\(\\) has parameter \\$extensions with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:injectExtensions\(\) has parameter \$extensions with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\ExtensionHook\\\\BaseExtensionHook\\:\\:injectExtensions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:injectExtensions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\ExtensionHook\\\\ObjectDetailExtensionHook\\:\\:loadExtensions\\(\\) should return array\\ but returns array\\\\.$#" - count: 1 - path: library/Icingadb/Hook/ExtensionHook/ObjectDetailExtensionHook.php - - - - message: "#^PHPDoc tag @var has invalid value \\(\\$hook EventDetailExtensionHook\\)\\: Unexpected token \"\\$hook\", expected type at offset 212$#" - count: 1 - path: library/Icingadb/Hook/ExtensionHook/ObjectDetailExtensionHook.php - - - - message: "#^PHPDoc tag @var has invalid value \\(\\$hook HostDetailExtensionHook\\)\\: Unexpected token \"\\$hook\", expected type at offset 20$#" - count: 1 - path: library/Icingadb/Hook/ExtensionHook/ObjectDetailExtensionHook.php - - - - message: "#^PHPDoc tag @var has invalid value \\(\\$hook ServiceDetailExtensionHook\\)\\: Unexpected token \"\\$hook\", expected type at offset 66$#" - count: 1 - path: library/Icingadb/Hook/ExtensionHook/ObjectDetailExtensionHook.php - - - - message: "#^PHPDoc tag @var has invalid value \\(\\$hook UserDetailExtensionHook\\)\\: Unexpected token \"\\$hook\", expected type at offset 115$#" - count: 1 - path: library/Icingadb/Hook/ExtensionHook/ObjectDetailExtensionHook.php - - - - message: "#^PHPDoc tag @var has invalid value \\(\\$hook UsergroupDetailExtensionHook\\)\\: Unexpected token \"\\$hook\", expected type at offset 161$#" - count: 1 - path: library/Icingadb/Hook/ExtensionHook/ObjectDetailExtensionHook.php - - - - message: "#^Cannot cast ipl\\\\Html\\\\ValidHtml to string\\.$#" + message: '#^Cannot cast ipl\\Html\\ValidHtml to string\.$#' + identifier: cast.string count: 1 path: library/Icingadb/Hook/ExtensionHook/ObjectsDetailExtensionHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\IcingadbSupportHook\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\IcingadbSupportHook\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Hook/IcingadbSupportHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\PluginOutputHook\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\PluginOutputHook\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Hook/PluginOutputHook.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Hook/TabHook.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Hook/TabHook.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Hook/TabHook.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" - count: 1 - path: library/Icingadb/Hook/TabHook.php - - - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Hook/TabHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\TabHook\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Hook/TabHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\TabHook\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Hook/TabHook.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Hook/TabHook.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\TabHook\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Hook/TabHook.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\TabHook\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Hook/TabHook.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Hook/TabHook.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Hook/TabHook.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Hook/TabHook.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\AcknowledgementHistory\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/AcknowledgementHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\AcknowledgementHistory\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/AcknowledgementHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\AcknowledgementHistory\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/AcknowledgementHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ActionUrl\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ActionUrl\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ActionUrl.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ActionUrl\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ActionUrl\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ActionUrl.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ActionUrl\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ActionUrl\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ActionUrl.php - - message: "#^Parameter \\#1 \\$haystack of function strpos expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$haystack of function strpos expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ActionAndNoteUrl.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: library/Icingadb/Model/Behavior/Bitmask.php - - message: "#^Cannot access offset mixed on mixed\\.$#" + message: '#^Cannot access offset mixed on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Model/Behavior/Bitmask.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\Bitmask\\:\\:rewriteCondition\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null but empty return statement found\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\Bitmask\:\:rewriteCondition\(\) should return ipl\\Stdlib\\Filter\\Rule\|null but empty return statement found\.$#' + identifier: return.empty count: 2 path: library/Icingadb/Model/Behavior/Bitmask.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: library/Icingadb/Model/Behavior/BoolCast.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\FlattenedObjectVars\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\FlattenedObjectVars\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\FlattenedObjectVars\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Model\\Behavior\\FlattenedObjectVars\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\FlattenedObjectVars\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Model\\Behavior\\FlattenedObjectVars\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#1 \\$string of function substr expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$string of function substr expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#2 \\$targetPath of method ipl\\\\Orm\\\\Query\\:\\:createSubQuery\\(\\) expects string, string\\|null given\\.$#" + message: '#^Parameter \#2 \$targetPath of method ipl\\Orm\\Query\:\:createSubQuery\(\) expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#2 \\$value of static method ipl\\\\Stdlib\\\\Filter\\:\\:equal\\(\\) expects array\\|bool\\|float\\|int\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects array\|bool\|float\|int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\|string, string\\|null given\\.$#" + message: '#^Part \$column \(mixed\) of encapsed string cannot be cast to string\.$#' + identifier: encapsedStringPart.nonString count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - message: "#^Part \\$column \\(mixed\\) of encapsed string cannot be cast to string\\.$#" - count: 1 - path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\ReRoute\\:\\:__construct\\(\\) has parameter \\$routes with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:__construct\(\) has parameter \$routes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\ReRoute\\:\\:getRoutes\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:getRoutes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\ReRoute\\:\\:rewriteCondition\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null but empty return statement found\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:rewriteCondition\(\) should return ipl\\Stdlib\\Filter\\Rule\|null but empty return statement found\.$#' + identifier: return.empty count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Parameter \\#1 \\$haystack of function strpos expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$haystack of function strpos expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Parameter \\#1 \\$path of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\ReRoute\\:\\:rewritePath\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$path of method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:rewritePath\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Parameter \\#1 \\$string of function substr expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$string of function substr expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Parameter \\#1 \\$string of function substr expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$string of function substr expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Behavior\\\\ReRoute\\:\\:\\$routes has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:\$routes has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Checkcommand\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Checkcommand\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Checkcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Checkcommand\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Checkcommand\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Checkcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Checkcommand\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Checkcommand\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Checkcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandArgument\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandArgument\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandArgument\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandArgument\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandArgument\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandArgument\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CheckcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandEnvvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandEnvvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandEnvvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandEnvvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CheckcommandEnvvar\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandEnvvar\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CheckcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Comment\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Comment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Comment\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Comment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Comment\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Comment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Comment\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Comment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Comment\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Comment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CommentHistory\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CommentHistory\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CommentHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CommentHistory\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CommentHistory\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CommentHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CommentHistory\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CommentHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CommentHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Customvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Customvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Customvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Customvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Customvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Customvar.php - - message: "#^Access to an undefined property object\\:\\:\\$flatname\\.$#" + message: '#^Access to an undefined property object\:\:\$flatname\.$#' + identifier: property.notFound count: 1 path: library/Icingadb/Model/CustomvarFlat.php - - message: "#^Access to an undefined property object\\:\\:\\$value\\.$#" + message: '#^Access to an undefined property object\:\:\$value\.$#' + identifier: property.notFound count: 3 path: library/Icingadb/Model/CustomvarFlat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CustomvarFlat\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CustomvarFlat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CustomvarFlat\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/CustomvarFlat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CustomvarFlat\\:\\:unFlattenVars\\(\\) has parameter \\$flattenedVars with no value type specified in iterable type Traversable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) has parameter \$flattenedVars with no value type specified in iterable type Traversable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CustomvarFlat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CustomvarFlat\\:\\:unFlattenVars\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CustomvarFlat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Downtime\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Downtime.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Downtime\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Downtime.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Downtime\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Downtime.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Downtime\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Downtime.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Downtime\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Downtime.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\DowntimeHistory\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\DowntimeHistory\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/DowntimeHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\DowntimeHistory\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\DowntimeHistory\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/DowntimeHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\DowntimeHistory\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\DowntimeHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/DowntimeHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Endpoint\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Endpoint\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Endpoint.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Endpoint\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Endpoint\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Endpoint.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Endpoint\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Endpoint\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Endpoint.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Environment\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Environment\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Environment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Environment\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Environment\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Environment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Environment\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Environment\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Environment.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Eventcommand\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Eventcommand\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Eventcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Eventcommand\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Eventcommand\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Eventcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Eventcommand\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Eventcommand\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Eventcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandArgument\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandArgument\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandArgument\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandArgument\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandArgument\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandArgument\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/EventcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandEnvvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandEnvvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandEnvvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandEnvvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\EventcommandEnvvar\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandEnvvar\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/EventcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\FlappingHistory\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\FlappingHistory\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/FlappingHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\FlappingHistory\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\FlappingHistory\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/FlappingHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\FlappingHistory\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\FlappingHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/FlappingHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\History\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/History.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\History\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/History.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\History\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/History.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\History\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/History.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 2 path: library/Icingadb/Model/Host.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Cannot access property \\$flatname on mixed\\.$#" + message: '#^Cannot access property \$flatname on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Cannot access property \\$flatvalue on mixed\\.$#" + message: '#^Cannot access property \$flatvalue on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Cannot access property \\$value on mixed\\.$#" + message: '#^Cannot access property \$value on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:createDefaults\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createDefaults\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:createDefaults\\(\\) has parameter \\$defaults with no value type specified in iterable type ipl\\\\Orm\\\\Defaults\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createDefaults\(\) has parameter \$defaults with no value type specified in iterable type ipl\\Orm\\Defaults\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Host.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Model\\Host\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Host.php - - message: "#^Parameter \\#1 \\$query of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:applyRestrictions\\(\\) expects ipl\\\\Orm\\\\Query, mixed given\\.$#" + message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Model\\Host\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Host.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Model\\Host\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Model/Host.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Model/Host.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Model/Host.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Host.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HostCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HostCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostState\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostState\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HostState.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostState\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostState\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/HostState.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroup\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroup\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroup\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroup\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroup\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostgroupCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostgroupCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostgroupMember\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupMember\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupMember.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HostgroupMember\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupMember\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupMember.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroupsummary\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroupsummary\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroupsummary\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroupsummary\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroupsummary\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Hostgroupsummary\\:\\:getUnions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getUnions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HoststateSummary\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HoststateSummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/HoststateSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HoststateSummary\\:\\:getDefaultSort\\(\\) should return array\\|string but returns null\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HoststateSummary\:\:getDefaultSort\(\) should return array\|string but returns null\.$#' + identifier: return.type count: 1 path: library/Icingadb/Model/HoststateSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\HoststateSummary\\:\\:getSummaryColumns\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\HoststateSummary\:\:getSummaryColumns\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/HoststateSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\IconImage\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\IconImage\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/IconImage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\IconImage\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\IconImage\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/IconImage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\IconImage\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\IconImage\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/IconImage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Instance\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Instance\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Instance.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Instance\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Instance\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Instance.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Instance\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Instance\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Instance.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotesUrl\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotesUrl\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotesUrl.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotesUrl\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotesUrl\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotesUrl.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotesUrl\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotesUrl\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotesUrl.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Notification\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notification\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Notification.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Notification\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notification\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Notification.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Notification\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notification\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Notification.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationHistory\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationHistory\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationHistory\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationHistory\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationHistory\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationUser\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUser\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUser.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationUser\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUser\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUser.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationUsergroup\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUsergroup\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUsergroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationUsergroup\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUsergroup\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUsergroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Notificationcommand\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notificationcommand\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Notificationcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Notificationcommand\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notificationcommand\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Notificationcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Notificationcommand\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notificationcommand\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Notificationcommand.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandArgument\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandArgument\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandArgument\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandArgument\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandArgument\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandArgument\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationcommandArgument.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandEnvvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandEnvvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandEnvvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandEnvvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandEnvvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationcommandEnvvar\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandEnvvar\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationcommandEnvvar.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 2 path: library/Icingadb/Model/Service.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Cannot access property \\$flatname on mixed\\.$#" + message: '#^Cannot access property \$flatname on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Cannot access property \\$flatvalue on mixed\\.$#" + message: '#^Cannot access property \$flatvalue on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Cannot access property \\$value on mixed\\.$#" + message: '#^Cannot access property \$value on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:createDefaults\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createDefaults\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:createDefaults\\(\\) has parameter \\$defaults with no value type specified in iterable type ipl\\\\Orm\\\\Defaults\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createDefaults\(\) has parameter \$defaults with no value type specified in iterable type ipl\\Orm\\Defaults\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Model/Service.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Model\\Service\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Service.php - - message: "#^Parameter \\#1 \\$query of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:applyRestrictions\\(\\) expects ipl\\\\Orm\\\\Query, mixed given\\.$#" + message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Model\\Service\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Service.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Model\\Service\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Model/Service.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Model/Service.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Model/Service.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Model/Service.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServiceCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServiceCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServiceCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServiceCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServiceState\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceState\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServiceState.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServiceState\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceState\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServiceState.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Servicegroup\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Servicegroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Servicegroup\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Servicegroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Servicegroup\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Servicegroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Servicegroup\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Servicegroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Servicegroup\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Servicegroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupMember\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupMember\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupMember.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupMember\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupMember\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupMember.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupSummary\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupSummary\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupSummary\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupSummary\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupSummary\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicegroupSummary\\:\\:getUnions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getUnions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicestateSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary\\:\\:getDefaultSort\\(\\) should return array\\|string but returns null\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getDefaultSort\(\) should return array\|string but returns null\.$#' + identifier: return.type count: 1 path: library/Icingadb/Model/ServicestateSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicestateSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\ServicestateSummary\\:\\:getSummaryColumns\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getSummaryColumns\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicestateSummary.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\State\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\State\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/State.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\StateHistory\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\StateHistory\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/StateHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\StateHistory\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\StateHistory\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/StateHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\StateHistory\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\StateHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/StateHistory.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Timeperiod\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Timeperiod\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Timeperiod.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Timeperiod\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Timeperiod\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Timeperiod.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Timeperiod\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Timeperiod\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Timeperiod.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodOverrideExclude\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideExclude\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideExclude.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodOverrideExclude\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideExclude\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideExclude.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodOverrideInclude\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideInclude\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideInclude.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodOverrideInclude\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideInclude\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideInclude.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodRange\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodRange\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodRange.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodRange\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodRange\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodRange.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\TimeperiodRange\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodRange\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/TimeperiodRange.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\User\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/User.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\User\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/User.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\User\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/User.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\User\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/User.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\User\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/User.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\UserCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\UserCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/UserCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\UserCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\UserCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/UserCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Usergroup\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Usergroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Usergroup\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Usergroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Usergroup\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Usergroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Usergroup\\:\\:getDefaultSort\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Usergroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Usergroup\\:\\:getSearchColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Usergroup.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\UsergroupCustomvar\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\UsergroupCustomvar\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupCustomvar\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupCustomvar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\UsergroupMember\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupMember\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupMember.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\UsergroupMember\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupMember\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupMember.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Vars\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Vars\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Vars.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Zone\\:\\:createBehaviors\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Zone\:\:createBehaviors\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Zone.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Zone\\:\\:createRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Zone\:\:createRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Model/Zone.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Zone\\:\\:getColumnDefinitions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Model\\Zone\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Zone.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/ApplicationState.php - - - - message: "#^Cannot call method getTimestamp\\(\\) on mixed\\.$#" + message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' + identifier: method.nonObject count: 3 path: library/Icingadb/ProvidedHook/ApplicationState.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\ApplicationState\\:\\:collectMessages\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\ApplicationState\:\:collectMessages\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/ProvidedHook/ApplicationState.php - - message: "#^Parameter \\#2 \\$timestamp of method Icinga\\\\Application\\\\Hook\\\\ApplicationStateHook\\:\\:addError\\(\\) expects int, mixed given\\.$#" + message: '#^Parameter \#2 \$timestamp of method Icinga\\Application\\Hook\\ApplicationStateHook\:\:addError\(\) expects int, mixed given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/ProvidedHook/ApplicationState.php - - message: "#^Parameter \\#1 \\$rule of static method ipl\\\\Web\\\\Filter\\\\QueryString\\:\\:render\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#1 \$rule of static method ipl\\Web\\Filter\\QueryString\:\:render\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/CreateHostsSlaReport.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/CreateServiceSlaReport.php - - message: "#^Parameter \\#1 \\$rule of static method ipl\\\\Web\\\\Filter\\\\QueryString\\:\\:render\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#1 \$rule of static method ipl\\Web\\Filter\\QueryString\:\:render\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/CreateServicesSlaReport.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/IcingaHealth.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\IcingaHealth\:\:getInstance\(\) should return Icinga\\Module\\Icingadb\\Model\\Instance\|null but returns ipl\\Orm\\Model\|null\.$#' + identifier: return.type count: 1 path: library/Icingadb/ProvidedHook/IcingaHealth.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\IcingaHealth\\:\\:getInstance\\(\\) should return Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Instance\\|null but returns ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\ProvidedHook\\IcingaHealth\:\:\$instance \(Icinga\\Module\\Icingadb\\Model\\Instance\) does not accept ipl\\Orm\\Model\|null\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/ProvidedHook/IcingaHealth.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\IcingaHealth\\:\\:\\$instance \\(Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Instance\\) does not accept ipl\\\\Orm\\\\Model\\|null\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/IcingaHealth.php - - - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/RedisHealth.php - - - - message: "#^Cannot call method getTimestamp\\(\\) on mixed\\.$#" + message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' + identifier: method.nonObject count: 3 path: library/Icingadb/ProvidedHook/RedisHealth.php - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/HostSlaReport.php - - message: "#^Cannot access property \\$sla on mixed\\.$#" + message: '#^Cannot access property \$sla on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/HostSlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\HostSlaReport\\:\\:fetchSla\\(\\) return type has no value type specified in iterable type iterable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\HostSlaReport\:\:fetchSla\(\) return type has no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/HostSlaReport.php - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - - message: "#^Cannot access property \\$host on mixed\\.$#" + message: '#^Cannot access property \$host on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - - message: "#^Cannot access property \\$sla on mixed\\.$#" + message: '#^Cannot access property \$sla on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\ServiceSlaReport\\:\\:fetchSla\\(\\) return type has no value type specified in iterable type iterable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\ServiceSlaReport\:\:fetchSla\(\) return type has no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - - - message: "#^Cannot call method count\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method count\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method format\\(\\) on mixed\\.$#" + message: '#^Cannot call method format\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method getAverages\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getAverages\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method getDimensions\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getDimensions\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method getRows\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getRows\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method getValues\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getValues\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:fetchReportData\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:fetchReportData\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:fetchReportData\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:fetchReportData\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:fetchSla\\(\\) return type has no value type specified in iterable type iterable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:fetchSla\(\) return type has no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:getData\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:getData\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:getHtml\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:getHtml\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:initConfigForm\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:initConfigForm\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Offset 'filter' does not exist on array\\|null\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Parameter \\#1 \\$start of class Icinga\\\\Module\\\\Reporting\\\\Timerange constructor expects DateTime, mixed given\\.$#" + message: '#^Parameter \#1 \$start of class Icinga\\Module\\Reporting\\Timerange constructor expects DateTime, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" + message: '#^Parameter \#2 \$end of class Icinga\\Module\\Reporting\\Timerange constructor expects DateTime, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Parameter \\#2 \\$end of class Icinga\\\\Module\\\\Reporting\\\\Timerange constructor expects DateTime, mixed given\\.$#" + message: '#^Parameter \#2 \$interval of method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:yieldTimerange\(\) expects DateInterval, DateInterval\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Parameter \\#2 \\$interval of method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\SlaReport\\:\\:yieldTimerange\\(\\) expects DateInterval, DateInterval\\|null given\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - - message: "#^Cannot call method count\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method count\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - - message: "#^Cannot call method getAverages\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getAverages\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - - message: "#^Cannot call method getDimensions\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getDimensions\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\TotalHostSlaReport\\:\\:getHtml\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\TotalHostSlaReport\:\:getHtml\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - - message: "#^Cannot call method count\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method count\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - - message: "#^Cannot call method getAverages\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getAverages\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - - message: "#^Cannot call method getDimensions\\(\\) on Icinga\\\\Module\\\\Reporting\\\\ReportData\\|null\\.$#" + message: '#^Cannot call method getDimensions\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\Reporting\\\\TotalServiceSlaReport\\:\\:getHtml\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\TotalServiceSlaReport\:\:getHtml\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/X509/Sni.php - - - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\X509\\\\Sni\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\X509\\Sni\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\X509\\\\Sni\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\ProvidedHook\\X509\\Sni\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\ProvidedHook\\\\X509\\\\Sni\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\ProvidedHook\\X509\\Sni\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/ProvidedHook/X509/Sni.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/X509/Sni.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" - count: 2 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - - message: "#^Cannot access offset mixed on mixed\\.$#" - count: 2 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Cannot access property \\$host on mixed\\.$#" - count: 2 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Cannot access property \\$id on mixed\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - - message: "#^Cannot access property \\$state on mixed\\.$#" + message: '#^Cannot access offset mixed on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Cannot access property \$host on mixed\.$#' + identifier: property.nonObject + count: 2 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Cannot access property \$id on mixed\.$#' + identifier: property.nonObject + count: 1 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Cannot access property \$state on mixed\.$#' + identifier: property.nonObject + count: 2 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject + count: 4 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Cannot call method setProperties\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Method Icinga\\Module\\Icingadb\\Redis\\VolatileStateResults\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type + count: 1 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type + count: 1 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Redis\\VolatileStateResults\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type + count: 2 + path: library/Icingadb/Redis/VolatileStateResults.php + + - + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Redis\\VolatileStateResults\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Redis/VolatileStateResults.php - - message: "#^Cannot call method getColumns\\(\\) on mixed\\.$#" - count: 1 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" - count: 1 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Redis/VolatileStateResults.php - - message: "#^Cannot call method retrieveProperty\\(\\) on ipl\\\\Orm\\\\Behaviors\\|null\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Redis/VolatileStateResults.php - - message: "#^Cannot call method setProperties\\(\\) on mixed\\.$#" - count: 1 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Redis\\\\VolatileStateResults\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" - count: 1 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" - count: 1 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Redis\\\\VolatileStateResults\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" - count: 2 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Redis\\\\VolatileStateResults\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" - count: 3 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" - count: 4 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" - count: 2 - path: library/Icingadb/Redis/VolatileStateResults.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportPage\\:\\:addSkipValidationCheckbox\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:addSkipValidationCheckbox\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportPage\\:\\:createElements\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:createElements\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportPage\\:\\:createElements\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportPage\\:\\:isValid\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportPage\\:\\:isValidPartial\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportStep\\:\\:__construct\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportStep\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportStep.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportStep\\:\\:getReport\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportStep\:\:getReport\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportStep.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\ApiTransportStep\\:\\:\\$data type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Setup\\ApiTransportStep\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportStep.php - - message: "#^Cannot call method setMultiOptions\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method setMultiOptions\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Setup/DbResourcePage.php - - message: "#^Cannot call method setValue\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method setValue\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 2 path: library/Icingadb/Setup/DbResourcePage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourcePage\\:\\:addSkipValidationCheckbox\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:addSkipValidationCheckbox\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/DbResourcePage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourcePage\\:\\:createElements\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:createElements\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/DbResourcePage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourcePage\\:\\:createElements\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourcePage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourcePage\\:\\:isValid\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourcePage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourcePage\\:\\:isValidPartial\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourcePage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourceStep\\:\\:__construct\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourceStep\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourceStep.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourceStep\\:\\:getReport\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourceStep\:\:getReport\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourceStep.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\DbResourceStep\\:\\:\\$data type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Setup\\DbResourceStep\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourceStep.php - - message: "#^Call to an undefined method Icinga\\\\Web\\\\Form\\:\\:setSubjectTitle\\(\\)\\.$#" + message: '#^Call to an undefined method Icinga\\Web\\Form\:\:setSubjectTitle\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - - message: "#^Call to an undefined method Icinga\\\\Web\\\\Form\\:\\:setSummary\\(\\)\\.$#" + message: '#^Call to an undefined method Icinga\\Web\\Form\:\:setSummary\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\IcingaDbWizard\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\IcingaDbWizard\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\IcingaDbWizard\\:\\:setupPage\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\IcingaDbWizard\:\:setupPage\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - - message: "#^Call to an undefined method Zend_Form_Element\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method Zend_Form_Element\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Setup/RedisPage.php - - message: "#^Cannot call method setIgnore\\(\\) on Zend_Form_Element\\|null\\.$#" + message: '#^Cannot call method setIgnore\(\) on Zend_Form_Element\|null\.$#' + identifier: method.nonObject count: 3 path: library/Icingadb/Setup/RedisPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\RedisPage\\:\\:createElements\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:createElements\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/RedisPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\RedisPage\\:\\:createElements\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\RedisPage\\:\\:isValid\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\RedisPage\\:\\:isValidPartial\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisPage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\RedisStep\\:\\:__construct\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisStep\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisStep.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\RedisStep\\:\\:getReport\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisStep\:\:getReport\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisStep.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\RedisStep\\:\\:\\$data type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Setup\\RedisStep\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisStep.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\WelcomePage\\:\\:createElements\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\WelcomePage\:\:createElements\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Setup/WelcomePage.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Setup\\\\WelcomePage\\:\\:createElements\\(\\) has parameter \\$formData with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Setup\\WelcomePage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/WelcomePage.php - - message: "#^Class Icinga\\\\Module\\\\Icingadb\\\\Util\\\\FeatureStatus extends generic class ArrayObject but does not specify its types\\: TKey, TValue$#" + message: '#^Class Icinga\\Module\\Icingadb\\Util\\FeatureStatus extends generic class ArrayObject but does not specify its types\: TKey, TValue$#' + identifier: missingType.generics count: 1 path: library/Icingadb/Util/FeatureStatus.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\FeatureStatus\\:\\:__construct\\(\\) has parameter \\$summary with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\FeatureStatus\:\:__construct\(\) has parameter \$summary with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/FeatureStatus.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\FeatureStatus\\:\\:getFeatureStatus\\(\\) has parameter \\$summary with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\FeatureStatus\:\:getFeatureStatus\(\) has parameter \$summary with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/FeatureStatus.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfData\\:\\:calculatePieChartData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:calculatePieChartData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfData.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfData\\:\\:format\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:format\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfData.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfData\\:\\:format\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:format\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfData.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfData\\:\\:parse\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:parse\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfData.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfData\\:\\:toArray\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfData.php - - message: "#^Parameter \\#1 \\$value of method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\ThresholdRange\\:\\:contains\\(\\) expects float, float\\|null given\\.$#" + message: '#^Parameter \#1 \$value of method Icinga\\Module\\Icingadb\\Util\\ThresholdRange\:\:contains\(\) expects float, float\|null given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Util/PerfData.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:ampereSeconds\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:ampereSeconds\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:amperes\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:amperes\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:bits\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:bits\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:bytes\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:bytes\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:formatForUnits\\(\\) has parameter \\$units with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:formatForUnits\(\) has parameter \$units with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:grams\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:grams\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:liters\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:liters\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:ohms\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:ohms\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:seconds\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:seconds\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:volts\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:volts\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:wattHours\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:wattHours\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:watts\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:watts\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$ampSecondPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$ampSecondPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$amperePrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$amperePrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$bitPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$bitPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$bytePrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$bytePrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$generalBase has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$generalBase has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$gramPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$gramPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$instance has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$instance has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$literPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$literPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$ohmPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$ohmPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$secondPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$secondPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$voltPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$voltPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$wattHourPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$wattHourPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataFormat\\:\\:\\$wattPrefix has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$wattPrefix has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - - message: "#^Class Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataSet implements generic interface IteratorAggregate but does not specify its types\\: TKey, TValue$#" + message: '#^Class Icinga\\Module\\Icingadb\\Util\\PerfDataSet implements generic interface IteratorAggregate but does not specify its types\: TKey, TValue$#' + identifier: missingType.generics count: 1 path: library/Icingadb/Util/PerfDataSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataSet\\:\\:asArray\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:asArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfDataSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataSet\\:\\:getIterator\\(\\) return type with generic class ArrayIterator does not specify its types\\: TKey, TValue$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:getIterator\(\) return type with generic class ArrayIterator does not specify its types\: TKey, TValue$#' + identifier: missingType.generics count: 1 path: library/Icingadb/Util/PerfDataSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataSet\\:\\:parse\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:parse\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfDataSet.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataSet\\:\\:skipSpaces\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:skipSpaces\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfDataSet.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PerfDataSet\\:\\:\\$perfdata type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:\$perfdata type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfDataSet.php - - message: "#^Cannot access property \\$long_output on mixed\\.$#" + message: '#^Cannot access property \$long_output on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Util/PluginOutput.php - - message: "#^Cannot access property \\$output on mixed\\.$#" + message: '#^Cannot access property \$output on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Util/PluginOutput.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PluginOutput\\:\\:render\\(\\) should return string but returns string\\|null\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:render\(\) should return string but returns string\|null\.$#' + identifier: return.type count: 1 path: library/Icingadb/Util/PluginOutput.php - - message: "#^Parameter \\#1 \\$html of static method Icinga\\\\Web\\\\Helper\\\\HtmlPurifier\\:\\:process\\(\\) expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$html of static method Icinga\\Web\\Helper\\HtmlPurifier\:\:process\(\) expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Util/PluginOutput.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PluginOutput\\:\\:\\$renderedOutput \\(string\\) does not accept string\\|null\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:\$renderedOutput \(string\) does not accept string\|null\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Util/PluginOutput.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\GridViewModeSwitcher\\:\\:getTitle\\(\\) should return string but returns string\\|null\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\GridViewModeSwitcher\:\:getTitle\(\) should return string but returns string\|null\.$#' + identifier: return.type count: 1 path: library/Icingadb/Web/Control/GridViewModeSwitcher.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\GridViewModeSwitcher\\:\\:\\$viewModes type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\GridViewModeSwitcher\:\:\$viewModes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/GridViewModeSwitcher.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:isChecked\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ProblemToggle\\:\\:__construct\\(\\) has parameter \\$filter with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:__construct\(\) has parameter \$filter with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ProblemToggle\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ProblemToggle\\:\\:protectId\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:protectId\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ProblemToggle\\:\\:protectId\\(\\) has parameter \\$id with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:protectId\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ProblemToggle\\:\\:\\$filter has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:\$filter has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ProblemToggle\\:\\:\\$protector has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:\$protector has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method object\:\:getTableName\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Call to an undefined method object\\:\\:getTableName\\(\\)\\.$#" + message: '#^Cannot access property \$flatname on array\\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Cannot access property \\$flatname on array\\\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" - count: 1 - path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Cannot use array destructuring on array\\\\|false\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:collectRelations\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:collectRelations\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:collectRelations\(\) has parameter \$models with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:collectRelations\\(\\) has parameter \\$models with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:collectRelations\(\) has parameter \$path with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:collectRelations\\(\\) has parameter \\$path with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:fetchColumnSuggestions\(\) return type has no value type specified in iterable type Traversable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:fetchColumnSuggestions\\(\\) return type has no value type specified in iterable type Traversable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:fetchValueSuggestions\(\) return type has no value type specified in iterable type Traversable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:fetchValueSuggestions\\(\\) return type has no value type specified in iterable type Traversable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" - count: 1 - path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Parameter \\#1 \\$filter of method ipl\\\\Orm\\\\Query\\:\\:filter\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#1 \$filter of method ipl\\Orm\\Query\:\:filter\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Parameter \\#1 \\$path of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyPath\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$path of method ipl\\Orm\\Resolver\:\:qualifyPath\(\) expects string, mixed given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" + message: '#^Parameter \#2 \$subject of method ipl\\Orm\\Resolver\:\:resolveRelation\(\) expects ipl\\Orm\\Model\|null, object given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Parameter \\#2 \\$subject of method ipl\\\\Orm\\\\Resolver\\:\\:resolveRelation\\(\\) expects ipl\\\\Orm\\\\Model\\|null, object given\\.$#" - count: 1 - path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Part \\$name \\(mixed\\) of encapsed string cannot be cast to string\\.$#" + message: '#^Part \$name \(mixed\) of encapsed string cannot be cast to string\.$#' + identifier: encapsedStringPart.nonString count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:\\$customVarSources type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:\$customVarSources type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\SearchBar\\\\ObjectSuggestions\\:\\:\\$model \\(ipl\\\\Orm\\\\Model\\) does not accept object\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:\$model \(ipl\\Orm\\Model\) does not accept object\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ViewModeSwitcher\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ViewModeSwitcher\\:\\:getTitle\\(\\) should return string but returns string\\|null\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:getTitle\(\) should return string but returns string\|null\.$#' + identifier: return.type count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ViewModeSwitcher\\:\\:protectId\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:protectId\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ViewModeSwitcher\\:\\:protectId\\(\\) has parameter \\$id with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:protectId\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - - message: "#^Parameter \\#1 \\$key of function array_key_exists expects int\\|string, mixed given\\.$#" + message: '#^Parameter \#1 \$key of function array_key_exists expects int\|string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ViewModeSwitcher\\:\\:\\$viewModes type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:\$viewModes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" - count: 1 - path: library/Icingadb/Web/Controller.php - - - - message: "#^Cannot access offset string on mixed\\.$#" + message: '#^Cannot access offset string on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method add\\(\\) on ipl\\\\Html\\\\Contract\\\\Wrappable\\|null\\.$#" + message: '#^Cannot call method add\(\) on ipl\\Html\\Contract\\Wrappable\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method getAdditional\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getAdditional\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method getPreferences\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getPreferences\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method getUsername\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 2 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method setAdditional\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method setAdditional\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 2 path: library/Icingadb/Web/Controller.php - - message: "#^Cannot call method setErrorHandlerModule\\(\\) on array\\|Zend_Controller_Plugin_Abstract\\|false\\.$#" + message: '#^Cannot call method setErrorHandlerModule\(\) on array\|Zend_Controller_Plugin_Abstract\|false\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:assertRouteAccess\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:assertRouteAccess\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:createColumnControl\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:createColumnControl\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:createSearchBar\\(\\) has parameter \\$params with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:createSearchBar\(\) has parameter \$params with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:export\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:export\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:fetchFilterColumns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:fetchFilterColumns\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:handleSearchRequest\\(\\) has parameter \\$additionalColumns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:handleSearchRequest\(\) has parameter \$additionalColumns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:moduleInit\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:moduleInit\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:prepareSearchFilter\\(\\) has parameter \\$additionalColumns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:prepareSearchFilter\(\) has parameter \$additionalColumns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:sendAsPdf\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:sendAsPdf\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^PHPDoc tag @param references unknown parameter\\: \\$preserveParams$#" + message: '#^PHPDoc tag @param references unknown parameter\: \$preserveParams$#' + identifier: parameter.notFound count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^PHPDoc tag @param references unknown parameter\\: \\$redirectUrl$#" + message: '#^PHPDoc tag @param references unknown parameter\: \$redirectUrl$#' + identifier: parameter.notFound count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#1 \\$defaultViewMode of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Control\\\\ViewModeSwitcher\\:\\:setDefaultViewMode\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$defaultViewMode of method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:setDefaultViewMode\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#1 \\$json of static method Icinga\\\\Util\\\\Json\\:\\:decode\\(\\) expects string, array\\|null given\\.$#" + message: '#^Parameter \#1 \$json of static method Icinga\\Util\\Json\:\:decode\(\) expects string, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Web/Controller.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#2 \\$user of static method Icinga\\\\User\\\\Preferences\\\\PreferencesStore\\:\\:create\\(\\) expects Icinga\\\\User, Icinga\\\\User\\|null given\\.$#" + message: '#^Parameter \#2 \$user of static method Icinga\\User\\Preferences\\PreferencesStore\:\:create\(\) expects Icinga\\User, Icinga\\User\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#2 \\$value of method Icinga\\\\Web\\\\Url\\:\\:setParam\\(\\) expects array\\|bool\\|string, mixed given\\.$#" + message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#3 \\$default of method Icinga\\\\User\\\\Preferences\\:\\:getValue\\(\\) expects null, string given\\.$#" + message: '#^Parameter \#3 \$default of method Icinga\\User\\Preferences\:\:getValue\(\) expects null, string given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Parameter \\#3 \\$filter of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:prepareSearchFilter\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Any, ipl\\\\Stdlib\\\\Filter\\\\Chain given\\.$#" + message: '#^Parameter \#3 \$filter of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:prepareSearchFilter\(\) expects ipl\\Stdlib\\Filter\\Any, ipl\\Stdlib\\Filter\\Chain given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Controller\\:\\:\\$format \\(string\\|null\\) does not accept mixed\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Controller\:\:\$format \(string\|null\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Web/Controller.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Action\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Action\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Action\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Action\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Action\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Action\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Web/Navigation/Action.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Action.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Cannot access property \\$hosts_down_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$hosts_down_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\HostProblemsBadge\\:\\:fetchProblemsCount\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:fetchProblemsCount\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\HostProblemsBadge\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\HostProblemsBadge\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\HostProblemsBadge\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:createBadge\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:createBadge\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:disableLink\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:disableLink\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:fetchProblemsCount\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:fetchProblemsCount\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:getProblemsCount\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:getProblemsCount\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:getUrl\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:getUrl\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:round\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:round\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:round\(\) has parameter \$count with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:round\\(\\) has parameter \\$count with no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:\$linkDisabled has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ProblemsBadge\\:\\:\\$linkDisabled has no type specified\\.$#" - count: 1 - path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - - - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Cannot access property \\$services_critical_unhandled on ipl\\\\Orm\\\\Model\\|null\\.$#" + message: '#^Cannot access property \$services_critical_unhandled on ipl\\Orm\\Model\|null\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ServiceProblemsBadge\\:\\:fetchProblemsCount\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:fetchProblemsCount\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ServiceProblemsBadge\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ServiceProblemsBadge\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\ServiceProblemsBadge\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - - message: "#^Cannot call method getRenderer\\(\\) on mixed\\.$#" + message: '#^Cannot call method getRenderer\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/TotalProblemsBadge.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\TotalProblemsBadge\\:\\:\\$severityStateMap type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\TotalProblemsBadge\:\:\$severityStateMap type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Navigation/Renderer/TotalProblemsBadge.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Web\\\\Navigation\\\\Renderer\\\\TotalProblemsBadge\\:\\:\\$stateSeverityMap type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\TotalProblemsBadge\:\:\$stateSeverityMap type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Navigation/Renderer/TotalProblemsBadge.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\CheckAttempt\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\CheckAttempt\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/CheckAttempt.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CheckStatistics\\:\\:__construct\\(\\) has parameter \\$object with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:__construct\(\) has parameter \$object with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CheckStatistics\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CheckStatistics\\:\\:assembleBody\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:assembleBody\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CheckStatistics\\:\\:assembleHeader\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:assembleHeader\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CheckStatistics\\:\\:\\$object has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:\$object has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:createComment\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createComment\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:createDetails\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createDetails\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:createRemoveCommentForm\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createRemoveCommentForm\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createTicketLinks\(\) has parameter \$text with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/CommentDetail.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CommentDetail\\:\\:\\$comment has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:\$comment has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\Wrappable\\:\\:addHtml\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\Wrappable\:\:addHtml\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:__construct\\(\\) has parameter \\$data with no value type specified in iterable type iterable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:__construct\(\) has parameter \$data with no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:renderArray\\(\\) has parameter \\$array with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:renderGroup\\(\\) has parameter \\$entries with no value type specified in iterable type iterable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderGroup\(\) has parameter \$entries with no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:renderObject\\(\\) has parameter \\$object with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderObject\(\) has parameter \$object with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Parameter \\#1 \\$name of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:renderArray\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$name of method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderArray\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Parameter \\#2 \\$value of method ipl\\\\Html\\\\Attributes\\:\\:add\\(\\) expects array\\|bool\\|string\\|null, int given\\.$#" + message: '#^Parameter \#2 \$value of method ipl\\Html\\Attributes\:\:add\(\) expects array\|bool\|string\|null, int given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:\\$data \\(array\\) does not accept iterable\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:\$data \(array\) does not accept iterable\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:\\$data type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\CustomVarTable\\:\\:\\$groups type has no value type specified in iterable type array\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:\$groups type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeCard\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeCard\\:\\:calcRelativeLeft\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:calcRelativeLeft\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeCard\\:\\:calcRelativeLeft\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:calcRelativeLeft\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeCard\\:\\:\\$downtime has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$downtime has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeCard\\:\\:\\$duration has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$duration has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeCard\\:\\:\\$end has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$end has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeCard\\:\\:\\$start has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$start has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - - - message: "#^Cannot access property \\$host on mixed\\.$#" + message: '#^Cannot access property \$host on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot access property \\$is_flexible on mixed\\.$#" + message: '#^Cannot access property \$is_flexible on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 3 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot access property \\$object_type on mixed\\.$#" + message: '#^Cannot access property \$object_type on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot access property \\$service on mixed\\.$#" + message: '#^Cannot access property \$service on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot access property \\$state on mixed\\.$#" + message: '#^Cannot access property \$state on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot call method getStateText\\(\\) on mixed\\.$#" + message: '#^Cannot call method getStateText\(\) on mixed\.$#' + identifier: method.nonObject count: 3 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeDetail\\:\\:createCancelDowntimeForm\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:createCancelDowntimeForm\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeDetail\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeDetail\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Parameter \\#1 \\$downtime of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:downtime\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Downtime, mixed given\\.$#" + message: '#^Parameter \#1 \$downtime of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:downtime\(\) expects Icinga\\Module\\Icingadb\\Model\\Downtime, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\DowntimeDetail\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Html\\BaseHtmlElement\|ipl\\Html\\FormattedString\:\:addAttributes\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Call to an undefined method ipl\\\\Html\\\\BaseHtmlElement\\|ipl\\\\Html\\\\FormattedString\\:\\:addAttributes\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/EventDetail.php - - - - message: "#^Cannot access property \\$checkcommand_name on mixed\\.$#" + message: '#^Cannot access property \$checkcommand_name on mixed\.$#' + identifier: property.nonObject count: 6 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 18 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot access property \\$downtime_id on mixed\\.$#" + message: '#^Cannot access property \$downtime_id on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot access property \\$host on mixed\\.$#" + message: '#^Cannot access property \$host on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot access property \\$is_flexible on mixed\\.$#" + message: '#^Cannot access property \$is_flexible on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot access property \\$object_type on mixed\\.$#" + message: '#^Cannot access property \$object_type on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot access property \\$service on mixed\\.$#" + message: '#^Cannot access property \$service on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot call method getStateText\\(\\) on mixed\\.$#" + message: '#^Cannot call method getStateText\(\) on mixed\.$#' + identifier: method.nonObject count: 3 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot call method limit\\(\\) on mixed\\.$#" + message: '#^Cannot call method limit\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleAcknowledgeEvent\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleAcknowledgeEvent\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleCommentEvent\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleCommentEvent\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleDowntimeEvent\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleDowntimeEvent\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleFlappingEvent\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleFlappingEvent\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleNotificationEvent\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleNotificationEvent\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleStateChangeEvent\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleStateChangeEvent\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:createExtensions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:createTicketLinks\(\) has parameter \$text with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$acknowledgement of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleAcknowledgeEvent\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\AcknowledgementHistory, mixed given\\.$#" + message: '#^Parameter \#1 \$acknowledgement of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleAcknowledgeEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$comment of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleCommentEvent\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\CommentHistory, mixed given\\.$#" + message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleCommentEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\CommentHistory, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$downtime of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleDowntimeEvent\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\DowntimeHistory, mixed given\\.$#" + message: '#^Parameter \#1 \$downtime of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleDowntimeEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\DowntimeHistory, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$flapping of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleFlappingEvent\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\FlappingHistory, mixed given\\.$#" + message: '#^Parameter \#1 \$flapping of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleFlappingEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\FlappingHistory, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$notification of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleNotificationEvent\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\NotificationHistory, mixed given\\.$#" + message: '#^Parameter \#1 \$notification of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleNotificationEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\NotificationHistory, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#1 \\$stateChange of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\EventDetail\\:\\:assembleStateChangeEvent\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\StateHistory, mixed given\\.$#" + message: '#^Parameter \#1 \$stateChange of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleStateChangeEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\StateHistory, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/EventDetail.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/HostDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostDetail\\:\\:createServiceStatistics\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail\:\:createServiceStatistics\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/HostDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostDetail\\:\\:\\$serviceSummary has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail\:\:\$serviceSummary has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/HostDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostInspectionDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostInspectionDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/HostInspectionDetail.php - - message: "#^Cannot access property \\$last_state_change on mixed\\.$#" + message: '#^Cannot access property \$last_state_change on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/HostMetaInfo.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostMetaInfo\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostMetaInfo\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/HostMetaInfo.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostStatistics\\:\\:__construct\\(\\) has parameter \\$summary with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostStatistics\:\:__construct\(\) has parameter \$summary with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/HostStatistics.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\HostStatistics\\:\\:\\$summary has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\HostStatistics\:\:\$summary has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/HostStatistics.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:__construct\\(\\) has parameter \\$summary with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:__construct\(\) has parameter \$summary with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:__construct\\(\\) has parameter \\$type with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:__construct\(\) has parameter \$type with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:assembleAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:assembleAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Parameter \\#3 \\$filter of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:isGrantedOnType\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#3 \$filter of method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:isGrantedOnType\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 10 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:\\$summary has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:\$summary has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\MultiselectQuickActions\\:\\:\\$type has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:\$type has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - - message: "#^Access to an undefined property object\\:\\:\\$checkcommand_name\\.$#" + message: '#^Access to an undefined property object\:\:\$checkcommand_name\.$#' + identifier: property.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Access to an undefined property object\\:\\:\\$normalized_performance_data\\.$#" + message: '#^Access to an undefined property object\:\:\$normalized_performance_data\.$#' + identifier: property.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/ObjectDetail.php - - - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:__construct\\(\\) has parameter \\$object with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:__construct\(\) has parameter \$object with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:compatObject\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:compatObject\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createActions\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createActions\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createCheckStatistics\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createCheckStatistics\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createComments\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createComments\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createCustomVars\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createCustomVars\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createDowntimes\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createDowntimes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createExtensions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createFeatureToggles\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createFeatureToggles\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createGroups\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createGroups\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createNotes\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createNotes\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createNotifications\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createNotifications\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createPerformanceData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createPerformanceData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createPluginOutput\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createPluginOutput\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:createPrintHeader\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createPrintHeader\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:fetchCustomVars\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:fetchCustomVars\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:getUsersAndUsergroups\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:getUsersAndUsergroups\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Parameter \\#1 \\$object of static method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PluginOutput\\:\\:fromObject\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\|Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service, object given\\.$#" + message: '#^Parameter \#1 \$object of static method Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:fromObject\(\) expects Icinga\\Module\\Icingadb\\Model\\Host\|Icinga\\Module\\Icingadb\\Model\\Service, object given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Parameter \\#1 \\$view of method Icinga\\\\Module\\\\Monitoring\\\\Hook\\\\DetailviewExtensionHook\\:\\:setView\\(\\) expects Icinga\\\\Web\\\\View, null given\\.$#" + message: '#^Parameter \#1 \$view of method Icinga\\Module\\Monitoring\\Hook\\DetailviewExtensionHook\:\:setView\(\) expects Icinga\\Web\\View, null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/ObjectDetail.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Possibly invalid array key type array\\|bool\\|string\\|null\\.$#" + message: '#^Possibly invalid array key type array\|bool\|string\|null\.$#' + identifier: offsetAccess.invalidOffset count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:\\$compatObject has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:\$compatObject has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:\\$object has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:\$object has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectDetail\\:\\:\\$objectType has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:\$objectType has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectStatistics\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectStatistics\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectStatistics.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:createComments\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createComments\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:createDowntimes\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createDowntimes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:createExtensions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:createFeatureToggles\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createFeatureToggles\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:createSummary\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createSummary\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Parameter \\#3 \\$baseFilter of static method Icinga\\\\Module\\\\Icingadb\\\\Hook\\\\ExtensionHook\\\\ObjectsDetailExtensionHook\\:\\:loadExtensions\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#3 \$baseFilter of static method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\ObjectsDetailExtensionHook\:\:loadExtensions\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:\\$query has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:\$query has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:\\$summary has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:\$summary has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ObjectsDetail\\:\\:\\$type has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:\$type has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\PerfDataTable\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\PerfDataTable\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/PerfDataTable.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Cannot access property \\$is_acknowledged on mixed\\.$#" + message: '#^Cannot access property \$is_acknowledged on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Cannot access property \\$is_problem on mixed\\.$#" + message: '#^Cannot access property \$is_problem on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:__construct\\(\\) has parameter \\$object with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:__construct\(\) has parameter \$object with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:assembleAction\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:assembleAction\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:getLink\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:getLink\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:getLink\\(\\) has parameter \\$action with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:getLink\(\) has parameter \$action with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\QuickActions\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/QuickActions.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/QuickActions.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ServiceDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ServiceDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ServiceInspectionDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceInspectionDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ServiceInspectionDetail.php - - message: "#^Cannot access property \\$last_state_change on mixed\\.$#" + message: '#^Cannot access property \$last_state_change on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/ServiceMetaInfo.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ServiceMetaInfo\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceMetaInfo\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ServiceMetaInfo.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ServiceStatistics\\:\\:__construct\\(\\) has parameter \\$summary with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceStatistics\:\:__construct\(\) has parameter \$summary with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/ServiceStatistics.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\ServiceStatistics\\:\\:\\$summary has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceStatistics\:\:\$summary has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ServiceStatistics.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot call method getModel\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Cannot call method getModel\\(\\) on mixed\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/UserDetail.php - - - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Cannot call method limit\\(\\) on mixed\\.$#" + message: '#^Cannot call method limit\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:createCustomVars\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createCustomVars\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:createExtensions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:createUserDetail\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createUserDetail\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:createUsergroupList\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createUsergroupList\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:localizeStates\\(\\) has parameter \\$states with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeStates\(\) has parameter \$states with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:localizeStates\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeStates\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:localizeTypes\\(\\) has parameter \\$types with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeTypes\(\) has parameter \$types with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:localizeTypes\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeTypes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:separateStates\\(\\) has parameter \\$states with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:separateStates\(\) has parameter \$states with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:separateStates\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:separateStates\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Parameter \\#1 \\$query of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:applyRestrictions\\(\\) expects ipl\\\\Orm\\\\Query, mixed given\\.$#" + message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UserDetail\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/UserDetail.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UserDetail.php - - message: "#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:getColumn\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Call to an undefined method ipl\\\\Stdlib\\\\Filter\\\\Rule\\:\\:metaData\\(\\)\\.$#" + message: '#^Cannot call method getModel\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Cannot call method getModel\\(\\) on mixed\\.$#" + message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Cannot call method getRoles\\(\\) on Icinga\\\\User\\|null\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - - - message: "#^Cannot call method isUnrestricted\\(\\) on Icinga\\\\User\\|null\\.$#" + message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' + identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Cannot call method limit\\(\\) on mixed\\.$#" + message: '#^Cannot call method limit\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:createCustomVars\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createCustomVars\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:createExtensions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:createPrintHeader\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createPrintHeader\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:createUserList\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createUserList\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:parseDenylist\\(\\) should return ipl\\\\Stdlib\\\\Filter\\\\None but returns ipl\\\\Stdlib\\\\Filter\\\\Chain\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' + identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Parameter \\#1 \\$condition of method ipl\\\\Sql\\\\QueryBuilder\\:\\:buildCondition\\(\\) expects array, array\\|null given\\.$#" + message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Parameter \\#1 \\$denylist of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:parseDenylist\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Parameter \\#1 \\$query of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:applyRestrictions\\(\\) expects ipl\\\\Orm\\\\Query, mixed given\\.$#" + message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Parameter \\#1 \\$queryString of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Detail\\\\UsergroupDetail\\:\\:parseRestriction\\(\\) expects string, array\\ given\\.$#" + message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' + identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Parameter \\#2 \\$array of function join expects array\\, array\\ given\\.$#" - count: 1 - path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\\\|int\\<1, max\\>\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' + identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Parameter \\#2 \\$tableName of method ipl\\\\Orm\\\\Resolver\\:\\:qualifyColumn\\(\\) expects string, int\\|string given\\.$#" + message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' + identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Health\\:\\:__construct\\(\\) has parameter \\$data with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Health\:\:__construct\(\) has parameter \$data with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Health.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Health\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Health\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/Health.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\Health\\:\\:\\$data has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Health\:\:\$data has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/Health.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\HostStateBadges\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostStateBadges\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostStateBadges.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/HostStatusBar.php - - message: "#^Parameter \\#3 \\$number of function tp expects int\\|null, mixed given\\.$#" + message: '#^Parameter \#3 \$number of function tp expects int\|null, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/HostStatusBar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\HostSummaryDonut\\:\\:assembleBody\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut\:\:assembleBody\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\HostSummaryDonut\\:\\:assembleFooter\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut\:\:assembleFooter\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\HostSummaryDonut\\:\\:assembleHeader\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut\:\:assembleHeader\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - - message: "#^Parameter \\#1 \\$rule of method ipl\\\\Stdlib\\\\Filter\\\\Chain\\:\\:add\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#1 \$rule of method ipl\\Stdlib\\Filter\\Chain\:\:add\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\IconImage\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\IconImage\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/IconImage.php - - message: "#^Cannot access property \\$host on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseCommentListItem.php - - - - message: "#^Cannot call method getStateText\\(\\) on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseCommentListItem.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseCommentListItem\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseCommentListItem.php - - - - message: "#^Parameter \\#1 \\$host of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseCommentListItem\\:\\:createHostLink\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseCommentListItem.php - - - - message: "#^Parameter \\#1 \\$service of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseCommentListItem\\:\\:createServiceLink\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service, mixed given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseCommentListItem.php - - - - message: "#^Cannot access property \\$host on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php - - - - message: "#^Cannot call method getStateText\\(\\) on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseDowntimeListItem\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php - - - - message: "#^Parameter \\#1 \\$host of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseDowntimeListItem\\:\\:createHostLink\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php - - - - message: "#^Parameter \\#1 \\$service of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseDowntimeListItem\\:\\:createServiceLink\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service, mixed given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php - - - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseDowntimeListItem\\:\\:\\$duration \\(int\\) does not accept string\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseDowntimeListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$author\\.$#" - count: 4 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$comment\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$start_time\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$text\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$author on mixed\\.$#" - count: 4 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$cancelled_by on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$check_attempt on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$checkcommand_name on mixed\\.$#" - count: 4 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$cleared_by on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$comment on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$end_time on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$expire_time on mixed\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$flapping_threshold_high on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$flapping_threshold_low on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$hard_state on mixed\\.$#" - count: 6 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$has_been_cancelled on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$id on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$max_check_attempts on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$output on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$percent_state_change_end on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$percent_state_change_start on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$previous_hard_state on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$previous_soft_state on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$removed_by on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$soft_state on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$state_type on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$text on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot access property \\$type on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Cannot call method getStateText\\(\\) on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseHistoryListItem\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Parameter \\#1 \\$host of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseHistoryListItem\\:\\:createHostLink\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, object given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Parameter \\#1 \\$service of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseHistoryListItem\\:\\:createServiceLink\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service, object given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Parameter \\#2 \\$host of method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseHistoryListItem\\:\\:createServiceLink\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, object given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseHistoryListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$author\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$history\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$host\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$object_type\\.$#" - count: 5 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$previous_hard_state\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$send_time\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$service\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$state\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$text\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$type\\.$#" - count: 4 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Cannot call method getStateText\\(\\) on mixed\\.$#" - count: 3 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseNotificationListItem\\:\\:getStateBallSize\\(\\) has no return type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseNotificationListItem.php - - - - message: "#^Cannot access property \\$display_name on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseServiceListItem.php - - - - message: "#^Cannot access property \\$name on mixed\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/BaseServiceListItem.php - - - - message: "#^Cannot access property \\$state on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseServiceListItem.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\BaseServiceListItem\\:\\:createSubject\\(\\) has no return type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseServiceListItem.php - - - - message: "#^Parameter \\#1 \\$host of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:host\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseServiceListItem.php - - - - message: "#^Parameter \\#2 \\$host of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:service\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/BaseServiceListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$name\\.$#" + message: '#^Access to an undefined property object\:\:\$name\.$#' + identifier: property.notFound count: 7 path: library/Icingadb/Widget/ItemList/CommandTransportListItem.php - - message: "#^Call to an undefined method ipl\\\\Web\\\\Common\\\\BaseItemList\\:\\:addDetailFilterAttribute\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Web\\Common\\BaseItemList\:\:addDetailFilterAttribute\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/ItemList/CommandTransportListItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\CommentList\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/CommentList.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\DowntimeList\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/DowntimeList.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\HistoryList\\:\\:createTicketLinks\\(\\) has parameter \\$text with no type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/HistoryList.php - - - - message: "#^Parameter \\#2 \\$value of method Icinga\\\\Web\\\\Url\\:\\:setParam\\(\\) expects array\\|bool\\|string, int given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/HistoryList.php - - - - message: "#^Parameter \\#2 \\$haystack of function in_array expects array, array\\|bool\\|string\\|null given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/HostDetailHeader.php - - - - message: "#^Cannot access property \\$is_flapping on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/HostListItemDetailed.php - - - - message: "#^Cannot access property \\$last_comment on mixed\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/HostListItemDetailed.php - - - - message: "#^Cannot access property \\$normalized_performance_data on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/HostListItemDetailed.php - - - - message: "#^Cannot access property \\$performance_data on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/HostListItemDetailed.php - - - - message: "#^Parameter \\#2 \\$value of method Icinga\\\\Web\\\\Url\\:\\:setParam\\(\\) expects array\\|bool\\|string, int given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/NotificationList.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\PageSeparatorItem\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemList\\PageSeparatorItem\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemList/PageSeparatorItem.php - - message: "#^Parameter \\#2 \\$haystack of function in_array expects array, array\\|bool\\|string\\|null given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/ServiceDetailHeader.php - - - - message: "#^Cannot access property \\$display_name on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/ServiceListItemDetailed.php - - - - message: "#^Cannot access property \\$is_flapping on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/ServiceListItemDetailed.php - - - - message: "#^Cannot access property \\$last_comment on mixed\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemList/ServiceListItemDetailed.php - - - - message: "#^Cannot access property \\$normalized_performance_data on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/ServiceListItemDetailed.php - - - - message: "#^Cannot access property \\$performance_data on mixed\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/ServiceListItemDetailed.php - - - - message: "#^Access to an undefined property object\\:\\:\\$icon_image_alt\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/StateListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$max_check_attempts\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/StateListItem.php - - - - message: "#^Access to an undefined property object\\:\\:\\$state\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/StateListItem.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemList\\\\StateListItem\\:\\:createSubject\\(\\) has no return type specified\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/StateListItem.php - - - - message: "#^Parameter \\#1 \\$object of static method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PluginOutput\\:\\:fromObject\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\|Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service, object given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemList/StateListItem.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\BaseStateRowItem\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\BaseStateRowItem\\:\\:assembleCell\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assembleCell\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\BaseStateRowItem\\:\\:assembleCell\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\BaseStateRowItem\\:\\:assembleVisual\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assembleVisual\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\BaseStateRowItem\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\HostItemTable\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostItemTable\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/HostItemTable.php - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\HostRowItem\\:\\:assembleCell\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostRowItem\:\:assembleCell\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\HostRowItem\\:\\:assembleCell\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\HostRowItem\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostRowItem\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - - message: "#^Parameter \\#1 \\$service of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:service\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service, mixed given\\.$#" + message: '#^Parameter \#1 \$service of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:service\(\) expects Icinga\\Module\\Icingadb\\Model\\Service, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - - message: "#^Parameter \\#1 \\.\\.\\.\\$rules of static method ipl\\\\Stdlib\\\\Filter\\:\\:all\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemTable/HostgroupTableRow.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$rules of static method ipl\\\\Stdlib\\\\Filter\\:\\:all\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" - count: 2 - path: library/Icingadb/Widget/ItemTable/HostgroupTableRow.php - - - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\ServiceItemTable\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceItemTable\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/ServiceItemTable.php - - message: "#^Cannot access property \\$display_name on mixed\\.$#" + message: '#^Cannot access property \$display_name on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - - message: "#^Cannot access property \\$name on mixed\\.$#" + message: '#^Cannot access property \$name on mixed\.$#' + identifier: property.nonObject count: 3 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\ServiceRowItem\\:\\:assembleCell\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceRowItem\:\:assembleCell\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\ServiceRowItem\\:\\:assembleCell\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\ServiceRowItem\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceRowItem\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - - message: "#^Parameter \\#1 \\$host of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:host\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" + message: '#^Parameter \#1 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:host\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - - message: "#^Parameter \\#2 \\$host of static method Icinga\\\\Module\\\\Icingadb\\\\Common\\\\Links\\:\\:service\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host, mixed given\\.$#" + message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:service\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - - message: "#^Parameter \\#1 \\.\\.\\.\\$rules of static method ipl\\\\Stdlib\\\\Filter\\:\\:all\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemTable/ServicegroupTableRow.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$rules of static method ipl\\\\Stdlib\\\\Filter\\:\\:all\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" - count: 1 - path: library/Icingadb/Widget/ItemTable/ServicegroupTableRow.php - - - - message: "#^Call to an undefined method ipl\\\\Html\\\\Contract\\\\FormElement\\:\\:addHtml\\(\\)\\.$#" + message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:addHtml\(\)\.$#' + identifier: method.notFound count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Cannot access offset 0 on mixed\\.$#" + message: '#^Cannot access offset 0 on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Cannot access offset 1 on mixed\\.$#" + message: '#^Cannot access offset 1 on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:__construct\\(\\) has parameter \\$data with no value type specified in iterable type iterable\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:__construct\(\) has parameter \$data with no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:applyColumnMetaData\\(\\) has parameter \\$columns with no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:applyColumnMetaData\(\) has parameter \$columns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:applyColumnMetaData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:applyColumnMetaData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:assembleColumnHeader\\(\\) has parameter \\$label with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:assembleColumnHeader\(\) has parameter \$label with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:getVisualLabel\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:getVisualLabel\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:init\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:init\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Parameter \\#1 \\.\\.\\.\\$content of method ipl\\\\Html\\\\BaseHtmlElement\\:\\:addHtml\\(\\) expects ipl\\\\Html\\\\ValidHtml, object given\\.$#" + message: '#^Parameter \#1 \.\.\.\$content of method ipl\\Html\\BaseHtmlElement\:\:addHtml\(\) expects ipl\\Html\\ValidHtml, object given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:\\$baseAttributes has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:\$baseAttributes has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:\\$data type has no value type specified in iterable type iterable\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:\$data type has no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateItemTable\\:\\:\\$sort \\(string\\) does not accept string\\|null\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:\$sort \(string\) does not accept string\|null\.$#' + identifier: assign.propertyType count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - - message: "#^Cannot access property \\$check_attempt on mixed\\.$#" + message: '#^Cannot access property \$check_attempt on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$hard_state on mixed\\.$#" + message: '#^Cannot access property \$hard_state on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$is_handled on mixed\\.$#" + message: '#^Cannot access property \$is_handled on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$is_problem on mixed\\.$#" + message: '#^Cannot access property \$is_problem on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$is_reachable on mixed\\.$#" + message: '#^Cannot access property \$is_reachable on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$last_state_change on mixed\\.$#" + message: '#^Cannot access property \$last_state_change on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$last_update on mixed\\.$#" + message: '#^Cannot access property \$last_update on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$next_check on mixed\\.$#" + message: '#^Cannot access property \$next_check on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$next_update on mixed\\.$#" + message: '#^Cannot access property \$next_update on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$normalized_performance_data on mixed\\.$#" + message: '#^Cannot access property \$normalized_performance_data on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$previous_hard_state on mixed\\.$#" + message: '#^Cannot access property \$previous_hard_state on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$previous_soft_state on mixed\\.$#" + message: '#^Cannot access property \$previous_soft_state on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$soft_state on mixed\\.$#" + message: '#^Cannot access property \$soft_state on mixed\.$#' + identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot access property \\$state_type on mixed\\.$#" + message: '#^Cannot access property \$state_type on mixed\.$#' + identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot call method getIcon\\(\\) on mixed\\.$#" + message: '#^Cannot call method getIcon\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot call method getStateText\\(\\) on mixed\\.$#" + message: '#^Cannot call method getStateText\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateRowItem\\:\\:assembleCell\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateRowItem\:\:assembleCell\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateRowItem\\:\\:assembleCell\\(\\) has parameter \\$value with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ItemTable\\\\StateRowItem\\:\\:assembleVisual\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateRowItem\:\:assembleVisual\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Parameter \\#1 \\$object of static method Icinga\\\\Module\\\\Icingadb\\\\Util\\\\PluginOutput\\:\\:fromObject\\(\\) expects Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Host\\|Icinga\\\\Module\\\\Icingadb\\\\Model\\\\Service, ipl\\\\Orm\\\\Model given\\.$#" + message: '#^Parameter \#1 \$object of static method Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:fromObject\(\) expects Icinga\\Module\\Icingadb\\Model\\Host\|Icinga\\Module\\Icingadb\\Model\\Service, ipl\\Orm\\Model given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Parameter \\#2 \\$alt of class Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\IconImage constructor expects string\\|null, mixed given\\.$#" + message: '#^Parameter \#2 \$alt of class Icinga\\Module\\Icingadb\\Widget\\IconImage constructor expects string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ServiceStateBadges\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceStateBadges\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceStateBadges.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ServiceStatusBar.php - - message: "#^Parameter \\#3 \\$number of function tp expects int\\|null, mixed given\\.$#" + message: '#^Parameter \#3 \$number of function tp expects int\|null, mixed given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ServiceStatusBar.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ServiceSummaryDonut\\:\\:assembleBody\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut\:\:assembleBody\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ServiceSummaryDonut\\:\\:assembleFooter\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut\:\:assembleFooter\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\ServiceSummaryDonut\\:\\:assembleHeader\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut\:\:assembleHeader\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - - message: "#^Parameter \\#1 \\$rule of method ipl\\\\Stdlib\\\\Filter\\\\Chain\\:\\:add\\(\\) expects ipl\\\\Stdlib\\\\Filter\\\\Rule, ipl\\\\Stdlib\\\\Filter\\\\Rule\\|null given\\.$#" + message: '#^Parameter \#1 \$rule of method ipl\\Stdlib\\Filter\\Chain\:\:add\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' + identifier: argument.type count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\StateChange\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/StateChange.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\StateChange\\:\\:setHandled\\(\\) has parameter \\$isHandled with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:setHandled\(\) has parameter \$isHandled with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/StateChange.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\StateChange\\:\\:setIcon\\(\\) has parameter \\$icon with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:setIcon\(\) has parameter \$icon with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/StateChange.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\StateChange\\:\\:\\$currentStateBallSize has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$currentStateBallSize has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\StateChange\\:\\:\\$previousState has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$previousState has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\StateChange\\:\\:\\$previousStateBallSize has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$previousStateBallSize has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\StateChange\\:\\:\\$state has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$state has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\TagList\\:\\:addLink\\(\\) has parameter \\$content with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\TagList\:\:addLink\(\) has parameter \$content with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/TagList.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\TagList\\:\\:addLink\\(\\) has parameter \\$url with no type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\TagList\:\:addLink\(\) has parameter \$url with no type specified\.$#' + identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/TagList.php - - message: "#^Method Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\TagList\\:\\:assemble\\(\\) has no return type specified\\.$#" + message: '#^Method Icinga\\Module\\Icingadb\\Widget\\TagList\:\:assemble\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: library/Icingadb/Widget/TagList.php - - message: "#^Property Icinga\\\\Module\\\\Icingadb\\\\Widget\\\\TagList\\:\\:\\$content has no type specified\\.$#" + message: '#^Property Icinga\\Module\\Icingadb\\Widget\\TagList\:\:\$content has no type specified\.$#' + identifier: missingType.property count: 1 path: library/Icingadb/Widget/TagList.php From 20d74a685fd900a8201159f1efc6eac3f53de930 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Fri, 28 Mar 2025 13:16:29 +0100 Subject: [PATCH 32/35] GridRenderer::assembleVisual(): Fix visual link - Don't show all objct if the group is emplty --- library/Icingadb/View/HostgroupGridRenderer.php | 2 +- library/Icingadb/View/ServicegroupGridRenderer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/Icingadb/View/HostgroupGridRenderer.php b/library/Icingadb/View/HostgroupGridRenderer.php index 04cf2a28..f3823e1f 100644 --- a/library/Icingadb/View/HostgroupGridRenderer.php +++ b/library/Icingadb/View/HostgroupGridRenderer.php @@ -115,7 +115,7 @@ class HostgroupGridRenderer implements ItemRenderer } else { $link = new Link( new StateBadge(0, 'none'), - $url, + Links::hostgroup($item), [ 'title' => sprintf( $this->translate('There are no hosts in host group "%s"'), diff --git a/library/Icingadb/View/ServicegroupGridRenderer.php b/library/Icingadb/View/ServicegroupGridRenderer.php index 96a41841..cb62cbcd 100644 --- a/library/Icingadb/View/ServicegroupGridRenderer.php +++ b/library/Icingadb/View/ServicegroupGridRenderer.php @@ -205,7 +205,7 @@ class ServicegroupGridRenderer implements ItemRenderer } else { $link = new Link( new StateBadge(0, 'none'), - $url, + Links::servicegroup($item), [ 'title' => sprintf( $this->translate('There are no services in service group "%s"'), From 066702fb490dc3789739be3621e3b87f6ae91b83 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Fri, 28 Mar 2025 14:32:56 +0100 Subject: [PATCH 33/35] EventRenderer: Don't show check attempts in header and minimal layout --- library/Icingadb/View/EventRenderer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Icingadb/View/EventRenderer.php b/library/Icingadb/View/EventRenderer.php index 3a3225c5..0a9e3217 100644 --- a/library/Icingadb/View/EventRenderer.php +++ b/library/Icingadb/View/EventRenderer.php @@ -123,7 +123,7 @@ class EventRenderer implements ItemRenderer break; case 'state_change': - if ($item->state->state_type === 'soft') { + if ($layout !== 'minimal' && $layout !== 'header' && $item->state->state_type === 'soft') { $stateType = 'soft_state'; $previousStateType = 'previous_soft_state'; From 73118b6b6fdb353129113ae93ba0f99304515741 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Fri, 28 Mar 2025 15:05:15 +0100 Subject: [PATCH 34/35] ObjectHeader: Add missing `icon-image` and php generics --- .../Icingadb/Widget/Detail/ObjectHeader.php | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/library/Icingadb/Widget/Detail/ObjectHeader.php b/library/Icingadb/Widget/Detail/ObjectHeader.php index 1e7cea8d..4036f579 100644 --- a/library/Icingadb/Widget/Detail/ObjectHeader.php +++ b/library/Icingadb/Widget/Detail/ObjectHeader.php @@ -28,19 +28,38 @@ use Icinga\Module\Icingadb\View\UserRenderer; use ipl\Html\BaseHtmlElement; use ipl\Orm\Model; use ipl\Web\Layout\HeaderItemLayout; +use ipl\Web\Layout\ItemLayout; +/** + * ObjectHeader + * + * Create a header for icingadb object + * + * @phpstan-type _PART1 = RedundancyGroup|Service|Host|Usergroup|User|Comment|Downtime|History + * @phpstan-type _PART2 = Hostgroupsummary|ServicegroupSummary + * + * @template Item of _PART1|_PART2 + */ class ObjectHeader extends BaseHtmlElement { - /** @var Model */ // TODO: add types + /** @var Item */ protected $object; protected $tag = 'div'; + /** + * Create a new object header + * + * @param Item $object + */ public function __construct(Model $object) { $this->object = $object; } + /** + * @throws NotImplementedError When the object type is not supported + */ protected function assemble(): void { switch (true) { @@ -90,6 +109,10 @@ class ObjectHeader extends BaseHtmlElement $layout = new HeaderItemLayout($this->object, $renderer); + if (isset($this->object->icon_image->icon_image)) { + $layout->after(ItemLayout::VISUAL, 'icon-image'); + } + $this->addAttributes($layout->getAttributes()); $this->addHtml($layout); } From cc6c68bc99d198fe59ddbdc96c96130fd245d8cb Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 28 Mar 2025 15:05:33 +0100 Subject: [PATCH 35/35] css: Final cleanup --- public/css/common.less | 10 -------- public/css/item/icon-image.less | 37 +++++++++++++++++++++++++++ public/css/list/item-list.less | 40 ++++++++++++++---------------- public/css/widget/object-grid.less | 15 +++++------ 4 files changed, 61 insertions(+), 41 deletions(-) create mode 100644 public/css/item/icon-image.less diff --git a/public/css/common.less b/public/css/common.less index 73d51663..20f66352 100644 --- a/public/css/common.less +++ b/public/css/common.less @@ -306,13 +306,3 @@ form[name="form_confirm_removal"] { padding: 0 0.25em; .rounded-corners(); } - -.item-list { - .title .affected-objects { - margin-left: .28125em; // calculated   width; - } - - .default-item-layout .title .affected-objects { - margin-left: 0; - } -} diff --git a/public/css/item/icon-image.less b/public/css/item/icon-image.less new file mode 100644 index 00000000..e0b03618 --- /dev/null +++ b/public/css/item/icon-image.less @@ -0,0 +1,37 @@ +.item-layout { + .icon-image { + width: 3em; + height: 3em; + text-align: center; + margin-top: .5em; + margin-right: .5em; + overflow: hidden; + + img { + max-height: 100%; + max-width: 100%; + height: auto; + width: auto; + } + + .icon, img { + vertical-align: baseline; + } + } + + &.minimal-item-layout { + .icon-image { + height: 2em; + width: 2em; + line-height: 2; + } + } + + &.header-item-layout .icon-image { + margin-top: 0; + + img { + vertical-align: middle; + } + } +} diff --git a/public/css/list/item-list.less b/public/css/list/item-list.less index 61fa9bb8..788b973b 100644 --- a/public/css/list/item-list.less +++ b/public/css/list/item-list.less @@ -54,31 +54,27 @@ } .item-list { - .icon-image { - width: 3em; - height: 3em; - text-align: center; - margin-top: .5em; - margin-left: .5em; - overflow: hidden; - - img { - max-height: 100%; - max-width: 100%; - height: auto; - width: auto; + .detailed-item-layout footer { + .status-icons .icon, .performance-data { + font-size: .857em; + line-height: 1.5*.857em; } } - &.minimal-item-layout { - .icon-image { - height: 2em; - width: 2em; - line-height: 2; + // Not sure what this is for. Maybe user content? (Markdown) But why in the title?? + .default-item-layout .title { + p { + margin: 0; + } + } + + .minimal-item-layout .title { + p { + display: inline; + + & + p { + margin-left: .417em; + } } } } - -.controls .minimal-item-layout .icon-image { - margin-top: 0; -} diff --git a/public/css/widget/object-grid.less b/public/css/widget/object-grid.less index 8f5a6c9f..8bad0663 100644 --- a/public/css/widget/object-grid.less +++ b/public/css/widget/object-grid.less @@ -4,23 +4,20 @@ ul.object-grid { display: grid; grid-template-columns: repeat(auto-fit, 15em); grid-gap: 1em 2em; + margin: 0; + padding: 0; li.item-layout.object-grid-cell { - margin: -.25em; padding: .25em; - border-radius: .5em; - - .visual { - padding: 0; - } + .rounded-corners(); .caption { - height: auto; + height: 1.5em; // Single line + .text-ellipsis(); + .line-clamp("reset"); } .title, .caption { - line-height: 1; - a { display: inline-block; max-width: 10em;