Issues (380)

Security Analysis    not enabled

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  Header Injection
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

blocks/newbb_block.php (7 issues)

Severity
1
<?php
2
3
/*
4
 * You may not change or alter any portion of this comment or credits
5
 * of supporting developers from this source code or any supporting source code
6
 * which is considered copyrighted (c) material of the original comment or credit authors.
7
 *
8
 * This program is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 */
12
13
/**
14
 * @copyright    XOOPS Project https://xoops.org/
15
 * @license      GNU GPL 2 or later (https://www.gnu.org/licenses/gpl-2.0.html)
16
 * @package
17
 * @since
18
 * @author       XOOPS Development Team
19
 */
20
21
use XoopsModules\Newbb;
22
23
24
// irmtfan use full path because block maybe used outside newbb
25
26
require_once $GLOBALS['xoops']->path('modules/newbb/include/functions.ini.php');
27
28
if (defined('NEWBB_BLOCK_DEFINED')) {
29
    return;
30
}
31
define('NEWBB_BLOCK_DEFINED', true);
32
33
/**
34
 * @param $var
35
 * @return bool
36
 */
37
function b_newbb_array_filter($var)
38
{
39
    return $var > 0;
40
}
41
42
// options[0] - Citeria valid: time(by default)
43
// options[1] - NumberToDisplay: any positive integer
44
// options[2] - TimeDuration: negative for hours, positive for days, for instance, -5 for 5 hours and 5 for 5 days
45
// options[3] - DisplayMode: 0-full view;1-compact view;2-lite view
46
// options[4] - Display Navigator: 1 (by default), 0 (No)
47
// options[5] - Title Length : 0 - no limit
48
// options[6] - SelectedForumIDs: null for all
49
50
/**
51
 * @param $options
52
 * @return array|bool
53
 */
54
function b_newbb_show($options)
55
{
56
    global $accessForums;
57
    global $xoopsLogger;
58
59
    require_once dirname(__DIR__) . '/include/functions.config.php';
60
    require_once dirname(__DIR__) . '/include/functions.time.php';
61
62
    $myts          = \MyTextSanitizer::getInstance();
63
    $block         = [];
64
    $i             = 0;
0 ignored issues
show
The assignment to $i is dead and can be removed.
Loading history...
65
    $order         = '';
0 ignored issues
show
The assignment to $order is dead and can be removed.
Loading history...
66
    $extraCriteria = '';
67
    if (!empty($options[2])) {
68
        //require_once  dirname(__DIR__) . '/include/functions.time.php';
69
        $extraCriteria .= ' AND p.post_time>' . (time() - newbbGetSinceTime($options[2]));
70
    }
71
    switch ($options[0]) {
72
        case 'time':
73
        default:
74
            $order = 't.topic_last_post_id';
75
            break;
76
    }
77
78
    if (!isset($accessForums)) {
79
        /** var Newbb\PermissionHandler $permHandler */
80
        $permHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Permission');
81
        if (!$accessForums = $permHandler->getForums()) {
82
            return $block;
83
        }
84
    }
85
    if (!empty($options[6])) {
86
        $myallowedForums = array_filter(array_slice($options, 6), '\b_newbb_array_filter'); // get allowed forums
87
        $allowedForums   = array_intersect($myallowedForums, $accessForums);
88
    } else {
89
        $allowedForums = $accessForums;
90
    }
91
    if (empty($allowedForums)) {
92
        return $block;
93
    }
94
95
    $forumCriteria   = ' AND t.forum_id IN (' . implode(',', $allowedForums) . ')';
96
    $approveCriteria = ' AND t.approved = 1';
97
98
    $newbbConfig = newbbLoadConfig();
99
    if (!empty($newbbConfig['do_rewrite'])) {
100
        require_once $GLOBALS['xoops']->path('modules/newbb/seo_url.php');
101
    } else {
102
        if (!defined('SEO_MODULE_NAME')) {
103
            define('SEO_MODULE_NAME', 'modules/newbb');
104
        }
105
    }
106
107
    $query = 'SELECT'
108
             . '    t.topic_id, t.topic_replies, t.forum_id, t.topic_title, t.topic_views, t.type_id,'
109
             . '    f.forum_name,t.topic_status,'
110
             . '    p.post_id, p.post_time, p.icon, p.uid, p.poster_name'
111
             . '    FROM '
112
             . $GLOBALS['xoopsDB']->prefix('newbb_topics')
113
             . ' AS t '
114
             . '    LEFT JOIN '
115
             . $GLOBALS['xoopsDB']->prefix('newbb_posts')
116
             . ' AS p ON t.topic_last_post_id=p.post_id'
117
             . '    LEFT JOIN '
118
             . $GLOBALS['xoopsDB']->prefix('newbb_forums')
119
             . ' AS f ON f.forum_id=t.forum_id'
120
             . '    WHERE 1=1 '
121
             . $forumCriteria
122
             . $approveCriteria
123
             . $extraCriteria
124
             . ' ORDER BY '
125
             . $order
126
             . ' DESC';
127
128
    $result = $GLOBALS['xoopsDB']->query($query, $options[1], 0);
129
130
    if (!$result) {
131
        //xoops_error($GLOBALS['xoopsDB']->error());
132
        return false;
133
    }
134
    $block['disp_mode'] = $options[3]; // 0 - full view; 1 - compact view; 2 - lite view;
135
    $rows               = [];
136
    $author             = [];
137
    $types              = [];
138
139
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
140
        $rows[]              = $row;
141
        $author[$row['uid']] = 1;
142
        if ($row['type_id'] > 0) {
143
            $types[$row['type_id']] = 1;
144
        }
145
    }
146
147
    if (count($rows) < 1) {
148
        return $block;
149
    }
150
151
    require_once dirname(__DIR__) . '/include/functions.user.php';
