Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
forum.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 namespace phpbb\notification\type;
015
016 /**
017 * Forum notifications class
018 * This class handles notifications for replies to a topic in a forum user subscribed to
019 */
020
021 class forum extends \phpbb\notification\type\post
022 {
023 /**
024 * Get notification type name
025 *
026 * @return string
027 */
028 public function get_type()
029 {
030 return 'notification.type.forum';
031 }
032
033 /**
034 * Notification option data (for outputting to the user)
035 *
036 * @var bool|array False if the service should use its default data
037 * Array of data (including keys 'id', 'lang', and 'group')
038 */
039 static public $notification_option = [
040 'lang' => 'NOTIFICATION_TYPE_FORUM',
041 'group' => 'NOTIFICATION_GROUP_POSTING',
042 ];
043
044 /**
045 * Find the users who want to receive notifications
046 *
047 * @param array $post Data from submit_post
048 * @param array $options Options for finding users for notification
049 *
050 * @return array
051 */
052 public function find_users_for_notification($post, $options = [])
053 {
054 $options = array_merge([
055 'ignore_users' => [],
056 ], $options);
057
058 $users = [];
059
060 $sql = 'SELECT user_id
061 FROM ' . FORUMS_WATCH_TABLE . '
062 WHERE forum_id = ' . (int) $post['forum_id'] . '
063 AND notify_status = ' . NOTIFY_YES . '
064 AND user_id <> ' . (int) $post['poster_id'];
065 $result = $this->db->sql_query($sql);
066 while ($row = $this->db->sql_fetchrow($result))
067 {
068 $users[] = (int) $row['user_id'];
069 }
070 $this->db->sql_freeresult($result);
071
072 $notify_users = $this->get_authorised_recipients($users, $post['forum_id'], $options, true);
073
074 if (empty($notify_users))
075 {
076 return [];
077 }
078
079 // Try to find the users who already have been notified about replies and have not read them
080 // Just update their notifications
081 $notified_users = $this->notification_manager->get_notified_users($this->get_type(), [
082 'item_parent_id' => static::get_item_parent_id($post),
083 'read' => 0,
084 ]);
085
086 foreach ($notified_users as $user => $notification_data)
087 {
088 unset($notify_users[$user]);
089
090 /** @var post $notification */
091 $notification = $this->notification_manager->get_item_type_class($this->get_type(), $notification_data);
092 $update_responders = $notification->add_responders($post);
093 if (!empty($update_responders))
094 {
095 $this->notification_manager->update_notification($notification, $update_responders, [
096 'item_parent_id' => self::get_item_parent_id($post),
097 'read' => 0,
098 'user_id' => $user,
099 ]);
100 }
101 }
102
103 return $notify_users;
104 }
105
106 /**
107 * Get email template
108 *
109 * @return string|bool
110 */
111 public function get_email_template()
112 {
113 return 'forum_notify';
114 }
115
116 /**
117 * Get email template variables
118 *
119 * @return array
120 */
121 public function get_email_template_variables()
122 {
123 if ($this->get_data('post_username'))
124 {
125 $username = $this->get_data('post_username');
126 }
127 else
128 {
129 $username = $this->user_loader->get_username($this->get_data('poster_id'), 'username');
130 }
131
132 return [
133 'AUTHOR_NAME' => html_entity_decode($username, ENT_COMPAT),
134 'FORUM_NAME' => html_entity_decode(censor_text($this->get_data('forum_name')), ENT_COMPAT),
135 'POST_SUBJECT' => html_entity_decode(censor_text($this->get_data('post_subject')), ENT_COMPAT),
136 'TOPIC_TITLE' => html_entity_decode(censor_text($this->get_data('topic_title')), ENT_COMPAT),
137
138 'U_VIEW_POST' => generate_board_url() . "/viewtopic.{$this->php_ext}?p={$this->item_id}#p{$this->item_id}",
139 'U_NEWEST_POST' => generate_board_url() . "/viewtopic.{$this->php_ext}?t={$this->item_parent_id}&e=1&view=unread#unread",
140 'U_TOPIC' => generate_board_url() . "/viewtopic.{$this->php_ext}?t={$this->item_parent_id}",
141 'U_VIEW_TOPIC' => generate_board_url() . "/viewtopic.{$this->php_ext}?t={$this->item_parent_id}",
142 'U_FORUM' => generate_board_url() . "/viewforum.{$this->php_ext}?f={$this->get_data('forum_id')}",
143 'U_STOP_WATCHING_FORUM' => generate_board_url() . "/viewforum.{$this->php_ext}?uid={$this->user_id}&f={$this->get_data('forum_id')}&unwatch=forum",
144 ];
145 }
146 }
147