Item::setVarsFromRequest()   F
last analyzed

Complexity

Conditions 15
Paths 324

Size

Total Lines 119
Code Lines 83

Duplication

Lines 0
Ratio 0 %

Importance

Changes 10
Bugs 1 Features 0
Metric Value
cc 15
eloc 83
c 10
b 1
f 0
nc 324
nop 0
dl 0
loc 119
rs 3.1974

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php declare(strict_types=1);
2
3
namespace XoopsModules\Publisher;
4
5
/*
6
 You may not change or alter any portion of this comment or credits
7
 of supporting developers from this source code or any supporting source code
8
 which is considered copyrighted (c) material of the original comment or credit authors.
9
10
 This program is distributed in the hope that it will be useful,
11
 but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
 */
14
15
/**
16
 * @copyright       XOOPS Project (https://xoops.org)
17
 * @license         https://www.fsf.org/copyleft/gpl.html GNU public license
18
 * @since           1.0
19
 * @author          trabis <[email protected]>
20
 * @author          The SmartFactory <www.smartfactory.ca>
21
 */
22
23
use Xmf\Request;
24
25
/** @var \XoopsMemberHandler $memberHandler */
26
/** @var \XoopsImageHandler $imageHandler */
27
require_once \dirname(__DIR__) . '/include/common.php';
28
29
/**
30
 * Class Item
31
 */