152
    $author_name = newbbGetUnameFromIds(array_keys($author), $newbbConfig['show_realname'], true);
153
154
    if (count($types) > 0) {
155
        /** @var Newbb\TypeHandler $typeHandler */
156
        $typeHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Type');
157
        $type_list   = $typeHandler->getList(new \Criteria('type_id', '(' . implode(', ', array_keys($types)) . ')', 'IN'));
158
    }
159
160
    foreach ($rows as $arr) {
161
        // irmtfan add lastposticon - load main lang
162
        xoops_loadLanguage('main', 'newbb');
163
        $topic                  = [];
164
        $topic_page_jump        = newbbDisplayImage('lastposticon', _MD_NEWBB_GOTOLASTPOST);
165
        $topic['topic_subject'] = empty($type_list[$arr['type_id']]) ? '' : '[' . $type_list[$arr['type_id']] . ']';
166
167
        $topic['post_id']      = $arr['post_id'];
168
        $topic['topic_status'] = $arr['topic_status'];
169
        $topic['forum_id']     = $arr['forum_id'];
170
        $topic['forum_name']   = $myts->htmlSpecialChars($arr['forum_name']);
171
        $topic['id']           = $arr['topic_id'];
172
173
        $title = $myts->htmlSpecialChars($arr['topic_title']);
174
        if (!empty($options[5])) {
175
            $title = xoops_substr($title, 0, $options[5]);
176
        }
177
        $topic['title']   = $topic['topic_subject'] . ' ' . $title;
178
        $topic['replies'] = $arr['topic_replies'];
179
        $topic['views']   = $arr['topic_views'];
180
        $topic['time']    = newbbFormatTimestamp($arr['post_time']);
181
        if (!empty($author_name[$arr['uid']])) {
182
            $topic_poster = $author_name[$arr['uid']];
183
        } else {
184
            $topic_poster = $myts->htmlSpecialChars($arr['poster_name'] ?: $GLOBALS['xoopsConfig']['anonymous']);
185
        }
186
        $topic['topic_poster']    = $topic_poster;
187
        $topic['topic_page_jump'] = $topic_page_jump;
188
        // START irmtfan remove hardcoded html in URLs - add $seo_topic_url
189
        $seo_url       = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewtopic.php?post_id=' . $topic['post_id'];
190
        $seo_topic_url = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewtopic.php?topic_id=' . $topic['id'];
191
        $seo_forum_url = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewforum.php?forum=' . $topic['forum_id'];
192
        if (!empty($newbbConfig['do_rewrite'])) {
193
            $topic['seo_url']       = seo_urls($seo_url);
194
            $topic['seo_topic_url'] = seo_urls($seo_topic_url);
195
            $topic['seo_forum_url'] = seo_urls($seo_forum_url);
196
        } else {
197
            $topic['seo_url']       = $seo_url;
198
            $topic['seo_topic_url'] = $seo_topic_url;
199
            $topic['seo_forum_url'] = $seo_forum_url;
200
        }
201
        // END irmtfan remove hardcoded html in URLs - add $seo_topic_url
202
        $block['topics'][] = $topic;
203
        unset($topic);
204
    }
205
    // START irmtfan remove hardcoded html in URLs
206
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME;
207
    $block['seo_top_allforums'] = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
208
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME . '/list.topic.php';
209
    $block['seo_top_alltopics'] = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
210
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewpost.php';
211
    $block['seo_top_allposts']  = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
212
    // END irmtfan remove hardcoded html in URLs
213
    $block['indexNav'] = (int)$options[4];
214
215
    return $block;
216
}
217
218
// options[0] - Citeria valid: time(by default), views, replies, digest, sticky
219
// options[1] - NumberToDisplay: any positive integer
220
// options[2] - TimeDuration: negative for hours, positive for days, for instance, -5 for 5 hours and 5 for 5 days
221
// options[3] - DisplayMode: 0-full view;1-compact view;2-lite view
222
// options[4] - Display Navigator: 1 (by default), 0 (No)
223
// options[5] - Title Length : 0 - no limit
224
// options[6] - SelectedForumIDs: null for all
225
226
/**
227
 * @param $options
228
 * @return array|bool
229
 */
