فهرست منبع

Merge branch 'master' of https://github.com/unaio/una

AntonLV 4 سال پیش
والد
کامیت
a70c34cd39
4فایلهای تغییر یافته به همراه39 افزوده شده و 25 حذف شده
  1. 20 14
      inc/classes/BxDolPage.php
  2. 13 2
      inc/classes/BxDolPageQuery.php
  3. 2 2
      template/scripts/BxBasePage.php
  4. 4 7
      template/scripts/BxBasePageAccount.php

+ 20 - 14
inc/classes/BxDolPage.php

@@ -459,17 +459,18 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         $aUris = explode('/', trim($aParts['path'], '/'));
 
         // check if link starts with page URI and page with this URI exists 
-        if (!$aUris || empty($aUris[0]) || !($sPageName = BxDolPageQuery::getPageObjectNameByURI($aUris[0])))
+        if (!$aUris || empty($aUris[0]) || !($sPageName = BxDolPageQuery::getPageObjectNameByURI($aUris[0], false, true)))
             return false;
 
+        $aPage = BxDolPageQuery::getPageObject ($sPageName);
+
         // make final URL
-        $s = 'page.php?i=' . $aUris[0];
+        $s = 'page.php?i=' . $aPage['uri'];
 
         // add params
         if (!empty($aUris[1])) {
-            $aPage = BxDolPageQuery::getPageObject($sPageName);
             if ($aPage) {
-                $r = BxDolPageQuery::getSeoLink($aPage['module'], $aUris[0], ['uri' => urldecode($aUris[1])]);     
+                $r = BxDolPageQuery::getSeoLink($aPage['module'], $aPage['uri'], ['uri' => urldecode($aUris[1])]);     
                 if (!$r)
                     return false;
                 $s .= '&' . $r['param_name'] . '=' .  $r['param_value'];
@@ -565,6 +566,11 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         if(isLogged())
             BxDolAccount::getInstance()->isNeedChangePassword();
 
+        if ($this->isLockedFromUnauthenticated ($this->_aObject['uri'])) {
+            $this->redirectToLoginForm();
+            exit;
+        }
+
         if(!$oTemplate)
             $oTemplate = BxDolTemplate::getInstance();
 
@@ -676,7 +682,12 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
     /**
      * Check if page is visible.
      */
-    protected function _isVisiblePage ($a, $bRedirectToLoginFormForUnauthenticated = false)
+    protected function _isVisiblePage ($a)
+    {
+        return isAdmin() || BxDolAcl::getInstance()->isMemberLevelInSet($a['visible_for_levels']);
+    }
+
+    public static function isLockedFromUnauthenticated ($sUri)
     {
         if (!isLogged() && getParam('sys_lock_from_unauthenticated') && !defined('BX_DOL_CRON_EXECUTE')) {
             $aURIs = explode(',', getParam('sys_lock_from_unauthenticated_exceptions'));
@@ -684,20 +695,15 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
                 $sVal = trim($sVal);
             });
             $aI = array_combine($aURIs, array_fill(0, count($aURIs), 1));
-            if (!preg_match('/\/oauth2\//', $_SERVER['REQUEST_URI']) /*&& !preg_match('/searchKeyword.php$/', $_SERVER['PHP_SELF'])*/ && !preg_match('/member.php$/', $_SERVER['PHP_SELF']) && !isset($aI[$this->_aObject['uri']])) {
-                if ($bRedirectToLoginFormForUnauthenticated) {
-                    $this->_redirectToLoginForm();
-                }
-                else {
-                    return false;
-                }
+            if (!preg_match('/\/oauth2\//', $_SERVER['REQUEST_URI']) /*&& !preg_match('/searchKeyword.php$/', $_SERVER['PHP_SELF'])*/ && !preg_match('/member.php$/', $_SERVER['PHP_SELF']) && !isset($aI[$sUri])) {
+                return true;
             }
         }
 
-        return isAdmin() || BxDolAcl::getInstance()->isMemberLevelInSet($a['visible_for_levels']);
+        return false;
     }
 
-    protected function _redirectToLoginForm ()
+    public static function redirectToLoginForm ()
     {
         header("Location: " . bx_append_url_params(BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=login'), ['relocate' => bx_get_self_url()]));
         exit;

+ 13 - 2
inc/classes/BxDolPageQuery.php

@@ -32,7 +32,7 @@ class BxDolPageQuery extends BxDolDb
         return $aObject;
     }
 
-    static public function getPageObjectNameByURI($sURI, $sModule = false)
+    static public function getPageObjectNameByURI($sURI, $sModule = false, $bSearchRedirects = false)
     {
         $oDb = BxDolDb::getInstance();
         $a = array('uri' => $sURI);
@@ -41,7 +41,18 @@ class BxDolPageQuery extends BxDolDb
             $a['module'] = $sModule;
             $sQuery .= " AND `module` = :module";
         }
-        return $oDb->getOne($sQuery, $a);
+        $sObject = $oDb->getOne($sQuery, $a);
+
+        if ($bSearchRedirects && !$sObject) {
+            $sQuery = "SELECT `p`.`object` FROM `sys_objects_page` AS `p` INNER JOIN `sys_seo_uri_rewrites` AS `r` ON (`p`.`uri` = `r`.`uri_orig`) WHERE `r`.`uri_rewrite` = :uri";
+            if ($sModule) {
+                $a['module'] = $sModule;
+                $sQuery .= " AND `module` = :module";
+            }
+            $sObject = $oDb->getOne($sQuery, $a);
+        }
+
+        return $sObject;
     }
     
     static public function getContentInfoObjectNameByURI($sURI)

+ 2 - 2
template/scripts/BxBasePage.php

@@ -158,7 +158,7 @@ class BxBasePage extends BxDolPage
     {
         if (bx_get('dynamic') && ($iBlockId = (int)bx_get('pageBlock'))) {
 
-            if (!$this->_isVisiblePage($this->_aObject, true)) {
+            if (self::isLockedFromUnauthenticated($this->_aObject['uri']) || !$this->_isVisiblePage($this->_aObject)) {
                 header('HTTP/1.0 403 Forbidden');
                 exit;
             }
@@ -184,7 +184,7 @@ class BxBasePage extends BxDolPage
             exit;
         }
 
-        if (!$this->_isVisiblePage($this->_aObject, true))
+        if (!$this->_isVisiblePage($this->_aObject))
             return $this->_getPageAccessDeniedMsg ();
 
         $this->_addJsCss();

+ 4 - 7
template/scripts/BxBasePageAccount.php

@@ -102,15 +102,12 @@ class BxBasePageAccount extends BxTemplPage
         }
     }
 
-    protected function _isVisiblePage ($a, $bRedirectToLoginFormForUnauthenticated = false)
+    protected function _isVisiblePage ($a)
     {
-        if (!isLogged()) {
-            if ($bRedirectToLoginFormForUnauthenticated)
-                $this->_redirectToLoginForm();
-            else
+        if (!isLogged())
                 return false;
-        }
-        return parent::_isVisiblePage ($a, $bRedirectToLoginFormForUnauthenticated);
+
+        return parent::_isVisiblePage ($a);
     }
     
 	protected function _addJsCss()