32
class Item extends \XoopsObject
33
{
34
    public const PAGEWRAP = '[pagewrap=';
35
    public const BODYTAG  = '<body>';
36
    /**
37
     * @var Helper
38
     */
39
    public $helper;
40
    /** @var \XoopsMySQLDatabase */
41
    public $db;
42
    public $groupsRead = [];
43
    /**
44
     * @var Category
45
     */
46
    public $category;
47
    public $groups_read;
48
49
    /**
50
     * @param int|null $id
51
     */
52
    public function __construct($id = null)
53
    {
54
        //        $this->helper = Helper::getInstance();
55
        $this->db = \XoopsDatabaseFactory::getDatabaseConnection();
56
        $this->initVar('itemid', \XOBJ_DTYPE_INT, 0);
57
        $this->initVar('categoryid', \XOBJ_DTYPE_INT, 0, false);
58
        $this->initVar('title', \XOBJ_DTYPE_TXTBOX, '', true, 255);
59
        $this->initVar('subtitle', \XOBJ_DTYPE_TXTBOX, '', false, 255);
60
        $this->initVar('summary', \XOBJ_DTYPE_TXTAREA, '', false);
61
        $this->initVar('body', \XOBJ_DTYPE_TXTAREA, '', false);
62
        $this->initVar('uid', \XOBJ_DTYPE_INT, 0, false);
63
        $this->initVar('author_alias', \XOBJ_DTYPE_TXTBOX, '', false, 255);
64
        $this->initVar('datesub', \XOBJ_DTYPE_INT, '', false);
65
        $this->initVar('dateexpire', \XOBJ_DTYPE_INT, '', false);
66
        $this->initVar('status', \XOBJ_DTYPE_INT, -1, false);
67
        $this->initVar('image', \XOBJ_DTYPE_INT, 0, false);
68
        $this->initVar('images', \XOBJ_DTYPE_TXTBOX, '', false, 255);
69
        $this->initVar('counter', \XOBJ_DTYPE_INT, 0, false);
70
        $this->initVar('rating', \XOBJ_DTYPE_OTHER, 0, false);
71
        $this->initVar('votes', \XOBJ_DTYPE_INT, 0, false);
72
        $this->initVar('weight', \XOBJ_DTYPE_INT, 0, false);
73
        $this->initVar('dohtml', \XOBJ_DTYPE_INT, 1, true);
74
        $this->initVar('dosmiley', \XOBJ_DTYPE_INT, 1, true);
75
        $this->initVar('doimage', \XOBJ_DTYPE_INT, 1, true);
76
        $this->initVar('dobr', \XOBJ_DTYPE_INT, 1, false);
77
        $this->initVar('doxcode', \XOBJ_DTYPE_INT, 1, true);
78
        $this->initVar('cancomment', \XOBJ_DTYPE_INT, 1, true);
79
        $this->initVar('comments', \XOBJ_DTYPE_INT, 0, false);
80
        $this->initVar('notifypub', \XOBJ_DTYPE_INT, 1, false);
81
        $this->initVar('meta_keywords', \XOBJ_DTYPE_TXTAREA, '', false);
82
        $this->initVar('meta_description', \XOBJ_DTYPE_TXTAREA, '', false);
83
        $this->initVar('short_url', \XOBJ_DTYPE_TXTBOX, '', false, 255);
84
        $this->initVar('item_tag', \XOBJ_DTYPE_TXTAREA, '', false);
85
        $this->initVar('votetype', \XOBJ_DTYPE_INT, 0, false);
86
        // Non consistent values
87
        $this->initVar('pagescount', \XOBJ_DTYPE_INT, 0, false);
88
        if (null !== $id) {
89
            $item = $this->helper->getHandler('Item')
90
                                 ->get($id);
91
            foreach ($item->vars as $k => $v) {
92
                $this->assignVar($k, $v['value']);
93
            }
94
        }
95
    }
96
97
    /**
98
     * @param string $method
99
     * @param array  $args
100
     *
101
     * @return mixed
102
     */
103
    public function __call(string $method, array $args)
104
    {
105
        $arg = $args[0] ?? ''; //mb changed to empty string as in PHP 8.1 Passing null to parameter of type string is deprecated (in object.php on line 441)
106
107
        return $this->getVar($method, $arg);
108
    }
109
110
    /**
111
     * @return null|Category
112
     */
113
    public function getCategory()
114
    {
115
        if (null === $this->category) {
116
            $this->category = $this->helper->getHandler('Category')
117
                                           ->get($this->getVar('categoryid'));
118
        }
119
120
        return $this->category;
121
    }
122
123
    /**
124
     * @param int    $maxLength
125
     * @param string $format
126
     *
127
     * @return mixed|string
128
     */
129
    public function getTitle($maxLength = 0, $format = 'S')
130
    {
131
        $ret = $this->getVar('title', $format);
132
        if (0 != $maxLength) {
133
            if (!XOOPS_USE_MULTIBYTES) {
134
                if (\mb_strlen($ret) >= $maxLength) {
135
                    $ret = Utility::substr($ret, 0, $maxLength);
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type array and array; however, parameter $str of XoopsModules\Publisher\Utility::substr() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

135
                    $ret = Utility::substr(/** @scrutinizer ignore-type */ $ret, 0, $maxLength);
Loading history...
136
                }
137
            }
138
        }
139
140
        return $ret;
141
    }
142
143
    /**
144
     * @param int    $maxLength
145
     * @param string $format
146
     *
147
     * @return mixed|string
148
     */
149
    public function getSubtitle($maxLength = 0, $format = 'S')
150
    {
151
        $ret = $this->getVar('subtitle', $format);
152
        if (0 != $maxLength) {
153
            if (!XOOPS_USE_MULTIBYTES) {
154
                if (\mb_strlen($ret) >= $maxLength) {
155
                    $ret = Utility::substr($ret, 0, $maxLength);
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type array and array; however, parameter $str of XoopsModules\Publisher\Utility::substr() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

155
                    $ret = Utility::substr(/** @scrutinizer ignore-type */ $ret, 0, $maxLength);
Loading history...
156
                }
157
            }
158
        }
159
160
        return $ret;
161
    }
162
163
    /**
164
     * @param int    $maxLength
165
     * @param string $format
166
     * @param string $stripTags
167
     *
168
     * @return mixed|string
169
     */
170
    public function getSummary($maxLength = 0, $format = 'S', $stripTags = '')
171
    {
172
        $ret = $this->getVar('summary', $format);
173
        if (!empty($stripTags)) {
174
            $ret = \strip_tags($ret, $stripTags);
175
        }
176
        if (0 != $maxLength) {
177
            if (!XOOPS_USE_MULTIBYTES) {
178
                if (\mb_strlen($ret) >= $maxLength) {
179
                    //$ret = Utility::substr($ret , 0, $maxLength);
180
                    //                    $ret = Utility::truncateTagSafe($ret, $maxLength, $etc = '...', $breakWords = false);
181
                    $ret = Utility::truncateHtml($ret, $maxLength, $etc = '...', $breakWords = false);
182
                }
183
            }
184
        }
185
186
        return $ret;
187
    }
188
189
    /**
190
     * @param int  $maxLength
191
     * @param bool $fullSummary
192
     *
193
     * @return mixed|string
194
     */
195
    public function getBlockSummary($maxLength = 0, $fullSummary = false)
196
    {
197
        if ($fullSummary) {
198
            $ret = $this->getSummary(0, 's', '<br><br>');
199
        } else {
200
            $ret = $this->getSummary($maxLength, 's', '<br><br>');
201
        }
202
        //no summary? get body!
203
        if ('' === $ret) {
204
            $ret = $this->getBody($maxLength, 's', '<br><br>');
205
        }
206
207
        return $ret;
208
    }
209
210
    /**
211
     * @param string $fileName
212
     *
213
     * @return string
214
     */
215
    public function wrapPage($fileName)
216
    {
217
        $content = '';
218
        $page    = Utility::getUploadDir(true, 'content') . $fileName;
219
        if (\is_file($page)) {
220
            // this page uses smarty template
221
            \ob_start();
222
            require $page;
223
            $content = \ob_get_clean();
224
            // Cleaning the content
225
            $bodyStartPos = \mb_strpos($content, self::BODYTAG);
226
            if ($bodyStartPos) {
227
                $bodyEndPos = \mb_strpos($content, '</body>', $bodyStartPos);
228
                $content    = \mb_substr($content, $bodyStartPos + \mb_strlen(self::BODYTAG), $bodyEndPos - \mb_strlen(self::BODYTAG) - $bodyStartPos);
229
            }
230
            // Check if ML Hack is installed, and if yes, parse the $content in formatForML
231
            $myts = \MyTextSanitizer::getInstance();
232
            if (\method_exists($myts, 'formatForML')) {
233
                $content = $myts->formatForML($content);
234
            }
235
        }
236
237
        return $content;
238
    }
239
240
    /**
241
     * This method returns the body to be displayed. Not to be used for editing
242
     *
243
     * @param int    $maxLength
244
     * @param string $format
245
     * @param string $stripTags
246
     *
247
     * @return mixed|string
248
     */
249
    public function getBody($maxLength = 0, $format = 'S', $stripTags = '')
250
    {
251
        $ret     = $this->getVar('body', $format);
252
        $wrapPos = \mb_strpos($ret, self::PAGEWRAP);
253
        if (!(false === $wrapPos)) {
254
            $wrapPages      = [];
255
            $wrapCodeLength = \mb_strlen(self::PAGEWRAP);
256
            while (!(false === $wrapPos)) {
257
                $endWrapPos = \mb_strpos($ret, ']', $wrapPos);
258
                if ($endWrapPos) {
259
                    $wrapPagename = \mb_substr($ret, $wrapPos + $wrapCodeLength, $endWrapPos - $wrapCodeLength - $wrapPos);
260
                    $wrapPages[]  = $wrapPagename;
261
                }
262
                $wrapPos = \mb_strpos($ret, self::PAGEWRAP, $endWrapPos - 1);
263
            }
264
            foreach ($wrapPages as $page) {
265
                $wrapPageContent = $this->wrapPage($page);
266
                $ret             = \str_replace("[pagewrap={$page}]", $wrapPageContent, $ret);
267
            }
268
        }
269
        if ($this->helper->getConfig('item_disp_blocks_summary')) {
270
            $summary = $this->getSummary($maxLength, $format, $stripTags);
271
            if ($summary) {
272
                $ret = $this->getSummary() . '<br><br>' . $ret;
273
            }
274
        }
275
        if (!empty($stripTags)) {
276
            $ret = \strip_tags($ret, $stripTags);
277
        }
278
        if (0 != $maxLength) {
279
            if (!XOOPS_USE_MULTIBYTES) {
280
                if (\mb_strlen($ret) >= $maxLength) {
281
                    //$ret = Utility::substr($ret , 0, $maxLength);
282
                    $ret = Utility::truncateHtml($ret, $maxLength, $etc = '...', $breakWords = false);
283
                }
284
            }
285
        }
286
287
        return $ret;
288
    }
289
290
    /**
291
     * @param string $dateFormat
292
     * @param string $format
293
     *
294
     * @return string
295
     */
296
    public function getDatesub($dateFormat = '', $format = 'S')
297
    {
298
        if (empty($dateFormat)) {
299
            $dateFormat = $this->helper->getConfig('format_date');
300
        }
301
302
        return \formatTimestamp($this->getVar('datesub', $format), $dateFormat);
303
    }
304
305
    /**
306
     * @param string $dateFormat
307
     * @param string $format
308
     *
309
     * @return string|false
310
     */
311
    public function getDateExpire($dateFormat = '', $format = 'S')
312
    {
313
        if (empty($dateFormat)) {
314
            $dateFormat = $this->helper->getConfig('format_date');
315
        }
316
        if (0 == $this->getVar('dateexpire')) {
317
            return false;
318
        }
319
320
        return \formatTimestamp($this->getVar('dateexpire', $format), $dateFormat);
321
    }
322
323
    /**
324
     * @param int $realName
325
     *
326
     * @return string
327
     */
328
    public function posterName($realName = -1)
329
    {
330
        \xoops_load('XoopsUserUtility');
331
        if (-1 == $realName) {
332
            $realName = $this->helper->getConfig('format_realname');
333
        }
334
        $ret = $this->author_alias();
0 ignored issues
show
Bug introduced by
The method author_alias() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

334
        /** @scrutinizer ignore-call */ 
335
        $ret = $this->author_alias();
Loading history...
335
        if ('' == $ret) {
336
            $ret = \XoopsUserUtility::getUnameFromId($this->uid(), $realName);
0 ignored issues
show
Bug introduced by
The method uid() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

336
            $ret = \XoopsUserUtility::getUnameFromId($this->/** @scrutinizer ignore-call */ uid(), $realName);
Loading history...
337
        }
338
339
        return $ret;
340
    }
341
342
    /**
343
     * @return string
344
     */
345
    public function posterAvatar()
346
    {
347
        $ret = 'blank.gif';
348
        /** @var \XoopsMemberHandler $memberHandler */
349
        $memberHandler = \xoops_getHandler('member');
350
        $thisUser      = $memberHandler->getUser($this->uid());
351
        if (\is_object($thisUser)) {
352
            $ret = $thisUser->getVar('user_avatar');
353
        }
354
355
        return $ret;
356
    }
357
358
    /**
359
     * @return string
360
     */
361
    public function getLinkedPosterName()
362
    {
363
        \xoops_load('XoopsUserUtility');
364
        $ret = $this->author_alias();
365
        if ('' === $ret) {
366
            $ret = \XoopsUserUtility::getUnameFromId($this->uid(), $this->helper->getConfig('format_realname'), true);
367
        }
368
369
        return $ret;
370
    }
371
372
    /**
373
     * @return mixed
374
     */
375
    public function updateCounter()
376
    {
377
        return $this->helper->getHandler('Item')
378
                            ->updateCounter($this->itemid());
0 ignored issues
show
Bug introduced by
The method itemid() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

378
                            ->updateCounter($this->/** @scrutinizer ignore-call */ itemid());
Loading history...
379
    }
380
381
    /**
382
     * @param bool $force
383
     *
384
     * @return bool
385
     */
386
    public function store($force = true)
387
    {
388
        $isNew = $this->isNew();
389
        if (!$this->helper->getHandler('Item')
390
                          ->insert($this, $force)) {
391
            return false;
392
        }
393
        if ($isNew && Constants::PUBLISHER_STATUS_PUBLISHED == $this->getVar('status')) {
394
            // Increment user posts
395
            $userHandler = \xoops_getHandler('user');
396
            /** @var \XoopsMemberHandler $memberHandler */
397
            $memberHandler = \xoops_getHandler('member');
398
            /** @var \XoopsUser $poster */
399
            $poster = $userHandler->get($this->uid());
400
            if (\is_object($poster) && !$poster->isNew()) {
401
                $poster->setVar('posts', $poster->getVar('posts') + 1);
402
                if (!$memberHandler->insertUser($poster, true)) {
403
                    $this->setErrors('Article created but could not increment user posts.');
404
405
                    return false;
406
                }
407
            }
408
        }
409
410
        return true;
411
    }
412
413
    /**
414
     * @return string
415
     */
416
    public function getCategoryName()
417
    {
418
        return $this->getCategory()
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getCategory()->name() also could return the type array|boolean which is incompatible with the documented return type string.
Loading history...
419
                    ->name();
0 ignored issues
show
Bug introduced by
The method name() does not exist on XoopsModules\Publisher\Category. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

419
                    ->/** @scrutinizer ignore-call */ name();
Loading history...
420
    }
421
422
    /**
423
     * @return string
424
     */
425
    public function getCategoryUrl()
426
    {
427
        return $this->getCategory()
428
                    ->getCategoryUrl();
429
    }
430
431
    /**
432
     * @return string
433
     */
434
    public function getCategoryLink()
435
    {
436
        return $this->getCategory()
437
                    ->getCategoryLink();
438
    }
439
440
    /**
441
     * @param bool $withAllLink
442
     *
443
     * @return array|bool|string
444
     */
445
    public function getCategoryPath($withAllLink = true)
446
    {
447
        return $this->getCategory()
448
                    ->getCategoryPath($withAllLink);
449
    }
450
451
    /**
452
     * @return string
453
     */
454
    public function getCategoryImagePath()
455
    {
456
        return Utility::getImageDir('category', false) . $this->getCategory()
457
                                                              ->getImage();
458
    }
459
460
    /**
461
     * @return mixed
462
     */
463
    public function getFiles()
464
    {
465
        return $this->helper->getHandler('File')
466
                            ->getAllFiles($this->itemid(), Constants::PUBLISHER_STATUS_FILE_ACTIVE);
467
    }
468
469
    /**
470
     * @param $icons
471
     * @return string
472
     */
473
    public function getAdminLinks($icons)
474
    {
475
        $adminLinks = '';
476
        if (\is_object($GLOBALS['xoopsUser'])
477
            && (Utility::userIsAdmin() || Utility::userIsAuthor($this)
478
                || $this->helper->getHandler('Permission')
479
                                ->isGranted('item_submit', $this->categoryid()))) {
0 ignored issues
show
Bug introduced by
The method categoryid() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

479
                                ->isGranted('item_submit', $this->/** @scrutinizer ignore-call */ categoryid()))) {
Loading history...
480
            if (Utility::userIsAdmin() || Utility::userIsAuthor($this) || Utility::userIsModerator($this)) {
481
                if ($this->helper->getConfig('perm_edit') || Utility::userIsModerator($this) || Utility::userIsAdmin()) {
482
                    // Edit button
483
                    $adminLinks .= "<a href='" . PUBLISHER_URL . '/submit.php?itemid=' . $this->itemid() . "'>" . $icons['edit'] . '</a>';
0 ignored issues
show
Bug introduced by
The constant XoopsModules\Publisher\PUBLISHER_URL was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
484
                    $adminLinks .= ' ';
485
                }
486
                if ($this->helper->getConfig('perm_delete') || Utility::userIsModerator($this) || Utility::userIsAdmin()) {
487
                    // Delete button
488
                    $adminLinks .= "<a href='" . PUBLISHER_URL . '/submit.php?op=del&amp;itemid=' . $this->itemid() . "'>" . $icons['delete'] . '</a>';
489
                    $adminLinks .= ' ';
490
                }
491
            }
492
            if ($this->helper->getConfig('perm_clone') || Utility::userIsModerator($this) || Utility::userIsAdmin()) {
493
                // Duplicate button
494
                $adminLinks .= "<a href='" . PUBLISHER_URL . '/submit.php?op=clone&amp;itemid=' . $this->itemid() . "'>" . $icons['clone'] . '</a>';
495
                $adminLinks .= ' ';
496
            }
497
        }
498
499
        return $adminLinks;
500
    }
