Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
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 |
topic.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\feed;
015
016 use phpbb\feed\exception\no_feed_exception;
017 use phpbb\feed\exception\no_topic_exception;
018 use phpbb\feed\exception\unauthorized_forum_exception;
019 use phpbb\feed\exception\unauthorized_topic_exception;
020
021 /**
022 * Topic feed for a specific topic
023 *
024 * This will give you the last {$this->num_items} posts made within this topic.
025 */
026 class topic extends post_base
027 {
028 protected $topic_id = 0;
029 protected $forum_id = 0;
030 protected $topic_data = array();
031
032 /**
033 * Set the Topic ID
034 *
035 * @param int $topic_id Topic ID
036 * @return \phpbb\feed\topic
037 */
038 public function set_topic_id($topic_id)
039 {
040 $this->topic_id = (int) $topic_id;
041
042 return $this;
043 }
044
045 /**
046 * {@inheritdoc}
047 */
048 public function open()
049 {
050 $sql = 'SELECT f.forum_options, f.forum_password, t.topic_id, t.forum_id, t.topic_visibility, t.topic_title, t.topic_time, t.topic_views, t.topic_posts_approved, t.topic_type
051 FROM ' . TOPICS_TABLE . ' t
052 LEFT JOIN ' . FORUMS_TABLE . ' f
053 ON (f.forum_id = t.forum_id)
054 WHERE t.topic_id = ' . $this->topic_id;
055 $result = $this->db->sql_query($sql);
056 $this->topic_data = $this->db->sql_fetchrow($result);
057 $this->db->sql_freeresult($result);
058
059 if (empty($this->topic_data))
060 {
061 throw new no_topic_exception($this->topic_id);
062 }
063
064 $this->forum_id = (int) $this->topic_data['forum_id'];
065
066 // Make sure topic is either approved or user authed
067 if ($this->topic_data['topic_visibility'] != ITEM_APPROVED && !$this->auth->acl_get('m_approve', $this->forum_id))
068 {
069 if ($this->user->data['user_id'] != ANONYMOUS)
070 {
071 send_status_line(403, 'Forbidden');
072 }
073 else
074 {
075 send_status_line(401, 'Unauthorized');
076 }
077 throw new unauthorized_topic_exception($this->topic_id);
078 }
079
080 // Make sure forum is not excluded from feed
081 if (phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $this->topic_data['forum_options']))
082 {
083 throw new no_feed_exception();
084 }
085
086 // Make sure we can read this forum
087 if (!$this->auth->acl_get('f_read', $this->forum_id))
088 {
089 if ($this->user->data['user_id'] != ANONYMOUS)
090 {
091 send_status_line(403, 'Forbidden');
092 }
093 else
094 {
095 send_status_line(401, 'Unauthorized');
096 }
097 throw new unauthorized_forum_exception($this->forum_id);
098 }
099
100 // Make sure forum is not passworded or user is authed
101 if ($this->topic_data['forum_password'])
102 {
103 $forum_ids_passworded = $this->get_passworded_forums();
104
105 if (isset($forum_ids_passworded[$this->forum_id]))
106 {
107 if ($this->user->data['user_id'] != ANONYMOUS)
108 {
109 send_status_line(403, 'Forbidden');
110 }
111 else
112 {
113 send_status_line(401, 'Unauthorized');
114 }
115 throw new unauthorized_forum_exception($this->forum_id);
116 }
117
118 unset($forum_ids_passworded);
119 }
120
121 parent::open();
122 }
123
124 /**
125 * {@inheritdoc}
126 */
127 protected function get_sql()
128 {
129 parent::fetch_attachments();
130
131 $this->sql = array(
132 'SELECT' => 'p.post_id, p.post_time, p.post_edit_time, p.post_visibility, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, p.post_attachment, ' .
133 'u.username, u.user_id',
134 'FROM' => array(
135 POSTS_TABLE => 'p',
136 USERS_TABLE => 'u',
137 ),
138 'WHERE' => 'p.topic_id = ' . $this->topic_id . '
139 AND ' . $this->content_visibility->get_visibility_sql('post', $this->forum_id, 'p.') . '
140 AND p.poster_id = u.user_id',
141 'ORDER_BY' => 'p.post_time DESC, p.post_id DESC',
142 );
143
144 return true;
145 }
146
147 /**
148 * {@inheritdoc}
149 */
150 public function adjust_item(&$item_row, &$row)
151 {
152 parent::adjust_item($item_row, $row);
153
154 $item_row['forum_id'] = $this->forum_id;
155 }
156
157 /**
158 * {@inheritdoc}
159 */
160 public function get_item()
161 {
162 return ($row = parent::get_item()) ? array_merge($this->topic_data, $row) : $row;
163 }
164 }
165