230
function b_newbb_topic_show($options)
231
{
232
    global $accessForums;
233
    require_once dirname(__DIR__) . '/include/functions.time.php';
234
    $myts          = \MyTextSanitizer::getInstance();
235
    $block         = [];
236
    $i             = 0;
0 ignored issues
show
The assignment to $i is dead and can be removed.
Loading history...
237
    $order         = '';
238
    $extraCriteria = '';
239
    $time_criteria = null;
240
    if (!empty($options[2])) {
241
        $time_criteria = time() - newbbGetSinceTime($options[2]);
242
        $extraCriteria = ' AND t.topic_time>' . $time_criteria;
243
    }
244
    switch ($options[0]) {
245
        case 'views':
246
            $order = 't.topic_views';
247
            break;
248
        case 'replies':
249
            $order = 't.topic_replies';
250
            break;
251
        case 'digest':
252
            $order         = 't.digest_time';
253
            $extraCriteria = ' AND t.topic_digest=1';
254
            if (null !== $time_criteria) {
255
                $extraCriteria .= ' AND t.digest_time>' . $time_criteria;
256
            }
257
            break;
258
        case 'sticky':
259
            $order         = 't.topic_id';
260
            $extraCriteria .= ' AND t.topic_sticky=1';
261
            break;
262
        case 'time':
263
        default:
264
            $order = 't.topic_id';
265
            break;
266
    }
267
268
    $newbbConfig = newbbLoadConfig();
269
    if (!empty($newbbConfig['do_rewrite'])) {
270
        require_once $GLOBALS['xoops']->path('modules/newbb/seo_url.php');
271
    } else {
272
        if (!defined('SEO_MODULE_NAME')) {
273
            define('SEO_MODULE_NAME', 'modules/newbb');
274
        }
275
    }
276
277
    if (!isset($accessForums)) {
278
        /** var Newbb\PermissionHandler $permHandler */
279
        $permHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Permission');
280
        if (!$accessForums = $permHandler->getForums()) {
281
            return $block;
282
        }
283
    }
284
285
    if (!empty($options[6])) {
286
        $myallowedForums = array_filter(array_slice($options, 6), '\b_newbb_array_filter'); // get allowed forums
287
        $allowedForums   = array_intersect($myallowedForums, $accessForums);
288
    } else {
289
        $allowedForums = $accessForums;
290
    }
291
    if (empty($allowedForums)) {
292
        return false;
293
    }
294
295
    $forumCriteria   = ' AND t.forum_id IN (' . implode(',', $allowedForums) . ')';
296
    $approveCriteria = ' AND t.approved = 1';
297
298
    $query = 'SELECT' . '    t.topic_id, t.topic_replies, t.forum_id, t.topic_title, t.topic_views, t.type_id, t.topic_time, t.topic_poster, t.poster_name,' . '    f.forum_name' . '    FROM ' . $GLOBALS['xoopsDB']->prefix('newbb_topics') . ' AS t ' . '    LEFT JOIN ' . $GLOBALS['xoopsDB']->prefix(
299
            'newbb_forums'
300
        ) . ' AS f ON f.forum_id=t.forum_id' . '    WHERE 1=1 ' . $forumCriteria . $approveCriteria . $extraCriteria . ' ORDER BY ' . $order . ' DESC';
301
302
    $result = $GLOBALS['xoopsDB']->query($query, $options[1], 0);
303
304
    if (!$result) {
305
        //xoops_error($GLOBALS['xoopsDB']->error());
306
        return $block;
307
    }
308
    $block['disp_mode'] = $options[3]; // 0 - full view; 1 - compact view; 2 - lite view;
309
    $rows               = [];
310
    $author             = [];
311
    $types              = [];
312
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
313
        $rows[]                       = $row;
314
        $author[$row['topic_poster']] = 1;
315
        if ($row['type_id'] > 0) {
316
            $types[$row['type_id']] = 1;
317
        }
318
    }
319
    if (count($rows) < 1) {
320
        return $block;
321
    }
322
    require_once dirname(__DIR__) . '/include/functions.user.php';
323
    $author_name = newbbGetUnameFromIds(array_keys($author), $newbbConfig['show_realname'], true);
324
    if (count($types) > 0) {
325
        /** @var Newbb\TypeHandler $typeHandler */
326
        $typeHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Type');
327
        $type_list   = $typeHandler->getList(new \Criteria('type_id', '(' . implode(', ', array_keys($types)) . ')', 'IN'));
328
    }
329
330
    foreach ($rows as $arr) {
331
        // irmtfan remove $topic_page_jump because there is no last post
332
        //$topic_page_jump = '';
333
        $topic                  = [];
334
        $topic['topic_subject'] = empty($type_list[$arr['type_id']]) ? '' : '[' . $type_list[$arr['type_id']] . '] ';
335
        $topic['forum_id']      = $arr['forum_id'];
336
        $topic['forum_name']    = $myts->htmlSpecialChars($arr['forum_name']);
337
        $topic['id']            = $arr['topic_id'];
338
339
        $title = $myts->htmlSpecialChars($arr['topic_title']);
340
        if (!empty($options[5])) {
341
            $title = xoops_substr($title, 0, $options[5]);
342
        }
343
        $topic['title']   = $topic['topic_subject'] . $title;
344
        $topic['replies'] = $arr['topic_replies'];
345
        $topic['views']   = $arr['topic_views'];
346
        $topic['time']    = newbbFormatTimestamp($arr['topic_time']);
347
        if (!empty($author_name[$arr['topic_poster']])) {
348
            $topic_poster = $author_name[$arr['topic_poster']];
349
        } else {
350
            $topic_poster = $myts->htmlSpecialChars($arr['poster_name'] ?: $GLOBALS['xoopsConfig']['anonymous']);
351
        }
352
        $topic['topic_poster'] = $topic_poster;
353
        // irmtfan remove $topic_page_jump because there is no last post
354
        //$topic['topic_page_jump'] = $topic_page_jump;
355
        // START irmtfan remove hardcoded html in URLs - add $seo_topic_url
356
        $seo_topic_url = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewtopic.php?topic_id=' . $topic['id'];
357
        $seo_forum_url = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewforum.php?forum=' . $topic['forum_id'];
358
359
        if (!empty($newbbConfig['do_rewrite'])) {
360
            $topic['seo_topic_url'] = seo_urls($seo_topic_url);
361
            $topic['seo_forum_url'] = seo_urls($seo_forum_url);
362
        } else {
363
            $topic['seo_topic_url'] = $seo_topic_url;
364
            $topic['seo_forum_url'] = $seo_forum_url;
365
        }
366
        // END irmtfan remove hardcoded html in URLs - add $seo_topic_url
367
        $block['topics'][] = $topic;
368
        unset($topic);
369
    }
370
    // START irmtfan remove hardcoded html in URLs
371
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME;
372
    $block['seo_top_allforums'] = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
373
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME . '/list.topic.php';
374
    $block['seo_top_alltopics'] = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
375
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewpost.php';
376
    $block['seo_top_allposts']  = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
377
    // END irmtfan remove hardcoded html in URLs
378
    $block['indexNav'] = (int)$options[4];
379
380
    return $block;
381
}
382
383
// options[0] - Citeria valid: title(by default), text
384
// options[1] - NumberToDisplay: any positive integer
385
// options[2] - TimeDuration: negative for hours, positive for days, for instance, -5 for 5 hours and 5 for 5 days
386
// options[3] - DisplayMode: 0-full view;1-compact view;2-lite view; Only valid for "time"
387
// options[4] - Display Navigator: 1 (by default), 0 (No)
388
// options[5] - Title/Text Length : 0 - no limit
389
// options[6] - SelectedForumIDs: null for all
390
391
/**
392
 * @param $options
393
 * @return array
394
 */
