Completed
Pull Request — master (#26)
by Richard
02:24
created

viewpost.php (30 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
//
3
//  ------------------------------------------------------------------------ //
4
//                XOOPS - PHP Content Management System                      //
5
//                  Copyright (c) 2000-2016 XOOPS.org                        //
6
//                       <https://xoops.org/>                             //
7
//  ------------------------------------------------------------------------ //
8
//  This program is free software; you can redistribute it and/or modify     //
9
//  it under the terms of the GNU General Public License as published by     //
10
//  the Free Software Foundation; either version 2 of the License, or        //
11
//  (at your option) any later version.                                      //
12
//                                                                           //
13
//  You may not change or alter any portion of this comment or credits       //
14
//  of supporting developers from this source code or any supporting         //
15
//  source code which is considered copyrighted (c) material of the          //
16
//  original comment or credit authors.                                      //
17
//                                                                           //
18
//  This program is distributed in the hope that it will be useful,          //
19
//  but WITHOUT ANY WARRANTY; without even the implied warranty of           //
20
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            //
21
//  GNU General Public License for more details.                             //
22
//                                                                           //
23
//  You should have received a copy of the GNU General Public License        //
24
//  along with this program; if not, write to the Free Software              //
25
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA //
26
//  ------------------------------------------------------------------------ //
27
//  Author: phppp (D.J., [email protected])                                  //
28
//  URL: https://xoops.org                                                    //
29
//  Project: Article Project                                                 //
30
//  ------------------------------------------------------------------------ //
31
32
use Xmf\Request;
33
34
include_once __DIR__ . '/header.php';
35
36
$start    = Request::getInt('start', 0, 'GET');
37
$forum_id = Request::getInt('forum', 0, 'GET');
38
$order    = Request::getString('order', 'DESC', 'GET');
39
40
$uid = Request::getInt('uid', 0, 'GET');
41
42
$status = (Request::getString('status', '', 'GET')
43
           && in_array(Request::getString('status', '', 'GET'), ['active', 'pending', 'deleted', 'new', 'all', 'digest'], true)) ? Request::getString('status', '', 'GET') : '';
44
$mode   = Request::getInt('mode', 0, 'GET');
45
$mode   = (!empty($status) && in_array($status, ['active', 'pending', 'deleted'], true)) ? 2 : $mode;
46
47
/** @var \NewbbForumHandler $forumHandler */
48
$forumHandler = xoops_getModuleHandler('forum', 'newbb');
49
/** @var \NewbbPostHandler $postHandler */
50
$postHandler = xoops_getModuleHandler('post', 'newbb');
51
52
if (empty($forum_id)) {
53
    $forums       = $forumHandler->getByPermission(0, 'view');
54
    $accessForums = array_keys($forums);
55
    $isAdmin      = $GLOBALS['xoopsUserIsAdmin'];
56
} else {
57
    $forumObject         = $forumHandler->get($forum_id);
58
    $forums[$forum_id] = $forumObject;
59
    $accessForums      = [$forum_id];
60
    $isAdmin           = newbbIsAdmin($forumObject);
61
}
62
63
/* Only admin has access to admin mode */
64 View Code Duplication
if (!$isAdmin && 2 === $mode) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
65
    $status = in_array($status, ['active', 'pending', 'deleted'], true) ? '' : $status;
66
    $mode   = 0;
67
}
68
if ($mode) {
69
    $_GET['viewmode'] = 'flat';
70
}
71
//echo $mode.' - '.$status;
0 ignored issues
show
Unused Code Comprehensibility introduced by
63% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
72
$post_perpage = $GLOBALS['xoopsModuleConfig']['posts_per_page'];
73
74
$criteria_count = new CriteriaCompo(new Criteria('forum_id', '(' . implode(',', $accessForums) . ')', 'IN'));
75
$criteria_post  = new CriteriaCompo(new Criteria('p.forum_id', '(' . implode(',', $accessForums) . ')', 'IN'));
76
$criteria_post->setSort('p.post_id');
77
$criteria_post->setOrder($order);
78
79
if (!empty($uid)) {
80
    $criteria_count->add(new Criteria('uid', $uid));
81
    $criteria_post->add(new Criteria('p.uid', $uid));
82
}
83
84
$join = null;
85
// START irmtfan solve the status issues and specially status = new issue
86
switch ($status) {
87
    case 'pending':
88
        $criteria_count->add(new Criteria('approved', 0)); // irmtfan add new criteria
89
        $criteria_post->add(new Criteria('p.approved', 0)); // irmtfan add new criteria
90
        break;
91
    case 'deleted':
92
        $criteria_count->add(new Criteria('approved', -1)); // irmtfan add new criteria
93
        $criteria_post->add(new Criteria('p.approved', -1)); // irmtfan add new criteria
94
        break;
95
    case 'new':
96
        //$criteria_status_count = new CriteriaCompo(new Criteria("post_time", (int)($last_visit), ">"));// irmtfan commented and removed
0 ignored issues
show
Unused Code Comprehensibility introduced by
64% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
97
        //$criteria_status_post = new CriteriaCompo(new Criteria("p.post_time", (int)($last_visit), ">"));// irmtfan commented and removed
0 ignored issues
show
Unused Code Comprehensibility introduced by
64% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
98
        $criteria_count->add(new Criteria('approved', 1)); // irmtfan uncomment
99
        $criteria_post->add(new Criteria('p.approved', 1)); // irmtfan uncomment
100
        // following is for 'unread' -- not finished -- irmtfan Now it is finished!
101
        if (empty($GLOBALS['xoopsModuleConfig']['read_mode'])) {
0 ignored issues
show
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
102
            //$criteria_status_count->add(new Criteria('approved', 1));// irmtfan commented and removed
0 ignored issues
show
Unused Code Comprehensibility introduced by
74% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
103
            //$criteria_status_post->add(new Criteria('p.approved', 1));// irmtfan commented and removed
0 ignored issues
show
Unused Code Comprehensibility introduced by
74% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
104
        } elseif (2 == $GLOBALS['xoopsModuleConfig']['read_mode']) {
105
            // START irmtfan use read_uid to find the unread posts when the user is logged in
106
            $read_uid = is_object($GLOBALS['xoopsUser']) ? $GLOBALS['xoopsUser']->getVar('uid') : 0;
107
            if (!empty($read_uid)) {
108
                $join                 = ' LEFT JOIN ' . $GLOBALS['xoopsDB']->prefix('newbb_reads_topic') . ' AS r ON r.read_item = p.topic_id AND r.uid = ' . $read_uid . ' '; // irmtfan corrected add AS
109
                $criteria_status_post = new CriteriaCompo();// irmtfan new criteria
110
                $criteria_status_post->add(new Criteria('p.post_id', 'r.`post_id`', '>')); // irmtfan corrected - should use $value='r.``' to render in XOOPS/class/criteria.php
111
                $criteria_status_post->add(new Criteria('r.read_id', null, 'IS NULL'), 'OR');// irmtfan corrected - should use "IS NULL" to render in XOOPS/class/criteria.php
112
                $criteria_post->add($criteria_status_post); // irmtfan add the status criteria to post criteria - move here
113
                $criteria_count = $criteria_post;// irmtfan criteria count is equal to criteria post - move here
114
            } else {
0 ignored issues
show
This else statement is empty and can be removed.

This check looks for the else branches of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These else branches can be removed.

if (rand(1, 6) > 3) {
print "Check failed";
} else {
    //print "Check succeeded";
}

could be turned into

if (rand(1, 6) > 3) {
    print "Check failed";
}

This is much more concise to read.

Loading history...
115
            }
116
            // END irmtfan use read_uid to find the unread posts when the user is logged in
117
            //$criteria_status_post->add(new Criteria("p.approved", 1)); // irmtfan commented and removed
0 ignored issues
show
Unused Code Comprehensibility introduced by
69% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
118
            //$criteria_status_count =& $criteria_status_post;
0 ignored issues
show
Unused Code Comprehensibility introduced by
58% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
119
        } elseif (1 == $GLOBALS['xoopsModuleConfig']['read_mode']) {
120
            $criteria_count->add(new Criteria('post_time', (int)$last_visit, '>')); // irmtfan add new criteria
121
            $criteria_post->add(new Criteria('p.post_time', (int)$last_visit, '>')); // irmtfan add new criteria
122
            // START irmtfan fix read_mode = 1 bugs - for all users (member and anon)
123
            $topics         = [];
124
            $topic_lastread = newbbGetCookie('LT', true);
125
            if (count($topic_lastread) > 0) {
126
                foreach ($topic_lastread as $id => $time) {
0 ignored issues
show
The expression $topic_lastread of type array|null is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
127
                    if ($time > (int)$last_visit) {
128
                        $topics[] = $id;
129
                    }
130
                }
131
            }
132
            if (count($topics) > 0) {
133
                $criteria_count->add(new Criteria('topic_id', '(' . implode(',', $topics) . ')', 'NOT IN'));
134
                $criteria_post->add(new Criteria('p.topic_id', '(' . implode(',', $topics) . ')', 'NOT IN'));
135
            }
136
            // END irmtfan fix read_mode = 1 bugs - for all users (member and anon)
137
            //$criteria_status_count->add(new Criteria("approved", 1));// irmtfan commented and removed
0 ignored issues
show
Unused Code Comprehensibility introduced by
74% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
138
            //$criteria_status_post->add(new Criteria("p.approved", 1));// irmtfan commented and removed
0 ignored issues
show
Unused Code Comprehensibility introduced by
74% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
139
        }
140
        break;
141
    default:
142
        $criteria_count->add(new Criteria('approved', 1)); // irmtfan add new criteria
143
        $criteria_post->add(new Criteria('p.approved', 1)); // irmtfan add new criteria
144
        break;
145
}
146
//$criteria_count->add($criteria_status_count); // irmtfan commented and removed
147
//$criteria_post->add($criteria_status_post); // irmtfan commented and removed
148
// END irmtfan solve the status issues and specially status = new issue
149
/** @var \NewbbKarmaHandler $karmaHandler */
150
$karmaHandler = xoops_getModuleHandler('karma', 'newbb');
151
$user_karma   = $karmaHandler->getUserKarma();
152
153
$valid_modes     = ['flat', 'compact'];
154
$viewmode_cookie = newbbGetCookie('V');
155
156
if ('compact' === Request::getString('viewmode', '', 'GET')) {
157
    newbbSetCookie('V', 'compact', $forumCookie['expire']);
158
}
159
160
$viewmode = Request::getString('viewmode', (!empty($viewmode_cookie) ? $viewmode_cookie : (@$valid_modes[$GLOBALS['xoopsModuleConfig']['view_mode'] - 1])), 'GET');
161
$viewmode = in_array($viewmode, $valid_modes) ? $viewmode : $valid_modes[0];
162
163
$postCount = $postHandler->getPostCount($criteria_count, $join);// irmtfan add join for read_mode = 2
164
$posts     = $postHandler->getPostsByLimit($criteria_post, $post_perpage, $start, $join);// irmtfan add join for read_mode = 2
165
166
$poster_array = [];
167
if (count($posts) > 0) {
168
    foreach (array_keys($posts) as $id) {
169
        /** @var \NewbbPost[] $posts */
170
        $poster_array[$posts[$id]->getVar('uid')] = 1;
171
    }
172
}
173
174
$xoops_pagetitle                = $xoopsModule->getVar('name') . ' - ' . _MD_NEWBB_VIEWALLPOSTS;
175
$xoopsOption['xoops_pagetitle'] = $xoops_pagetitle;
176
$xoopsOption['template_main']   = 'newbb_viewpost.tpl';
177
178
include_once $GLOBALS['xoops']->path('header.php');
179
include_once __DIR__ . '/include/functions.time.php';
180
include_once __DIR__ . '/include/functions.render.php';
181
182
//global $xoTheme;
0 ignored issues
show
Unused Code Comprehensibility introduced by
75% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
183
//$xoTheme->addScript('/Frameworks/textsanitizer/xoops.js');
184
185
if (!empty($forum_id)) {
186
    if (!$forumHandler->getPermission($forumObject, 'view')) {
187
        redirect_header(XOOPS_URL . '/index.php', 2, _MD_NEWBB_NORIGHTTOACCESS);
188
    }
189
    if ($forumObject->getVar('parent_forum')) {
190
        $parent_forumObject = $forumHandler->get($forumObject->getVar('parent_forum'), ['forum_name']);
191
        $parentforum      = [
192
            'id'   => $forumObject->getVar('parent_forum'),
193
            'name' => $parent_forumObject->getVar('forum_name')
194
        ];
195
        unset($parent_forumObject);
196
        $xoopsTpl->assign_by_ref('parentforum', $parentforum);
197
    }
198
    $xoopsTpl->assign('forum_name', $forumObject->getVar('forum_name'));
199
    $xoopsTpl->assign('forum_moderators', $forumObject->dispForumModerators());
200
201
    $xoops_pagetitle = $forumObject->getVar('forum_name') . ' - ' . _MD_NEWBB_VIEWALLPOSTS . ' [' . $xoopsModule->getVar('name') . ']';
202
    $xoopsTpl->assign('forum_id', $forumObject->getVar('forum_id'));
203
    // irmtfan new method
204 View Code Duplication
    if (!empty($GLOBALS['xoopsModuleConfig']['rss_enable'])) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
205
        $xoopsTpl->assign('xoops_module_header', '
206
            <link rel="alternate" type="application/xml+rss" title="' . $xoopsModule->getVar('name') . '-' . $forumObject->getVar('forum_name') . '" href="' . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/rss.php?f=' . $forum_id . '" />
207
            ' . @$xoopsTpl->get_template_vars('xoops_module_header'));
208
    }
209 View Code Duplication
} elseif (!empty($GLOBALS['xoopsModuleConfig']['rss_enable'])) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
210
    $xoopsTpl->assign('xoops_module_header', '
211
        <link rel="alternate" type="application/xml+rss" title="' . $xoopsModule->getVar('name') . '" href="' . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/rss.php" />
212
    ' . @$xoopsTpl->get_template_vars('xoops_module_header'));
213
}
214
// irmtfan remove and move to footer.php
0 ignored issues
show
Unused Code Comprehensibility introduced by
36% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
215
//$xoopsTpl->assign('xoops_module_header', $xoops_module_header);
216
$xoopsTpl->assign('xoops_pagetitle', $xoops_pagetitle);
217
// irmtfan - remove icon_path and use newbbDisplayImage
218
$xoopsTpl->assign('anonym_avatar', newbbDisplayImage('anonym'));
219
$userid_array = [];
220 View Code Duplication
if (count($poster_array) > 0) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
221
    /** @var \XoopsMembershipHandler $memberHandler */
222
    $memberHandler = xoops_getHandler('member');
223
    $userid_array  = array_keys($poster_array);
224
    $user_criteria = '(' . implode(',', $userid_array) . ')';
225
    $users         = $memberHandler->getUsers(new Criteria('uid', $user_criteria, 'IN'), true);
226
} else {
227
    $user_criteria = '';
228
    $users         = null;
229
}
230
231
$online = [];
232
233 View Code Duplication
if ($GLOBALS['xoopsModuleConfig']['wol_enabled']) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
234
    if (!empty($user_criteria)) {
235
        /** @var \NewbbOnlineHandler $onlineHandler */
236
        $onlineHandler = xoops_getModuleHandler('online', 'newbb');
237
        $onlineHandler->init($forum_id);
238
    }
