Total Complexity | 198 |
Total Lines | 1089 |
Duplicated Lines | 0 % |
Changes | 0 |
Complex classes like Comments often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Comments, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
25 | class Comments extends Xoops\Module\Helper\HelperAbstract |
||
26 | { |
||
27 | const APPROVE_NONE = 0; |
||
28 | const APPROVE_ALL = 1; |
||
29 | const APPROVE_USER = 2; |
||
30 | const APPROVE_ADMIN = 3; |
||
31 | const STATUS_PENDING = 1; |
||
32 | const STATUS_ACTIVE = 2; |
||
33 | const STATUS_HIDDEN = 3; |
||
34 | const DISPLAY_OLDEST_FIRST = 0; |
||
35 | const DISPLAY_NEWEST_FIRST = 1; |
||
36 | |||
37 | /** |
||
38 | * Init the module |
||
39 | * |
||
40 | * @return null|void |
||
41 | */ |
||
42 | public function init() |
||
43 | { |
||
44 | $this->setDirname('comments'); |
||
45 | $this->loadLanguage('main'); |
||
46 | } |
||
47 | |||
48 | /** |
||
49 | * @return string |
||
50 | */ |
||
51 | public static function getInstance() |
||
54 | } |
||
55 | |||
56 | /** |
||
57 | * @return CommentsCommentHandler |
||
58 | */ |
||
59 | public function getHandlerComment() |
||
62 | } |
||
63 | |||
64 | /** |
||
65 | * @param string $config name of configuration variable |
||
66 | * |
||
67 | * @return mixed |
||
68 | */ |
||
69 | public function getUserConfig($config) |
||
70 | { |
||
71 | static $configs = array(); |
||
72 | static $fetched = false; |
||
73 | /* @var $helper Userconfigs */ |
||
74 | if (!$fetched && $this->xoops()->isUser() && $helper = $this->xoops()->getModuleHelper('userconfigs')) { |
||
75 | $config_handler = $helper->getHandlerConfig(); |
||
76 | $configs = $config_handler->getConfigsByUser( |
||
77 | $this->xoops()->user->getVar('uid'), |
||
78 | $this->getModule()->getVar('mid') |
||
79 | ); |
||
80 | } |
||
81 | $fetched = true; |
||
82 | return isset($configs[$config]) ? $configs[$config] : $this->getConfig($config); |
||
83 | } |
||
84 | |||
85 | /** |
||
86 | * @param CommentsComment $obj comment object |
||
87 | * |
||
88 | * @return void |
||
89 | */ |
||
90 | public function displayCommentForm(CommentsComment $obj) |
||
93 | } |
||
94 | |||
95 | public function displayNew() |
||
96 | { |
||
97 | $xoops = Xoops::getInstance(); |
||
98 | /* @var $obj CommentsComment */ |
||
99 | $obj = $this->getHandlerComment()->create(); |
||
100 | |||
101 | $itemid = Request::getInt('com_itemid'); |
||
102 | $modid = Request::getInt('com_modid'); |
||
103 | |||
104 | if (empty($modid)) { |
||
105 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
106 | } |
||
107 | |||
108 | $module = $xoops->getModuleById($modid); |
||
109 | if (!is_object($module)) { |
||
110 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
111 | } |
||
112 | |||
113 | if ((!$xoops->isAdminSide |
||
114 | && static::APPROVE_NONE == $xoops->getModuleConfig('com_rule', $module->getVar('dirname'))) |
||
115 | || (!$xoops->isUser() && !$xoops->getModuleConfig('com_anonpost', $module->getVar('dirname'))) |
||
116 | || !$xoops->isModule()) { |
||
117 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
118 | } |
||
119 | /* @var $plugin CommentsPluginInterface */ |
||
120 | if (($plugin = \Xoops\Module\Plugin::getPlugin($module->getVar('dirname'), 'comments')) |
||
121 | && $itemid > 0 && $modid > 0 |
||
122 | ) { |
||
123 | $xoops->header(); |
||
124 | $title = ''; |
||
125 | $text = ''; |
||
126 | $uid = 0; |
||
127 | $timestamp = 0; |
||
128 | if (is_array($itemInfo = $plugin->itemInfo($itemid))) { |
||
129 | $title = isset($itemInfo['title']) ? $itemInfo['title'] : $title; |
||
130 | $text = isset($itemInfo['text']) ? $itemInfo['text'] : $text; |
||
131 | $uid = isset($itemInfo['uid']) ? $itemInfo['uid'] : $uid; |
||
132 | $timestamp = isset($itemInfo['timestamp']) ? $itemInfo['timestamp'] : $timestamp; |
||
133 | } |
||
134 | |||
135 | echo $this->renderHeader($title, $text, $uid, $timestamp); |
||
136 | |||
137 | if (!preg_match("/^" . XoopsLocale::C_RE . "/i", $title)) { |
||
138 | $title = XoopsLocale::C_RE . " " . XoopsLocale::substr($title, 0, 56); |
||
139 | } |
||
140 | |||
141 | $obj->setVar('itemid', $itemid); |
||
142 | $obj->setVar('title', $title); |
||
143 | $obj->setVar('modid', $modid); |
||
144 | |||
145 | $this->displayCommentForm($obj); |
||
146 | $xoops->footer(); |
||
147 | } |
||
148 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
149 | } |
||
150 | |||
151 | public function displayPost() |
||
152 | { |
||
153 | $xoops = Xoops::getInstance(); |
||
154 | if (Request::getMethod()!=='POST') { |
||
155 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
156 | } |
||
157 | $id = Request::getInt('com_id'); |
||
158 | $modid = Request::getInt('com_modid'); |
||
159 | if (empty($modid)) { |
||
160 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
161 | } |
||
162 | |||
163 | /* @var $comment CommentsComment */ |
||
164 | $comment = $this->getHandlerComment()->get($id); |
||
165 | if (!is_object($comment)) { |
||
166 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
167 | } |
||
168 | |||
169 | if (!$comment->isNew()) { |
||
170 | $modid = $comment->getVar('modid'); |
||
171 | } else { |
||
172 | $comment->setVar('modid', $modid); |
||
173 | } |
||
174 | |||
175 | $module = $xoops->getModuleById($modid); |
||
176 | if (!is_object($module)) { |
||
177 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
178 | } |
||
179 | |||
180 | $moddir = $module->getVar('dirname'); |
||
181 | |||
182 | if ($xoops->isAdminSide) { |
||
183 | if (empty($id)) { |
||
184 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
185 | } |
||
186 | $redirect_page = $this->url('admin/main.php?com_modid=' . $modid . '&com_itemid'); |
||
187 | } else { |
||
188 | if (static::APPROVE_NONE == $xoops->getModuleConfig('com_rule', $moddir)) { |
||
189 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
190 | } |
||
191 | $redirect_page = ''; |
||
192 | } |
||
193 | |||
194 | /* @var $plugin CommentsPluginInterface */ |
||
195 | if ($plugin = \Xoops\Module\Plugin::getPlugin($moddir, 'comments')) { |
||
196 | if (!$xoops->isAdminSide) { |
||
197 | $redirect_page = $xoops->url('modules/' . $moddir . '/' . $plugin->pageName() . '?'); |
||
198 | if (is_array($extraParams = $plugin->extraParams())) { |
||
199 | $extra_params = ''; |
||
200 | foreach ($extraParams as $extra_param) { |
||
201 | $extra_params .= isset($_POST[$extra_param]) |
||
202 | ? $extra_param . '=' . htmlspecialchars($_POST[$extra_param]) . '&' |
||
203 | : $extra_param . '=amp;'; |
||
204 | } |
||
205 | $redirect_page .= $extra_params; |
||
206 | } |
||
207 | $redirect_page .= $plugin->itemName(); |
||
208 | } |
||
209 | $comment_url = $redirect_page; |
||
210 | |||
211 | $op = Request::getBool('com_dopost') ? 'post' : ''; |
||
212 | $op = Request::getBool('com_dopreview') ? 'preview' : $op; |
||
213 | $op = Request::getBool('com_dodelete') ? 'delete' : $op; |
||
214 | |||
215 | if ($op === 'preview' || $op === 'post') { |
||
216 | if (!$xoops->security()->check()) { |
||
217 | $op = ''; |
||
218 | } |
||
219 | } |
||
220 | if ($op === 'post' && !$xoops->isUser()) { |
||
221 | $xoopsCaptcha = XoopsCaptcha::getInstance(); |
||
222 | if (!$xoopsCaptcha->verify()) { |
||
223 | $captcha_message = $xoopsCaptcha->getMessage(); |
||
224 | $op = 'preview'; |
||
225 | } |
||
226 | } |
||
227 | |||
228 | $title = XoopsLocale::trim(Request::getString('com_title')); |
||
229 | $text = XoopsLocale::trim(Request::getString('com_text')); |
||
230 | $mode = XoopsLocale::trim(Request::getString('com_mode', 'flat')); |
||
231 | $order = Request::getInt('com_order', static::DISPLAY_OLDEST_FIRST); |
||
232 | $itemid = Request::getInt('com_itemid'); |
||
233 | $pid = Request::getInt('com_pid'); |
||
234 | $rootid = Request::getInt('com_rootid'); |
||
235 | $status = Request::getInt('com_status'); |
||
236 | $dosmiley = Request::getBool('com_dosmiley'); |
||
237 | $doxcode = Request::getBool('com_doxcode'); |
||
238 | $dobr = Request::getBool('com_dobr'); |
||
239 | $dohtml = Request::getBool('com_html'); |
||
240 | $doimage = Request::getBool('com_doimage'); |
||
241 | $icon = XoopsLocale::trim(Request::getString('com_icon')); |
||
242 | |||
243 | $comment->setVar('title', $title); |
||
244 | $comment->setVar('text', $text); |
||
245 | $comment->setVar('itemid', $itemid); |
||
246 | $comment->setVar('pid', $pid); |
||
247 | $comment->setVar('rootid', $rootid); |
||
248 | $comment->setVar('status', $status); |
||
249 | $comment->setVar('dosmiley', $dosmiley); |
||
250 | $comment->setVar('doxcode', $doxcode); |
||
251 | $comment->setVar('dobr', $dobr); |
||
252 | $comment->setVar('dohtml', $dohtml); |
||
253 | $comment->setVar('doimage', $doimage); |
||
254 | $comment->setVar('icon', $icon); |
||
255 | |||
256 | switch ($op) { |
||
257 | case "delete": |
||
258 | $this->displayDelete(); |
||
259 | break; |
||
260 | |||
261 | case "preview": |
||
262 | $comment->setVar('doimage', 1); |
||
263 | if ($comment->getVar('dohtml') != 0) { |
||
264 | if ($xoops->isUser()) { |
||
265 | if (!$xoops->user->isAdmin($comment->getVar('modid'))) { |
||
266 | $comment->setVar('dohtml', 0); |
||
267 | } |
||
268 | } else { |
||
269 | $comment->setVar('dohtml', 0); |
||
270 | } |
||
271 | } |
||
272 | |||
273 | $xoops->header(); |
||
274 | if (!$xoops->isAdminSide && !empty($captcha_message)) { |
||
275 | echo $xoops->alert('error', $captcha_message); |
||
276 | } |
||
277 | echo $this->renderHeader($comment->getVar('title', 'p'), $comment->getVar('text', 'p'), false, time()); |
||
278 | $this->displayCommentForm($comment); |
||
279 | $xoops->footer(); |
||
280 | break; |
||
281 | |||
282 | case "post": |
||
283 | $comment->setVar('doimage', 1); |
||
284 | $comment_handler = $this->getHandlerComment(); |
||
285 | $add_userpost = false; |
||
286 | $call_approvefunc = false; |
||
287 | $call_updatefunc = false; |
||
288 | // RMV-NOTIFY - this can be set to 'comment' or 'comment_submit' |
||
289 | $notify_event = false; |
||
290 | if (!empty($id)) { |
||
291 | $accesserror = false; |
||
292 | |||
293 | if ($xoops->isUser()) { |
||
294 | if ($xoops->user->isAdmin($comment->getVar('modid'))) { |
||
295 | if (!empty($status) && $status != static::STATUS_PENDING) { |
||
296 | $old_status = $comment->getVar('status'); |
||
297 | $comment->setVar('status', $status); |
||
298 | // if changing status from pending state, increment user post |
||
299 | if (static::STATUS_PENDING == $old_status) { |
||
300 | $add_userpost = true; |
||
301 | if (static::STATUS_ACTIVE == $status) { |
||
302 | $call_updatefunc = true; |
||
303 | $call_approvefunc = true; |
||
304 | // RMV-NOTIFY |
||
305 | $notify_event = 'comment'; |
||
306 | } |
||
307 | } else { |
||
308 | if (static::STATUS_HIDDEN == $old_status && static::STATUS_ACTIVE == $status) { |
||
309 | $call_updatefunc = true; |
||
310 | // Comments can not be directly posted hidden, |
||
311 | // no need to send notification here |
||
312 | } else { |
||
313 | if (static::STATUS_ACTIVE == $old_status && static::STATUS_HIDDEN == $status) { |
||
314 | $call_updatefunc = true; |
||
315 | } |
||
316 | } |
||
317 | } |
||
318 | } |
||
319 | } else { |
||
320 | $comment->setVar('dohtml', 0); |
||
321 | if ($comment->getVar('uid') != $xoops->user->getVar('uid')) { |
||
322 | $accesserror = true; |
||
323 | } |
||
324 | } |
||
325 | } else { |
||
326 | $comment->setVar('dohtml', 0); |
||
327 | $accesserror = true; |
||
328 | } |
||
329 | if (false != $accesserror) { |
||
330 | $xoops->redirect( |
||
331 | $redirect_page . '=' . $comment->getVar('itemid') |
||
332 | . '&com_id=' . $comment->getVar('id') |
||
333 | . '&com_mode=' . $mode . '&com_order=' . $order, |
||
334 | 1, |
||
335 | XoopsLocale::E_NO_ACCESS_PERMISSION |
||
336 | ); |
||
337 | } |
||
338 | } else { |
||
339 | $comment->setVar('created', time()); |
||
340 | $comment->setVar('ip', $xoops->getEnv('REMOTE_ADDR')); |
||
341 | if ($xoops->isUser()) { |
||
342 | if ($xoops->user->isAdmin($comment->getVar('modid'))) { |
||
343 | $comment->setVar('status', static::STATUS_ACTIVE); |
||
344 | $add_userpost = true; |
||
345 | $call_approvefunc = true; |
||
346 | $call_updatefunc = true; |
||
347 | // RMV-NOTIFY |
||
348 | $notify_event = 'comment'; |
||
349 | } else { |
||
350 | $comment->setVar('dohtml', 0); |
||
351 | switch ($xoops->getModuleConfig('com_rule', $moddir)) { |
||
352 | case static::APPROVE_ALL: |
||
353 | case static::APPROVE_USER: |
||
354 | $comment->setVar('status', static::STATUS_ACTIVE); |
||
355 | $add_userpost = true; |
||
356 | $call_approvefunc = true; |
||
357 | $call_updatefunc = true; |
||
358 | // RMV-NOTIFY |
||
359 | $notify_event = 'comment'; |
||
360 | break; |
||
361 | case static::APPROVE_ADMIN: |
||
362 | default: |
||
363 | $comment->setVar('status', static::STATUS_PENDING); |
||
364 | $notify_event = 'comment_submit'; |
||
365 | break; |
||
366 | } |
||
367 | } |
||
368 | if ($xoops->getModuleConfig('com_anonpost', $module->getVar('dirname')) |
||
369 | && $comment->getVar('noname') |
||
370 | ) { |
||
371 | $comment->setVar('uid', 0); |
||
372 | } else { |
||
373 | $comment->setVar('uid', $xoops->user->getVar('uid')); |
||
374 | } |
||
375 | } else { |
||
376 | $comment->setVar('dohtml', 0); |
||
377 | $comment->setVar('uid', 0); |
||
378 | if ($xoops->getModuleConfig('com_anonpost', $module->getVar('dirname')) != 1) { |
||
379 | $xoops->redirect( |
||
380 | $redirect_page . '=' . $comment->getVar('itemid') |
||
381 | . '&com_id=' . $comment->getVar('id') . '&com_mode=' . $mode |
||
382 | . '&com_order=' . $order, |
||
383 | 1, |
||
384 | XoopsLocale::E_NO_ACCESS_PERMISSION |
||
385 | ); |
||
386 | } |
||
387 | } |
||
388 | if ($comment->getVar('uid') == 0) { |
||
389 | switch ($xoops->getModuleConfig('com_rule', $moddir)) { |
||
390 | case static::APPROVE_ALL: |
||
391 | $comment->setVar('status', static::STATUS_ACTIVE); |
||
392 | $add_userpost = true; |
||
393 | $call_approvefunc = true; |
||
394 | $call_updatefunc = true; |
||
395 | // RMV-NOTIFY |
||
396 | $notify_event = 'comment'; |
||
397 | break; |
||
398 | case static::APPROVE_ADMIN: |
||
399 | case static::APPROVE_USER: |
||
400 | default: |
||
401 | $comment->setVar('status', static::STATUS_PENDING); |
||
402 | // RMV-NOTIFY |
||
403 | $notify_event = 'comment_submit'; |
||
404 | break; |
||
405 | } |
||
406 | } |
||
407 | } |
||
408 | if ($comment->getVar('title') == '') { |
||
409 | $comment->setVar('title', XoopsLocale::NO_TITLE); |
||
410 | } |
||
411 | $comment->setVar('modified', time()); |
||
412 | if (isset($extra_params)) { |
||
413 | $comment->setVar('exparams', $extra_params); |
||
414 | } |
||
415 | |||
416 | if (false != $comment_handler->insert($comment)) { |
||
417 | $newcid = $comment->getVar('id'); |
||
418 | // set own id as root id if this is a top comment |
||
419 | if ($comment->getVar('rootid') == 0) { |
||
420 | $comment->setVar('rootid', $newcid); |
||
421 | if (!$comment_handler->updateByField($comment, 'rootid', $comment->getVar('rootid'))) { |
||
422 | $comment_handler->delete($comment); |
||
423 | $xoops->header(); |
||
424 | echo $xoops->alert('error', $comment->getHtmlErrors()); |
||
425 | $xoops->footer(); |
||
426 | } |
||
427 | } |
||
428 | // call custom approve function if any |
||
429 | if (false != $call_approvefunc) { |
||
430 | $plugin->approve($comment); |
||
431 | } |
||
432 | |||
433 | if (false != $call_updatefunc) { |
||
434 | $criteria = new CriteriaCompo(new Criteria('modid', $comment->getVar('modid'))); |
||
435 | $criteria->add(new Criteria('itemid', $comment->getVar('itemid'))); |
||
436 | $criteria->add(new Criteria('status', static::STATUS_ACTIVE)); |
||
437 | $comment_count = $comment_handler->getCount($criteria); |
||
438 | $plugin->update($comment->getVar('itemid'), $comment_count); |
||
439 | } |
||
440 | |||
441 | // increment user post if needed |
||
442 | $uid = $comment->getVar('uid'); |
||
443 | if ($uid > 0 && false != $add_userpost) { |
||
444 | $member_handler = $xoops->getHandlerMember(); |
||
445 | $poster = $member_handler->getUser($uid); |
||
446 | if ($poster instanceof XoopsUser) { |
||
447 | $member_handler->updateUserByField($poster, 'posts', $poster->getVar('posts') + 1); |
||
448 | } |
||
449 | } |
||
450 | |||
451 | // RMV-NOTIFY |
||
452 | // trigger notification event if necessary |
||
453 | if ($notify_event && $xoops->isActiveModule('notifications')) { |
||
454 | $notifications = Notifications::getInstance(); |
||
455 | $not_modid = $comment->getVar('modid'); |
||
456 | $not_catinfo = $notifications->getCommentsCategory($module->getVar('dirname')); |
||
457 | $not_category = $not_catinfo['name']; |
||
458 | $not_itemid = $comment->getVar('itemid'); |
||
459 | $not_event = $notify_event; |
||
460 | // Build an ABSOLUTE URL to view the comment. Make sure we |
||
461 | // point to a viewable page (i.e. not the system administration |
||
462 | // module). |
||
463 | $comment_tags = array(); |
||
464 | $comment_tags['X_COMMENT_URL'] = $comment_url . '=' . $comment->getVar('itemid') |
||
465 | . '&com_id=' . $comment->getVar('id') |
||
466 | . '&com_rootid=' . $comment->getVar('rootid') |
||
467 | . '&com_mode=' . $mode . '&com_order=' . $order |
||
468 | . '#comment' . $comment->getVar('id'); |
||
469 | |||
470 | if ($xoops->isActiveModule('notifications')) { |
||
471 | Notifications::getInstance()->getHandlerNotification()->triggerEvent($not_category, $not_itemid, $not_event, $comment_tags, false, $not_modid); |
||
472 | } |
||
473 | } |
||
474 | if (!isset($comment_post_results)) { |
||
475 | // if the comment is active, redirect to posted comment |
||
476 | if ($comment->getVar('status') == static::STATUS_ACTIVE) { |
||
477 | $xoops->redirect( |
||
478 | $redirect_page . '=' . $comment->getVar('itemid') |
||
479 | . '&com_id=' . $comment->getVar('id') |
||
480 | . '&com_rootid=' . $comment->getVar('rootid') . '&com_mode=' . $mode |
||
481 | . '&com_order=' . $order . '#comment' . $comment->getVar('id'), |
||
482 | 1, |
||
483 | _MD_COMMENTS_THANKSPOST |
||
484 | ); |
||
485 | } else { |
||
486 | // not active, so redirect to top comment page |
||
487 | $xoops->redirect( |
||
488 | $redirect_page . '=' . $comment->getVar('itemid') . '&com_mode=' . $mode |
||
489 | . '&com_order=' . $order . '#comment' . $comment->getVar('id'), |
||
490 | 1, |
||
491 | _MD_COMMENTS_THANKSPOST |
||
492 | ); |
||
493 | } |
||
494 | } |
||
495 | } else { |
||
496 | if (!isset($purge_comment_post_results)) { |
||
497 | $xoops->header(); |
||
498 | echo $xoops->alert('error', $comment->getHtmlErrors()); |
||
499 | $xoops->footer(); |
||
500 | } else { |
||
501 | $comment_post_results = $comment->getErrors(); |
||
502 | } |
||
503 | } |
||
504 | break; |
||
505 | default: |
||
506 | $xoops->redirect( |
||
507 | \XoopsBaseConfig::get('url') . '/', |
||
508 | 1, |
||
509 | implode('<br />', $xoops->security()->getErrors()) |
||
510 | ); |
||
511 | break; |
||
512 | } |
||
513 | } |
||
514 | } |
||
515 | |||
516 | public function displayReply() |
||
517 | { |
||
518 | $xoops = Xoops::getInstance(); |
||
519 | |||
520 | $modid = Request::getInt('com_modid', 0); |
||
521 | |||
522 | if (empty($modid)) { |
||
523 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
524 | } |
||
525 | |||
526 | $module = $xoops->getModuleById($modid); |
||
527 | if (!is_object($module)) { |
||
528 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
529 | } |
||
530 | |||
531 | if ((!$xoops->isAdminSide |
||
532 | && static::APPROVE_NONE == $xoops->getModuleConfig('com_rule', $module->getVar('dirname'))) |
||
533 | || (!$xoops->isUser() && !$xoops->getModuleConfig('com_anonpost', $module->getVar('dirname'))) |
||
534 | || !$xoops->isModule() |
||
535 | ) { |
||
536 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
537 | } |
||
538 | |||
539 | //Original comment |
||
540 | $comment = $this->getHandlerComment()->get(Request::getInt('com_id', 0)); |
||
541 | |||
542 | /* @var $reply CommentsComment */ |
||
543 | $reply = $this->getHandlerComment()->create(); |
||
544 | |||
545 | $title = $comment->getVar('title', 'e'); |
||
546 | if (!preg_match("/^" . XoopsLocale::C_RE . "/i", $title)) { |
||
547 | $title = XoopsLocale::C_RE . " " . XoopsLocale::substr($title, 0, 56); |
||
548 | } |
||
549 | $reply->setVar('title', $title); |
||
550 | $reply->setVar('modid', $comment->getVar('modid')); |
||
551 | $reply->setVar('pid', $comment->getVar('id')); |
||
552 | $reply->setVar('rootid', $comment->getVar('rootid')); |
||
553 | $reply->setVar('itemid', $comment->getVar('itemid')); |
||
554 | |||
555 | $xoops->header(); |
||
556 | echo $this->renderHeader( |
||
557 | $comment->getVar('title'), |
||
558 | $comment->getVar('text'), |
||
559 | $comment->getVar('uid'), |
||
560 | $comment->getVar('created') |
||
561 | ); |
||
562 | $this->displayCommentForm($reply); |
||
563 | $xoops->footer(); |
||
564 | } |
||
565 | |||
566 | /** |
||
567 | * @param string $title title |
||
568 | * @param string $text text |
||
569 | * @param int $uid id of posting user |
||
570 | * @param int $timestamp unix timestamp |
||
571 | * |
||
572 | * @return string |
||
573 | */ |
||
574 | public function renderHeader($title, $text, $uid, $timestamp) |
||
575 | { |
||
576 | $ret = '<table cellpadding="4" cellspacing="1" width="98%" class="outer"> |
||
577 | <tr><td class="head">' . $title . '</td></tr><tr><td><br />'; |
||
578 | if ($uid) { |
||
579 | $ret .= _MD_COMMENTS_POSTER . ': <strong>' . XoopsUser::getUnameFromId($uid) . '</strong> '; |
||
580 | } |
||
581 | $ret .= _MD_COMMENTS_POSTED . ': <strong>' . XoopsLocale::formatTimestamp($timestamp) |
||
582 | . '</strong><br /><br />' . $text . '<br /></td></tr>'; |
||
583 | $ret .= '</table>'; |
||
584 | return $ret; |
||
585 | } |
||
586 | |||
587 | public function renderView() |
||
588 | { |
||
589 | $xoops = Xoops::getInstance(); |
||
590 | /* @var $plugin CommentsPluginInterface */ |
||
591 | if ($xoops->isModule() |
||
592 | && $plugin = \Xoops\Module\Plugin::getPlugin($xoops->module->getVar('dirname'), 'comments') |
||
593 | ) { |
||
594 | if (static::APPROVE_NONE != $xoops->getModuleConfig('com_rule')) { |
||
595 | $xoops->tpl()->assign('xoops_iscommentadmin', $this->isUserAdmin()); |
||
596 | |||
597 | $itemid = (trim($plugin->itemName()) != '' |
||
598 | && isset($_GET[$plugin->itemName()])) ? (int)($_GET[$plugin->itemName()]) : 0; |
||
599 | if ($itemid > 0) { |
||
600 | $modid = $xoops->module->getVar('mid'); |
||
601 | $mode = Request::getString('com_mode', $this->getUserConfig('com_mode')); |
||
602 | $xoops->tpl()->assign('comment_mode', $mode); |
||
603 | |||
604 | $order = Request::getInt('com_order', $this->getUserConfig('com_order')); |
||
605 | if ($order != static::DISPLAY_OLDEST_FIRST) { |
||
606 | $xoops->tpl()->assign(array( |
||
607 | 'comment_order' => static::DISPLAY_NEWEST_FIRST, |
||
608 | 'order_other' => static::DISPLAY_OLDEST_FIRST |
||
609 | )); |
||
610 | $dborder = 'DESC'; |
||
611 | } else { |
||
612 | $xoops->tpl()->assign(array( |
||
613 | 'comment_order' => static::DISPLAY_OLDEST_FIRST, |
||
614 | 'order_other' => static::DISPLAY_NEWEST_FIRST |
||
615 | )); |
||
616 | $dborder = 'ASC'; |
||
617 | } |
||
618 | // admins can view all comments and IPs, others can only view approved(active) comments |
||
619 | if ($xoops->isUser() && $xoops->user->isAdmin($xoops->module->getVar('mid'))) { |
||
620 | $admin_view = true; |
||
621 | } else { |
||
622 | $admin_view = false; |
||
623 | } |
||
624 | |||
625 | $id = Request::getInt('com_id', 0); |
||
626 | $rootid = Request::getInt('com_rootid', 0); |
||
627 | |||
628 | $comment_handler = $this->getHandlerComment(); |
||
629 | if ($mode === 'flat') { |
||
630 | $comments = $comment_handler->getByItemId($xoops->module->getVar('mid'), $itemid, $dborder); |
||
631 | $renderer = CommentsCommentRenderer::getInstance($xoops->tpl()); |
||
632 | $renderer->setComments($comments); |
||
633 | $renderer->renderFlatView($admin_view); |
||
634 | } elseif ($mode === 'thread') { |
||
635 | // RMV-FIX... added extraParam stuff here |
||
636 | $comment_url = $plugin->pageName() . '?'; |
||
637 | if (is_array($extraParams = $plugin->extraParams())) { |
||
638 | $extra_params = ''; |
||
639 | foreach ($extraParams as $extra_param) { |
||
640 | // This page is included in the module hosting page -- param could be from anywhere |
||
641 | |||
642 | if (isset($_POST[$extra_param])) { |
||
643 | $extra_params .= $extra_param . '=' . $_POST[$extra_param] . '&'; |
||
644 | } else { |
||
645 | if (isset($_GET[$extra_param])) { |
||
646 | $extra_params .= $extra_param . '=' . $_GET[$extra_param] . '&'; |
||
647 | } else { |
||
648 | $extra_params .= $extra_param . '=&'; |
||
649 | } |
||
650 | } |
||
651 | } |
||
652 | $comment_url .= $extra_params; |
||
653 | } |
||
654 | $xoops->tpl()->assign( |
||
655 | 'comment_url', |
||
656 | $comment_url . $plugin->itemName() . '=' . $itemid . '&com_mode=thread&com_order=' |
||
657 | . $order |
||
658 | ); |
||
659 | if (!empty($id) && !empty($rootid) && ($id != $rootid)) { |
||
660 | // Show specific thread tree |
||
661 | $comments = $comment_handler->getThread($rootid, $id); |
||
662 | if (false != $comments) { |
||
663 | $renderer = CommentsCommentRenderer::getInstance($xoops->tpl()); |
||
664 | $renderer->setComments($comments); |
||
665 | $renderer->renderThreadView($id, $admin_view); |
||
666 | } |
||
667 | } else { |
||
668 | // Show all threads |
||
669 | $top_comments = $comment_handler->getTopComments( |
||
670 | $xoops->module->getVar('mid'), |
||
671 | $itemid, |
||
672 | $dborder |
||
673 | ); |
||
674 | $c_count = count($top_comments); |
||
675 | if ($c_count > 0) { |
||
676 | for ($i = 0; $i < $c_count; ++$i) { |
||
677 | $comments = $comment_handler->getThread( |
||
678 | $top_comments[$i]->getVar('rootid'), |
||
679 | $top_comments[$i]->getVar('id') |
||
680 | ); |
||
681 | if (false != $comments) { |
||
682 | $renderer = CommentsCommentRenderer::getInstance($xoops->tpl()); |
||
683 | $renderer->setComments($comments); |
||
684 | $renderer->renderThreadView($top_comments[$i]->getVar('id'), $admin_view); |
||
685 | } |
||
686 | unset($comments); |
||
687 | } |
||
688 | } |
||
689 | } |
||
690 | } else { |
||
691 | // Show all threads |
||
692 | $top_comments = $comment_handler->getTopComments( |
||
693 | $xoops->module->getVar('mid'), |
||
694 | $itemid, |
||
695 | $dborder |
||
696 | ); |
||
697 | $c_count = count($top_comments); |
||
698 | if ($c_count > 0) { |
||
699 | for ($i = 0; $i < $c_count; ++$i) { |
||
700 | $comments = $comment_handler->getThread( |
||
701 | $top_comments[$i]->getVar('rootid'), |
||
702 | $top_comments[$i]->getVar('id') |
||
703 | ); |
||
704 | $renderer = CommentsCommentRenderer::getInstance($xoops->tpl()); |
||
705 | $renderer->setComments($comments); |
||
706 | $renderer->renderNestView($top_comments[$i]->getVar('id'), $admin_view); |
||
707 | } |
||
708 | } |
||
709 | } |
||
710 | // assign comment nav bar |
||
711 | $xoops->tpl()->assign('page_name', $plugin->pageName()); |
||
712 | $xoops->tpl()->assign('order', $order); |
||
713 | $xoops->tpl()->assign('COMMENTS_OLD1ST', static::DISPLAY_OLDEST_FIRST); |
||
714 | $xoops->tpl()->assign('COMMENTS_NEW1ST', static::DISPLAY_NEWEST_FIRST); |
||
715 | $xoops->tpl()->assign('itemid', $itemid); |
||
716 | $xoops->tpl()->assign('item_name', $plugin->itemName()); |
||
717 | unset($postcomment_link); |
||
718 | if ($xoops->getModuleConfig('com_anonpost') || $xoops->isUser()) { |
||
719 | $postcomment_link = $this->url( |
||
720 | 'comment_new.php?com_modid=' . $modid . '&com_itemid=' . $itemid |
||
721 | . '&com_order=' . $order . '&com_mode=' . $mode |
||
722 | ); |
||
723 | $xoops->tpl()->assign('anon_canpost', true); |
||
724 | } |
||
725 | $link_extra = ''; |
||
726 | if (is_array($extraParams = $plugin->extraParams())) { |
||
727 | foreach ($extraParams as $extra_param) { |
||
728 | if (isset($_POST[$extra_param])) { |
||
729 | $extra_param_val = $_POST[$extra_param]; |
||
730 | } else { |
||
731 | if (isset($_GET[$extra_param])) { |
||
732 | $extra_param_val = $_GET[$extra_param]; |
||
733 | } |
||
734 | } |
||
735 | if (isset($extra_param_val)) { |
||
736 | $link_extra .= '&' . $extra_param . '=' . $extra_param_val; |
||
737 | $hidden_value = htmlspecialchars($extra_param_val, ENT_QUOTES); |
||
738 | $xoops->tpl()->assign('extra_param', $extra_param); |
||
739 | $xoops->tpl()->assign('hidden_value', $hidden_value); |
||
740 | } |
||
741 | } |
||
742 | } |
||
743 | if (isset($postcomment_link)) { |
||
744 | $xoops->tpl()->assign('postcomment_link', $postcomment_link); |
||
745 | $xoops->tpl()->assign('link_extra', $link_extra); |
||
746 | } |
||
747 | $xoops->tpl()->assign(array( |
||
748 | 'comments_editlink' => $this->url('comment_edit.php?com_modid=' . $modid . '&com_itemid=' . $itemid . '&com_order=' . $order . '&com_mode=' . $mode . '' . $link_extra), |
||
749 | 'comments_deletelink' => $this->url('comment_delete.php?com_modid=' . $modid . '&com_itemid=' . $itemid . '&com_order=' . $order . '&com_mode=' . $mode . '' . $link_extra), |
||
750 | 'comments_replylink' => $this->url('comment_reply.php?com_modid=' . $modid . '&com_itemid=' . $itemid . '&com_order=' . $order . '&com_mode=' . $mode . '' . $link_extra) |
||
751 | )); |
||
752 | |||
753 | // assign some lang variables |
||
754 | $xoops->tpl()->assign(array( |
||
755 | 'comments_lang_from' => _MD_COMMENTS_FROM, |
||
756 | 'comments_lang_joined' => _MD_COMMENTS_JOINED, |
||
757 | 'comments_lang_posts' => _MD_COMMENTS_POSTS, |
||
758 | 'comments_lang_poster' => _MD_COMMENTS_POSTER, |
||
759 | 'comments_lang_thread' => _MD_COMMENTS_THREAD, |
||
760 | 'comments_lang_edit' => XoopsLocale::A_EDIT, |
||
761 | 'comments_lang_delete' => XoopsLocale::A_DELETE, |
||
762 | 'comments_lang_reply' => XoopsLocale::A_REPLY, |
||
763 | 'comments_lang_subject' => _MD_COMMENTS_REPLIES, |
||
764 | 'comments_lang_posted' => _MD_COMMENTS_POSTED, |
||
765 | 'comments_lang_updated' => _MD_COMMENTS_UPDATED, |
||
766 | 'comments_lang_notice' => _MD_COMMENTS_NOTICE |
||
767 | )); |
||
768 | } |
||
769 | } |
||
770 | } |
||
771 | } |
||
772 | |||
773 | public function displayEdit() |
||
774 | { |
||
775 | $xoops = Xoops::getInstance(); |
||
776 | |||
777 | /* @var $comment CommentsComment */ |
||
778 | $comment = $this->getHandlerComment()->get(Request::getInt('com_id')); |
||
779 | if (!is_object($comment)) { |
||
780 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
781 | } |
||
782 | $module = $xoops->getModuleById($comment->getVar('modid')); |
||
783 | if (!is_object($module)) { |
||
784 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
785 | } |
||
786 | |||
787 | if ((!$xoops->isAdminSide |
||
788 | && static::APPROVE_NONE == $xoops->getModuleConfig('com_rule', $module->getVar('dirname'))) |
||
789 | || (!$xoops->isUser() && !$xoops->getModuleConfig('com_anonpost', $module->getVar('dirname'))) |
||
790 | || !$xoops->isModule() |
||
791 | ) { |
||
792 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
793 | } |
||
794 | |||
795 | /* @var $plugin CommentsPluginInterface */ |
||
796 | if ($plugin = \Xoops\Module\Plugin::getPlugin($module->getVar('dirname'), 'comments')) { |
||
797 | $xoops->header(); |
||
798 | $this->displayCommentForm($comment); |
||
799 | $xoops->footer(); |
||
800 | } |
||
801 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
802 | } |
||
803 | |||
804 | public function displayDelete() |
||
805 | { |
||
806 | $xoops = Xoops::getInstance(); |
||
807 | $op = Request::getCmd('op', 'delete', 'POST'); |
||
808 | $mode = Request::getString('com_mode', 'flat'); |
||
809 | $order = Request::getString('com_order', static::DISPLAY_OLDEST_FIRST); |
||
810 | $id = Request::getInt('com_id'); |
||
811 | |||
812 | /* @var $comment CommentsComment */ |
||
813 | /* @var $comment_handler CommentsCommentHandler */ |
||
814 | $comment_handler = $this->getHandlerComment(); |
||
815 | $comment = $comment_handler->get($id); |
||
816 | if (!is_object($comment)) { |
||
817 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
818 | } |
||
819 | $module = $xoops->getModuleById($comment->getVar('modid')); |
||
820 | if (!is_object($module)) { |
||
821 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
822 | } |
||
823 | |||
824 | if ((!$xoops->isAdminSide |
||
825 | && static::APPROVE_NONE == $xoops->getModuleConfig('com_rule', $module->getVar('dirname'))) |
||
826 | || (!$xoops->isUser() && !$xoops->getModuleConfig('com_anonpost', $module->getVar('dirname'))) |
||
827 | || !$xoops->isModule() |
||
828 | ) { |
||
829 | $xoops->redirect(\XoopsBaseConfig::get('url'), 1, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
830 | } |
||
831 | |||
832 | $modid = $module->getVar('mid'); |
||
833 | /* @var $plugin CommentsPluginInterface */ |
||
834 | if ($plugin = \Xoops\Module\Plugin::getPlugin($module->getVar('dirname'), 'comments')) { |
||
835 | if ($xoops->isAdminSide) { |
||
836 | $redirect_page = $this->url('admin/main.php?com_modid=' . $modid . '&com_itemid'); |
||
837 | } else { |
||
838 | $redirect_page = $xoops->url('modules/' . $module->getVar('dirname') . '/' . $plugin->pageName() . '?'); |
||
839 | $comment_confirm_extra = array(); |
||
840 | if (is_array($extraParams = $plugin->extraParams())) { |
||
841 | foreach ($extraParams as $extra_param) { |
||
842 | if (isset($_GET[$extra_param])) { |
||
843 | $redirect_page .= $extra_param . '=' . $_GET[$extra_param] . '&'; |
||
844 | // for the confirmation page |
||
845 | $comment_confirm_extra[$extra_param] = $_GET[$extra_param]; |
||
846 | } |
||
847 | } |
||
848 | } |
||
849 | $redirect_page .= $plugin->itemName(); |
||
850 | } |
||
851 | |||
852 | $accesserror = false; |
||
853 | if (!$xoops->isUser()) { |
||
854 | $accesserror = true; |
||
855 | } else { |
||
856 | if (!$xoops->user->isAdmin($modid)) { |
||
857 | $accesserror = true; |
||
858 | } |
||
859 | } |
||
860 | |||
861 | if (false != $accesserror) { |
||
862 | $ref = $xoops->getEnv('HTTP_REFERER'); |
||
863 | if ($ref != '') { |
||
864 | $xoops->redirect($ref, 2, XoopsLocale::E_NO_ACCESS_PERMISSION); |
||
865 | } else { |
||
866 | $xoops->redirect( |
||
867 | $redirect_page . '?' . $plugin->itemName() . '=' . (int)($id), |
||
868 | 2, |
||
869 | XoopsLocale::E_NO_ACCESS_PERMISSION |
||
870 | ); |
||
871 | } |
||
872 | } |
||
873 | |||
874 | switch ($op) { |
||
875 | case 'delete_one': |
||
876 | if (!$comment_handler->delete($comment)) { |
||
877 | $xoops->header(); |
||
878 | echo $xoops->alert('error', _MD_COMMENTS_COMDELETENG . ' (ID: ' . $comment->getVar('id') . ')'); |
||
879 | $xoops->footer(); |
||
880 | } |
||
881 | |||
882 | $itemid = $comment->getVar('itemid'); |
||
883 | |||
884 | $criteria = new CriteriaCompo(new Criteria('modid', $modid)); |
||
885 | $criteria->add(new Criteria('itemid', $itemid)); |
||
886 | $criteria->add(new Criteria('status', static::STATUS_ACTIVE)); |
||
887 | $comment_count = $comment_handler->getCount($criteria); |
||
888 | $plugin->update($itemid, $comment_count); |
||
889 | |||
890 | // update user posts if its not an anonymous post |
||
891 | if ($comment->getVar('uid') != 0) { |
||
892 | $member_handler = $xoops->getHandlerMember(); |
||
893 | $poster = $member_handler->getUser($comment->getVar('uid')); |
||
894 | if (is_object($poster)) { |
||
895 | $member_handler->updateUserByField($poster, 'posts', $poster->getVar('posts') - 1); |
||
896 | } |
||
897 | } |
||
898 | |||
899 | // get all comments posted later within the same thread |
||
900 | $thread_comments = $comment_handler->getThread($comment->getVar('rootid'), $id); |
||
901 | |||
902 | $xot = new XoopsObjectTree($thread_comments, 'id', 'pid', 'rootid'); |
||
903 | $child_comments = $xot->getFirstChild($id); |
||
904 | // now set new parent ID for direct child comments |
||
905 | $new_pid = $comment->getVar('pid'); |
||
906 | $errs = array(); |
||
907 | foreach (array_keys($child_comments) as $i) { |
||
908 | $child_comments[$i]->setVar('pid', $new_pid); |
||
909 | // if the deleted comment is a root comment, need to change root id to own id |
||
910 | if (false != $comment->isRoot()) { |
||
911 | $new_rootid = $child_comments[$i]->getVar('id'); |
||
912 | $child_comments[$i]->setVar('rootid', $child_comments[$i]->getVar('id')); |
||
913 | if (!$comment_handler->insert($child_comments[$i])) { |
||
914 | $errs[] = 'Could not change comment parent ID from <strong>' . $id |
||
915 | . '</strong> to <strong>' . $new_pid . '</strong>. (ID: ' . $new_rootid . ')'; |
||
916 | } else { |
||
917 | // need to change root id for all its child comments as well |
||
918 | $c_child_comments = $xot->getAllChild($new_rootid); |
||
919 | $cc_count = count($c_child_comments); |
||
920 | foreach (array_keys($c_child_comments) as $j) { |
||
921 | $c_child_comments[$j]->setVar('rootid', $new_rootid); |
||
922 | if (!$comment_handler->insert($c_child_comments[$j])) { |
||
923 | $errs[] = 'Could not change comment root ID from <strong>' . $id |
||
924 | . '</strong> to <strong>' . $new_rootid . '</strong>.'; |
||
925 | } |
||
926 | } |
||
927 | } |
||
928 | } else { |
||
929 | if (!$comment_handler->insert($child_comments[$i])) { |
||
930 | $errs[] = 'Could not change comment parent ID from <strong>' . $id |
||
931 | . '</strong> to <strong>' . $new_pid . '</strong>.'; |
||
932 | } |
||
933 | } |
||
934 | } |
||
935 | if (count($errs) > 0) { |
||
936 | $xoops->header(); |
||
937 | echo $xoops->alert('error', $errs); |
||
938 | $xoops->footer(); |
||
939 | exit(); |
||
940 | } |
||
941 | $xoops->redirect($redirect_page . '=' . $itemid . '&com_order=' . $order . '&com_mode=' . $mode, 1, _MD_COMMENTS_COMDELETED); |
||
942 | break; |
||
943 | |||
944 | case 'delete_all': |
||
945 | $rootid = $comment->getVar('rootid'); |
||
946 | |||
947 | // get all comments posted later within the same thread |
||
948 | $thread_comments = $comment_handler->getThread($rootid, $id); |
||
949 | |||
950 | // construct a comment tree |
||
951 | $xot = new XoopsObjectTree($thread_comments, 'id', 'pid', 'rootid'); |
||
952 | $child_comments = $xot->getAllChild($id); |
||
953 | // add itself here |
||
954 | $child_comments[$id] = $comment; |
||
955 | $msgs = array(); |
||
956 | $deleted_num = array(); |
||
957 | $member_handler = $xoops->getHandlerMember(); |
||
958 | foreach (array_keys($child_comments) as $i) { |
||
959 | if (!$comment_handler->delete($child_comments[$i])) { |
||
960 | $msgs[] = _MD_COMMENTS_COMDELETENG . ' (ID: ' . $child_comments[$i]->getVar('id') . ')'; |
||
961 | } else { |
||
962 | $msgs[] = _MD_COMMENTS_COMDELETED . ' (ID: ' . $child_comments[$i]->getVar('id') . ')'; |
||
963 | // store poster ID and deleted post number into array for later use |
||
964 | $poster_id = $child_comments[$i]->getVar('uid'); |
||
965 | if ($poster_id > 0) { |
||
966 | $deleted_num[$poster_id] = |
||
967 | !isset($deleted_num[$poster_id]) ? 1 : ($deleted_num[$poster_id] + 1); |
||
968 | } |
||
969 | } |
||
970 | } |
||
971 | foreach ($deleted_num as $user_id => $post_num) { |
||
972 | // update user posts |
||
973 | $poster = $member_handler->getUser($user_id); |
||
974 | if (is_object($poster)) { |
||
975 | $member_handler->updateUserByField($poster, 'posts', $poster->getVar('posts') - $post_num); |
||
976 | } |
||
977 | } |
||
978 | |||
979 | $itemid = $comment->getVar('itemid'); |
||
980 | |||
981 | $criteria = new CriteriaCompo(new Criteria('modid', $modid)); |
||
982 | $criteria->add(new Criteria('itemid', $itemid)); |
||
983 | $criteria->add(new Criteria('status', static::STATUS_ACTIVE)); |
||
984 | $comment_count = $comment_handler->getCount($criteria); |
||
985 | $plugin->update($itemid, $comment_count); |
||
986 | |||
987 | $xoops->header(); |
||
988 | echo $xoops->alert('info', $msgs); |
||
989 | echo '<br /><a href="' . $redirect_page . '=' . $itemid . '&com_order=' . $order |
||
990 | . '&com_mode=' . $mode . '">' . XoopsLocale::GO_BACK . '</a>'; |
||
991 | $xoops->footer(); |
||
992 | break; |
||
993 | |||
994 | case 'delete': |
||
995 | default: |
||
996 | $xoops->header(); |
||
997 | $comment_confirm = array( |
||
998 | 'com_id' => $id, |
||
999 | 'com_mode' => $mode, |
||
1000 | 'com_order' => $order, |
||
1001 | 'op' => array( |
||
1002 | _MD_COMMENTS_DELETEONE => 'delete_one', |
||
1003 | _MD_COMMENTS_DELETEALL => 'delete_all' |
||
1004 | ) |
||
1005 | ); |
||
1006 | if (!empty($comment_confirm_extra) && is_array($comment_confirm_extra)) { |
||
1007 | $comment_confirm = $comment_confirm + $comment_confirm_extra; |
||
1008 | } |
||
1009 | echo $xoops->confirm($comment_confirm, 'comment_delete.php', _MD_COMMENTS_DELETESELECT); |
||
1010 | $xoops->footer(); |
||
1011 | break; |
||
1012 | } |
||
1013 | } |
||
1014 | } |
||
1015 | |||
1016 | /** |
||
1017 | * @param XoopsModule $module module supporting comments |
||
1018 | * |
||
1019 | * @return void |
||
1020 | */ |
||
1021 | public function insertModuleRelations(XoopsModule $module) |
||
1056 | } |
||
1057 | } |
||
1058 | } |
||
1059 | |||
1060 | /** |
||
1061 | * @param XoopsModule $module module supporting comments |
||
1062 | * |
||
1063 | * @return void |
||
1064 | */ |
||
1065 | public function deleteModuleRelations(XoopsModule $module) |
||
1066 | { |
||
1067 | $xoops = Xoops::getInstance(); |
||
1068 | $this->getHandlerComment()->deleteByModule($module->getVar('mid')); |
||
1069 | |||
1070 | |||
1071 | $configNames = array('com_rule', 'com_anonpost'); |
||
1072 | $config_handler = $xoops->getHandlerConfig(); |
||
1073 | |||
1074 | //Delete all configs |
||
1075 | $criteria = new CriteriaCompo(); |
||
1076 | $criteria->add(new Criteria('conf_modid', $module->getVar('mid'))); |
||
1077 | $criteria->add(new Criteria('conf_name', "('" . implode("','", $configNames) . "')", 'IN')); |
||
1078 | $configs = $config_handler->getConfigs($criteria); |
||
1079 | /* @var $config XoopsConfigItem */ |
||
1080 | foreach ($configs as $config) { |
||
1081 | $config_handler->deleteConfig($config); |
||
1082 | } |
||
1083 | } |
||
1084 | |||
1085 | /** |
||
1086 | * @return array |
||
1087 | */ |
||
1088 | public function getPluginableConfigs() |
||
1114 | } |
||
1115 | } |
||
1116 |
Let?s assume that you have a directory layout like this:
and let?s assume the following content of
Bar.php
:If both files
OtherDir/Foo.php
andSomeDir/Foo.php
are loaded in the same runtime, you will see a PHP error such as the following:PHP Fatal error: Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php
However, as
OtherDir/Foo.php
does not necessarily have to be loaded and the error is only triggered if it is loaded beforeOtherDir/Bar.php
, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias: