Apply PSR-12 code style (#3886)
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / sitemap / object / SimplePageSitemapObject.class.php
1 <?php
2
3 namespace wcf\system\sitemap\object;
4
5 use wcf\data\DatabaseObject;
6 use wcf\data\page\Page;
7 use wcf\data\page\PageList;
8 use wcf\page\AbstractPage;
9 use wcf\system\acl\simple\SimpleAclResolver;
10 use wcf\system\exception\IllegalLinkException;
11 use wcf\system\exception\PermissionDeniedException;
12
13 /**
14 * Simple page sitemap implementation.
15 *
16 * @author Joshua Ruesweg
17 * @copyright 2001-2019 WoltLab GmbH
18 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
19 * @package WoltLabSuite\Core\Sitemap\Object
20 * @since 3.1
21 */
22 class SimplePageSitemapObject extends AbstractSitemapObjectObjectType
23 {
24 /**
25 * @inheritDoc
26 */
27 public function getObjectClass()
28 {
29 return Page::class;
30 }
31
32 /**
33 * @inheritDoc
34 */
35 public function getObjectList()
36 {
37 /** @var $pageList PageList */
38 $pageList = parent::getObjectList();
39 $pageList->getConditionBuilder()->add('isMultilingual = ?', [0]);
40 $pageList->getConditionBuilder()->add('page.allowSpidersToIndex = ?', [1]);
41
42 return $pageList;
43 }
44
45 /**
46 * @inheritDoc
47 */
48 public function canView(DatabaseObject $object)
49 {
50 /** @var Page $object */
51 if ($object->isDisabled) {
52 return false;
53 }
54
55 if ($object->requireObjectID) {
56 return false;
57 }
58
59 if (!$object->validateOptions()) {
60 return false;
61 }
62
63 if (!$object->validatePermissions()) {
64 return false;
65 }
66
67 if (!SimpleAclResolver::getInstance()->canAccess('com.woltlab.wcf.page', $object->pageID)) {
68 return false;
69 }
70
71 if (!empty($object->controller)) {
72 /** @var $page AbstractPage */
73 $page = new $object->controller();
74
75 if ($page->loginRequired) {
76 return false;
77 }
78
79 try {
80 // check modules
81 $page->checkModules();
82
83 // check permission
84 $page->checkPermissions();
85 } catch (PermissionDeniedException $e) {
86 return false;
87 } catch (IllegalLinkException $e) {
88 return false;
89 }
90 }
91
92 return true;
93 }
94 }