239
}
240
241
$viewtopic_users = [];
242
243 View Code Duplication
if (count($userid_array) > 0) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
244
    require $GLOBALS['xoops']->path('modules/' . $xoopsModule->getVar('dirname', 'n') . '/class/user.php');
245
    $userHandler         = new NewbbUserHandler($GLOBALS['xoopsModuleConfig']['groupbar_enabled'], $GLOBALS['xoopsModuleConfig']['wol_enabled']);
246
    $userHandler->users  = $users;
247
    $userHandler->online = $online;
0 ignored issues
show
The property online does not seem to exist. Did you mean enableOnline?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
248
    $viewtopic_users     = $userHandler->getUsers();
249
}
250
251
$pn           = 0;
252
$topicHandler = xoops_getModuleHandler('topic', 'newbb');
253
static $suspension = [];
254
foreach (array_keys($posts) as $id) {
255
    ++$pn;
256
257
    /** @var \NewbbPost $post */
258
    $post       = $posts[$id];
259
    $post_title = $post->getVar('subject');
260
261
    if ($posticon = $post->getVar('icon')) {
262
        $post_image = '<a name="' . $post->getVar('post_id') . '"><img src="' . XOOPS_URL . '/images/subject/' . htmlspecialchars($posticon) . '" alt="" /></a>';
263
    } else {
264
        $post_image = '<a name="' . $post->getVar('post_id') . '"><img src="' . XOOPS_URL . '/images/icons/no_posticon.gif" alt="" /></a>';
265
    }
266
    $poster = [
267
        'uid'  => 0,
268
        'name' => $post->getVar('poster_name') ?: $myts->htmlSpecialChars($GLOBALS['xoopsConfig']['anonymous']),
269
        'link' => $post->getVar('poster_name') ?: $myts->htmlSpecialChars($GLOBALS['xoopsConfig']['anonymous'])
270
    ];
271
    if ($post->getVar('uid') > 0 && isset($viewtopic_users[$post->getVar('uid')])) {
272
        $poster = $viewtopic_users[$post->getVar('uid')];
273
    }
274
    if ($isAdmin || $post->checkIdentity()) {
275
        $post_text       = $post->getVar('post_text');
276
        $post_attachment = $post->displayAttachment();
277 View Code Duplication
    } elseif ($GLOBALS['xoopsModuleConfig']['enable_karma'] && $post->getVar('post_karma') > $user_karma) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
278
        $post_text       = "<div class='karma'>" . sprintf(_MD_NEWBB_KARMA_REQUIREMENT, $user_karma, $post->getVar('post_karma')) . '</div>';
279
        $post_attachment = '';
280
    } elseif ($GLOBALS['xoopsModuleConfig']['allow_require_reply'] && $post->getVar('require_reply')) {
281
        $post_text       = "<div class='karma'>" . _MD_NEWBB_REPLY_REQUIREMENT . '</div>';
282
        $post_attachment = '';
283
    } else {
284
        $post_text       = $post->getVar('post_text');
285
        $post_attachment = $post->displayAttachment();
286
    }