501
502
    /**
503
     * @param $icons
504
     * @return string
505
     */
506
    public function getPdfButton($icons)
507
    {
508
        $pdfButton = '';
509
        // PDF button
510
        if (\is_file(XOOPS_ROOT_PATH . '/class/libraries/vendor/tecnickcom/tcpdf/tcpdf.php')) {
511
            $pdfButton .= "<a href='" . PUBLISHER_URL . '/makepdf.php?itemid=' . $this->itemid() . "' rel='nofollow' target='_blank'>" . $icons['pdf'] . '</a>&nbsp;';
0 ignored issues
show
Bug introduced by
The constant XoopsModules\Publisher\PUBLISHER_URL was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
512
            $pdfButton .= ' ';
513
        }
514
        //        if (is_object($GLOBALS['xoopsUser']) && Utility::userIsAdmin()) {
515
        //            $GLOBALS['xoTheme']->addStylesheet('/modules/system/css/jquery.jgrowl.min.css');
516
        //            $GLOBALS['xoTheme']->addScript('browse.php?Frameworks/jquery/plugins/jquery.jgrowl.js');
517
        //            $adminLinks .= '<script type="text/javascript">
518
        //                            (function($){
519
        //                                $(document).ready(function(){
520
        //                                    $.jGrowl("' . _MD_PUBLISHER_ERROR_NO_PDF . '");});
521
        //                                })(jQuery);
522
        //                                </script>';
523
        //        }
524
525
        return $pdfButton;
526
    }
