Item   F
last analyzed

Complexity

Total Complexity 176

Size/Duplication

Total Lines 892
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 442
dl 0
loc 892
rs 2
c 0
b 0
f 0
wmc 176

39 Methods

Rating   Name   Duplication   Size   Complexity  
B _convert_for_japanese() 0 31 8
B body() 0 39 11
B store() 0 23 7
A __construct() 0 37 3
B sendNotifications() 0 31 7
A highlight() 0 10 2
A plain_maintext() 0 9 2
C toArray() 0 46 13
D getAdminLinks() 0 41 19
A getCategoryPath() 0 3 1
A getFiles() 0 3 1
A buildmaintext() 0 22 5
A posterName() 0 11 3
A createMetaTags() 0 4 1
A toArrayFull() 0 13 1
A getItemUrl() 0 3 1
A getBlockSummary() 0 13 3
A wrappage() 0 23 4
A posterAvatar() 0 11 2
A updateCounter() 0 3 1
A getItemLink() 0 7 2
A accessGranted() 0 14 4
F setVarsFromRequest() 0 111 37
A getOtherImages() 0 18 2
A getCategoryImagePath() 0 3 1
A summary() 0 16 5
A linkedPosterName() 0 8 2
A subtitle() 0 12 4
A getWhoAndWhen() 0 6 1
A title() 0 12 4
A datesub() 0 7 2
A toArrayAll() 0 6 1
A getCategoryLink() 0 3 1
B getImages() 0 40 8
A category() 0 7 2
A notLoaded() 0 3 1
A getCategoryName() 0 3 1
A getMainImage() 0 19 2
A getCategoryUrl() 0 3 1

How to fix   Complexity   

Complex Class

Complex classes like Item often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Item, and based on these observations, apply Extract Interface, too.

1
<?php
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
use Images;
16
use Notifications;
17
use Xmf\Highlighter;
18
use Xmf\Request;
19
use Xoops;
20
use Xoops\Core\Kernel\Criteria;
21
use Xoops\Core\Kernel\CriteriaCompo;
22
use Xoops\Core\Kernel\XoopsObject;
23
use Xoops\Core\Text\Sanitizer;
24
use XoopsBaseConfig;
25
use XoopsLoad;
26
use XoopsLocale;
27
use XoopsModules\Publisher;
28
use XoopsUserUtility;
29
use Doctrine\DBAL\FetchMode;
30
31
/**
32
 * @copyright       The XUUPS Project http://sourceforge.net/projects/xuups/
33
 * @license         GNU GPL V2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
34
 * @package         Publisher
35
 * @since           1.0
36
 * @author          trabis <[email protected]>
37
 * @author          The SmartFactory <www.smartfactory.ca>
38
 * @version         $Id$
39
 */
40
require_once \dirname(__DIR__) . '/include/common.php';
41
42
/**
43
 * Class Item
44
 * @package XoopsModules\Publisher
45
 */