287
288
    $thread_buttons = [];
289
290
    if ($GLOBALS['xoopsModuleConfig']['enable_permcheck']) {
291
        if (!isset($suspension[$post->getVar('forum_id')])) {
292
            /** @var \NewbbModerateHandler $moderateHandler */
293
            $moderateHandler                       = xoops_getModuleHandler('moderate', 'newbb');
294
            $suspension[$post->getVar('forum_id')] = !$moderateHandler->verifyUser(-1, '', $post->getVar('forum_id'));
295
        }
296
297 View Code Duplication
        if ($isAdmin
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
298
            || (!$suspension[$post->getVar('forum_id')] && $post->checkIdentity()
299
                && $post->checkTimelimit('delete_timelimit'))) {
300
            $thread_buttons['delete']['image'] = newbbDisplayImage('p_delete', _DELETE);
301
            $thread_buttons['delete']['link']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/delete.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id');
302
            $thread_buttons['delete']['name']  = _DELETE;
303
        }
304 View Code Duplication
        if ($isAdmin
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
305
            || !$suspension[$post->getVar('forum_id')] && $post->checkIdentity()
306
               && $post->checkTimelimit('edit_timelimit')) {
307
            $thread_buttons['edit']['image'] = newbbDisplayImage('p_edit', _EDIT);
308
            $thread_buttons['edit']['link']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/edit.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id');
309
            $thread_buttons['edit']['name']  = _EDIT;
310
        }
311
        if (is_object($GLOBALS['xoopsUser']) && !$suspension[$post->getVar('forum_id')]) {
312
            $thread_buttons['reply']['image'] = newbbDisplayImage('p_reply', _MD_NEWBB_REPLY);
313
            $thread_buttons['reply']['link']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/reply.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id');
314
            $thread_buttons['reply']['name']  = _MD_NEWBB_REPLY;
315
316
            $thread_buttons['quote']['image'] = newbbDisplayImage('p_quote', _MD_NEWBB_QUOTE);
317
            $thread_buttons['quote']['link']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/reply.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id') . '&amp;quotedac=1';
318
            $thread_buttons['quote']['name']  = _MD_NEWBB_QUOTE;
319
        }
320
    } else {
321
        $thread_buttons['delete']['image'] = newbbDisplayImage('p_delete', _DELETE);
322
        $thread_buttons['delete']['link']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/delete.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id');
323
        $thread_buttons['delete']['name']  = _DELETE;
324
        $thread_buttons['edit']['image']   = newbbDisplayImage('p_edit', _EDIT);
325
        $thread_buttons['edit']['link']    = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/edit.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id');
326
        $thread_buttons['edit']['name']    = _EDIT;
327
        $thread_buttons['reply']['image']  = newbbDisplayImage('p_reply', _MD_NEWBB_REPLY);
328
        $thread_buttons['reply']['link']   = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/reply.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id');
329
        $thread_buttons['reply']['name']   = _MD_NEWBB_REPLY;
330
    }