395
function b_newbb_post_show($options)
396
{
397
    global $accessForums;
398
    global $newbbConfig;
399
400
    require_once dirname(__DIR__) . '/include/functions.time.php';
401
    $myts          = \MyTextSanitizer::getInstance();
402
    $block         = [];
403
    $i             = 0;
0 ignored issues
show
The assignment to $i is dead and can be removed.
Loading history...
404
    $order         = '';
0 ignored issues
show
The assignment to $order is dead and can be removed.
Loading history...
405
    $extraCriteria = '';
406
    $time_criteria = null;
0 ignored issues
show
The assignment to $time_criteria is dead and can be removed.
Loading history...
407
    if (!empty($options[2])) {
408
        $time_criteria = time() - newbbGetSinceTime($options[2]);
409
        $extraCriteria = ' AND p.post_time>' . $time_criteria;
410
    }
411
412
    switch ($options[0]) {
413
        case 'text':
414
            if (!empty($newbbConfig['enable_karma'])) {
415
                $extraCriteria .= ' AND p.post_karma = 0';
416
            }
417
            if (!empty($newbbConfig['allow_require_reply'])) {
418
                $extraCriteria .= ' AND p.require_reply = 0';
419
            }
420
        // no break
421
        default:
422
            $order = 'p.post_id';
423
            break;
424
    }
425
426
    if (!isset($accessForums)) {
427
        /** var Newbb\PermissionHandler $permHandler */
428
        $permHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Permission');
429
        if (!$accessForums = $permHandler->getForums()) {
430
            return $block;
431
        }
432
    }
433
434
    $newbbConfig = newbbLoadConfig();
435
    if (!empty($newbbConfig['do_rewrite'])) {
436
        require_once $GLOBALS['xoops']->path('modules/newbb/seo_url.php');
437
    } else {
438
        if (!defined('SEO_MODULE_NAME')) {
439
            define('SEO_MODULE_NAME', 'modules/newbb');
440
        }
441
    }
442
443
    if (!empty($options[6])) {
444
        $myallowedForums = array_filter(array_slice($options, 6), '\b_newbb_array_filter'); // get allowed forums
445
        $allowedForums   = array_intersect($myallowedForums, $accessForums);
446
    } else {
447
        $allowedForums = $accessForums;
448
    }
449
    if (empty($allowedForums)) {
450
        return $block;
451
    }
452
453
    $forumCriteria   = ' AND p.forum_id IN (' . implode(',', $allowedForums) . ')';
454
    $approveCriteria = ' AND p.approved = 1';
455
456
    $query = 'SELECT';
457
    $query .= '    p.post_id, p.subject, p.post_time, p.icon, p.uid, p.poster_name,';
458
    if ('text' === $options[0]) {
459
        $query .= '    pt.dohtml, pt.dosmiley, pt.doxcode, pt.dobr, pt.post_text,';
460
    }
461
    $query .= '    f.forum_id, f.forum_name' . '    FROM ' . $GLOBALS['xoopsDB']->prefix('newbb_posts') . ' AS p ' . '    LEFT JOIN ' . $GLOBALS['xoopsDB']->prefix('newbb_forums') . ' AS f ON f.forum_id=p.forum_id';
462
    if ('text' === $options[0]) {
463
        $query .= '    LEFT JOIN ' . $GLOBALS['xoopsDB']->prefix('newbb_posts_text') . ' AS pt ON pt.post_id=p.post_id';
464
    }
465
    $query .= '    WHERE 1=1 ' . $forumCriteria . $approveCriteria . $extraCriteria . ' ORDER BY ' . $order . ' DESC';
466
467
    $result = $GLOBALS['xoopsDB']->query($query, $options[1], 0);
468
    if (!$result) {
469
        //xoops_error($GLOBALS['xoopsDB']->error());
470
        return $block;
471
    }
472
    $block['disp_mode'] = ('text' === $options[0]) ? 3 : $options[3]; // 0 - full view; 1 - compact view; 2 - lite view;
473
    $rows               = [];
474
    $author             = [];
475
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
476
        $rows[]              = $row;
477
        $author[$row['uid']] = 1;
478
    }
479
    if (count($rows) < 1) {
480
        return $block;
481
    }
482
    require_once dirname(__DIR__) . '/include/functions.user.php';
483
    $author_name = newbbGetUnameFromIds(array_keys($author), $newbbConfig['show_realname'], true);