46
class Item extends XoopsObject
47
{
48
    /**
49
     * @var Helper
50
     * @access public
51
     */
52
    public $helper = null;
53
54
    /**
55
     * @var Publisher\Category
56
     * @access public
57
     */
58
    public $_category = null;
59
60
    /**
61
     * @param int|null $id
62
     */
63
    public function __construct($id = null)
64
    {
65
        $this->helper = Helper::getInstance();
66
        $this->initVar('itemid', \XOBJ_DTYPE_INT, 0);
67
        $this->initVar('categoryid', \XOBJ_DTYPE_INT, 0, false);
68
        $this->initVar('title', \XOBJ_DTYPE_TXTBOX, '', true, 255);
69
        $this->initVar('subtitle', \XOBJ_DTYPE_TXTBOX, '', false, 255);
70
        $this->initVar('summary', \XOBJ_DTYPE_TXTAREA, '', false);
71
        $this->initVar('body', \XOBJ_DTYPE_TXTAREA, '', false);
72
        $this->initVar('uid', \XOBJ_DTYPE_INT, 0, false);
73
        $this->initVar('author_alias', \XOBJ_DTYPE_TXTBOX, '', false, 255);
74
        $this->initVar('datesub', \XOBJ_DTYPE_INT, '', false);
75
        $this->initVar('status', \XOBJ_DTYPE_INT, -1, false);
76
        $this->initVar('image', \XOBJ_DTYPE_INT, 0, false);
77
        $this->initVar('images', \XOBJ_DTYPE_TXTBOX, '', false, 255);
78
        $this->initVar('counter', \XOBJ_DTYPE_INT, 0, false);
79
        $this->initVar('rating', \XOBJ_DTYPE_OTHER, 0, false);
80
        $this->initVar('votes', \XOBJ_DTYPE_INT, 0, false);
81
        $this->initVar('weight', \XOBJ_DTYPE_INT, 0, false);
82
        $this->initVar('dohtml', \XOBJ_DTYPE_INT, 1, true);
83
        $this->initVar('dosmiley', \XOBJ_DTYPE_INT, 1, true);
84
        $this->initVar('doimage', \XOBJ_DTYPE_INT, 1, true);
85
        $this->initVar('dobr', \XOBJ_DTYPE_INT, 1, false);
86
        $this->initVar('doxcode', \XOBJ_DTYPE_INT, 1, true);
87
        $this->initVar('cancomment', \XOBJ_DTYPE_INT, 1, true);
88
        $this->initVar('comments', \XOBJ_DTYPE_INT, 0, false);
89
        $this->initVar('notifypub', \XOBJ_DTYPE_INT, 1, false);
90
        $this->initVar('meta_keywords', \XOBJ_DTYPE_TXTAREA, '', false);
91
        $this->initVar('meta_description', \XOBJ_DTYPE_TXTAREA, '', false);
92
        $this->initVar('short_url', \XOBJ_DTYPE_TXTBOX, '', false, 255);
93
        $this->initVar('item_tag', \XOBJ_DTYPE_TXTAREA, '', false);
94
        // Non consistent values
95
        $this->initVar('pagescount', \XOBJ_DTYPE_INT, 0, false);
96
        if (isset($id)) {
97
            $item = $this->helper->getItemHandler()->get($id);
98
            foreach ($item->vars as $k => $v) {
99
                $this->assignVar($k, $v['value']);
100
            }
101
        }
102
    }
103
104
    /**
105
     * @return null|Publisher\Category
106
     */
107
    public function category(): ?Category
108
    {
109
        if (!isset($this->_category)) {
110
            $this->_category = $this->helper->getCategoryHandler()->get($this->getVar('categoryid'));
111
        }
112
113
        return $this->_category;
114
    }
115
116
    /**
117
     * @param int    $maxLength
118
     * @param string $format
119
     */
120
    public function title($maxLength = 0, $format = 'S'): string
121
    {
122
        $ret = $this->getVar('title', $format);
123
        if (0 != $maxLength) {
124
            if (!XoopsLocale::isMultiByte()) {
0 ignored issues
show
Deprecated Code introduced by
The function Xoops\Locale\AbstractLocale::isMultiByte() has been deprecated: since 2.6.0 -- UTF-8 is always used ( Ignorable by Annotation )

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

124
            if (!/** @scrutinizer ignore-deprecated */ XoopsLocale::isMultiByte()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
125
                if (\mb_strlen($ret) >= $maxLength) {
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type null and string[]; however, parameter $string of mb_strlen() 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

125
                if (\mb_strlen(/** @scrutinizer ignore-type */ $ret) >= $maxLength) {
Loading history...
126
                    $ret = Publisher\Utils::substr($ret, 0, $maxLength);
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type string[]; however, parameter $str of XoopsModules\Publisher\Utils::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

126
                    $ret = Publisher\Utils::substr(/** @scrutinizer ignore-type */ $ret, 0, $maxLength);
Loading history...
127
                }
128
            }
129
        }
130
131
        return $ret;
132
    }
133
134
    /**
135
     * @param int    $maxLength
136
     * @param string $format
137
     *
138
     * @return mixed|string
139
     */
140
    public function subtitle($maxLength = 0, $format = 'S')
141
    {
142
        $ret = $this->getVar('subtitle', $format);
143
        if (0 != $maxLength) {
144
            if (!XoopsLocale::isMultiByte()) {
0 ignored issues
show
Deprecated Code introduced by
The function Xoops\Locale\AbstractLocale::isMultiByte() has been deprecated: since 2.6.0 -- UTF-8 is always used ( Ignorable by Annotation )

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

144
            if (!/** @scrutinizer ignore-deprecated */ XoopsLocale::isMultiByte()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
145
                if (\mb_strlen($ret) >= $maxLength) {
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type null and string[]; however, parameter $string of mb_strlen() 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

145
                if (\mb_strlen(/** @scrutinizer ignore-type */ $ret) >= $maxLength) {
Loading history...
146
                    $ret = Publisher\Utils::substr($ret, 0, $maxLength);
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type string[]; however, parameter $str of XoopsModules\Publisher\Utils::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

146
                    $ret = Publisher\Utils::substr(/** @scrutinizer ignore-type */ $ret, 0, $maxLength);
Loading history...
147
                }
148
            }
149
        }
150
151
        return $ret;
152
    }
153
154
    /**
155
     * @param int    $maxLength
156
     * @param string $format
157
     * @param string $stripTags
158
     *
159
     * @return mixed|string
160
     */
161
    public function summary($maxLength = 0, $format = 'S', $stripTags = '')
162
    {
163
        $ret = $this->getVar('summary', $format);
164
        if (!empty($stripTags)) {
165
            $ret = \strip_tags($ret, $stripTags);
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type null and string[]; however, parameter $string of strip_tags() 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

165
            $ret = \strip_tags(/** @scrutinizer ignore-type */ $ret, $stripTags);
Loading history...
166
        }
167
        if (0 != $maxLength) {
168
            if (!XoopsLocale::isMultiByte()) {
0 ignored issues
show
Deprecated Code introduced by
The function Xoops\Locale\AbstractLocale::isMultiByte() has been deprecated: since 2.6.0 -- UTF-8 is always used ( Ignorable by Annotation )

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

168
            if (!/** @scrutinizer ignore-deprecated */ XoopsLocale::isMultiByte()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
169
                if (\mb_strlen($ret) >= $maxLength) {
170
                    //$ret = Publisher\Utils::substr($ret , 0, $maxLength);
171
                    $ret = Publisher\Utils::truncateTagSafe($ret, $maxLength, $etc = '...', $break_words = false);
172
                }
173
            }
174
        }
175
176
        return $ret;
177
    }
178
179
    /**
180
     * @param int  $maxLength
181
     * @param bool $fullSummary
182
     *
183
     * @return mixed|string
184
     */
185
    public function getBlockSummary($maxLength = 0, $fullSummary = false)
186
    {
187
        if ($fullSummary) {
188
            $ret = $this->summary(0, 's', '<br><br>');
189
        } else {
190
            $ret = $this->summary($maxLength, 's', '<br><br>');
191
        }
192
        //no summary? get body!
193
        if ('' == $ret) {
194
            $ret = $this->body($maxLength, 's', '<br><br>');
195
        }
196
197
        return $ret;
198
    }
199
200
    /**
201
     * @param string $file_name
202
     */
203
    public function wrappage($file_name): string
204
    {
205
        $content = '';
206
        $page = Publisher\Utils::getUploadDir(true, 'content') . $file_name;
207
        if (XoopsLoad::fileExists($page)) {
208
            // this page uses smarty template
209
            \ob_start();
210
            include $page;
211
            $content = \ob_get_clean();
212
            // Cleaning the content
213
            $body_start_pos = \mb_strpos($content, '<body>');
214
            if ($body_start_pos) {
215
                $body_end_pos = \mb_strpos($content, '</body>', $body_start_pos);
216
                $content = \mb_substr($content, $body_start_pos + \mb_strlen('<body>'), $body_end_pos - \mb_strlen('<body>') - $body_start_pos);
217
            }
218
            // Check if ML Hack is installed, and if yes, parse the $content in formatForML
219
            $myts = Sanitizer::getInstance();
220
            if (\method_exists($myts, 'formatForML')) {
221
                $content = $myts->formatForML($content);
222
            }
223
        }
224
225
        return $content;
226
    }
227
228
    /**
229
     * This method returns the body to be displayed. Not to be used for editing
230
     *
231
     * @param int    $maxLength
232
     * @param string $format
233
     * @param string $stripTags
234
     *
235
     * @return mixed|string
236
     */
237
    public function body($maxLength = 0, $format = 'S', $stripTags = '')
238
    {
239
        $ret = $this->getVar('body', $format);
240
        $wrap_pos = \mb_strpos($ret, '[pagewrap=');
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type null and string[]; 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

240
        $wrap_pos = \mb_strpos(/** @scrutinizer ignore-type */ $ret, '[pagewrap=');
Loading history...
241
        if (!(false === $wrap_pos)) {
242
            $wrap_pages = [];
243
            $wrap_code_length = \mb_strlen('[pagewrap=');
244
            while (!(false === $wrap_pos)) {
245
                $end_wrap_pos = \mb_strpos($ret, ']', $wrap_pos);
246
                if ($end_wrap_pos) {
247
                    $wrap_page_name = \mb_substr($ret, $wrap_pos + $wrap_code_length, $end_wrap_pos - $wrap_code_length - $wrap_pos);
0 ignored issues
show
Bug introduced by
It seems like $ret can also be of type null and string[]; however, parameter $string of mb_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

247
                    $wrap_page_name = \mb_substr(/** @scrutinizer ignore-type */ $ret, $wrap_pos + $wrap_code_length, $end_wrap_pos - $wrap_code_length - $wrap_pos);
Loading history...
248
                    $wrap_pages[] = $wrap_page_name;
249
                }
250
                $wrap_pos = \mb_strpos($ret, '[pagewrap=', $end_wrap_pos - 1);
251
            }
252
            foreach ($wrap_pages as $page) {
253
                $wrap_page_content = $this->wrappage($page);
254
                $ret = \str_replace("[pagewrap={$page}]", $wrap_page_content, $ret);
255
            }
256
        }
257
        if ($this->helper->getConfig('item_disp_blocks_summary')) {
258
            $summary = $this->summary($maxLength, $format, $stripTags);
259
            if ($summary) {
260
                $ret = $this->summary() . '<br><br>' . $ret;
261
            }
262
        }
263
        if (!empty($stripTags)) {
264
            $ret = \strip_tags($ret, $stripTags);
265
        }
266
        if (0 != $maxLength) {
267
            if (!XoopsLocale::isMultiByte()) {
0 ignored issues
show
Deprecated Code introduced by
The function Xoops\Locale\AbstractLocale::isMultiByte() has been deprecated: since 2.6.0 -- UTF-8 is always used ( Ignorable by Annotation )

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

267
            if (!/** @scrutinizer ignore-deprecated */ XoopsLocale::isMultiByte()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
268
                if (\mb_strlen($ret) >= $maxLength) {
269
                    //$ret = Publisher\Utils::substr($ret , 0, $maxLength);
270
                    $ret = Publisher\Utils::truncateTagSafe($ret, $maxLength, $etc = '...', $break_words = false);
271
                }
272
            }
273
        }
274
275
        return $ret;
276
    }
277
278
    /**
279
     * @param string $dateFormat
280
     * @param string $format
281
     */
282
    public function datesub($dateFormat = '', $format = 'S'): string
283
    {
284
        if (empty($dateformat)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $dateformat does not exist. Did you maybe mean $format?
Loading history...
285
            $dateFormat = $this->helper->getConfig('format_date');
286
        }
287
288
        return XoopsLocale::formatTimestamp($this->getVar('datesub', $format), $dateFormat);
289
    }
290
291
    /**
292
     * @param int $realName
293
     */
294
    public function posterName($realName = -1): string
295
    {
296
        if (-1 == $realName) {
297
            $realName = $this->helper->getConfig('format_realname');
298
        }
299
        $ret = $this->getVar('author_alias');
300
        if ('' == $ret) {
301
            $ret = XoopsUserUtility::getUnameFromId($this->getVar('uid'), $realName);
302
        }
303
304
        return $ret;
305
    }
306
307
    public function posterAvatar(): string
308
    {
309
        $xoops = Xoops::getInstance();
310
        $ret = 'blank.gif';
311
        $memberHandler = $xoops->getHandlerMember();
312
        $thisUser = $memberHandler->getUser($this->getVar('uid'));
313
        if (\is_object($thisUser)) {
314
            $ret = $xoops->service('avatar')->getAvatarUrl($thisUser)->getValue();
315
        }
316
317
        return $ret;
318
    }
319
320
    public function linkedPosterName(): string
321
    {
322
        $ret = $this->getVar('author_alias');
323
        if ('' == $ret) {
324
            $ret = XoopsUserUtility::getUnameFromId($this->getVar('uid'), $this->helper->getConfig('format_realname'), true);
325
        }
326
327
        return $ret;
328
    }
329
330
    /**
331
     * @return mixed
332
     */
333
    public function updateCounter()
334
    {
335
        return $this->helper->getItemHandler()->updateCounter($this->getVar('itemid'));
336
    }
337
338
    /**
339
     * @param bool $force
340
     */
341
    public function store($force = true): bool
342
    {
343
        $xoops = Xoops::getInstance();
344
        $isNew = $this->isNew();
345
        if (!$this->helper->getItemHandler()->insert($this, $force)) {
346
            return false;
347
        }
348
        if ($isNew && \_PUBLISHER_STATUS_PUBLISHED == $this->getVar('status')) {
349
            // Increment user posts
350
            $userHandler = $xoops->getHandlerUser();
351
            $memberHandler = $xoops->getHandlerMember();
352
            $poster = $userHandler->get($this->getVar('uid'));
353
            if (\is_object($poster) && !$poster->isNew()) {
354
                $poster->setVar('posts', $poster->getVar('posts') + 1);
355
                if (!$memberHandler->insertUser($poster, true)) {
356
                    $this->setErrors('Article created but could not increment user posts.');
357
358
                    return false;
359
                }
360
            }
361
        }
362
363
        return true;
364
    }
365
366
    public function getCategoryName(): string
367
    {
368
        return $this->category()->getVar('name');
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->category()->getVar('name') could return the type null|string[] which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
369
    }
370
371
    public function getCategoryUrl(): string
372
    {
373
        return $this->category()->getCategoryUrl();
374
    }
375
376
    public function getCategoryLink(): string
377
    {
378
        return $this->category()->getCategoryLink();
379
    }
380
381
    /**
382
     * @param bool $withAllLink
383
     */
384
    public function getCategoryPath($withAllLink = true): string
385
    {
386
        return $this->category()->getCategoryPath($withAllLink);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->category()...egoryPath($withAllLink) returns the type array which is incompatible with the type-hinted return string.
Loading history...
387
    }
388
389
    public function getCategoryImagePath(): string
390
    {
391
        return Publisher\Utils::getImageDir('category', false) . $this->category()->image();
392
    }
393
394
    /**
395
     * @return mixed
396
     */
397
    public function getFiles()
398
    {
399
        return $this->helper->getFileHandler()->getAllFiles($this->getVar('itemid'), _PUBLISHER_STATUS_FILE_ACTIVE);
400
    }
401
402
    public function getAdminLinks(): string
403
    {
404
        $xoops = Xoops::getInstance();
405
        $adminLinks = '';
406
        if ($xoops->isUser() && (Publisher\Utils::IsUserAdmin() || Publisher\Utils::IsUserAuthor($this) || $this->helper->getPermissionHandler()->isGranted('item_submit', $this->getVar('categoryid')))) {
407
            if (Publisher\Utils::IsUserAdmin() || Publisher\Utils::IsUserAuthor($this) || Publisher\Utils::IsUserModerator($this)) {
408
                if ($this->helper->getConfig('perm_edit') || Publisher\Utils::IsUserModerator($this) || Publisher\Utils::IsUserAdmin()) {
409
                    // Edit button
410
                    $adminLinks .= "<a href='" . \PUBLISHER_URL . '/submit.php?itemid=' . $this->getVar('itemid') . "'><img src='" . \PUBLISHER_URL . "/images/links/edit.gif'" . " title='" . _CO_PUBLISHER_EDIT . "' alt='" . _CO_PUBLISHER_EDIT . "'></a>";
411
                    $adminLinks .= ' ';
412
                }
413
                if ($this->helper->getConfig('perm_delete') || Publisher\Utils::IsUserModerator($this) || Publisher\Utils::IsUserAdmin()) {
414
                    // Delete button
415
                    $adminLinks .= "<a href='" . \PUBLISHER_URL . '/submit.php?op=del&amp;itemid=' . $this->getVar('itemid') . "'><img src='" . \PUBLISHER_URL . "/images/links/delete.png'" . " title='" . _CO_PUBLISHER_DELETE . "' alt='" . _CO_PUBLISHER_DELETE . "'></a>";
416
                    $adminLinks .= ' ';
417
                }
418
            }
419
            if ($this->helper->getConfig('perm_clone') || Publisher\Utils::IsUserModerator($this) || Publisher\Utils::IsUserAdmin()) {
420
                // Duplicate button
421
                $adminLinks .= "<a href='" . \PUBLISHER_URL . '/submit.php?op=clone&amp;itemid=' . $this->getVar('itemid') . "'><img src='" . \PUBLISHER_URL . "/images/links/clone.gif'" . " title='" . _CO_PUBLISHER_CLONE . "' alt='" . _CO_PUBLISHER_CLONE . "'></a>";
422
                $adminLinks .= ' ';
423
            }
424
        }
425
        // PDF button
426
        if ($xoops->service('htmltopdf')->isAvailable()) {
427
            $adminLinks .= "<a href='" . \PUBLISHER_URL . '/makepdf.php?itemid=' . $this->getVar('itemid') . "' rel='nofollow' target='_blank'><img src='" . \PUBLISHER_URL . "/images/links/pdf.gif' title='" . _CO_PUBLISHER_PDF . "' alt='" . _CO_PUBLISHER_PDF . "'></a>";
428
            $adminLinks .= ' ';
429
        }
430
        // Print button
431
        $adminLinks .= "<a href='" . Publisher\Utils::seoGenUrl('print', $this->getVar('itemid'), $this->getVar('short_url')) . "' rel='nofollow' target='_blank'><img src='" . \PUBLISHER_URL . "/images/links/print.gif' title='" . _CO_PUBLISHER_PRINT . "' alt='" . _CO_PUBLISHER_PRINT . "'></a>";
432
        $adminLinks .= ' ';
433
        // Email button
434
        if ($xoops->isActiveModule('tellafriend')) {
435
            $subject = \sprintf(_CO_PUBLISHER_INTITEMFOUND, $xoops->getConfig('sitename'));
436
            $subject = $this->_convert_for_japanese($subject);
437
            $maillink = Publisher\Utils::tellafriend($subject);
438
            $adminLinks .= '<a href="' . $maillink . '"><img src="' . \PUBLISHER_URL . '/images/links/friend.gif" title="' . _CO_PUBLISHER_MAIL . '" alt="' . _CO_PUBLISHER_MAIL . '"></a>';
439
            $adminLinks .= ' ';
440
        }
441
442
        return $adminLinks;
443
    }
444
445
    /**
446
     * @param array $notifications
447
     */
448
    public function sendNotifications($notifications = []): void
449
    {
450
        $xoops = Xoops::getInstance();
451
        if ($xoops->isActiveModule('notifications')) {
452
            $notificationHandler = Notifications::getInstance()->getHandlerNotification();
453
            $tags = [];
454
            $tags['MODULE_NAME'] = $this->helper->getModule()->getVar('name');
455
            $tags['ITEM_NAME'] = $this->title();
456
            $tags['CATEGORY_NAME'] = $this->getCategoryName();
457
            $tags['CATEGORY_URL'] = \PUBLISHER_URL . '/category.php?categoryid=' . $this->getVar('categoryid');
458
            $tags['ITEM_BODY'] = $this->body();
459
            $tags['DATESUB'] = $this->datesub();
460
            foreach ($notifications as $notification) {
461
                switch ($notification) {
462
                    case \_PUBLISHER_NOT_ITEM_PUBLISHED:
463
                        $tags['ITEM_URL'] = \PUBLISHER_URL . '/item.php?itemid=' . $this->getVar('itemid');
464
                        $notificationHandler->triggerEvent('global', 0, 'published', $tags, [], $this->helper->getModule()->getVar('mid'));
465
                        $notificationHandler->triggerEvent('category', $this->getVar('categoryid'), 'published', $tags, [], $this->helper->getModule()->getVar('mid'));
466
                        $notificationHandler->triggerEvent('item', $this->getVar('itemid'), 'approved', $tags, [], $this->helper->getModule()->getVar('mid'));
467
                        break;
468
                    case \_PUBLISHER_NOT_ITEM_SUBMITTED:
469
                        $tags['WAITINGFILES_URL'] = \PUBLISHER_URL . '/admin/item.php?itemid=' . $this->getVar('itemid');
470
                        $notificationHandler->triggerEvent('global', 0, 'submitted', $tags, [], $this->helper->getModule()->getVar('mid'));
471
                        $notificationHandler->triggerEvent('category', $this->getVar('categoryid'), 'submitted', $tags, [], $this->helper->getModule()->getVar('mid'));
472
                        break;
473
                    case \_PUBLISHER_NOT_ITEM_REJECTED:
474
                        $notificationHandler->triggerEvent('item', $this->getVar('itemid'), 'rejected', $tags, [], $this->helper->getModule()->getVar('mid'));
475
                        break;
476
                    case -1:
477
                    default:
478
                        break;
479
                }
480
            }
481
        }
482
    }
483
484
    public function notLoaded(): bool
485
    {
486
        return -1 == $this->getVar('itemid');
487
    }
488
489
    public function getItemUrl(): string
490
    {
491
        return Publisher\Utils::seoGenUrl('item', $this->getVar('itemid'), $this->getVar('short_url'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return XoopsModules\Publ...s->getVar('short_url')) could return the type null which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
492
    }
493
494
    /**
495
     * @param bool $class
496
     * @param int  $maxsize
497
     *
498
     * @return string
499
     */
500
    public function getItemLink($class = false, $maxsize = 0): ?string
501
    {
502
        if ($class) {
503
            return '<a class=' . $class . ' href="' . $this->getItemUrl() . '">' . $this->title($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

503
            return '<a class=' . /** @scrutinizer ignore-type */ $class . ' href="' . $this->getItemUrl() . '">' . $this->title($maxsize) . '</a>';
Loading history...
504
        }
505
506
        return '<a href="' . $this->getItemUrl() . '">' . $this->title($maxsize) . '</a>';
507
    }
508
509
    public function getWhoAndWhen(): string
510
    {
511
        $posterName = $this->linkedPosterName();
512
        $postdate = $this->datesub();
513
514
        return \sprintf(_CO_PUBLISHER_POSTEDBY, $posterName, $postdate);
515
    }
516
517
    /**
518
     * @param null|string $body
519
     */
520
    public function plain_maintext($body = null): string
521
    {
522
        $ret = '';
523
        if (!$body) {
524
            $body = $this->body();
525
        }
526
        $ret .= \str_replace('[pagebreak]', '<br><br>', $body);
527
528
        return $ret;
529
    }
530
531
    /**
532
     * @param int         $item_page_id
533
     * @param null|string $body
534
     */
535
    public function buildmaintext($item_page_id = -1, $body = null): string
536
    {
537
        if (!$body) {
538
            $body = $this->body();
539
        }
540
        $body_parts = \explode('[pagebreak]', $body);
541
        $this->setVar('pagescount', \count($body_parts));
542
        if (\count($body_parts) <= 1) {
543
            return $this->plain_maintext($body);
544
        }
545
        $ret = '';
546
        if (-1 == $item_page_id) {
547
            $ret .= \trim($body_parts[0]);
548
549
            return $ret;
550
        }
551
        if ($item_page_id >= \count($body_parts)) {
552
            $item_page_id = \count($body_parts) - 1;
553
        }
554
        $ret .= \trim($body_parts[$item_page_id]);
555
556
        return $ret;
557
    }
558
559
    /**
560
     * @return mixed
561
     */
562
    public function getImages()
563
    {
564
        static $ret;
565
566
        $xoops = Xoops::getInstance();
567
        if (!$xoops->isActiveModule('images')) {
568
            return [];
569
        }
570
        $itemid = $this->getVar('itemid');
571
        if (!isset($ret[$itemid])) {
572
            $ret[$itemid]['main'] = '';
573
            $ret[$itemid]['others'] = [];
574
            $images_ids = [];
575
            $image = $this->getVar('image');
576
            $images = $this->getVar('images');
577
            if ('' != $images) {
578
                $images_ids = \explode('|', $images);
0 ignored issues
show
Bug introduced by
It seems like $images can also be of type null and string[]; however, parameter $string of explode() 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

578
                $images_ids = \explode('|', /** @scrutinizer ignore-type */ $images);
Loading history...
579
            }
580
            if ($image > 0) {
581
                $images_ids[] = $image;
582
            }
583
            $imageObjs = [];
584
            if (\count($images_ids) > 0) {
585
                $imageHandler = Images::getInstance()->getHandlerImages();
586
                $criteria = new CriteriaCompo(new Criteria('image_id', '(' . \implode(',', $images_ids) . ')', 'IN'));
587
                $imageObjs = $imageHandler->getObjects($criteria, true);
588
                unset($criteria);
589
            }
590
            foreach ($imageObjs as $id => $imageObj) {
591
                if ($id == $image) {
592
                    $ret[$itemid]['main'] = $imageObj;
593
                } else {
594
                    $ret[$itemid]['others'][] = $imageObj;
595
                }
596
                unset($imageObj);
597
            }
598
            unset($imageObjs);
599
        }
600
601
        return $ret[$itemid];
602
    }
603
604
    /**
605
     * @param string $display
606
     * @param int    $max_char_title
607
     * @param int    $max_char_summary
608
     * @param bool   $full_summary
609
     *
610
     * @return array
611
     */
612
    public function toArray($display = 'default', $max_char_title = 0, $max_char_summary = 0, $full_summary = false)
0 ignored issues
show
Unused Code introduced by
The parameter $full_summary 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

612
    public function toArray($display = 'default', $max_char_title = 0, $max_char_summary = 0, /** @scrutinizer ignore-unused */ $full_summary = 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...
613
    {
614
        $item_page_id = -1;
615
        if (\is_numeric($display)) {
616
            $item_page_id = $display;
617
            $display = 'all';
618
        }
619
        $item['itemid'] = $this->getVar('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...
620
        $item['uid'] = $this->getVar('uid');
621
        $item['titlelink'] = $this->getItemLink(false, $max_char_title);
622
        $item['subtitle'] = $this->subtitle();
623
        $item['datesub'] = $this->datesub();
624
        $item['counter'] = $this->getVar('counter');
625
        switch ($display) {
626
            case 'summary':
627
            case 'list':
628
                break;
629
            case 'full':
630
            case 'wfsection':
631
            case 'default':
632
                $summary = $this->summary($max_char_summary);
633
                if (!$summary) {
634
                    $summary = $this->body($max_char_summary);
635
                }
636
                $item['summary'] = $summary;
637
                $item = $this->toArrayFull($item);
638
                break;
639
            case 'all':
640
                $item = $this->toArrayFull($item);
641
                $item = $this->toArrayAll($item, $item_page_id);
642
                break;
643
        }
644
        // Highlighting searched words
645
        $highlight = true;
646
        if ($highlight && isset($_GET['keywords'])) {
647
            $myts = Sanitizer::getInstance();
648
            $keywords = $myts->htmlSpecialChars(\trim(\urldecode($_GET['keywords'])));
649
            $fields = ['title', 'maintext', 'summary'];
650
            foreach ($fields as $field) {
651
                if (isset($item[$field])) {
652
                    $item[$field] = $this->highlight($item[$field], $keywords);
653
                }
654
            }
655
        }
656
657
        return $item;
658
    }
659
660
    /**
661
     * @param array $item
662
     */
663
    public function toArrayFull($item): array
664
    {
665
        $item['title'] = $this->title();
666
        $item['clean_title'] = $this->title();
667
        $item['itemurl'] = $this->getItemUrl();
668
        $item['cancomment'] = $this->getVar('cancomment');
669
        $item['comments'] = $this->getVar('comments');
670
        $item['adminlink'] = $this->getAdminLinks();
671
        $item['categoryPath'] = $this->getCategoryPath($this->helper->getConfig('format_linked_path'));
672
        $item['who_when'] = $this->getWhoAndWhen();
673
        $item = $this->getMainImage($item);
674
675
        return $item;
676
    }
677
678
    /**
679
     * @param array $item
680
     * @param int   $item_page_id
681
     */
682
    public function toArrayAll($item, $item_page_id): array
683
    {
684
        $item['maintext'] = $this->buildmaintext($item_page_id, $this->body());
685
        $item = $this->getOtherImages($item);
686
687
        return $item;
688
    }
689
690
    /**
691
     * @param array $item
692
     */
693
    public function getMainImage($item = []): array
694
    {
695
        $images = $this->getImages();
696
        $item['image_path'] = '';
697
        $item['image_name'] = '';
698
        if (\is_object($images['main'])) {
699
            /* @var \ImagesImage $image */
700
            $image = $images['main'];
701
            $dimensions = \getimagesize(XoopsBaseConfig::get('root-path') . '/uploads/' . $image->getVar('image_name'));
702
            $item['image_width'] = $dimensions[0];
703
            $item['image_height'] = $dimensions[1];
704
            $item['image_path'] = XoopsBaseConfig::get('url') . '/uploads/' . $image->getVar('image_name');
705
            // pass this on since some consumers build custom thumbnails
706
            $item['image_vpath'] = 'uploads/' . $image->getVar('image_name');
707
            $item['image_thumb'] = Xoops::getInstance()->service('thumbnail')->getImgUrl($item['image_vpath'], 0, 180)->getValue();
708
            $item['image_name'] = $image->getVar('image_nicename');
709
        }
710
711
        return $item;
712
    }
713
714
    /**
715
     * @param array $item
716
     */
717
    public function getOtherImages($item = []): array
718
    {
719
        $thumbService = Xoops::getInstance()->service('thumbnail');
720
        $images = $this->getImages();
721
        $item['images'] = [];
722
        $i = 0;
723
        /* @var \ImagesImage $image */
724
        foreach ($images['others'] as $image) {
725
            $dimensions = \getimagesize(XoopsBaseConfig::get('root-path') . '/uploads/' . $image->getVar('image_name'));
726
            $item['images'][$i]['width'] = $dimensions[0];
727
            $item['images'][$i]['height'] = $dimensions[1];
728
            $item['images'][$i]['path'] = XoopsBaseConfig::get('url') . '/uploads/' . $image->getVar('image_name');
729
            $item['images'][$i]['thumb'] = $thumbService->getImgUrl('uploads/' . $image->getVar('image_name'), 240, 0)->getValue();
730
            $item['images'][$i]['name'] = $image->getVar('image_nicename');
731
            ++$i;
732
        }
733
734
        return $item;
735
    }
736
737
    /**
738
     * @param string       $content
739
     * @param string|array $keywords
740
     *
741
     * @return string Text
742
     */
743
    public function highlight($content, $keywords): string
744
    {
745
        $color = $this->helper->getConfig('format_highlight_color');
746
        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

746
        if (0 !== \mb_strpos(/** @scrutinizer ignore-type */ $color, '#')) {
Loading history...
747
            $color = '#' . $color;
748
        }
749
        $pre = '<span style="font-weight: bolder; background-color: ' . $color . ';">';
750
        $post = '</span>';
751
752
        return Highlighter::apply($keywords, $content, $pre, $post);
753
    }
754
755
    /**
756
     *  Create metada and assign it to template
757
     */
758
    public function createMetaTags(): void
759
    {
760
        $publisher_metagen = new Publisher\Metagen($this->title(), $this->getVar('meta_keywords'), $this->getVar('meta_description'), $this->_category->_categoryPath);
0 ignored issues
show
Bug introduced by
It seems like $this->getVar('meta_keywords') can also be of type string[]; 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

760
        $publisher_metagen = new Publisher\Metagen($this->title(), /** @scrutinizer ignore-type */ $this->getVar('meta_keywords'), $this->getVar('meta_description'), $this->_category->_categoryPath);
Loading history...
Bug introduced by
It seems like $this->getVar('meta_description') can also be of type string[]; 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

760
        $publisher_metagen = new Publisher\Metagen($this->title(), $this->getVar('meta_keywords'), /** @scrutinizer ignore-type */ $this->getVar('meta_description'), $this->_category->_categoryPath);
Loading history...
Bug introduced by
$this->_category->_categoryPath of type array is incompatible with the type boolean 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

760
        $publisher_metagen = new Publisher\Metagen($this->title(), $this->getVar('meta_keywords'), $this->getVar('meta_description'), /** @scrutinizer ignore-type */ $this->_category->_categoryPath);
Loading history...
761
        $publisher_metagen->createMetaTags();
762
    }
763
764
    /**
765
     * @param string $str
766
     */
767
    public function _convert_for_japanese($str): string
768
    {
769
        global $xoopsConfig;
770
        // no action, if not flag
771
        if (!\defined('_PUBLISHER_FLAG_JP_CONVERT')) {
772
            return $str;
773
        }
774
        // no action, if not Japanese
775
        if ('japanese' !== $xoopsConfig['language']) {
776
            return $str;
777
        }
778
        // presume OS Browser
779
        $agent = $_SERVER['HTTP_USER_AGENT'];
780
        $os = '';
781
        $browser = '';
782
        if (false !== \mb_stripos($agent, 'Win')) {
783
            $os = 'win';
784
        }
785
        if (false !== \mb_stripos($agent, 'MSIE')) {
786
            $browser = 'msie';
787
        }
788
        // if msie
789
        if (('win' === $os) && ('msie' === $browser)) {
790
            // if multibyte
791
            if (\function_exists('mb_convert_encoding')) {
792
                $str = mb_convert_encoding($str, 'SJIS', 'EUC-JP');
793
                $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

793
                $str = \rawurlencode(/** @scrutinizer ignore-type */ $str);
Loading history...
794
            }
795
        }
796
797
        return $str;
798
    }
799
800
    /**
801
     * Checks if a user has access to a selected item. if no item permissions are
802
     * set, access permission is denied. The user needs to have necessary category
803
     * permission as well.
804
     * Also, the item needs to be Published
805
     *
806
     * @return bool : TRUE if the no errors occured
807
     */
808
    public function accessGranted(): bool
809
    {
810
        if (Publisher\Utils::IsUserAdmin()) {
811
            return true;
812
        }
813
        if (\_PUBLISHER_STATUS_PUBLISHED != $this->getVar('status')) {
814
            return false;
815
        }
816
        // Do we have access to the parent category
817
        if ($this->helper->getPermissionHandler()->isGranted('category_read', $this->getVar('categoryid'))) {
818
            return true;
819
        }
820
821
        return false;
822
    }
823
824
    /**
825
     * The name says it all
826
     */
827
    public function setVarsFromRequest(): void
828
    {
829
        $xoops = Xoops::getInstance();
830
        //Required fields
831
        if (isset($_REQUEST['categoryid'])) {
832
            $this->setVar('categoryid', Request::getInt('categoryid'));
833
        }
834
        if (isset($_REQUEST['title'])) {
835
            $this->setVar('title', Request::getString('title'));
836
        }
837
        if (isset($_REQUEST['body'])) {
838
            $this->setVar('body', Request::getText('body'));
839
        }
840
        //Not required fields
841
        if (isset($_REQUEST['summary'])) {
842
            $this->setVar('summary', Request::getText('summary'));
843
        }
844
        if (isset($_REQUEST['subtitle'])) {
845
            $this->setVar('subtitle', Request::getString('subtitle'));
846
        }
847
        if (isset($_REQUEST['item_tag'])) {
848
            $this->setVar('item_tag', Request::getString('item_tag'));
849
        }
850
        if (isset($_REQUEST['image_featured'])) {
851
            $image_item = Request::getArray('image_item');
852
            $image_featured = Request::getString('image_featured');
853
            //Todo: get a better image class for xoops!
854
            //Image hack
855
            $image_item_ids = [];
856
857
            $qb = Xoops::getInstance()->db()->createXoopsQueryBuilder();
858
            $qb->select('i.image_id', 'i.image_name')->fromPrefix('image', 'i')->orderBy('i.image_id');
859
            $result = $qb->execute();
860
861
            while (false !== ($myrow = $result->fetch(FetchMode::ASSOCIATIVE))) {
862
                $image_name = $myrow['image_name'];
863
                $id = $myrow['image_id'];
864
                if ($image_name == $image_featured) {
865
                    $this->setVar('image', $id);
866
                }
867
                if (\in_array($image_name, $image_item)) {
868
                    $image_item_ids[] = $id;
869
                }
870
            }
871
            $this->setVar('images', \implode('|', $image_item_ids));
872
        }
873
        if (isset($_REQUEST['uid'])) {
874
            $this->setVar('uid', Request::getInt('uid'));
875
        } elseif ($this->isNew()) {
876
            $this->setVar('uid', $xoops->isUser() ? $xoops->user->getVar('uid') : 0);
877
        }
878
        if (isset($_REQUEST['author_alias'])) {
879
            $this->setVar('author_alias', Request::getString('author_alias'));
880
            if ('' != $this->getVar('author_alias')) {
881
                $this->setVar('uid', 0);
882
            }
883
        }
884
        if (isset($_REQUEST['datesub'])) {
885
            $this->setVar('datesub', \strtotime($_REQUEST['datesub']['date']) + $_REQUEST['datesub']['time']);
886
        } elseif ($this->isNew()) {
887
            $this->setVar('datesub', \time());
888
        }
889
        if (isset($_REQUEST['item_short_url'])) {
890
            $this->setVar('short_url', Request::getString('item_short_url'));
891
        }
892
        if (isset($_REQUEST['item_meta_keywords'])) {
893
            $this->setVar('meta_keywords', Request::getString('item_meta_keywords'));
894
        }
895
        if (isset($_REQUEST['item_meta_description'])) {
896
            $this->setVar('meta_description', Request::getString('item_meta_description'));
897
        }
898
        if (isset($_REQUEST['weight'])) {
899
            $this->setVar('weight', Request::getInt('weight'));
900
        }
901
        if (isset($_REQUEST['allowcomments'])) {
902
            $this->setVar('cancomment', Request::getInt('allowcomments'));
903
        } elseif ($this->isNew()) {
904
            $this->setVar('cancoment', $this->helper->getConfig('submit_allowcomments'));
905
        }
906
        if (isset($_REQUEST['status'])) {
907
            $this->setVar('status', Request::getInt('status'));
908
        } elseif ($this->isNew()) {
909
            $this->setVar('status', $this->helper->getConfig('submit_status'));
910
        }
911
        if (isset($_REQUEST['dohtml'])) {
912
            $this->setVar('dohtml', Request::getInt('dohtml'));
913
        } elseif ($this->isNew()) {
914
            $this->setVar('dohtml', $this->helper->getConfig('submit_dohtml'));
915
        }
916
        if (isset($_REQUEST['dosmiley'])) {
917
            $this->setVar('dosmiley', Request::getInt('dosmiley'));
918
        } elseif ($this->isNew()) {
919
            $this->setVar('dosmiley', $this->helper->getConfig('submit_dosmiley'));
920
        }
921
        if (isset($_REQUEST['doxcode'])) {
922
            $this->setVar('doxcode', Request::getInt('doxcode'));
923
        } elseif ($this->isNew()) {
924
            $this->setVar('doxcode', $this->helper->getConfig('submit_doxcode'));
925
        }
926
        if (isset($_REQUEST['doimage'])) {
927
            $this->setVar('doimage', Request::getInt('doimage'));
928
        } elseif ($this->isNew()) {
929
            $this->setVar('doimage', $this->helper->getConfig('submit_doimage'));
930
        }
931
        if (isset($_REQUEST['dolinebreak'])) {
932
            $this->setVar('dobr', Request::getInt('dolinebreak'));
933
        } elseif ($this->isNew()) {
934
            $this->setVar('dobr', $this->helper->getConfig('submit_dobr'));
935
        }
936
        if (isset($_REQUEST['notify'])) {
937
            $this->setVar('notifypub', Request::getInt('notify'));
938
        }
939
    }
940
}
941