From 90b7cbf085c0440c8a8c97a6f8983b4168f04423 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Wed, 29 Jan 2025 16:13:27 +0100 Subject: [PATCH 1/2] ContactListItem: Drop channel indicator and don't fetch `has_email` column Remove unused imports --- application/controllers/ContactsController.php | 4 +--- .../Widget/ItemList/ContactListItem.php | 12 ------------ 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/application/controllers/ContactsController.php b/application/controllers/ContactsController.php index c6c3408d..0ce97330 100644 --- a/application/controllers/ContactsController.php +++ b/application/controllers/ContactsController.php @@ -19,7 +19,6 @@ use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Filter\QueryString; -use ipl\Web\Url; use ipl\Web\Widget\ButtonLink; use ipl\Html\ValidHtml; @@ -42,8 +41,7 @@ public function init() public function indexAction() { - $contacts = Contact::on($this->db) - ->withColumns('has_email'); + $contacts = Contact::on($this->db); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($contacts); diff --git a/library/Notifications/Widget/ItemList/ContactListItem.php b/library/Notifications/Widget/ItemList/ContactListItem.php index e80d6026..0f91ad59 100644 --- a/library/Notifications/Widget/ItemList/ContactListItem.php +++ b/library/Notifications/Widget/ItemList/ContactListItem.php @@ -11,7 +11,6 @@ use ipl\Html\Text; use ipl\Web\Common\BaseListItem; use ipl\Web\Url; -use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; /** @@ -40,17 +39,6 @@ protected function assembleVisual(BaseHtmlElement $visual): void )); } - protected function assembleFooter(BaseHtmlElement $footer): void - { - $contactIcons = new HtmlElement('div', Attributes::create(['class' => 'contact-icons'])); - - if (isset($this->item->has_email) && $this->item->has_email) { - $contactIcons->addHtml(new Icon('at')); - } - - $footer->addHtml($contactIcons); - } - protected function assembleTitle(BaseHtmlElement $title): void { $title->addHtml(new Link( From dc42339cb8ba2710247f478ef343e0bf7078a047 Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Thu, 30 Jan 2025 11:40:18 +0100 Subject: [PATCH 2/2] Remove unnecessary `HasAddress` Behavior and its usage --- .../Model/Behavior/HasAddress.php | 93 ------------------- library/Notifications/Model/Contact.php | 2 - 2 files changed, 95 deletions(-) delete mode 100644 library/Notifications/Model/Behavior/HasAddress.php diff --git a/library/Notifications/Model/Behavior/HasAddress.php b/library/Notifications/Model/Behavior/HasAddress.php deleted file mode 100644 index 2e7db3fc..00000000 --- a/library/Notifications/Model/Behavior/HasAddress.php +++ /dev/null @@ -1,93 +0,0 @@ -query = $query; - - return $this; - } - - public function rewriteColumn($column, ?string $relation = null) - { - if ($this->isSelectableColumn($column)) { - $type = 'email'; - - $subQueryRelation = $relation !== null ? $relation . '.contact.contact_address' : 'contact.contact_address'; - - $subQuery = $this->query->createSubQuery(new ContactAddress(), $subQueryRelation) - ->limit(1) - ->columns([new Expression('1')]) - ->filter(Filter::equal('type', $type)); - - $column = $relation !== null ? str_replace('.', '_', $relation) . "_$column" : $column; - - $alias = $this->query->getDb()->quoteIdentifier([$column]); - - list($select, $values) = $this->query->getDb() - ->getQueryBuilder() - ->assembleSelect($subQuery->assembleSelect()); - - return new AliasedExpression($alias, "($select)", null, ...$values); - } - } - - public function isSelectableColumn(string $name): bool - { - return $name === 'has_email'; - } - - public function rewriteColumnDefinition(ColumnDefinition $def, string $relation): void - { - $name = $def->getName(); - - if ($this->isSelectableColumn($name)) { - $def->setLabel(t('Has Email Address')); - } - } - - public function rewriteCondition(Filter\Condition $condition, $relation = null) - { - $column = substr($condition->getColumn(), strlen($relation)); - - if ($this->isSelectableColumn($column)) { - $type = 'email'; - - $subQuery = $this->query->createSubQuery(new ContactAddress(), $relation) - ->limit(1) - ->columns([new Expression('1')]) - ->filter(Filter::equal('type', $type)); - - if ($condition->getValue()) { - if ($condition instanceof Filter\Unequal) { - return new NotExists($subQuery->assembleSelect()->resetOrderBy()); - } else { - return new Exists($subQuery->assembleSelect()->resetOrderBy()); - } - } elseif ($condition instanceof Filter\Unequal) { - return new Exists($subQuery->assembleSelect()->resetOrderBy()); - } else { - return new NotExists($subQuery->assembleSelect()->resetOrderBy()); - } - } - } -} diff --git a/library/Notifications/Model/Contact.php b/library/Notifications/Model/Contact.php index 10f17b01..7165bb9a 100644 --- a/library/Notifications/Model/Contact.php +++ b/library/Notifications/Model/Contact.php @@ -6,7 +6,6 @@ use DateTime; use ipl\Orm\Behavior\BoolCast; -use Icinga\Module\Notifications\Model\Behavior\HasAddress; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use ipl\Orm\Model; @@ -70,7 +69,6 @@ public function getSearchColumns(): array public function createBehaviors(Behaviors $behaviors): void { - $behaviors->add(new HasAddress()); $behaviors->add(new MillisecondTimestamp(['changed_at'])); $behaviors->add(new BoolCast(['deleted'])); }