331
332
    if (!$isAdmin && $GLOBALS['xoopsModuleConfig']['reportmod_enabled']) {
333
        $thread_buttons['report']['image'] = newbbDisplayImage('p_report', _MD_NEWBB_REPORT);
334
        $thread_buttons['report']['link']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/report.php?forum=' . $post->getVar('forum_id') . '&amp;topic_id=' . $post->getVar('topic_id');
335
        $thread_buttons['report']['name']  = _MD_NEWBB_REPORT;
336
    }
337
    $thread_action = [];
338
339
    $xoopsTpl->append('posts', [
340
        'post_id'         => $post->getVar('post_id'),
341
        'topic_id'        => $post->getVar('topic_id'),
342
        'forum_id'        => $post->getVar('forum_id'),
343
        'post_date'       => newbbFormatTimestamp($post->getVar('post_time')),
344
        'post_image'      => $post_image,
345
        'post_title'      => $post_title,
346
        'post_text'       => $post_text,
347
        'post_attachment' => $post_attachment,
348
        'post_edit'       => $post->displayPostEdit(),
349
        'post_no'         => $start + $pn,
350
        'post_signature'  => $post->getVar('attachsig') ? @$poster['signature'] : '',
351
        //                                 'poster_ip'       => ($isAdmin && $GLOBALS['xoopsModuleConfig']['show_ip']) ? long2ip($post->getVar('poster_ip')) : '',
0 ignored issues
show
Unused Code Comprehensibility introduced by
69% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
352
        'poster_ip'       => ($isAdmin && $GLOBALS['xoopsModuleConfig']['show_ip']) ? $post->getVar('poster_ip') : '',
353
        'thread_action'   => $thread_action,
354
        'thread_buttons'  => $thread_buttons,
355
        'poster'          => $poster
356
    ]);
