1 | <?php |
||||||
2 | /** |
||||||
3 | * NewBB 5.0x, the forum module for XOOPS project |
||||||
4 | * |
||||||
5 | * @copyright XOOPS Project (https://xoops.org) |
||||||
6 | * @license GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html) |
||||||
7 | * @author Taiwen Jiang (phppp or D.J.) <[email protected]> |
||||||
8 | * @since 4.00 |
||||||
9 | * @package module::newbb |
||||||
10 | */ |
||||||
11 | |||||||
12 | use Xmf\Request; |
||||||
13 | use XoopsModules\Newbb; |
||||||
14 | |||||||
15 | require_once __DIR__ . '/header.php'; |
||||||
16 | |||||||
17 | $forum_id = Request::getInt('forum_id', 0, 'POST'); |
||||||
18 | $topic_id = Request::getArray('topic_id', null, 'POST'); |
||||||
19 | |||||||
20 | $op = Request::getString('op', '', 'POST'); |
||||||
21 | $op = in_array($op, ['approve', 'delete', 'restore', 'move'], true) ? $op : ''; |
||||||
22 | |||||||
23 | if (0 === count($topic_id) || 0 === count($op)) { |
||||||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||||
24 | // irmtfan - issue with javascript:history.go(-1) |
||||||
25 | redirect_header(Request::getString('HTTP_REFERER', '', 'SERVER'), 2, _MD_NEWBB_NO_SELECTION); |
||||||
26 | } |
||||||
27 | |||||||
28 | $topic_id = array_values($topic_id); |
||||||
29 | ///** @var Newbb\TopicHandler|\XoopsPersistableObjectHandler $topicHandler */ |
||||||
30 | //$topicHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
||||||
31 | ///** @var Newbb\ForumHandler|\XoopsPersistableObjectHandler $forumHandler */ |
||||||
32 | //$forumHandler = Newbb\Helper::getInstance()->getHandler('Forum'); |
||||||
33 | |||||||
34 | $isAdmin = newbbIsAdmin($forum_id); |
||||||
35 | |||||||
36 | if (!$isAdmin) { |
||||||
37 | redirect_header(XOOPS_URL . '/index.php', 2, _MD_NEWBB_NORIGHTTOACCESS); |
||||||
38 | } |
||||||
39 | switch ($op) { |
||||||
40 | case 'restore': |
||||||
41 | $forums = []; |
||||||
42 | $topicsObject = $topicHandler->getAll(new \Criteria('topic_id', '(' . implode(',', $topic_id) . ')', 'IN')); |
||||||
43 | foreach (array_keys($topicsObject) as $id) { |
||||||
44 | /** @var Newbb\Topic $topicObject */ |
||||||
45 | $topicObject = $topicsObject[$id]; |
||||||
46 | $topicHandler->approve($topicObject); |
||||||
47 | $topicHandler->synchronization($topicObject); |
||||||
48 | $forums[$topicObject->getVar('forum_id')] = 1; |
||||||
49 | } |
||||||
50 | $criteria_forum = new \Criteria('forum_id', '(' . implode(',', array_keys($forums)) . ')', 'IN'); |
||||||
51 | $forumsObject = $forumHandler->getAll($criteria_forum); |
||||||
52 | foreach (array_keys($forumsObject) as $id) { |
||||||
53 | $forumHandler->synchronization($forumsObject[$id]); |
||||||
54 | } |
||||||
55 | unset($topicsObject, $forumsObject); |
||||||
56 | break; |
||||||
57 | case 'approve': |
||||||
58 | $forums = []; |
||||||
59 | $topicsObject = $topicHandler->getAll(new \Criteria('topic_id', '(' . implode(',', $topic_id) . ')', 'IN')); |
||||||
60 | foreach (array_keys($topicsObject) as $id) { |
||||||
61 | /** @var Newbb\Topic $topicObject */ |
||||||
62 | $topicObject = $topicsObject[$id]; |
||||||
63 | $topicHandler->approve($topicObject); |
||||||
64 | $topicHandler->synchronization($topicObject); |
||||||
65 | $forums[$topicObject->getVar('forum_id')] = 1; |
||||||
66 | } |
||||||
67 | |||||||
68 | $criteria_forum = new \Criteria('forum_id', '(' . implode(',', array_keys($forums)) . ')', 'IN'); |
||||||
69 | $forumsObject = $forumHandler->getAll($criteria_forum); |
||||||
70 | foreach (array_keys($forumsObject) as $id) { |
||||||
71 | $forumHandler->synchronization($forumsObject[$id]); |
||||||
72 | } |
||||||
73 | |||||||
74 | if (empty($GLOBALS['xoopsModuleConfig']['notification_enabled'])) { |
||||||
75 | break; |
||||||
76 | } |
||||||
77 | |||||||
78 | require_once __DIR__ . '/include/notification.inc.php'; |
||||||
79 | /** @var \XoopsNotificationHandler $notificationHandler */ |
||||||
80 | $notificationHandler = xoops_getHandler('notification'); |
||||||
81 | foreach (array_keys($topicsObject) as $id) { |
||||||
82 | $topicObject = $topicsObject[$id]; |
||||||
83 | $tags = []; |
||||||
84 | $tags['THREAD_NAME'] = $topicObject->getVar('topic_title'); |
||||||
85 | $tags['THREAD_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/viewtopic.php?topic_id=' . $id . '&forum=' . $topicObject->getVar('forum_id'); |
||||||
86 | /** @var Newbb\Forum[] $forumsObject */ |
||||||
87 | $tags['FORUM_NAME'] = $forumsObject[$topicObject->getVar('forum_id')]->getVar('forum_name'); |
||||||
88 | $tags['FORUM_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/viewforum.php?forum=' . $topicObject->getVar('forum_id'); |
||||||
89 | $notificationHandler->triggerEvent('global', 0, 'new_thread', $tags); |
||||||
0 ignored issues
–
show
'new_thread' of type string is incompatible with the type integer expected by parameter $event of XoopsNotificationHandler::triggerEvent() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() 'global' of type string is incompatible with the type integer expected by parameter $category of XoopsNotificationHandler::triggerEvent() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
90 | $notificationHandler->triggerEvent('forum', $topicObject->getVar('forum_id'), 'new_thread', $tags); |
||||||
91 | $postObject = $topicHandler->getTopPost($id); |
||||||
92 | $tags['POST_URL'] = $tags['THREAD_URL'] . '#forumpost' . $postObject->getVar('post_id'); |
||||||
93 | $notificationHandler->triggerEvent('thread', $id, 'new_post', $tags); |
||||||
94 | $notificationHandler->triggerEvent('forum', $topicObject->getVar('forum_id'), 'new_post', $tags); |
||||||
95 | $notificationHandler->triggerEvent('global', 0, 'new_post', $tags); |
||||||
96 | $tags['POST_CONTENT'] = $postObject->getVar('post_text'); |
||||||
97 | $tags['POST_NAME'] = $postObject->getVar('subject'); |
||||||
98 | $notificationHandler->triggerEvent('global', 0, 'new_fullpost', $tags); |
||||||
99 | $notificationHandler->triggerEvent('forum', $topicObject->getVar('forum_id'), 'new_fullpost', $tags); |
||||||
100 | unset($postObject); |
||||||
101 | } |
||||||
102 | unset($topicsObject, $forumsObject); |
||||||
103 | break; |
||||||
104 | case 'delete': |
||||||
105 | $forums = []; |
||||||
106 | /** @var Newbb\TopicHandler|\XoopsPersistableObjectHandler $topicHandler */ |
||||||
107 | $topicsObject = $topicHandler->getAll(new \Criteria('topic_id', '(' . implode(',', $topic_id) . ')', 'IN')); |
||||||
108 | foreach (array_keys($topicsObject) as $id) { |
||||||
109 | /** @var Newbb\Topic $topicObject */ |
||||||
110 | $topicObject = $topicsObject[$id]; |
||||||
111 | // irmtfan should be set to false to not delete topic from database |
||||||
112 | $topicHandler->delete($topicObject, false); |
||||||
113 | $topicHandler->synchronization($topicObject); |
||||||
0 ignored issues
–
show
The call to
XoopsPersistableObjectHandler::synchronization() has too many arguments starting with $topicObject .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above. ![]() |
|||||||
114 | $forums[$topicObject->getVar('forum_id')] = 1; |
||||||
115 | } |
||||||
116 | |||||||
117 | $criteria_forum = new \Criteria('forum_id', '(' . implode(',', array_keys($forums)) . ')', 'IN'); |
||||||
118 | $forumsObject = $forumHandler->getAll($criteria_forum); |
||||||
119 | foreach (array_keys($forumsObject) as $id) { |
||||||
120 | $forumHandler->synchronization($forumsObject[$id]); |
||||||
121 | } |
||||||
122 | unset($topicsObject, $forumsObject); |
||||||
123 | break; |
||||||
124 | case 'move': |
||||||
125 | if (Request::getInt('newforum', 0, 'POST') |
||||||
126 | && Request::getInt('newforum', 0, 'POST') !== $forum_id |
||||||
127 | && $forumHandler->getPermission(Request::getInt('newforum', 0, 'POST'), 'post')) { |
||||||
128 | $criteria = new \Criteria('topic_id', '(' . implode(',', $topic_id) . ')', 'IN'); |
||||||
129 | // /** @var Newbb\PostHandler $postHandler */ |
||||||
130 | // $postHandler = Newbb\Helper::getInstance()->getHandler('Post'); |
||||||
131 | $postHandler->updateAll('forum_id', Request::getInt('newforum', 0, 'POST'), $criteria, true); |
||||||
132 | $topicHandler->updateAll('forum_id', Request::getInt('newforum', 0, 'POST'), $criteria, true); |
||||||
133 | $forumHandler->synchronization(Request::getInt('newforum', 0, 'POST')); |
||||||
134 | $forumHandler->synchronization($forum_id); |
||||||
135 | } else { |
||||||
136 | require_once $GLOBALS['xoops']->path('header.php'); |
||||||
137 | // /** @var Newbb\CategoryHandler $categoryHandler */ |
||||||
138 | // $categoryHandler = Newbb\Helper::getInstance()->getHandler('Category'); |
||||||
139 | $categories = $categoryHandler->getByPermission('access'); |
||||||
140 | $forums = $forumHandler->getForumsByCategory(array_keys($categories), 'post', false); |
||||||
141 | |||||||
142 | $box = '<select name="newforum" size="1">'; |
||||||
143 | if (count($categories) > 0 && count($forums) > 0) { |
||||||
144 | foreach (array_keys($forums) as $key) { |
||||||
145 | /** @var Newbb\Category[] $categories */ |
||||||
146 | $box .= "<option value='-1'>[" . $categories[$key]->getVar('cat_title') . ']</option>'; |
||||||
147 | foreach ($forums[$key] as $forumid => $_forum) { |
||||||
148 | $box .= "<option value='" . $forumid . "'>-- " . $_forum['title'] . '</option>'; |
||||||
149 | if (!isset($_forum['sub'])) { |
||||||
150 | continue; |
||||||
151 | } |
||||||
152 | foreach (array_keys($_forum['sub']) as $fid) { |
||||||
153 | $box .= "<option value='" . $fid . "'>---- " . $_forum['sub'][$fid]['title'] . '</option>'; |
||||||
154 | } |
||||||
155 | } |
||||||
156 | } |
||||||
157 | } else { |
||||||
158 | $box .= "<option value='-1'>" . _MD_NEWBB_NOFORUMINDB . '</option>'; |
||||||
159 | } |
||||||
160 | $box .= '</select>'; |
||||||
161 | unset($forums, $categories); |
||||||
162 | |||||||
163 | echo "<form action='" . Request::getString('PHP_SELF', '', 'SERVER') . "' method='post'>"; |
||||||
164 | echo "<table border='0' cellpadding='1' cellspacing='0' align='center' width='95%'>"; |
||||||
165 | echo "<tr><td class='bg2'>"; |
||||||
166 | echo "<table border='0' cellpadding='1' cellspacing='1' width='100%'>"; |
||||||
167 | echo '<tr><td class="bg3">' . _MD_NEWBB_MOVETOPICTO . '</td><td class="bg1">'; |
||||||
168 | echo $box; |
||||||
169 | echo '</td></tr>'; |
||||||
170 | echo '<tr class="bg3"><td colspan="2" align="center">'; |
||||||
171 | echo "<input type='hidden' name='op' value='move' >"; |
||||||
172 | echo "<input type='hidden' name='forum_id' value='{$forum_id}' >"; |
||||||
173 | foreach ($topic_id as $id) { |
||||||
174 | echo "<input type='hidden' name='topic_id[]' value='" . $id . "' >"; |
||||||
175 | } |
||||||
176 | echo "<input type='submit' name='submit' value='" . _SUBMIT . "' >"; |
||||||
177 | echo '</td></tr></table></td></tr></table>'; |
||||||
178 | echo '</form>'; |
||||||
179 | require_once $GLOBALS['xoops']->path('footer.php'); |
||||||
180 | exit(); |
||||||
181 | } |
||||||
182 | break; |
||||||
183 | } |
||||||
184 | ///** @var Newbb\StatsHandler $statsHandler */ |
||||||
185 | //$statsHandler = Newbb\Helper::getInstance()->getHandler('Stats'); |
||||||
186 | $statsHandler->reset(); |
||||||
187 | if (empty($forum_id)) { |
||||||
188 | redirect_header(XOOPS_URL . '/modules/newbb/list.topic.php', 2, _MD_NEWBB_DBUPDATED); |
||||||
189 | } else { |
||||||
190 | redirect_header(XOOPS_URL . "/modules/newbb/viewforum.php?forum={$forum_id}", 2, _MD_NEWBB_DBUPDATED); |
||||||
191 | } |
||||||
192 | // irmtfan move to footer.php |
||||||
193 | require_once __DIR__ . '/footer.php'; |
||||||
194 | require_once $GLOBALS['xoops']->path('footer.php'); |
||||||
195 |