484
485
    foreach ($rows as $arr) {
486
        //if ($arr['icon'] && is_file($GLOBALS['xoops']->path('images/subject/' . $arr['icon']))) {
487
        if (!empty($arr['icon'])) {
488
            $last_post_icon = '<img src="' . XOOPS_URL . '/images/subject/' . htmlspecialchars($arr['icon'], ENT_QUOTES | ENT_HTML5) . '" alt="" >';
0 ignored issues
show
The assignment to $last_post_icon is dead and can be removed.
Loading history...
489
        } else {
490
            $last_post_icon = '<img src="' . XOOPS_URL . '/images/subject/icon1.gif" alt="" >';
491
        }
492
        //$topic['jump_post'] = "<a href='" . XOOPS_URL . "/modules/newbb/viewtopic.php?post_id=" . $arr['post_id'] ."#forumpost" . $arr['post_id'] . "'>" . $last_post_icon . '</a>';
493
        $topic               = [];
494
        $topic['forum_id']   = $arr['forum_id'];
495
        $topic['forum_name'] = $myts->htmlSpecialChars($arr['forum_name']);
496
        //$topic['id'] = $arr['topic_id'];
497
498
        $title = $myts->htmlSpecialChars($arr['subject']);
499
        if ('text' !== $options[0] && !empty($options[5])) {
500
            $title = xoops_substr($title, 0, $options[5]);
501
        }
502
        $topic['title']   = $title;
503
        $topic['post_id'] = $arr['post_id'];
504
        $topic['time']    = newbbFormatTimestamp($arr['post_time']);
505
        if (!empty($author_name[$arr['uid']])) {
506
            $topic_poster = $author_name[$arr['uid']];
507
        } else {
508
            $topic_poster = $myts->htmlSpecialChars($arr['poster_name'] ?: $GLOBALS['xoopsConfig']['anonymous']);
509
        }
510
        $topic['topic_poster'] = $topic_poster;
511
512
        if ('text' === $options[0]) {
513
            $post_text = $myts->displayTarea($arr['post_text'], $arr['dohtml'], $arr['dosmiley'], $arr['doxcode'], 1, $arr['dobr']);
514
            if (!empty($options[5])) {
515
                $post_text = xoops_substr(strip_tags($post_text), 0, $options[5]);
516
            }
517
            $topic['post_text'] = $post_text;
518
        }
519
        // START irmtfan remove hardcoded html in URLs
520
        $seo_url       = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewtopic.php?post_id=' . $topic['post_id'];
521
        $seo_forum_url = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewforum.php?forum=' . $topic['forum_id'];
522
        // END irmtfan remove hardcoded html in URLs
523
        if (!empty($newbbConfig['do_rewrite'])) {
524
            $topic['seo_url']       = seo_urls($seo_url);
525
            $topic['seo_forum_url'] = seo_urls($seo_forum_url);
526
        } else {
527
            $topic['seo_url']       = $seo_url;
528
            $topic['seo_forum_url'] = $seo_forum_url;
529
        }
530
531
        $block['topics'][] = $topic;
532
        unset($topic);
533
    }
534
    // START irmtfan remove hardcoded html in URLs
535
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME;
536
    $block['seo_top_allforums'] = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
537
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME . '/list.topic.php';
538
    $block['seo_top_alltopics'] = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
539
    $seo_top_allforums          = XOOPS_URL . '/' . SEO_MODULE_NAME . '/viewpost.php';
540
    $block['seo_top_allposts']  = !empty($newbbConfig['do_rewrite']) ? seo_urls($seo_top_allforums) : $seo_top_allforums;
541
    // END irmtfan remove hardcoded html in URLs
542
543
    $block['indexNav'] = (int)$options[4];
544
545
    return $block;
546
}
547
548
// options[0] - Citeria valid: post(by default), topic, digest, sticky
549
// options[1] - NumberToDisplay: any positive integer
550
// options[2] - TimeDuration: negative for hours, positive for days, for instance, -5 for 5 hours and 5 for 5 days
551
// options[3] - DisplayMode: 0-full view;1-compact view;
552
// options[4] - Display Navigator: 1 (by default), 0 (No)
553
// options[5] - Title Length : 0 - no limit
554
// options[6] - SelectedForumIDs: null for all
555
556
/**
557
 * @param $options
558
 * @return array|bool
559
 */
560
function b_newbb_author_show($options)
561
{
562
    global $accessForums;
563
    global $newbbConfig;
564
    $myts  = \MyTextSanitizer::getInstance();
565
    $block = [];
566
    //    $i              = 0;
567
    $type          = 'topic';
568
    $order         = 'count';
569
    $extraCriteria = '';
570
    $time_criteria = null;
571
    if (!empty($options[2])) {
572
        require_once dirname(__DIR__) . '/include/functions.time.php';
573
        $time_criteria = time() - newbbGetSinceTime($options[2]);
574
        $extraCriteria = ' AND topic_time > ' . $time_criteria;
575
    }
576
    switch ($options[0]) {
577
        case 'topic':
578
            break;
579
        case 'digest':
580
            $extraCriteria = ' AND topic_digest = 1';
581
            if (null !== $time_criteria) {
582
                $extraCriteria .= ' AND digest_time > ' . $time_criteria;
583
            }
584
            break;
585
        case 'sticky':
586
            $extraCriteria .= ' AND topic_sticky = 1';
587
            break;
588
        case 'post':
589
        default:
590
            $type = 'post';
591
            if (null !== $time_criteria) {
592
                $extraCriteria = ' AND post_time > ' . $time_criteria;
593
            }
594
            break;
595
    }
596
597
    if (!isset($accessForums)) {
598
        /** var Newbb\PermissionHandler $permHandler */
599
        $permHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Permission');
600
        if (!$accessForums = $permHandler->getForums()) {
601
            return $block;
602
        }
603
    }
604
605
    if (!empty($options[5])) {
606
        $myallowedForums = array_filter(array_slice($options, 5), '\b_newbb_array_filter'); // get allowed forums
607
        $allowedForums   = array_intersect($myallowedForums, $accessForums);
608
    } else {
609
        $allowedForums = $accessForums;
610
    }
611
    if (empty($allowedForums)) {
612
        return false;
613
    }
614
615
    if ('topic' === $type) {
616
        $forumCriteria   = ' AND forum_id IN (' . implode(',', $allowedForums) . ')';
617
        $approveCriteria = ' AND approved = 1';
618
        $query           = 'SELECT DISTINCT topic_poster AS author, COUNT(*) AS count
619
                    FROM ' . $GLOBALS['xoopsDB']->prefix('newbb_topics') . '
620
                    WHERE topic_poster>0 ' . $forumCriteria . $approveCriteria . $extraCriteria . ' GROUP BY topic_poster ORDER BY ' . $order . ' DESC';
621
    } else {
622
        $forumCriteria   = ' AND forum_id IN (' . implode(',', $allowedForums) . ')';
623
        $approveCriteria = ' AND approved = 1';
624
        $query           = 'SELECT DISTINCT uid AS author, COUNT(*) AS count
625
                    FROM ' . $GLOBALS['xoopsDB']->prefix('newbb_posts') . '
626
                    WHERE uid > 0 ' . $forumCriteria . $approveCriteria . $extraCriteria . ' GROUP BY uid ORDER BY ' . $order . ' DESC';
627
    }
628
629
    $result = $GLOBALS['xoopsDB']->query($query, $options[1], 0);
630
    if (!$result) {
631
        //xoops_error($GLOBALS['xoopsDB']->error());
632
        return $block;
633
    }
634
    $author = [];
635
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
636
        $author[$row['author']]['count'] = $row['count'];
637
    }