357
358
    unset($thread_buttons, $poster);
359
}
360
unset($viewtopic_users, $forums);
361
362 View Code Duplication
if (!empty($GLOBALS['xoopsModuleConfig']['show_jump'])) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
363
    include_once __DIR__ . '/include/functions.forum.php';
364
    $xoopsTpl->assign('forum_jumpbox', newbbMakeJumpbox($forum_id));
365
}
366
367
if ($postCount > $post_perpage) {
368
    include $GLOBALS['xoops']->path('class/pagenav.php');
369
    $nav = new XoopsPageNav($postCount, $post_perpage, $start, 'start', 'forum=' . $forum_id . '&amp;viewmode=' . $viewmode . '&amp;status=' . $status . '&amp;uid=' . $uid . '&amp;order=' . $order . '&amp;mode=' . $mode);
370
    //if (isset($GLOBALS['xoopsModuleConfig']['do_rewrite'])) $nav->url = formatURL(Request::getString('SERVER_NAME', '', 'SERVER')) . $nav->url;
0 ignored issues
show
Unused Code Comprehensibility introduced by
66% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
371 View Code Duplication
    if ('select' === $GLOBALS['xoopsModuleConfig']['pagenav_display']) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
372
        $navi = $nav->renderSelect();
373
    } elseif ('image' === $GLOBALS['xoopsModuleConfig']['pagenav_display']) {
374
        $navi = $nav->renderImageNav(4);
375
    } else {
376
        $navi = $nav->renderNav(4);
377
    }
