From fc9f27f279c29296626aff815a6d0d6914f22351 Mon Sep 17 00:00:00 2001 From: Yuriy Bakhtin Date: Fri, 19 Dec 2025 12:55:23 +0300 Subject: [PATCH 1/2] Fix wrong user message records --- Events.php | 27 ++++++++++++--- docs/CHANGELOG.md | 1 + .../m251219_093008_fix_user_message.php | 34 +++++++++++++++++++ models/UserMessageTag.php | 8 +++++ 4 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 migrations/m251219_093008_fix_user_message.php diff --git a/Events.php b/Events.php index 84350756..1a4ab556 100644 --- a/Events.php +++ b/Events.php @@ -8,6 +8,7 @@ namespace humhub\modules\mail; +use humhub\commands\IntegrityController; use humhub\modules\mail\helpers\Url; use humhub\modules\mail\models\Config; use humhub\modules\mail\models\Message; @@ -35,6 +36,7 @@ class Events */ public static function onIntegrityCheck($event) { + /* @var IntegrityController $integrityController */ $integrityController = $event->sender; $integrityController->showTestHeadline("Mail Module (" . Message::find()->count() . " conversations)"); @@ -42,7 +44,7 @@ public static function onIntegrityCheck($event) try { foreach (Message::find()->each() as $message) { /* @var $message Message */ - if (!$message->getAuthor()->count()) { + if (!$message->getAuthor()->exists()) { if ($integrityController->showFix("Deleting conversation id " . $message->id . " without existing author!")) { $message->delete(); } @@ -53,12 +55,12 @@ public static function onIntegrityCheck($event) foreach (MessageEntry::find()->each() as $messageEntry) { /* @var $messageEntry MessageEntry */ - if (!$messageEntry->getUser()->count()) { + if (!$messageEntry->getUser()->exists()) { if ($integrityController->showFix("Deleting message entry id " . $messageEntry->id . " without existing user!")) { $messageEntry->delete(); } } - if (!$messageEntry->message) { + if (!$messageEntry->getMessage()->exists()) { if ($integrityController->showFix("Deleting message entry id " . $messageEntry->id . " without existing conversation!")) { $messageEntry->delete(); } @@ -69,22 +71,37 @@ public static function onIntegrityCheck($event) foreach (UserMessage::find()->each() as $userMessage) { /* @var $userMessage UserMessage */ - if (!$userMessage->getUser()->count()) { + if (!$userMessage->getUser()->exists()) { if ($integrityController->showFix("Deleting user message id " . $userMessage->message_id . " without existing user!")) { $userMessage->delete(); } } + if (!$userMessage->getMessage()->exists()) { + if ($integrityController->showFix("Deleting user message id " . $userMessage->message_id . " without existing conversation!")) { + $userMessage->delete(); + } + } } $integrityController->showTestHeadline("Mail Module (" . UserMessageTag::find()->count() . " user message tag entries)"); foreach (UserMessageTag::find()->each() as $messageTag) { /* @var $messageTag UserMessageTag */ - if (!$messageTag->getUser()->count()) { + if (!$messageTag->getUser()->exists()) { if ($integrityController->showFix("Deleting user tag id " . $messageTag->id . " without existing user!")) { $messageTag->delete(); } } + if (!$messageTag->getMessage()->exists()) { + if ($integrityController->showFix("Deleting user tag id " . $messageTag->id . " without existing conversation!")) { + $messageTag->delete(); + } + } + if (!$messageTag->getTag()->exists()) { + if ($integrityController->showFix("Deleting user tag id " . $messageTag->id . " without existing tag!")) { + $messageTag->delete(); + } + } } } catch (\Throwable $e) { Yii::error($e); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 4998c0e8..9eba2948 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -11,6 +11,7 @@ Changelog - Enh #466: Convert swagger docs to OpenAPI 3.0 - Fix #469: In mail notifications, use core button for "Reply now", to allow auto-contrast - Fix #470: Email inline style from Sass variables, e.g. when overwriting `$mail-font-family` in the Custom SCSS field +- Fix #404: Fix wrong user message records 3.3.5 (September 30, 2025) -------------------------- diff --git a/migrations/m251219_093008_fix_user_message.php b/migrations/m251219_093008_fix_user_message.php new file mode 100644 index 00000000..a24ba270 --- /dev/null +++ b/migrations/m251219_093008_fix_user_message.php @@ -0,0 +1,34 @@ +select('id')], + ['NOT IN', 'user_id', User::find()->select('id')], + ]); + + $this->safeAddForeignKey('fk_mail_user_message_user_id', 'user_message', 'user_id', 'user', 'id', 'CASCADE'); + $this->safeAddForeignKey('fk_mail_user_message_message_id', 'user_message', 'message_id', 'message', 'id', 'CASCADE'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + echo "m251219_093008_fix_user_message cannot be reverted.\n"; + + return false; + } +} diff --git a/models/UserMessageTag.php b/models/UserMessageTag.php index 414935cb..3dd6d51c 100644 --- a/models/UserMessageTag.php +++ b/models/UserMessageTag.php @@ -41,6 +41,14 @@ public static function create(UserMessage $message, MessageTag $userTag) (new static(['message_id' => $message->message_id, 'user_id' => $message->user_id, 'tag_id' => $userTag->id]))->save(); } + /** + * @return ActiveQuery + */ + public function getMessage() + { + return $this->hasOne(Message::class, ['id' => 'message_id']); + } + /** * @return ActiveQuery */ From a8349e88d831a1c90164fe37f804dd81909fd5a4 Mon Sep 17 00:00:00 2001 From: Yuriy Bakhtin Date: Tue, 23 Dec 2025 13:05:21 +0300 Subject: [PATCH 2/2] Remove foreign keys of the table user_message --- .../m251219_093008_fix_user_message.php | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 migrations/m251219_093008_fix_user_message.php diff --git a/migrations/m251219_093008_fix_user_message.php b/migrations/m251219_093008_fix_user_message.php deleted file mode 100644 index a24ba270..00000000 --- a/migrations/m251219_093008_fix_user_message.php +++ /dev/null @@ -1,34 +0,0 @@ -select('id')], - ['NOT IN', 'user_id', User::find()->select('id')], - ]); - - $this->safeAddForeignKey('fk_mail_user_message_user_id', 'user_message', 'user_id', 'user', 'id', 'CASCADE'); - $this->safeAddForeignKey('fk_mail_user_message_message_id', 'user_message', 'message_id', 'message', 'id', 'CASCADE'); - } - - /** - * {@inheritdoc} - */ - public function safeDown() - { - echo "m251219_093008_fix_user_message cannot be reverted.\n"; - - return false; - } -}