638
    if (count($author) < 1) {
639
        return $block;
640
    }
641
    require_once dirname(__DIR__) . '/include/functions.user.php';
642
    $author_name = newbbGetUnameFromIds(array_keys($author), $newbbConfig['show_realname']);
643
    foreach (array_keys($author) as $uid) {
644
        $author[$uid]['name'] = $myts->htmlSpecialChars($author_name[$uid]);
645
    }
646
    $block['authors']   = &$author;
647
    $block['disp_mode'] = $options[3]; // 0 - full view; 1 - lite view;
648
    $block['indexNav']  = (int)$options[4];
649
650
    return $block;
651
}
652
653
/**
654
 * @param $options
655
 * @return string
656
 */
657
function b_newbb_edit($options)
658
{
659
    require_once dirname(__DIR__) . '/include/functions.forum.php';
660
661
    $form = _MB_NEWBB_CRITERIA . "<select name='options[0]'>";
662
    $form .= "<option value='time'";
663
    if ('time' === $options[0]) {
664
        $form .= " selected='selected' ";
665
    }
666
    $form .= '>' . _MB_NEWBB_CRITERIA_TIME . '</option>';
667
    $form .= '</select>';
668
    $form .= '<br>' . _MB_NEWBB_DISPLAY . "<input type='text' name='options[1]' value='" . $options[1] . "' >";
669
    $form .= '<br>' . _MB_NEWBB_TIME . "<input type='text' name='options[2]' value='" . $options[2] . "' >";
670
    $form .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;<small>' . _MB_NEWBB_TIME_DESC . '</small>';
671
    $form .= '<br>' . _MB_NEWBB_DISPLAYMODE . "<input type='radio' name='options[3]' value='0'";
672
    if (0 == $options[3]) {
673
        $form .= ' checked';
674
    }
675
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_FULL . "<input type='radio' name='options[3]' value='1'";
676
    if (1 == $options[3]) {
677
        $form .= ' checked';
678
    }
679
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_COMPACT . "<input type='radio' name='options[3]' value='2'";
680
    if (2 == $options[3]) {
681
        $form .= ' checked';
682
    }
683
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_LITE;
684
685
    $form .= '<br>' . _MB_NEWBB_INDEXNAV . '<input type="radio" name="options[4]" value="1"';
686
    if (1 == $options[4]) {
687
        $form .= ' checked';
688
    }
689
    $form .= ' >' . _YES . '<input type="radio" name="options[4]" value="0"';
690
    if (0 == $options[4]) {
691
        $form .= ' checked';
692
    }
693
    $form .= ' >' . _NO;
694
695
    $form .= '<br>' . _MB_NEWBB_TITLE_LENGTH . "<input type='text' name='options[5]' value='" . $options[5] . "' >";
696
697
    $form .= '<br><br>' . _MB_NEWBB_FORUMLIST;
698
699
    $optionsForum = array_filter(array_slice($options, 6), '\b_newbb_array_filter'); // get allowed forums
700
    $isAll        = (0 === count($optionsForum) || empty($optionsForum[0]));
701
    $form         .= '<br>&nbsp;&nbsp;<select name="options[]" multiple="multiple">';
702
    $form         .= '<option value="0" ';
703
    if ($isAll) {
704
        $form .= ' selected';
705
    }
706
    $form .= '>' . _ALL . '</option>';
707
    $form .= newbbForumSelectBox($optionsForum);
708
    $form .= '</select><br>';
709
710
    return $form;
711
}
712
713
/**
714
 * @param $options
715
 * @return string
716
 */