527
528
    /**
529
     * @param $icons
530
     * @return string
531
     */
532
    public function getPrintLinks($icons)
533
    {
534
        $printLinks = '';
535
        // Print button
536
        $printLinks .= "<a href='" . Seo::generateUrl('print', $this->itemid(), $this->short_url()) . "' rel='nofollow' target='_blank'>" . $icons['print'] . '</a>&nbsp;';
0 ignored issues
show
Bug introduced by
The method short_url() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

536
        $printLinks .= "<a href='" . Seo::generateUrl('print', $this->itemid(), $this->/** @scrutinizer ignore-call */ short_url()) . "' rel='nofollow' target='_blank'>" . $icons['print'] . '</a>&nbsp;';
Loading history...
537
        $printLinks .= ' ';
538
539
        return $printLinks;
540
    }
541
542
    /**
543
     * @param array $notifications
544
     */
545
    public function sendNotifications($notifications = []): void
546
    {
547
        /** @var \XoopsNotificationHandler $notificationHandler */
548
        $notificationHandler = \xoops_getHandler('notification');
549
        $tags                = [];
550
551
        $tags['MODULE_NAME']   = $this->helper->getModule()
552
                                              ->getVar('name');
553
        $tags['ITEM_NAME']     = $this->getTitle();
554
        $tags['ITEM_SUBNAME']  = $this->getSubtitle();
555
        $tags['CATEGORY_NAME'] = $this->getCategoryName();
556
        $tags['CATEGORY_URL']  = PUBLISHER_URL . '/category.php?categoryid=' . $this->categoryid();
0 ignored issues
show
Bug introduced by
The constant XoopsModules\Publisher\PUBLISHER_URL was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
557
        $tags['ITEM_BODY']     = $this->body();
0 ignored issues
show
Bug introduced by
The method body() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

557
        /** @scrutinizer ignore-call */ 
558
        $tags['ITEM_BODY']     = $this->body();
Loading history...
558
        $tags['DATESUB']       = $this->getDatesub();
559
        foreach ($notifications as $notification) {
560
            switch ($notification) {
561
                case Constants::PUBLISHER_NOTIFY_ITEM_PUBLISHED:
562
                    $tags['ITEM_URL'] = PUBLISHER_URL . '/item.php?itemid=' . $this->itemid();
563
                    $notificationHandler->triggerEvent('global_item', 0, 'published', $tags, [], $this->helper->getModule()
564
                                                                                                              ->getVar('mid'));
565
                    $notificationHandler->triggerEvent('category_item', $this->categoryid(), 'published', $tags, [], $this->helper->getModule()
566
                                                                                                                                  ->getVar('mid'));
567
                    $notificationHandler->triggerEvent('item', $this->itemid(), 'approved', $tags, [], $this->helper->getModule()
568
                                                                                                                    ->getVar('mid'));
569
                    break;
570
                case Constants::PUBLISHER_NOTIFY_ITEM_SUBMITTED:
571
                    $tags['WAITINGFILES_URL'] = PUBLISHER_URL . '/admin/item.php?itemid=' . $this->itemid();
572
                    $notificationHandler->triggerEvent('global_item', 0, 'submitted', $tags, [], $this->helper->getModule()
573
                                                                                                              ->getVar('mid'));
574
                    $notificationHandler->triggerEvent('category_item', $this->categoryid(), 'submitted', $tags, [], $this->helper->getModule()
575
                                                                                                                                  ->getVar('mid'));
576
                    break;
577
                case Constants::PUBLISHER_NOTIFY_ITEM_REJECTED:
578
                    $notificationHandler->triggerEvent('item', $this->itemid(), 'rejected', $tags, [], $this->helper->getModule()
579
                                                                                                                    ->getVar('mid'));
580
                    break;
581
                case -1:
582
                default:
583
                    break;
584
            }
585
        }
586
    }
587
588
    /**
589
     * Sets default permissions for this item
590
     */
591
    public function setDefaultPermissions(): void
592
    {
593
        $memberHandler = \xoops_getHandler('member');
594
        $groups        = $memberHandler->getGroupList();
0 ignored issues
show
Bug introduced by
The method getGroupList() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsPersistableObjectHandler. ( Ignorable by Annotation )

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

594
        /** @scrutinizer ignore-call */ 
595
        $groups        = $memberHandler->getGroupList();
Loading history...
595
        $groupIds      = \count($groups) > 0 ? \array_keys($groups) : [];
596
        /*
597
        $j             = 0;
598
        $groupIds      = [];
599
        foreach (array_keys($groups) as $i) {
600
            $groupIds[$j] = $i;
601
            ++$j;
602
        }
603
        */
604
        $this->groupsRead = $groupIds;
605
    }
606
607
    /**
608
     * @param $groupIds
609
     * @deprecated - NOT USED
610
     *
611
     * @todo       look at this
612
     */
613
    public function setPermissions($groupIds): void
614
    {
615
        if (!isset($groupIds)) {
616
            $this->setDefaultPermissions();
617
            /*
618
            $memberHandler = xoops_getHandler('member');
619
            $groups        = $memberHandler->getGroupList();
620
            $j             = 0;
621
            $groupIds      = [];
622
            foreach (array_keys($groups) as $i) {
623
                $groupIds[$j] = $i;
624
                ++$j;
625
            }
626
            */
627
        }
628
    }
629
630
    /**
631
     * @return bool
632
     */
633
    public function notLoaded()
634
    {
635
        return -1 == $this->getVar('itemid');
636
    }
637
638
    /**
639
     * @return string
640
     */
641
    public function getItemUrl()
642
    {
643
        return Seo::generateUrl('item', $this->itemid(), $this->short_url());
644
    }
645
646
    /**
647
     * @param bool $class
648
     * @param int  $maxsize
649
     *
650
     * @return string
651
     */
652
    public function getItemLink($class = false, $maxsize = 0)
653
    {
654
        if ($class) {
655
            return '<a class="' . $class . '" href="' . $this->getItemUrl() . '">' . $this->getTitle($maxsize) . '</a>';
0 ignored issues
show
Bug introduced by
Are you sure $class of type true can be used in concatenation? ( Ignorable by Annotation )

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

655
            return '<a class="' . /** @scrutinizer ignore-type */ $class . '" href="' . $this->getItemUrl() . '">' . $this->getTitle($maxsize) . '</a>';
Loading history...
656
        }
657
658
        return '<a href="' . $this->getItemUrl() . '">' . $this->getTitle($maxsize) . '</a>';
659
    }
