|
1
|
|
|
<?php |
|
2
|
|
|
/** |
|
3
|
|
|
* |
|
4
|
|
|
* @package sitemaker |
|
5
|
|
|
* @copyright (c) 2016 Daniel A. (blitze) |
|
6
|
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 |
|
7
|
|
|
* |
|
8
|
|
|
*/ |
|
9
|
|
|
|
|
10
|
|
|
namespace blitze\content\services; |
|
11
|
|
|
|
|
12
|
|
|
class topic |
|
13
|
|
|
{ |
|
14
|
|
|
/** @var \phpbb\config\config */ |
|
15
|
|
|
protected $config; |
|
16
|
|
|
|
|
17
|
|
|
/** @var \phpbb\controller\helper */ |
|
18
|
|
|
protected $controller_helper; |
|
19
|
|
|
|
|
20
|
|
|
/** @var \phpbb\event\dispatcher_interface */ |
|
21
|
|
|
protected $phpbb_dispatcher; |
|
22
|
|
|
|
|
23
|
|
|
/** @var \phpbb\language\language */ |
|
24
|
|
|
protected $language; |
|
25
|
|
|
|
|
26
|
|
|
/** @var \phpbb\template\template */ |
|
27
|
|
|
protected $template; |
|
28
|
|
|
|
|
29
|
|
|
/** @var \phpbb\user */ |
|
30
|
|
|
protected $user; |
|
31
|
|
|
|
|
32
|
|
|
/* @var \blitze\content\services\helper */ |
|
33
|
|
|
protected $helper; |
|
34
|
|
|
|
|
35
|
|
|
/** |
|
36
|
|
|
* Construct |
|
37
|
|
|
* |
|
38
|
|
|
* @param \phpbb\config\config $config Config object |
|
39
|
|
|
* @param \phpbb\controller\helper $controller_helper Controller Helper object |
|
40
|
|
|
* @param \phpbb\event\dispatcher_interface $phpbb_dispatcher Event dispatcher object |
|
41
|
|
|
* @param \phpbb\language\language $language Language object |
|
42
|
|
|
* @param \phpbb\template\template $template Template object |
|
43
|
|
|
* @param \phpbb\user $user User object |
|
44
|
|
|
* @param \blitze\content\services\helper $helper Content helper object |
|
45
|
|
|
*/ |
|
46
|
|
|
public function __construct(\phpbb\config\config $config, \phpbb\controller\helper $controller_helper, \phpbb\event\dispatcher_interface $phpbb_dispatcher, \phpbb\language\language $language, \phpbb\template\template $template, \phpbb\user $user, \blitze\content\services\helper $helper) |
|
47
|
|
|
{ |
|
48
|
|
|
$this->config = $config; |
|
49
|
|
|
$this->controller_helper = $controller_helper; |
|
50
|
|
|
$this->phpbb_dispatcher = $phpbb_dispatcher; |
|
51
|
|
|
$this->language = $language; |
|
52
|
|
|
$this->template = $template; |
|
53
|
|
|
$this->user = $user; |
|
54
|
|
|
$this->helper = $helper; |
|
55
|
|
|
} |
|
56
|
|
|
|
|
57
|
|
|
/** |
|
58
|
|
|
* @param string $type |
|
59
|
|
|
* @param array $topic_data |
|
60
|
|
|
* @param array $topic_tracking_info |
|
61
|
|
|
* @return array |
|
62
|
|
|
*/ |
|
63
|
|
|
public function get_min_topic_info($type, array &$topic_data, array $topic_tracking_info) |
|
64
|
|
|
{ |
|
65
|
|
|
$topic_id = $topic_data['topic_id']; |
|
66
|
|
|
$post_unread = (isset($topic_tracking_info[$topic_id]) && $topic_data['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false; |
|
67
|
|
|
$topic_data['topic_url'] = $this->get_topic_url($type, $topic_data); |
|
68
|
|
|
|
|
69
|
|
|
return array( |
|
70
|
|
|
'TOPIC_ID' => $topic_data['topic_id'], |
|
71
|
|
|
'TOPIC_VIEWS' => $topic_data['topic_views'], |
|
72
|
|
|
'TOPIC_TITLE' => censor_text($topic_data['topic_title']), |
|
73
|
|
|
'TOPIC_DATE' => $this->user->format_date($topic_data['topic_time']), |
|
74
|
|
|
'TOPIC_URL' => $topic_data['topic_url'], |
|
75
|
|
|
'MINI_POST' => ($post_unread) ? $this->user->img('icon_post_target_unread', 'UNREAD_POST') : $this->user->img('icon_post_target', 'POST'), |
|
76
|
|
|
'S_REQ_MOD_INPUT' => $topic_data['req_mod_input'], |
|
77
|
|
|
'S_UNREAD_POST' => $post_unread, |
|
78
|
|
|
); |
|
79
|
|
|
} |
|
80
|
|
|
|
|
81
|
|
|
/** |
|
82
|
|
|
* @param string $type |
|
83
|
|
|
* @param array $topic_data |
|
84
|
|
|
* @param array $post_data |
|
85
|
|
|
* @param array $users_cache |
|
86
|
|
|
* @param array $attachments |
|
87
|
|
|
* @param array $topic_tracking_info |
|
88
|
|
|
* @param array $update_count |
|
89
|
|
|
* @return array |
|
90
|
|
|
*/ |
|
91
|
|
|
public function get_summary_template_data($type, array &$topic_data, array $post_data, array $users_cache, array &$attachments, array $topic_tracking_info, array &$update_count) |
|
92
|
|
|
{ |
|
93
|
|
|
$tpl_data = array_merge( |
|
94
|
|
|
(empty($topic_data['topic_url'])) ? $this->get_min_topic_info($type, $topic_data, $topic_tracking_info) : array(), |
|
95
|
|
|
array( |
|
96
|
|
|
'POST_ID' => $post_data['post_id'], |
|
97
|
|
|
'POSTER_ID' => $post_data['poster_id'], |
|
98
|
|
|
'MESSAGE' => $this->get_parsed_text($post_data, $attachments, $update_count), |
|
99
|
|
|
|
|
100
|
|
|
'S_TOPIC_TYPE' => $topic_data['topic_type'], |
|
101
|
|
|
'S_HAS_ATTACHMENTS' => $topic_data['topic_attachment'], |
|
102
|
|
|
'S_HAS_POLL' => (bool) $post_data['poll_start'], |
|
103
|
|
|
), |
|
104
|
|
|
$this->get_topic_status_data($type, $topic_data, $post_data), |
|
105
|
|
|
array_change_key_case($users_cache[$post_data['poster_id']], CASE_UPPER) |
|
106
|
|
|
); |
|
107
|
|
|
|
|
108
|
|
|
/** |
|
109
|
|
|
* Event to modify template data |
|
110
|
|
|
* |
|
111
|
|
|
* @event blitze.content.modify_template_data |
|
112
|
|
|
* @var array tpl_data Array containing template data |
|
113
|
|
|
*/ |
|
114
|
|
|
$vars = array('tpl_data'); |
|
115
|
|
|
extract($this->phpbb_dispatcher->trigger_event('blitze.content.modify_template_data', compact($vars))); |
|
116
|
|
|
|
|
117
|
|
|
return $tpl_data; |
|
118
|
|
|
} |
|
119
|
|
|
|
|
120
|
|
|
/** |
|
121
|
|
|
* @param string $type |
|
122
|
|
|
* @param array $topic_data |
|
123
|
|
|
* @param array $post_data |
|
124
|
|
|
* @param array $users_cache |
|
125
|
|
|
* @param array $attachments |
|
126
|
|
|
* @param array $topic_tracking_info |
|
127
|
|
|
* @param array $update_count |
|
128
|
|
|
* @param string $mode |
|
129
|
|
|
* @return array |
|
130
|
|
|
*/ |
|
131
|
|
|
public function get_detail_template_data($type, array &$topic_data, array $post_data, array $users_cache, array &$attachments, array $topic_tracking_info, array &$update_count, $mode = '') |
|
132
|
|
|
{ |
|
133
|
|
|
return array_merge( |
|
134
|
|
|
$this->get_summary_template_data($type, $topic_data, $post_data, $users_cache, $attachments, $topic_tracking_info, $update_count), |
|
135
|
|
|
$this->show_delete_reason($post_data, $users_cache), |
|
136
|
|
|
$this->show_edit_reason($post_data, $users_cache), |
|
137
|
|
|
array( |
|
138
|
|
|
'S_DISPLAY_NOTICE' => $this->helper->display_attachments_notice($post_data), |
|
139
|
|
|
'S_DELETE_PERMANENT' => $this->helper->permanent_delete_allowed($post_data), |
|
140
|
|
|
'S_IS_LOCKED' => $this->helper->topic_is_locked($topic_data), |
|
141
|
|
|
|
|
142
|
|
|
'U_EDIT' => $this->helper->get_edit_url($post_data, $topic_data, $mode), |
|
143
|
|
|
'U_QUOTE' => $this->helper->get_quote_url($post_data, $topic_data), |
|
144
|
|
|
'U_INFO' => $this->helper->get_info_url($post_data), |
|
145
|
|
|
'U_DELETE' => $this->helper->get_delete_url($post_data, $topic_data, $mode), |
|
146
|
|
|
'U_REPORT' => $this->helper->can_report_post($post_data['forum_id']) ? $this->controller_helper->route('phpbb_report_post_controller', array('id' => $post_data['post_id'])) : '', |
|
147
|
|
|
'U_APPROVE_ACTION' => $this->helper->get_approve_url($post_data, $topic_data['topic_url']), |
|
148
|
|
|
'U_MCP_EDIT' => $this->helper->get_mcp_edit_url($post_data, $topic_data), |
|
149
|
|
|
'U_MCP_RESTORE' => $this->helper->get_mcp_restore_url($post_data, $topic_data), |
|
150
|
|
|
'U_NOTES' => $this->helper->get_notes_url($post_data), |
|
151
|
|
|
'U_WARN' => $this->helper->get_warning_url($post_data), |
|
152
|
|
|
) |
|
153
|
|
|
); |
|
154
|
|
|
} |
|
155
|
|
|
|
|
156
|
|
|
/** |
|
157
|
|
|
* @param string $type |
|
158
|
|
|
* @param array $topic_data |
|
159
|
|
|
* @return string |
|
160
|
|
|
*/ |
|
161
|
|
|
public function get_topic_url($type, array $topic_data) |
|
162
|
|
|
{ |
|
163
|
|
|
return $this->controller_helper->route('blitze_content_show', array( |
|
164
|
|
|
'type' => $type, |
|
165
|
|
|
'topic_id' => $topic_data['topic_id'], |
|
166
|
|
|
'slug' => $topic_data['topic_slug'] |
|
167
|
|
|
)); |
|
168
|
|
|
} |
|
169
|
|
|
|
|
170
|
|
|
/** |
|
171
|
|
|
* @param array $attachments |
|
172
|
|
|
* @param int $post_id |
|
173
|
|
|
* @param string $handle |
|
174
|
|
|
* @return void |
|
175
|
|
|
*/ |
|
176
|
|
|
public function show_attachments(array $attachments, $post_id, $handle = 'attachment') |
|
177
|
|
|
{ |
|
178
|
|
|
if (!empty($attachments[$post_id])) |
|
179
|
|
|
{ |
|
180
|
|
|
foreach ($attachments[$post_id] as $attachment) |
|
181
|
|
|
{ |
|
182
|
|
|
$this->template->assign_block_vars($handle, array( |
|
183
|
|
|
'DISPLAY_ATTACHMENT' => $attachment) |
|
184
|
|
|
); |
|
185
|
|
|
} |
|
186
|
|
|
} |
|
187
|
|
|
} |
|
188
|
|
|
|
|
189
|
|
|
/** |
|
190
|
|
|
* @param array $post_data |
|
191
|
|
|
* @param array $attachments |
|
192
|
|
|
* @param array $update_count |
|
193
|
|
|
* @return array |
|
194
|
|
|
*/ |
|
195
|
|
|
protected function get_parsed_text(array $post_data, array &$attachments, array &$update_count) |
|
196
|
|
|
{ |
|
197
|
|
|
$parse_flags = ($post_data['bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES; |
|
198
|
|
|
$message = generate_text_for_display($post_data['post_text'], $post_data['bbcode_uid'], $post_data['bbcode_bitfield'], $parse_flags, true); |
|
199
|
|
|
|
|
200
|
|
|
if (!empty($attachments[$post_data['post_id']])) |
|
201
|
|
|
{ |
|
202
|
|
|
parse_attachments($post_data['forum_id'], $message, $attachments[$post_data['post_id']], $update_count); |
|
203
|
|
|
} |
|
204
|
|
|
|
|
205
|
|
|
return $message; |
|
206
|
|
|
} |
|
207
|
|
|
|
|
208
|
|
|
/** |
|
209
|
|
|
* @param string $type |
|
210
|
|
|
* @param array $topic_data |
|
211
|
|
|
* @param array $post_data |
|
212
|
|
|
* @return array |
|
213
|
|
|
*/ |
|
214
|
|
|
protected function get_topic_status_data($type, array $topic_data, array $post_data) |
|
215
|
|
|
{ |
|
216
|
|
|
return array( |
|
217
|
|
|
'S_POST_UNAPPROVED' => $this->helper->post_is_unapproved($post_data), |
|
218
|
|
|
'S_POSTS_UNAPPROVED' => $this->helper->topic_has_unapproved_posts($topic_data), |
|
219
|
|
|
'S_TOPIC_REPORTED' => $this->helper->topic_is_reported($topic_data), |
|
220
|
|
|
'S_TOPIC_DELETED' => $topic_data['topic_visibility'] == ITEM_DELETED, |
|
221
|
|
|
|
|
222
|
|
|
'U_MINI_POST' => $this->get_mini_post_url($topic_data, $post_data), |
|
223
|
|
|
'U_MCP_REPORT' => $this->helper->get_mcp_report_url($post_data), |
|
224
|
|
|
'U_MCP_REVIEW' => $this->helper->get_mcp_review_url($type, $topic_data['topic_id']), |
|
225
|
|
|
'U_MCP_QUEUE' => $this->helper->get_mcp_queue_url($topic_data['topic_id']), |
|
226
|
|
|
); |
|
227
|
|
|
} |
|
228
|
|
|
|
|
229
|
|
|
/** |
|
230
|
|
|
* @param array $topic_data |
|
231
|
|
|
* @param array $post_data |
|
232
|
|
|
* @return array |
|
233
|
|
|
*/ |
|
234
|
|
|
protected function get_mini_post_url(array $topic_data, array $post_data) |
|
235
|
|
|
{ |
|
236
|
|
|
if ($topic_data['topic_first_post_id'] === $post_data['post_id']) |
|
237
|
|
|
{ |
|
238
|
|
|
return append_sid($topic_data['topic_url'], 'view=unread') . '#unread'; |
|
239
|
|
|
} |
|
240
|
|
|
|
|
241
|
|
|
return append_sid($topic_data['topic_url'], 'p=' . $post_data['post_id']) . '#p' . $post_data['post_id']; |
|
242
|
|
|
} |
|
243
|
|
|
|
|
244
|
|
|
/** |
|
245
|
|
|
* @param array $row |
|
246
|
|
|
* @param array $users_cache |
|
247
|
|
|
* @return array |
|
248
|
|
|
*/ |
|
249
|
|
|
protected function show_edit_reason(array $row, array $users_cache) |
|
250
|
|
|
{ |
|
251
|
|
|
$l_edited_by = $edit_reason = ''; |
|
252
|
|
|
if (($row['post_edit_count'] && $this->config['display_last_edited']) || $row['post_edit_reason']) |
|
253
|
|
|
{ |
|
254
|
|
|
$display_username = $users_cache[$row['poster_id']]['username_full']; |
|
255
|
|
|
$l_edited_by = $this->language->lang('EDITED_TIMES_TOTAL', (int) $row['post_edit_count'], $display_username, $this->user->format_date($row['post_edit_time'], false, true)); |
|
256
|
|
|
$edit_reason = $row['post_edit_reason']; |
|
257
|
|
|
} |
|
258
|
|
|
|
|
259
|
|
|
return array( |
|
260
|
|
|
'EDITED_MESSAGE' => $l_edited_by, |
|
261
|
|
|
'EDIT_REASON' => $edit_reason, |
|
262
|
|
|
); |
|
263
|
|
|
} |
|
264
|
|
|
|
|
265
|
|
|
/** |
|
266
|
|
|
* @param array $row |
|
267
|
|
|
* @param array $users_cache |
|
268
|
|
|
* @return array |
|
269
|
|
|
*/ |
|
270
|
|
|
protected function show_delete_reason(array $row, array $users_cache) |
|
271
|
|
|
{ |
|
272
|
|
|
$l_deleted_by = $delete_reason = $l_deleted_message = ''; |
|
273
|
|
|
$s_post_deleted = ($row['post_visibility'] == ITEM_DELETED) ? true : false; |
|
274
|
|
|
|
|
275
|
|
|
if ($s_post_deleted && $row['post_delete_user']) |
|
276
|
|
|
{ |
|
277
|
|
|
$display_postername = $users_cache[$row['poster_id']]['username_full']; |
|
|
|
|
|
|
278
|
|
|
$display_username = $users_cache[$row['post_delete_user']]['username_full']; |
|
279
|
|
|
|
|
280
|
|
|
$l_deleted_message = $this->get_deleted_message(); |
|
|
|
|
|
|
281
|
|
|
$l_deleted_by = $this->language->lang('DELETED_INFORMATION', $display_username, $this->user->format_date($row['post_delete_time'], false, true)); |
|
282
|
|
|
$delete_reason = $row['post_delete_reason']; |
|
283
|
|
|
} |
|
284
|
|
|
|
|
285
|
|
|
return array( |
|
286
|
|
|
'DELETED_MESSAGE' => $l_deleted_by, |
|
287
|
|
|
'DELETE_REASON' => $delete_reason, |
|
288
|
|
|
'L_POST_DELETED_MESSAGE' => $l_deleted_message, |
|
289
|
|
|
'S_POST_DELETED' => $s_post_deleted, |
|
290
|
|
|
); |
|
291
|
|
|
} |
|
292
|
|
|
|
|
293
|
|
|
/** |
|
294
|
|
|
* @param array $row |
|
295
|
|
|
* @param string $display_postername |
|
296
|
|
|
* @param string $display_username |
|
297
|
|
|
* @return string |
|
298
|
|
|
*/ |
|
299
|
|
|
protected function get_delete_message(array $row, $display_postername, $display_username) |
|
300
|
|
|
{ |
|
301
|
|
|
if ($row['post_delete_reason']) |
|
302
|
|
|
{ |
|
303
|
|
|
return $this->language->lang('POST_DELETED_BY_REASON', $display_postername, $display_username, $this->user->format_date($row['post_delete_time'], false, true), $row['post_delete_reason']); |
|
304
|
|
|
} |
|
305
|
|
|
else |
|
306
|
|
|
{ |
|
307
|
|
|
return $this->language->lang('POST_DELETED_BY', $display_postername, $display_username, $this->user->format_date($row['post_delete_time'], false, true)); |
|
308
|
|
|
} |
|
309
|
|
|
} |
|
310
|
|
|
} |
|
311
|
|
|
|
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVarassignment in line 1 and the$higherassignment in line 2 are dead. The first because$myVaris never used and the second because$higheris always overwritten for every possible time line.