Total Complexity | 176 |
Total Lines | 892 |
Duplicated Lines | 0 % |
Changes | 0 |
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 |
||
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()) { |
||
|
|||
125 | if (\mb_strlen($ret) >= $maxLength) { |
||
126 | $ret = Publisher\Utils::substr($ret, 0, $maxLength); |
||
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()) { |
||
145 | if (\mb_strlen($ret) >= $maxLength) { |
||
146 | $ret = Publisher\Utils::substr($ret, 0, $maxLength); |
||
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); |
||
166 | } |
||
167 | if (0 != $maxLength) { |
||
168 | if (!XoopsLocale::isMultiByte()) { |
||
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='); |
||
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); |
||
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()) { |
||
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)) { |
||
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'); |
||
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); |
||
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&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&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')); |
||
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>'; |
||
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); |
||
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) |
||
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'); |
||
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, '#')) { |
||
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); |
||
761 | $publisher_metagen->createMetaTags(); |
||
762 | } |
||
763 | |||
764 | /** |
||
765 | * @param string $str |
||
766 | */ |
||
767 | public function _convert_for_japanese($str): string |
||
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; |
||
822 | } |
||
823 | |||
824 | /** |
||
825 | * The name says it all |
||
826 | */ |
||
827 | public function setVarsFromRequest(): void |
||
938 | } |
||
939 | } |
||
940 | } |
||
941 |
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.