660
661
    /**
662
     * @return string
663
     */
664
    public function getWhoAndWhen()
665
    {
666
        $posterName = $this->getLinkedPosterName();
667
        $postdate   = $this->getDatesub();
668
669
        return \sprintf(\_CO_PUBLISHER_POSTEDBY, $posterName, $postdate);
670
    }
671
672
    /**
673
     * @return string
674
     */
675
    public function getWho()
676
    {
677
        $posterName = $this->getLinkedPosterName();
678
679
        return $posterName;
680
    }
681
682
    /**
683
     * @return string
684
     */
685
    public function getWhen()
686
    {
687
        $postdate = $this->getDatesub();
688
689
        return $postdate;
690
    }
691
692
    /**
693
     * @param null|string $body
694
     *
695
     * @return string
696
     */
697
    public function plainMaintext($body = null)
698
    {
699
        $ret = '';
700
        if (!$body) {
701
            $body = $this->body();
702
        }
703
        $ret .= \str_replace('[pagebreak]', '<br><br>', $body);
704
705
        return $ret;
706
    }
707
708
    /**
709
     * @param int         $itemPageId
710
     * @param null|string $body
711
     *
712
     * @return string
713
     */
714
    public function buildMainText($itemPageId = -1, $body = null)
715
    {
716
        if (null === $body) {
717
            $body = $this->body();
718
        }
719
        /** @var array $bodyParts */
720
        $bodyParts = \explode('[pagebreak]', $body);
721
        $this->setVar('pagescount', \count($bodyParts));
722
        if (\count($bodyParts) <= 1) {
723
            return $this->plainMaintext($body);
724
        }
725
        $ret = '';
726
        if (-1 == $itemPageId) {
727
            $ret .= \trim($bodyParts[0]);
728
729
            return $ret;
730
        }
731
        if ($itemPageId >= \count($bodyParts)) {
732
            $itemPageId = \count($bodyParts) - 1;
733
        }
734
        $ret .= \trim($bodyParts[$itemPageId]);
735
736
        return $ret;
737
    }
738
739
    /**
740
     * @return mixed
741
     */
742
    public function getImages()
743
    {
744
        static $ret;
745
        $itemId = (int)$this->getVar('itemid');
746
        if (!isset($ret[$itemId])) {
747
            $ret[$itemId]['main']   = '';
748
            $ret[$itemId]['others'] = [];
749
            /** @var array $imagesIds */
750
            $imagesIds = [];
751
            $image     = $this->getVar('image');
752
            $images    = $this->getVar('images');
753
            if ('' != $images) {
754
                $imagesIds = \explode('|', $images);
755
            }
756
            if ($image > 0 && $imagesIds) {
757
                $imagesIds[] = $image;
758
            }
759
            $imageObjs = [];
760
            if (\count($imagesIds) > 0) {
761
                $imageHandler = \xoops_getHandler('image');
762
                $criteria     = new \CriteriaCompo(new \Criteria('image_id', '(' . \implode(',', $imagesIds) . ')', 'IN'));
763
                $imageObjs    = $imageHandler->getObjects($criteria, true);
0 ignored issues
show
Bug introduced by
The method getObjects() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of said class. However, the method does not exist in XoopsRankHandler or XoUserHandler or XoopsModules\Publisher\PermissionHandler. Are you sure you never get one of those? ( Ignorable by Annotation )

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

763
                /** @scrutinizer ignore-call */ 
764
                $imageObjs    = $imageHandler->getObjects($criteria, true);
Loading history...
764
                unset($criteria);
765
            }
766
            foreach ($imageObjs as $id => $imageObj) {
767
                if ($id == $image) {
768
                    $ret[$itemId]['main'] = $imageObj;
769
                } else {
770
                    $ret[$itemId]['others'][] = $imageObj;
771
                }
772
                unset($imageObj);
773
            }
774
            unset($imageObjs);
775
        }
776
777
        return $ret[$itemId];
778
    }
779
780
    /**
781
     * @param string $display
782
     * @param int    $maxCharTitle
783
     * @param int    $maxCharSummary
784
     * @param bool   $fullSummary
785
     *
786
     * @return array
787
     */
788
    public function toArraySimple($display = 'default', $maxCharTitle = 0, $maxCharSummary = 300, $fullSummary = false)
0 ignored issues
show
Unused Code introduced by
The parameter $fullSummary is not used and could be removed. ( Ignorable by Annotation )

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

788
    public function toArraySimple($display = 'default', $maxCharTitle = 0, $maxCharSummary = 300, /** @scrutinizer ignore-unused */ $fullSummary = false)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
789
    {
790
        $itemPageId = -1;
791
        if (\is_numeric($display)) {
792
            $itemPageId = $display;
793
            $display    = 'all';
794
        }
795
        $item['itemid']       = $this->itemid();
0 ignored issues
show
Comprehensibility Best Practice introduced by
$item was never initialized. Although not strictly required by PHP, it is generally a good practice to add $item = array(); before regardless.
Loading history...
796
        $item['uid']          = $this->uid();
797
        $item['itemurl']      = $this->getItemUrl();
798
        $item['titlelink']    = $this->getItemLink('titlelink', $maxCharTitle);
799
        $item['subtitle']     = $this->subtitle();
800
        $item['datesub']      = $this->getDatesub();
801
        $item['dateexpire']   = $this->getDateExpire();
802
        $item['counter']      = $this->counter();
803
        $item['hits']         = '&nbsp;' . $this->counter() . ' ' . \_READS;
804
        $item['who']          = $this->getWho();
805
        $item['when']         = $this->getWhen();
806
        $item['category']     = $this->getCategoryName();
807
        $item['categorylink'] = $this->getCategoryLink();
808
        $item['cancomment']   = $this->cancomment();
809
        $item['votetype']     = $this->votetype();
810
        $comments             = $this->comments();
811
        if ($comments > 0) {
812
            //shows 1 comment instead of 1 comm. if comments ==1
813
            //langugage file modified accordingly
814
            if (1 == $comments) {
815
                $item['comments'] = '&nbsp;' . \_MD_PUBLISHER_ONECOMMENT . '&nbsp;';
816
            } else {
817
                $item['comments'] = '&nbsp;' . $comments . '&nbsp;' . \_MD_PUBLISHER_COMMENTS . '&nbsp;';
818
            }
819
        } else {
820
            $item['comments'] = '&nbsp;' . \_MD_PUBLISHER_NO_COMMENTS . '&nbsp;';
821
        }
822
        $item = $this->getMainImage($item);
823
        switch ($display) {
824
            case 'summary':
825
                $item = $this->toArrayFull($item);
826
                $item = $this->toArrayAll($item, $itemPageId);
827
            // no break
828
            case 'list':
829
                $item = $this->toArrayFull($item);
830
                $item = $this->toArrayAll($item, $itemPageId);
831
            //break;
832
            // no break
833
            case 'full':
834
                $item = $this->toArrayFull($item);
835
                $item = $this->toArrayAll($item, $itemPageId);
836
            // no break
837
            case 'wfsection':
838
                $item = $this->toArrayFull($item);
839
                $item = $this->toArrayAll($item, $itemPageId);
840
            // no break
841
            case 'default':
842
                $item    = $this->toArrayFull($item);
843
                $item    = $this->toArrayAll($item, $itemPageId);
844
                $summary = $this->getSummary($maxCharSummary);
845
                if (!$summary) {
846
                    $summary = $this->getBody($maxCharSummary);
847
                }
848
                $item['summary']   = $summary;
849
                $item['truncated'] = $maxCharSummary > 0 && \mb_strlen($summary) > $maxCharSummary;
850
                $item              = $this->toArrayFull($item);
851
                break;
852
            case 'all':
853
                $item = $this->toArrayFull($item);
854
                $item = $this->toArrayAll($item, $itemPageId);
855
                break;
856
        }
857
        // Highlighting searched words
858
        $highlight = true;
859
        if ($highlight && Request::getString('keywords', '', 'GET')) {
860
            $keywords = \htmlspecialchars(\trim(\urldecode(Request::getString('keywords', '', 'GET'))), \ENT_QUOTES | \ENT_HTML5);
861
            $fields   = ['title', 'maintext', 'summary'];
862
            foreach ($fields as $field) {
863
                if (isset($item[$field])) {
864
                    $item[$field] = $this->highlight($item[$field], $keywords);
865
                }
866
            }
867
        }
868
869
        return $item;
870
    }
