diff --git a/modules/page/conf/module.xml b/modules/page/conf/module.xml index 2e491a9bf..9d160128f 100644 --- a/modules/page/conf/module.xml +++ b/modules/page/conf/module.xml @@ -10,7 +10,8 @@ - + + @@ -21,7 +22,7 @@ - + diff --git a/modules/page/page.view.php b/modules/page/page.view.php index eec3c76a3..b66a31f57 100644 --- a/modules/page/page.view.php +++ b/modules/page/page.view.php @@ -74,24 +74,48 @@ class PageView extends Page { $page_type_name = 'widget'; } + + // Check document_srl. + $request_vars = Context::getRequestVars(); + if (!empty($request_vars->document_srl)) + { + $oDocument = DocumentModel::getDocument($request_vars->document_srl); + if (!$oDocument->isExists()) + { + return $this->dispPageNotFound(404, 'msg_not_founded'); + } + elseif (!$oDocument->isAccessible()) + { + return $this->dispPageNotFound(403, 'msg_not_permitted'); + } + elseif (in_array($page_type_name, ['article'])) + { + return $this->setRedirectUrl(getNotEncodedUrl(['mid' => $this->mid])); + } + } + + // Get page content. $method = '_get' . ucfirst($page_type_name) . 'Content'; $page_content = $this->{$method}(); Context::set('module_info', $this->module_info); Context::set('page_content', $page_content); - // if the page type is the widget or outside, there might be usable GET entities. - $request_vars = Context::getRequestVars(); - if (!empty($request_vars->document_srl) && in_array($page_type_name, ['article', 'widget'])) - { - $returnUrl = getUrl(['mid' => Context::get('mid')]); - $this->setRedirectUrl($returnUrl); - } - else - { - $this->setTemplatePath($this->module_path . 'tpl'); - $this->setTemplateFile($this instanceof pageMobile ? 'mobile' : 'content'); - } + $this->setTemplatePath($this->module_path . 'tpl'); + $this->setTemplateFile($this instanceof pageMobile ? 'mobile' : 'content'); + } + + /** + * 404 error handler + */ + public function dispPageNotFound($code, $message) + { + $oMessageObject = $this instanceof PageMobile ? MessageMobile::getInstance() : MessageView::getInstance(); + $oMessageObject->setMessage($message); + $oMessageObject->dispMessage(); + $this->setTemplatePath($oMessageObject->getTemplatePath()); + $this->setTemplateFile($oMessageObject->getTemplateFile()); + $this->setHttpStatusCode($code); } function _getWidgetContent()