Passed
Push — master ( af63ee...f3ee6a )
by Michael
02:31
created

action.topic.php (4 issues)

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
$op of type string is incompatible with the type Countable|array expected by parameter $var of count(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

23
if (0 === count($topic_id) || 0 === count(/** @scrutinizer ignore-type */ $op)) {
Loading history...
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 . '&amp;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 ignore-type  annotation

89
            $notificationHandler->triggerEvent('global', 0, /** @scrutinizer ignore-type */ 'new_thread', $tags);
Loading history...
'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 ignore-type  annotation

89
            $notificationHandler->triggerEvent(/** @scrutinizer ignore-type */ 'global', 0, 'new_thread', $tags);
Loading history...
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 ignore-call  annotation

113
            $topicHandler->/** @scrutinizer ignore-call */ 
114
                           synchronization($topicObject);

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.

Loading history...
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