871
872
    /**
873
     * @param array $item
874
     *
875
     * @return array
876
     */
877
    public function toArrayFull($item)
878
    {
879
        $configurator = new Common\Configurator();
880
        $icons        = $configurator->icons;
881
882
        $item['title']       = $this->getTitle();
883
        $item['clean_title'] = $this->getTitle();
884
        $item['itemurl']     = $this->getItemUrl();
885
886
        $item['adminlink']    = $this->getAdminLinks($icons);
887
        $item['pdfbutton']    = $this->getPdfButton($icons);
888
        $item['printlink']    = $this->getPrintLinks($icons);
889
        $item['categoryPath'] = $this->getCategoryPath($this->helper->getConfig('format_linked_path'));
890
        $item['who_when']     = $this->getWhoAndWhen();
891
        $item['who']          = $this->getWho();
892
        $item['when']         = $this->getWhen();
893
        $item['category']     = $this->getCategoryName();
894
        $item['body']         = $this->getBody();
895
        $item['more']         = $this->getItemUrl();
896
        $item                 = $this->getMainImage($item);
897
898
        return $item;
899
    }
900
901
    /**
902
     * @param array $item
903
     * @param int   $itemPageId
904
     *
905
     * @return array
906
     */
907
    public function toArrayAll($item, $itemPageId)
908
    {
909
        $item['maintext'] = $this->buildMainText($itemPageId, $this->getBody());
910
        $item             = $this->getOtherImages($item);
911
912
        return $item;
913
    }
914
915
    /**
916
     * @param array $item
917
     *
918
     * @return array
919
     */
920
    public function getMainImage($item = [])
921
    {
922
        $images             = $this->getImages();
923
        $item['image_path'] = '';
924
        $item['image_name'] = '';
925
        if (\is_object($images['main'])) {
926
            /** @var array $dimensions */
927
            $dimensions           = \getimagesize($GLOBALS['xoops']->path('uploads/' . $images['main']->getVar('image_name')));
928
            $item['image_width']  = $dimensions[0];
929
            $item['image_height'] = $dimensions[1];
930
            $item['image_path']   = XOOPS_URL . '/uploads/' . $images['main']->getVar('image_name');
931
            // check to see if GD function exist
932
            if (\function_exists('imagecreatetruecolor')) {
933
                $item['image_thumb'] = PUBLISHER_URL . '/thumb.php?src=' . XOOPS_URL . '/uploads/' . $images['main']->getVar('image_name') . '&amp;h=180';
0 ignored issues
show
Bug introduced by
The constant XoopsModules\Publisher\PUBLISHER_URL was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
934
            } else {
935
                $item['image_thumb'] = XOOPS_URL . '/uploads/' . $images['main']->getVar('image_name');
936
            }
937
            $item['image_name'] = $images['main']->getVar('image_nicename');
938
        }
939
940
        return $item;
941
    }
942
943
    /**
944
     * @param array $item
945
     *
946
     * @return array
947
     */
948
    public function getOtherImages($item = [])
949
    {
950
        $images         = $this->getImages();
951
        $item['images'] = [];
952
        $i              = 0;
953
        foreach ($images['others'] as $image) {
954
            /** @var array $dimensions */
955
            $dimensions                   = \getimagesize($GLOBALS['xoops']->path('uploads/' . $image->getVar('image_name')));
956
            $item['images'][$i]['width']  = $dimensions[0];
957
            $item['images'][$i]['height'] = $dimensions[1];
958
            $item['images'][$i]['path']   = XOOPS_URL . '/uploads/' . $image->getVar('image_name');
959
            // check to see if GD function exist
960
            if (\function_exists('imagecreatetruecolor')) {
961
                $item['images'][$i]['thumb'] = PUBLISHER_URL . '/thumb.php?src=' . XOOPS_URL . '/uploads/' . $image->getVar('image_name') . '&amp;w=240';
0 ignored issues
show
Bug introduced by
The constant XoopsModules\Publisher\PUBLISHER_URL was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
962
            } else {
963
                $item['images'][$i]['thumb'] = XOOPS_URL . '/uploads/' . $image->getVar('image_name');
964
            }
965
            $item['images'][$i]['name'] = $image->getVar('image_nicename');
966
            ++$i;
967
        }
968
969
        return $item;
970
    }
971
972
    /**
973
     * @param string       $content
974
     * @param string|array $keywords
975
     *
976
     * @return string Text
977
     */
978
    public function highlight($content, $keywords)
