aboutsummaryrefslogtreecommitdiff
path: root/lib/models/Message.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/models/Message.class.php')
-rw-r--r--lib/models/Message.class.php343
1 files changed, 0 insertions, 343 deletions
diff --git a/lib/models/Message.class.php b/lib/models/Message.class.php
deleted file mode 100644
index 46493d6..0000000
--- a/lib/models/Message.class.php
+++ /dev/null
@@ -1,343 +0,0 @@
-<?php
-/**
- * Message.class.php
- * model class for table message
- *
- * 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 string $id alias column for message_id
- * @property string $message_id database column
- * @property string $autor_id database column
- * @property string $subject database column
- * @property string $message database column
- * @property int $show_adressees database column
- * @property int $mkdate database column
- * @property string $priority database column
- * @property SimpleORMapCollection|MessageUser[] $receivers has_many MessageUser
- * @property User $author belongs_to User
- * @property MessageUser $originator has_one MessageUser
- * @property Folder $attachment_folder has_one Folder
- */
-
-class Message extends SimpleORMap implements PrivacyObject
-{
- protected static function configure($config = [])
- {
- $config['db_table'] = 'message';
-
- $config['belongs_to']['author'] = [
- 'class_name' => User::class,
- 'foreign_key' => 'autor_id'
- ];
- $config['has_one']['originator'] = [
- 'class_name' => MessageUser::class,
- 'assoc_func' => 'findSentByMessageId',
- 'on_store' => 'store',
- 'on_delete' => 'delete'
- ];
- $config['has_many']['receivers'] = [
- 'class_name' => MessageUser::class,
- 'assoc_func' => 'findReceivedByMessageId',
- 'on_store' => 'store',
- 'on_delete' => 'delete'
- ];
- $config['has_one']['attachment_folder'] = [
- 'class_name' => Folder::class,
- 'assoc_foreign_key' => 'range_id',
- 'on_store' => 'store',
- 'on_delete' => 'delete'
- ];
-
- parent::configure($config);
- }
-
- public static function markAllAs($user_id = null, $state_of_flag = 1)
- {
- PersonalNotifications::markAsReadByHTML('message_%', $user_id ?: $GLOBALS['user']->id);
-
- $query = "UPDATE message_user
- SET readed = :flag
- WHERE user_id = :user_id
- AND snd_rec = 'rec' AND deleted = 0
- AND readed = :other_flag";
- $statement = DBManager::get()->prepare($query);
- return $statement->execute([
- 'user_id' => $user_id ?: $GLOBALS['user']->id,
- 'flag' => $state_of_flag ? 1 : 0,
- 'other_flag' => $state_of_flag ? 0 : 1
- ]);
- }
-
- public static function getUserTags($user_id = null)
- {
- $query = "SELECT DISTINCT tag
- FROM message_tags
- WHERE user_id = :user_id
- ORDER BY tag ASC";
- return DBManager::get()->fetchFirst($query, [
- ':user_id' => $user_id ?: $GLOBALS['user']->id,
- ], function ($tag) {
- return ucfirst($tag);
- });
- }
-
- public static function findNew($user_id, $receiver = true, $since = 0, $tag = null)
- {
- if ($tag) {
- $messages_data = DBManager::get()->prepare("
- SELECT message.*
- FROM message_user
- INNER JOIN message ON (message_user.message_id = message.message_id)
- INNER JOIN message_tags ON (message_tags.message_id = message_user.message_id
- AND message_user.user_id = message_tags.user_id)
- WHERE message_user.user_id = :me
- AND snd_rec = :sender_receiver
- AND message_tags.tag = :tag
- AND message_user.mkdate > :since
- ORDER BY message_user.mkdate ASC
- ");
- $messages_data->execute([
- 'me' => $user_id,
- 'tag' => $tag,
- 'sender_receiver' => $receiver ? "rec" : "snd",
- 'since' => $since
- ]);
- } else {
- $messages_data = DBManager::get()->prepare("
- SELECT message.*
- FROM message_user
- INNER JOIN message ON (message_user.message_id = message.message_id)
- WHERE message_user.user_id = :me
- AND snd_rec = :sender_receiver
- AND message_user.mkdate > :since
- ORDER BY message_user.mkdate ASC
- ");
- $messages_data->execute([
- 'me' => $user_id,
- 'sender_receiver' => $receiver ? "rec" : "snd",
- 'since' => $since
- ]);
- }
- $messages_data->setFetchMode(PDO::FETCH_ASSOC);
- $messages = [];
- foreach ($messages_data as $data) {
- $messages[] = Message::buildExisting($data);
- }
- return $messages;
- }
-
- public function getSender()
- {
- return $this->author;
- }
-
- public function getRecipients()
- {
- if ($this->relations['receivers'] === null) {
- $sql = "SELECT user_id,vorname,nachname,username,title_front,title_rear,perms,motto
- FROM message_user
- INNER JOIN auth_user_md5 aum USING (user_id)
- LEFT JOIN user_info ui USING (user_id)
- WHERE message_id = ? AND snd_rec = 'rec'
- ORDER BY Nachname, Vorname";
- $params = [$this->id];
- } else {
- $sql = "SELECT user_id,vorname,nachname,username,title_front,title_rear,perms,motto
- FROM auth_user_md5 AS aum
- LEFT JOIN user_info ui USING (user_id)
- WHERE aum.user_id IN (?)
- ORDER BY Nachname, Vorname";
- $params = [$this->receivers->pluck('user_id')];
- }
- $db = DBManager::get();
- return new SimpleCollection(
- $db->fetchAll($sql,
- $params,
- function ($data) {
- $user_id = $data['user_id'];
- unset($data['user_id']);
- $user = User::build($data);
- $ret = $user->toArray('username vorname nachname');
- $ret['fullname'] = $user->getFullName();
- $ret['user_id'] = $user_id;
- return $ret;
- })
- );
- }
-
- public function getNumRecipients()
- {
- return MessageUser::countBySQL("message_id=? AND snd_rec='rec'", [$this->id]);
- }
-
- public function markAsRead($user_id)
- {
- PersonalNotifications::markAsReadByHTML('message_'.$this->getId(), $user_id);
- return $this->markAs($user_id, 1);
- }
-
- public function markAsUnread($user_id)
- {
- return $this->markAs($user_id, 0);
- }
-
- private function markAs($user_id, $state_of_flag)
- {
- $changed = 0;
- $mu = [];
- if ($user_id == $this->autor_id) {
- $mu[] = $this->originator;
- }
- $receiver = MessageUser::findOneBySQL("message_id = ? AND user_id = ? AND snd_rec ='rec'", [$this->id, $user_id]);
- if ($receiver) {
- $mu[] = $receiver;
- }
- foreach ($mu as $message_user) {
- $message_user->readed = $state_of_flag;
- $changed += $message_user->store();
- }
- return $changed;
- }
-
- public function markAsAnswered($user_id)
- {
- $mu = MessageUser::findOneBySQL("message_id = ? AND user_id = ? AND snd_rec IN('rec','snd')", [$this->id, $user_id]);
- if ($mu) {
- $mu->answered = 1;
- return $mu->store();
- }
- }
-
- public function isRead($user_id = null)
- {
- $user_id || $user_id = $GLOBALS['user']->id;
- return (bool)MessageUser::countBySQL("message_id = ? AND user_id = ? AND snd_rec IN('rec','snd') AND readed = 1", [$this->message_id, $user_id]);
- }
-
- public function isAnswered($user_id = null)
- {
- $user_id || $user_id = $GLOBALS['user']->id;
- return (bool)MessageUser::countBySQL("message_id = ? AND user_id = ? AND snd_rec IN('rec','snd') AND answered = 1", [$this->message_id, $user_id]);
- }
-
- public static function send($sender, $recipients, $subject, $message)
- {
- if ($sender === 'cli') {
- $sender = '____%system%____';
- }
- $messaging = new \messaging();
- $result = $messaging->insert_message($message,
- $recipients,
- $sender,
- time(),
- $message_id = md5(uniqid('message', true)),
- false, // deleted
- '', // force email
- $subject);
- return $result ? self::find($message_id) : null;
- }
-
- public function permissionToRead($user_id = null)
- {
- $user_id || $user_id = $GLOBALS['user']->id;
- return (bool) MessageUser::countBySQL("message_id = ? AND user_id = ? AND snd_rec IN('rec','snd') AND deleted = 0", [$this->message_id, $user_id]);
- }
-
- /**
- * Returns all tags for the message for the given user.
- * @param null $user_id : user-id of the user that tags should be related. null if it's the current user.
- * @return array of string : tags
- */
- public function getTags($user_id = null)
- {
- $query = "SELECT tag
- FROM message_tags
- WHERE message_id = :message_id AND user_id = :user_id
- ORDER BY tag ASC";
- return DBManager::get()->fetchFirst($query, [
- 'message_id' => $this->id,
- 'user_id' => $user_id ?: $GLOBALS['user']->id,
- ], function ($tag) {
- return ucfirst($tag);
- });
- }
-
- public function addTag($tag, $user_id = null)
- {
- $user_id || $user_id = $GLOBALS['user']->id;
- $statement = DBManager::get()->prepare("
- INSERT INTO message_tags
- SET message_id = :message_id,
- user_id = :user_id,
- tag = :tag,
- mkdate = UNIX_TIMESTAMP()
- ON DUPLICATE KEY
- UPDATE chdate = UNIX_TIMESTAMP()
- ");
- return $statement->execute([
- 'message_id' => $this->getId(),
- 'user_id' => $user_id,
- 'tag' => mb_strtolower($tag)
- ]);
- }
-
- public function removeTag($tag, $user_id = null)
- {
- $user_id || $user_id = $GLOBALS['user']->id;
- $statement = DBManager::get()->prepare("
- DELETE FROM message_tags
- WHERE message_id = :message_id
- AND user_id = :user_id
- AND tag = :tag
- ");
- return $statement->execute([
- 'message_id' => $this->getId(),
- 'user_id' => $user_id,
- 'tag' => mb_strtolower($tag)
- ]);
- }
-
- public function getNumAttachments()
- {
- return FileRef::countBySql("INNER JOIN folders ON(folders.id = folder_id) WHERE folders.range_id = ?", [$this->id]);
- }
-
- /**
- * Deletes the message if all references in message_user indicate 'deleted'
- * @return bool
- */
- public function removeIfOrphaned()
- {
- if (!MessageUser::countBySQL("message_id = ? AND snd_rec IN('rec','snd') AND deleted = 0", [$this->message_id])) {
- return (bool)$this->delete();
- }
- return false;
- }
-
- /**
- * 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("autor_id = ?", [$storage->user_id]);
- if ($sorm) {
- $field_data = [];
- foreach ($sorm as $row) {
- $field_data[] = $row->toRawArray();
- }
- if ($field_data) {
- $storage->addTabularData(_('Nachrichten'), 'message', $field_data);
- }
- }
- }
-
-}