717
function b_newbb_topic_edit($options)
718
{
719
    require_once dirname(__DIR__) . '/include/functions.forum.php';
720
    $form = _MB_NEWBB_CRITERIA . "<select name='options[0]'>";
721
    $form .= "<option value='time'";
722
    if ('time' === $options[0]) {
723
        $form .= " selected='selected' ";
724
    }
725
    $form .= '>' . _MB_NEWBB_CRITERIA_TIME . '</option>';
726
    $form .= "<option value='views'";
727
    if ('views' === $options[0]) {
728
        $form .= " selected='selected' ";
729
    }
730
    $form .= '>' . _MB_NEWBB_CRITERIA_VIEWS . '</option>';
731
    $form .= "<option value='replies'";
732
    if ('replies' === $options[0]) {
733
        $form .= " selected='selected' ";
734
    }
735
    $form .= '>' . _MB_NEWBB_CRITERIA_REPLIES . '</option>';
736
    $form .= "<option value='digest'";
737
    if ('digest' === $options[0]) {
738
        $form .= " selected='selected' ";
739
    }
740
    $form .= '>' . _MB_NEWBB_CRITERIA_DIGEST . '</option>';
741
    $form .= "<option value='sticky'";
742
    if ('sticky' === $options[0]) {
743
        $form .= " selected='selected' ";
744
    }
745
    $form .= '>' . _MB_NEWBB_CRITERIA_STICKY . '</option>';
746
    $form .= '</select>';
747
    $form .= '<br>' . _MB_NEWBB_DISPLAY . "<input type='text' name='options[1]' value='" . $options[1] . "' >";
748
    $form .= '<br>' . _MB_NEWBB_TIME . "<input type='text' name='options[2]' value='" . $options[2] . "' >";
749
    $form .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;<small>' . _MB_NEWBB_TIME_DESC . '</small>';
750
    $form .= '<br>' . _MB_NEWBB_DISPLAYMODE . "<input type='radio' name='options[3]' value='0'";
751
    if (0 == $options[3]) {
752
        $form .= ' checked';
753
    }
754
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_FULL . "<input type='radio' name='options[3]' value='1'";
755
    if (1 == $options[3]) {
756
        $form .= ' checked';
757
    }
758
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_COMPACT . "<input type='radio' name='options[3]' value='2'";
759
    if (2 == $options[3]) {
760
        $form .= ' checked';
761
    }
762
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_LITE;
763
764
    $form .= '<br>' . _MB_NEWBB_INDEXNAV . '<input type="radio" name="options[4]" value="1"';
765
    if (1 == $options[4]) {
766
        $form .= ' checked';
767
    }
768
    $form .= ' >' . _YES . '<input type="radio" name="options[4]" value="0"';
769
    if (0 == $options[4]) {
770
        $form .= ' checked';
771
    }
772
    $form .= ' >' . _NO;
773
774
    $form .= '<br>' . _MB_NEWBB_TITLE_LENGTH . "<input type='text' name='options[5]' value='" . $options[5] . "' >";
775
776
    $form .= '<br><br>' . _MB_NEWBB_FORUMLIST;
777
778
    $optionsForum = array_filter(array_slice($options, 6), '\b_newbb_array_filter'); // get allowed forums
779
780
    $isAll = (0 === count($optionsForum) || empty($optionsForum[0]));
781
    $form  .= '<br>&nbsp;&nbsp;<select name="options[]" multiple="multiple">';
782
    $form  .= '<option value="0" ';
783
    if ($isAll) {
784
        $form .= ' selected="selected"';
785
    }
786
    $form .= '>' . _ALL . '</option>';
787
    $form .= newbbForumSelectBox($optionsForum);
788
    $form .= '</select><br>';
789
790
    return $form;
791
}
792
793
/**
794
 * @param $options
795
 * @return string
796
 */
797
function b_newbb_post_edit($options)
798
{
799
    require_once dirname(__DIR__) . '/include/functions.forum.php';
800
    $form = _MB_NEWBB_CRITERIA . "<select name='options[0]'>";
801
    $form .= "<option value='title'";
802
    if ('title' === $options[0]) {
803
        $form .= " selected='selected' ";
804
    }
805
    $form .= '>' . _MB_NEWBB_CRITERIA_TITLE . '</option>';
806
    $form .= "<option value='text'";
807
    if ('text' === $options[0]) {
808
        $form .= " selected='selected' ";
809
    }
810
    $form .= '>' . _MB_NEWBB_CRITERIA_TEXT . '</option>';
811
    $form .= '</select>';
812
    $form .= '<br>' . _MB_NEWBB_DISPLAY . "<input type='text' name='options[1]' value='" . $options[1] . "' >";
813
    $form .= '<br>' . _MB_NEWBB_TIME . "<input type='text' name='options[2]' value='" . $options[2] . "' >";
814
    $form .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;<small>' . _MB_NEWBB_TIME_DESC . '</small>';
815
    $form .= '<br>' . _MB_NEWBB_DISPLAYMODE . "<input type='radio' name='options[3]' value='0'";
816
    if (0 == $options[3]) {
817
        $form .= ' checked';
818
    }
819
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_FULL . "<input type='radio' name='options[3]' value='1'";
820
    if (1 == $options[3]) {
821
        $form .= ' checked';
822
    }
823
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_COMPACT . "<input type='radio' name='options[3]' value='2'";
824
    if (2 == $options[3]) {
825
        $form .= ' checked';
826
    }
827
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_LITE;
828
829
    $form .= '<br>' . _MB_NEWBB_INDEXNAV . '<input type="radio" name="options[4]" value="1"';
830
    if (1 == $options[4]) {
831
        $form .= ' checked';
832
    }
833
    $form .= ' >' . _YES . '<input type="radio" name="options[4]" value="0"';
834
    if (0 == $options[4]) {
835
        $form .= ' checked';
836
    }
837
    $form .= ' >' . _NO;
838
839
    $form .= '<br>' . _MB_NEWBB_TITLE_LENGTH . "<input type='text' name='options[5]' value='" . $options[5] . "' >";
840
841
    $form .= '<br><br>' . _MB_NEWBB_FORUMLIST;
842
843
    $optionsForum = array_filter(array_slice($options, 6), '\b_newbb_array_filter'); // get allowed forums
844
    $isAll        = (0 === count($optionsForum) || empty($optionsForum[0]));
845
    $form         .= '<br>&nbsp;&nbsp;<select name="options[]" multiple="multiple">';
846
    $form         .= '<option value="0" ';
847
    if ($isAll) {
848
        $form .= ' selected="selected"';
849
    }
850
    $form .= '>' . _ALL . '</option>';
851
    $form .= newbbForumSelectBox($optionsForum);
852
    $form .= '</select><br>';
853
854
    return $form;
855
}
856
857
/**
858
 * @param $options
859
 * @return string
860
 */
