diff options
| author | Marcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de> | 2024-06-18 13:18:06 +0000 |
|---|---|---|
| committer | Marcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de> | 2024-06-18 13:18:06 +0000 |
| commit | 33fd1358507b4a5abb3dcebe78d407d0567717c1 (patch) | |
| tree | 6bd8f6959da4c3fc1b8907c0bbc28eb9e10d4a5a /lib/models/MessageUser.php | |
| parent | 42d46671c0309bddb71a91bbfdc5f2fa2e44384e (diff) | |
Deprecate `StudipAutoloader` and use composer's `autoload`
Closes #4282
Merge request studip/studip!3099
Diffstat (limited to 'lib/models/MessageUser.php')
| -rw-r--r-- | lib/models/MessageUser.php | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/lib/models/MessageUser.php b/lib/models/MessageUser.php new file mode 100644 index 0000000..0ae6dd5 --- /dev/null +++ b/lib/models/MessageUser.php @@ -0,0 +1,98 @@ +<?php +/** + * MessageUser.class.php + * model class for table message_user + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * @author mlunzena + * @copyright (c) Authors + * + * @property array $id alias for pk + * @property string $user_id database column + * @property string $message_id database column + * @property int $readed database column + * @property int $deleted database column + * @property string $snd_rec database column + * @property int $answered database column + * @property int $mkdate database column + * @property User $user belongs_to User + * @property Message $message belongs_to Message + */ + +class MessageUser extends SimpleORMap implements PrivacyObject +{ + protected static function configure($config = []) + { + $config['db_table'] = 'message_user'; + + $config['belongs_to']['user'] = [ + 'class_name' => User::class, + 'foreign_key' => 'user_id', + ]; + $config['belongs_to']['message'] = [ + 'class_name' => Message::class, + 'foreign_key' => 'message_id', + ]; + + $config['registered_callbacks']['after_store'][] = 'cleanUpTags'; + $config['registered_callbacks']['after_delete'][] = 'cleanUpTags'; + + parent::configure($config); + } + + public static function hasUnreadByUserId($user_id) + { + return self::countBySql("snd_rec = 'rec' AND readed = 0 AND user_id = ? AND deleted = 0", [$user_id]) > 0; + } + + public static function findSentByMessageId($message_id) + { + return self::findOneBySQL("message_id=? AND snd_rec='snd'", [$message_id]); + } + + public static function findReceivedByMessageId($message_id) + { + return self::findBySQL("message_id=? AND snd_rec='rec'", [$message_id]); + } + + public function cleanUpTags($callback) + { + $query = "DELETE FROM message_tags + WHERE message_id = :message_id AND user_id = :user_id"; + $statement = DBManager::get()->prepare($query); + $statement->bindValue(':message_id', $this['message_id']); + $statement->bindValue(':user_id', $this['user_id']); + if ($callback == 'after_delete') { + $statement->execute(); + } + if ($callback == 'after_store' && $this->isDirty("deleted") && $this['deleted']) { + $statement->execute(); + $this->message->removeIfOrphaned(); + } + return true; + } + + /** + * Export available data of a given user into a storage object + * (an instance of the StoredUserData class) for that user. + * + * @param StoredUserData $storage object to store data into + */ + public static function exportUserData(StoredUserData $storage) + { + $sorm = self::findBySQL("user_id = ?", [$storage->user_id]); + if ($sorm) { + $field_data = []; + foreach ($sorm as $row) { + $field_data[] = $row->toRawArray(); + } + if ($field_data) { + $storage->addTabularData(_('MessageUser'), 'message_user', $field_data); + } + } + } +} |
