From 5cb5944994cb49a18fe48ac14a997818983e8c39 Mon Sep 17 00:00:00 2001
From: Thomas Hackl <hackl@data-quest.de>
Date: Thu, 13 Jul 2023 13:47:55 +0200
Subject: [PATCH] check for valid matrix account and room

---
 MatrixPlugin.php | 18 +++++++++++-------
 plugin.manifest  |  2 +-
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/MatrixPlugin.php b/MatrixPlugin.php
index 0d2f503..c3b4d05 100644
--- a/MatrixPlugin.php
+++ b/MatrixPlugin.php
@@ -135,12 +135,13 @@ class MatrixPlugin extends StudIPPlugin implements StandardPlugin
      */
     public function invite($event, $membership)
     {
-        if ($matrix = MatrixAccount::findOneByUser_id($membership->user_id) &&
-                $room = MatrixRoom::findOneByRange_id($membership->seminar_id)) {
+        $matrix = MatrixAccount::findOneByUser_id($membership->user_id);
+        $room = MatrixRoom::findOneByRange_id($membership->seminar_id);
+        if (is_a($matrix, MatrixAccount::class) && is_a($room, MatrixRoom::class)) {
             MatrixClient::get()->inviteIntoRoom(
                 MatrixAccount::requireSystemAccount(),
                 $room->getLinkedRoom(),
-                $matrix->matrix_account_id
+                (string) $matrix->matrix_account_id
             );
         }
     }
@@ -153,8 +154,9 @@ class MatrixPlugin extends StudIPPlugin implements StandardPlugin
      */
     public function uninvite($event, $membership)
     {
-        if ($matrix = MatrixAccount::findOneByUser_id($membership->user_id) &&
-            $room = MatrixRoom::findOneByRange_id($membership->seminar_id)) {
+        $matrix = MatrixAccount::findOneByUser_id($membership->user_id);
+        $room = MatrixRoom::findOneByRange_id($membership->seminar_id);
+        if (is_a($matrix, MatrixAccount::class) && is_a($room, MatrixRoom::class)) {
             MatrixClient::get()->leaveRoom(
                 $matrix->getLinkedAccount(),
                 $room->getLinkedRoom()
@@ -171,7 +173,8 @@ class MatrixPlugin extends StudIPPlugin implements StandardPlugin
      */
     public function unregister($event, $user)
     {
-        if ($account = MatrixAccount::findOneByUser_id($user->id)) {
+        $account = MatrixAccount::findOneByUser_id($user->id);
+        if (is_a($account, MatrixAccount::class)) {
             if (MatrixClient::get()->deactivateAccount($account->getLinkedAccount())) {
                 $account->delete();
             }
@@ -186,7 +189,8 @@ class MatrixPlugin extends StudIPPlugin implements StandardPlugin
      */
     public function deleteRoom($event, $course)
     {
-        if ($room = MatrixRoom::findOneByRange_id($course->id)) {
+        $room = MatrixRoom::findOneByRange_id($course->id);
+        if (is_a($room, MatrixRoom::class)) {
             MatrixClient::get()->deleteRoom(
                 MatrixAccount::requireSystemAccount(),
                 $room->getLinkedRoom()
diff --git a/plugin.manifest b/plugin.manifest
index 630979a..7be83dc 100644
--- a/plugin.manifest
+++ b/plugin.manifest
@@ -1,7 +1,7 @@
 pluginname=Matrix-Chat
 pluginclassname=MatrixPlugin
 origin=data-quest
-version=1.4.4
+version=1.4.5
 screenshot=assets/images/matrix_logo.png
 description=Matrix chat for Stud.IP courses
 studipMinVersion=4.5
-- 
GitLab