861
function b_newbb_author_edit($options)
862
{
863
    require_once dirname(__DIR__) . '/include/functions.forum.php';
864
    $form = _MB_NEWBB_CRITERIA . "<select name='options[0]'>";
865
    $form .= "<option value='post'";
866
    if ('post' === $options[0]) {
867
        $form .= " selected='selected' ";
868
    }
869
    $form .= '>' . _MB_NEWBB_CRITERIA_POST . '</option>';
870
    $form .= "<option value='topic'";
871
    if ('topic' === $options[0]) {
872
        $form .= " selected='selected' ";
873
    }
874
    $form .= '>' . _MB_NEWBB_CRITERIA_TOPIC . '</option>';
875
    $form .= "<option value='digest'";
876
    if ('digest' === $options[0]) {
877
        $form .= " selected='selected' ";
878
    }
879
    $form .= '>' . _MB_NEWBB_CRITERIA_DIGESTS . '</option>';
880
    $form .= "<option value='sticky'";
881
    if ('sticky' === $options[0]) {
882
        $form .= " selected='selected' ";
883
    }
884
    $form .= '>' . _MB_NEWBB_CRITERIA_STICKYS . '</option>';
885
    $form .= '</select>';
886
    $form .= '<br>' . _MB_NEWBB_DISPLAY . "<input type='text' name='options[1]' value='" . $options[1] . "' >";
887
    $form .= '<br>' . _MB_NEWBB_TIME . "<input type='text' name='options[2]' value='" . $options[2] . "' >";
888
    $form .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;<small>' . _MB_NEWBB_TIME_DESC . '</small>';
889
    $form .= '<br>' . _MB_NEWBB_DISPLAYMODE . "<input type='radio' name='options[3]' value='0'";
890
    if (0 == $options[3]) {
891
        $form .= ' checked';
892
    }
893
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_COMPACT . "<input type='radio' name='options[3]' value='1'";
894
    if (1 == $options[3]) {
895
        $form .= ' checked';
896
    }
897
    $form .= ' >&nbsp;' . _MB_NEWBB_DISPLAYMODE_LITE;
898
899
    $form .= '<br>' . _MB_NEWBB_INDEXNAV . '<input type="radio" name="options[4]" value="1"';
900
    if (1 == $options[4]) {
901
        $form .= ' checked';
902
    }
903
    $form .= ' >' . _YES . '<input type="radio" name="options[4]" value="0"';
904
    if (0 == $options[4]) {
905
        $form .= ' checked';
906
    }
907
    $form .= ' >' . _NO;
908
909
    $form .= '<br><br>' . _MB_NEWBB_FORUMLIST;
910
911
    $optionsForum = array_filter(array_slice($options, 5), '\b_newbb_array_filter'); // get allowed forums
912
    $isAll        = (0 === count($optionsForum) || empty($optionsForum[0]));
913
    $form         .= '<br>&nbsp;&nbsp;<select name="options[]" multiple="multiple">';
914
    $form         .= '<option value="0" ';
915
    if ($isAll) {
916
        $form .= ' selected="selected"';
917
    }
918
    $form .= '>' . _ALL . '</option>';
919
    $form .= newbbForumSelectBox($optionsForum);
920
    $form .= '</select><br>';
921
922
    return $form;
923
}
924
925
/**
926
 * @param $options
927
 * @return bool
928
 */
929
function b_newbb_custom($options)
930
{
931
    // if no newbb module block set, we have to include the language file
932
    if (is_readable($GLOBALS['xoops']->path('modules/newbb/language/' . $GLOBALS['xoopsConfig']['language'] . '/blocks.php'))) {
933
        require_once $GLOBALS['xoops']->path('modules/newbb/language/' . $GLOBALS['xoopsConfig']['language'] . '/blocks.php');
934
    } else {
935
        require_once $GLOBALS['xoops']->path('modules/newbb/language/english/blocks.php');
936
    }
937
938
    $options = explode('|', $options);
939
    $block   = b_newbb_show($options);
940
    if (count($block['topics']) < 1) {
941
        return false;
942
    }
943
944
    $tpl = new \XoopsTpl();
945
    $tpl->assign('block', $block);
946
    $tpl->display('db:newbb_block.tpl');
947
}
948
949
/**
950
 * @param $options
951
 * @return bool
952
 */
953
function b_newbb_custom_topic($options)
954
{
955
    /** @var \XoopsModules\Newbb\Helper $helper */
956
    $helper = \XoopsModules\Newbb\Helper::getInstance();
957
    // if no newbb module block set, we have to include the language file
958
    $helper->loadLanguage('blocks');
959
960
    $options = explode('|', $options);
961
    $block   = b_newbb_topic_show($options);
962
    if (count($block['topics']) < 1) {
963
        return false;
964
    }
965
966
    $tpl = new \XoopsTpl();
967
    $tpl->assign('block', $block);
968
    $tpl->display('db:newbb_block_topic.tpl');
969
}
970
971
/**
972
 * @param $options
973
 * @return bool
974
 */
975
function b_newbb_custom_post($options)
976
{
977
    /** @var \XoopsModules\Newbb\Helper $helper */
978
    $helper = \XoopsModules\Newbb\Helper::getInstance();
979
    // if no newbb module block set, we have to include the language file
980
    $helper->loadLanguage('blocks');
981
982
    $options = explode('|', $options);
983
    $block   = b_newbb_post_show($options);
984
    if (count($block['topics']) < 1) {
985
        return false;
986
    }
987
988
    $tpl = new \XoopsTpl();
989
    $tpl->assign('block', $block);
990
    $tpl->display('db:newbb_block_post.tpl');
991
}
992
993
/**
994
 * @param $options
995
 * @return bool
996
 */
997
function b_newbb_custom_author($options)
998
{
999
    /** @var \XoopsModules\Newbb\Helper $helper */
1000
    $helper = \XoopsModules\Newbb\Helper::getInstance();
1001
    // if no newbb module block set, we have to include the language file
1002
    $helper->loadLanguage('blocks');
1003
1004
    $options = explode('|', $options);
1005
    $block   = b_newbb_author_show($options);
1006
    if (count($block['authors']) < 1) {
1007
        return false;
1008
    }
1009
1010
    $tpl = new \XoopsTpl();
1011
    $tpl->assign('block', $block);
1012
    $tpl->display('db:newbb_block_author.tpl');
1013
}
1014
1015
// irmtfan add local stylesheet and js footer.php
1016
require_once $GLOBALS['xoops']->path('modules/newbb/footer.php');
1017