378
379
    $xoopsTpl->assign('pagenav', $navi);
380
} else {
381
    $xoopsTpl->assign('pagenav', '');
382
}
383
384
$xoopsTpl->assign('lang_forum_index', sprintf(_MD_NEWBB_FORUMINDEX, htmlspecialchars($GLOBALS['xoopsConfig']['sitename'], ENT_QUOTES)));
385
386
switch ($status) {
387
    case 'active':
388
        $lang_title = _MD_NEWBB_VIEWALLPOSTS . ' [' . _MD_NEWBB_TYPE_ADMIN . ']';
389
        break;
390
    case 'pending':
391
        $lang_title = _MD_NEWBB_VIEWALLPOSTS . ' [' . _MD_NEWBB_TYPE_PENDING . ']';
392
        break;
393
    case 'deleted':
394
        $lang_title = _MD_NEWBB_VIEWALLPOSTS . ' [' . _MD_NEWBB_TYPE_DELETED . ']';
395
        break;
396
    case 'new':
397
        $lang_title = _MD_NEWBB_NEWPOSTS;
398
        break;
399
    default:
400
        $lang_title = _MD_NEWBB_VIEWALLPOSTS;
401
        break;
402
}
403
if ($uid > 0) {
404
    $lang_title .= ' (' . XoopsUser::getUnameFromId($uid) . ')';
405
}
406
$xoopsTpl->assign('lang_title', $lang_title);
407
// irmtfan up to p_up
408
$xoopsTpl->assign('p_up', newbbDisplayImage('up', _MD_NEWBB_TOP));
409
$xoopsTpl->assign('groupbar_enable', $GLOBALS['xoopsModuleConfig']['groupbar_enabled']);
410
$xoopsTpl->assign('anonymous_prefix', $GLOBALS['xoopsModuleConfig']['anonymous_prefix']);
411
$xoopsTpl->assign('down', newbbDisplayImage('down', _MD_NEWBB_BOTTOM));
412
413
$all_link       = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?forum=' . $forum_id . "&amp;start=$start";
414
$post_link      = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?forum=' . $forum_id;
415
$newpost_link   = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?forum=' . $forum_id . '&amp;status=new';
416
$digest_link    = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?forum=' . $forum_id . "&amp;start=$start&amp;status=digest";
417
$unreplied_link = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?forum=' . $forum_id . "&amp;start=$start&amp;status=unreplied";
418
$unread_link    = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?forum=' . $forum_id . "&amp;start=$start&amp;status=unread";
419
420
$xoopsTpl->assign('all_link', $all_link);
421
$xoopsTpl->assign('post_link', $post_link);
422
$xoopsTpl->assign('newpost_link', $newpost_link);
423
$xoopsTpl->assign('digest_link', $digest_link);
424
$xoopsTpl->assign('unreplied_link', $unreplied_link);
425
$xoopsTpl->assign('unread_link', $unread_link);
426
427
$viewmode_options = [];
428 View Code Duplication
if ('DESC' === $order) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
429
    $viewmode_options[] = [
430
        'link'  => XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?viewmode=flat&amp;order=ASC&amp;forum=' . $forum_id,
431
        'title' => _OLDESTFIRST
432
    ];
433
} else {
434
    $viewmode_options[] = [
435
        'link'  => XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewpost.php?viewmode=flat&amp;order=DESC&amp;forum=' . $forum_id,
436
        'title' => _NEWESTFIRST
437
    ];
438
}
439
440
//$xoopsTpl->assign('viewmode_compact', ($viewmode=="compact")?1:0);
0 ignored issues
show
Unused Code Comprehensibility introduced by
84% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
441
$xoopsTpl->assign_by_ref('viewmode_options', $viewmode_options);
442
$xoopsTpl->assign('menumode', $menumode);
443
$xoopsTpl->assign('menumode_other', $menumode_other);
444
445
$xoopsTpl->assign('viewer_level', $isAdmin ? 2 : is_object($GLOBALS['xoopsUser']));
446
$xoopsTpl->assign('uid', $uid);
447
$xoopsTpl->assign('mode', $mode);
448
$xoopsTpl->assign('status', $status);
449
// irmtfan move to footer.php
450
include_once __DIR__ . '/footer.php';
451
include $GLOBALS['xoops']->path('footer.php');
452