979
    {
980
        $color = $this->helper->getConfig('format_highlight_color');
981
        if (0 !== \mb_strpos($color, '#')) {
0 ignored issues
show
Bug introduced by
It seems like $color can also be of type null; however, parameter $haystack of mb_strpos() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

981
        if (0 !== \mb_strpos(/** @scrutinizer ignore-type */ $color, '#')) {
Loading history...
982
            $color = '#' . $color;
983
        }
984
        require_once __DIR__ . '/Highlighter.php';
985
        $highlighter = new Highlighter();
986
        $highlighter->setReplacementString('<span style="font-weight: bolder; background-color: ' . $color . ';">\1</span>');
987
988
        return $highlighter->highlight($content, $keywords);
989
    }
990
991
    /**
992
     *  Create metada and assign it to template
993
     */
994
    public function createMetaTags(): void
995
    {
996
        $publisherMetagen = new Metagen($this->getTitle(), $this->meta_keywords(), $this->meta_description(), $this->category->categoryPath);
0 ignored issues
show
Bug introduced by
It seems like $this->meta_keywords() can also be of type array and array; however, parameter $keywords of XoopsModules\Publisher\Metagen::__construct() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

996
        $publisherMetagen = new Metagen($this->getTitle(), /** @scrutinizer ignore-type */ $this->meta_keywords(), $this->meta_description(), $this->category->categoryPath);
Loading history...
Bug introduced by
The method meta_keywords() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

996
        $publisherMetagen = new Metagen($this->getTitle(), $this->/** @scrutinizer ignore-call */ meta_keywords(), $this->meta_description(), $this->category->categoryPath);
Loading history...
Bug introduced by
$this->category->categoryPath of type array is incompatible with the type string expected by parameter $categoryPath of XoopsModules\Publisher\Metagen::__construct(). ( Ignorable by Annotation )

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

996
        $publisherMetagen = new Metagen($this->getTitle(), $this->meta_keywords(), $this->meta_description(), /** @scrutinizer ignore-type */ $this->category->categoryPath);
Loading history...
Bug introduced by
It seems like $this->meta_description() can also be of type array and array; however, parameter $description of XoopsModules\Publisher\Metagen::__construct() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

996
        $publisherMetagen = new Metagen($this->getTitle(), $this->meta_keywords(), /** @scrutinizer ignore-type */ $this->meta_description(), $this->category->categoryPath);
Loading history...
Bug introduced by
The method meta_description() does not exist on XoopsModules\Publisher\Item. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

996
        $publisherMetagen = new Metagen($this->getTitle(), $this->meta_keywords(), $this->/** @scrutinizer ignore-call */ meta_description(), $this->category->categoryPath);
Loading history...
997
        $publisherMetagen->createMetaTags();
998
    }
999
1000
    /**
1001
     * @param string $str
1002
     *
1003
     * @return string
1004
     */
1005
    protected function convertForJapanese($str)
1006
    {
1007
        // no action, if not flag
1008
        if (!\defined('_PUBLISHER_FLAG_JP_CONVERT')) {
1009
            return $str;
1010
        }
1011
        // no action, if not Japanese
1012
        if ('japanese' !== $GLOBALS['xoopsConfig']['language']) {
1013
            return $str;
1014
        }
1015
        // presume OS Browser
1016
        $agent   = Request::getString('HTTP_USER_AGENT', '', 'SERVER');
1017
        $os      = '';
1018
        $browser = '';
1019
        //        if (preg_match("/Win/i", $agent)) {
1020
        if (false !== \mb_stripos($agent, 'Win')) {
1021
            $os = 'win';
1022
        }
1023
        //        if (preg_match("/MSIE/i", $agent)) {
1024
        if (false !== \mb_stripos($agent, 'MSIE')) {
1025
            $browser = 'msie';
1026
        }
1027
        // if msie
1028
        if (('win' === $os) && ('msie' === $browser)) {
1029
            // if multibyte
1030
            if (\function_exists('mb_convert_encoding')) {
1031
                $str = \mb_convert_encoding($str, 'SJIS', 'EUC-JP');
1032
                $str = \rawurlencode($str);
0 ignored issues
show
Bug introduced by
It seems like $str can also be of type array; however, parameter $string of rawurlencode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

1032
                $str = \rawurlencode(/** @scrutinizer ignore-type */ $str);
Loading history...
1033
            }
1034
        }
1035
1036
        return $str;
1037
    }
1038
1039
    /**
1040
     * @param string $title
1041
     * @param bool   $checkperm
1042
     *
1043
     * @return Form\ItemForm
1044
     */
1045
    public function getForm($title = 'default', $checkperm = true)
1046
    {
1047
        //        require_once $GLOBALS['xoops']->path('modules/' . PUBLISHER_DIRNAME . '/class/form/item.php');
1048
        $form = new Form\ItemForm($title, 'form', \xoops_getenv('SCRIPT_NAME'), 'post', true);
1049
        $form->setCheckPermissions($checkperm);
1050
        $form->createElements($this);
1051
1052
        return $form;
1053
    }
1054
1055
    /**
1056
     * Checks if a user has access to a selected item. if no item permissions are
1057
     * set, access permission is denied. The user needs to have necessary category
1058
     * permission as well.
1059
     * Also, the item needs to be Published
1060
     *
1061
     * @return bool : TRUE if the no errors occured
1062
     */
1063
    public function accessGranted()
1064
    {
1065
        if (Utility::userIsAdmin()) {
1066
            return true;
1067
        }
1068
        if (Constants::PUBLISHER_STATUS_PUBLISHED != $this->getVar('status')) {
1069
            return false;
1070
        }
1071
        // Do we have access to the parent category
1072
        if ($this->helper->getHandler('Permission')
1073
                         ->isGranted('category_read', $this->categoryid())) {
1074
            return true;
1075
        }
1076
1077
        return false;
1078
    }
1079
1080
    /**
1081
     * The name says it all
1082
     */
1083
    public function setVarsFromRequest(): void
1084
    {
1085
        //Required fields
1086
        //        if (!empty($categoryid = Request::getInt('categoryid', 0, 'POST'))) {
1087
        //            $this->setVar('categoryid', $categoryid);}
1088
        if (\is_object($GLOBALS['xoopsUser'])) {
1089
            $userTimeoffset = $GLOBALS['xoopsUser']->getVar('timezone_offset');
1090
        } else {
1091
            $userTimeoffset = null;
1092
        }
1093
        $this->setVar('categoryid', Request::getInt('categoryid', 0, 'POST'));
1094
        $this->setVar('title', Request::getString('title', '', 'POST'));
1095
        $this->setVar('body', Request::getText('body', '', 'POST'));
1096
1097
        if ('' !== ($imageFeatured = Request::getString('image_featured', '', 'POST'))) {
1098
            $imageItem = Request::getArray('image_item', [], 'POST');
1099
            //            $imageFeatured = Request::getString('image_featured', '', 'POST');
1100
            //Todo: get a better image class for xoops!
1101
            //Image hack
1102
            $imageItemIds = [];
1103
1104
            $sql    = 'SELECT image_id, image_name FROM ' . $GLOBALS['xoopsDB']->prefix('image');
1105
            $result = $GLOBALS['xoopsDB']->query($sql, 0, 0);
1106
            while (false !== ($myrow = $GLOBALS['xoopsDB']->fetchArray($result))) {
1107
                $imageName = $myrow['image_name'];
1108
                $id        = $myrow['image_id'];
1109
                if ($imageName == $imageFeatured) {
1110
                    $this->setVar('image', $id);
1111
                }
1112
                if (\in_array($imageName, $imageItem, true)) {
1113
                    $imageItemIds[] = $id;
1114
                }
1115
            }
1116
            $this->setVar('images', \implode('|', $imageItemIds));
1117
        } else {
1118
            $this->setVar('image', 0);
1119
            $this->setVar('images', '');
1120
        }
1121
1122
        if (false !== ($authorAlias = Request::getString('author_alias', '', 'POST'))) {
0 ignored issues
show
introduced by
The condition false !== $authorAlias =...hor_alias', '', 'POST') is always true.
Loading history...
1123
            $this->setVar('author_alias', $authorAlias);
1124
            if ('' !== $this->getVar('author_alias')) {
1125
                $this->setVar('uid', 0);
1126
            }
1127
        }
1128
1129
        //mb TODO check on version
1130
        //check if date is set and convert it to GMT date
1131
        //        if (($datesub = Request::getString('datesub', '', 'POST'))) {
1132
        if ('' !== Request::getString('datesub', '', 'POST')) {
1133
            //            if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
1134
            //                $this->setVar('datesub', strtotime(Request::getArray('datesub', array(), 'POST')['date']) + Request::getArray('datesub', array(), 'POST')['time']);
1135
            //            } else {
1136
            $resDate     = Request::getArray('datesub', [], 'POST');
1137
            $resTime     = Request::getArray('datesub', [], 'POST');
1138
            $dateTimeObj = \DateTime::createFromFormat(\_SHORTDATESTRING, $resDate['date']);
1139
            $dateTimeObj->setTime(0, 0, (int)$resTime['time']);
1140
            $serverTimestamp = \userTimeToServerTime($dateTimeObj->getTimestamp(), $userTimeoffset);
1141
            $this->setVar('datesub', $serverTimestamp);
1142
            //            }
1143
        } elseif ($this->isNew()) {
1144
            $this->setVar('datesub', \time());
1145
        }
1146
1147
        // date expire
1148
        if (0 !== Request::getInt('use_expire_yn', 0, 'POST')) {
1149
            if ('' !== Request::getString('dateexpire', '', 'POST')) {
1150
                $resExDate   = Request::getArray('dateexpire', [], 'POST');
1151
                $resExTime   = Request::getArray('dateexpire', [], 'POST');
1152
                $dateTimeObj = \DateTime::createFromFormat(\_SHORTDATESTRING, $resExDate['date']);
1153
                $dateTimeObj->setTime(0, 0, (int)$resExTime['time']);
1154
                $serverTimestamp = \userTimeToServerTime($dateTimeObj->getTimestamp(), $userTimeoffset);
1155
                $this->setVar('dateexpire', $serverTimestamp);
1156
            }
1157
        } else {
1158
            $this->setVar('dateexpire', 0);
1159
        }
1160
1161
        if ($this->isNew()) {
1162
            $this->setVar('uid', Request::getInt('uid', (\is_object($GLOBALS['xoopsUser']) ? $GLOBALS['xoopsUser']->uid() : 0), 'POST'));
1163
            $this->setVar('cancoment', Request::getInt('allowcomments', $this->helper->getConfig('submit_allowcomments'), 'POST'));
1164
            $this->setVar('status', Request::getInt('status', $this->helper->getConfig('submit_status'), 'POST'));
1165
            $this->setVar('dohtml', Request::getInt('dohtml', $this->helper->getConfig('submit_dohtml'), 'POST'));
1166
            $this->setVar('dosmiley', Request::getInt('dosmiley', $this->helper->getConfig('submit_dosmiley'), 'POST'));
1167
            $this->setVar('doxcode', Request::getInt('doxcode', $this->helper->getConfig('submit_doxcode'), 'POST'));
1168
            $this->setVar('doimage', Request::getInt('doimage', $this->helper->getConfig('submit_doimage'), 'POST'));
1169
            $this->setVar('dobr', Request::getInt('dolinebreak', $this->helper->getConfig('submit_dobr'), 'POST'));
1170
            $this->setVar('votetype', Request::getInt('votetype', $this->helper->getConfig('ratingbars'), 'POST'));
1171
            $this->setVar('short_url', Request::getString('item_short_url', '', 'POST'));
1172
            $this->setVar('meta_keywords', Request::getString('item_meta_keywords', '', 'POST'));
1173
            $this->setVar('meta_description', Request::getString('item_meta_description', '', 'POST'));
1174
            $this->setVar('weight', Request::getInt('weight', 0, 'POST'));
1175
            //Not required fields
1176
            $this->setVar('summary', Request::getText('summary', '', 'POST'));
1177
            $this->setVar('subtitle', Request::getString('subtitle', '', 'POST'));
1178
            $this->setVar('item_tag', Request::getString('item_tag', '', 'POST'));
1179
1180
            $this->setVar('notifypub', Request::getString('notify', 1, 'POST'));
1181
        } else {
1182
            $this->setVar('uid', Request::getInt('uid', null, 'POST'));
1183
            $this->setVar('cancomment', Request::getInt('allowcomments', null, 'POST'));
1184
            $this->setVar('status', Request::getInt('status', $this->helper->getConfig('submit_edit_status'), 'POST'));
1185
            $this->setVar('dohtml', Request::getInt('dohtml', null, 'POST'));
1186
            $this->setVar('dosmiley', Request::getInt('dosmiley', null, 'POST'));
1187
            $this->setVar('doxcode', Request::getInt('doxcode', null, 'POST'));
1188
            $this->setVar('doimage', Request::getInt('doimage', null, 'POST'));
1189
            $this->setVar('dobr', Request::getInt('dolinebreak', null, 'POST'));
1190
            $this->setVar('votetype', Request::getInt('votetype', null, 'POST'));
1191
            $this->setVar('short_url', Request::getString('item_short_url', $this->getVar('short_url'), 'POST'));
0 ignored issues
show
Bug introduced by
It seems like $this->getVar('short_url') can also be of type array and array; however, parameter $default of Xmf\Request::getString() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

1191
            $this->setVar('short_url', Request::getString('item_short_url', /** @scrutinizer ignore-type */ $this->getVar('short_url'), 'POST'));
Loading history...
1192
            $this->setVar('meta_keywords', Request::getString('item_meta_keywords', $this->getVar('meta_keywords'), 'POST'));
1193
            $this->setVar('meta_description', Request::getString('item_meta_description', $this->getVar('meta_description'), 'POST'));
1194
            $this->setVar('weight', Request::getInt('weight', null, 'POST'));
1195
            //Not required fields
1196
            if (null !== Request::getVar('summary', null, 'POST')) {
1197
                $this->setVar('summary', Request::getText('summary', '', 'POST'));
1198
            }
1199
            $this->setVar('subtitle', Request::getString('subtitle', $this->getVar('subtitle'), 'POST'));
1200
            $this->setVar('item_tag', Request::getString('item_tag', $this->getVar('item_tag'), 'POST'));
1201
            $this->setVar('notifypub', Request::getString('notify', $this->getVar('notifypub'), 'POST'));
1202
        }
1203
    }
1204
1205
    public function assignOtherProperties(): void
1206
    {
1207
        $module    = $this->helper->getModule();
1208
        $module_id = $module->getVar('mid');
1209
        /** @var \XoopsGroupPermHandler $grouppermHandler */
1210
        $grouppermHandler = \xoops_getHandler('groupperm');
1211
1212
        $this->category    = $this->helper->getHandler('Category')
1213
                                          ->get($this->getVar('categoryid'));
1214
        $this->groups_read = $grouppermHandler->getGroupIds('item_read', $this->itemid(), $module_id);
1215
    }
1216
}
1217