Browse Source

Ticket #4971 - Build-in API support: Root page for guest/member.

AntonLV 7 tháng trước cách đây
mục cha
commit
38c0e0f33d

+ 4 - 2
install/sql/system.sql

@@ -860,8 +860,10 @@ INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `ex
 (@iCategoryId, 'sys_api_cookie_path', '_adm_stg_cpt_option_sys_api_cookie_path', '/', 'digit', '', '', '', 40),
 (@iCategoryId, 'sys_api_cookie_secure', '_adm_stg_cpt_option_sys_api_cookie_secure', '', 'checkbox', '', '', '', 42),
 (@iCategoryId, 'sys_api_cookie_samesite', '_adm_stg_cpt_option_sys_api_cookie_samesite', 'Lax', 'select', 'None,Lax,Strict', '', '', 44),
-(@iCategoryId, 'sys_api_url_root_email', '_adm_stg_cpt_option_sys_api_url_root_email', '', 'digit', '', '', '', 50),
-(@iCategoryId, 'sys_api_url_root_push', '_adm_stg_cpt_option_sys_api_url_root_push', '', 'digit', '', '', '', 51);
+(@iCategoryId, 'sys_api_root_page_guest', '_adm_stg_cpt_option_sys_api_root_page_guest', 'home', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_options_api_root_page_guest";s:5:"class";s:13:"TemplServices";}', '', '', 50),
+(@iCategoryId, 'sys_api_root_page_member', '_adm_stg_cpt_option_sys_api_root_page_member', 'splash', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:32:"get_options_api_root_page_member";s:5:"class";s:13:"TemplServices";}', '', '', 52),
+(@iCategoryId, 'sys_api_url_root_email', '_adm_stg_cpt_option_sys_api_url_root_email', '', 'digit', '', '', '', 55),
+(@iCategoryId, 'sys_api_url_root_push', '_adm_stg_cpt_option_sys_api_url_root_push', '', 'digit', '', '', '', 57);
 
 
 --

+ 6 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -1846,6 +1846,12 @@
     <string name="_adm_stg_cpt_option_sys_api_search_sections"><![CDATA[Search sections]]></string>
     <string name="_adm_stg_cpt_option_sys_api_extended_units"><![CDATA[Use extended units]]></string>
     <string name="_adm_stg_cpt_option_sys_api_conn_in_prof_units"><![CDATA[Use connections lists in profiles/groups units]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_guest"><![CDATA[Root page for non-logged user]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_member"><![CDATA[Root page for logged user]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_home"><![CDATA[Home]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_dashboard"><![CDATA[Dashboard]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_profile"><![CDATA[Profile]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_splash"><![CDATA[Splash]]></string>
     <string name="_adm_stg_cpt_option_sys_api_url_root_email"><![CDATA[Site main URL in email notifications]]></string>
     <string name="_adm_stg_cpt_option_sys_api_url_root_push"><![CDATA[Site main URL in push notifications]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_api_key"><![CDATA[Default API key]]></string>

+ 6 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -1821,6 +1821,12 @@
     <string name="_adm_stg_cpt_option_sys_api_search_sections"><![CDATA[Искать в]]></string>
     <string name="_adm_stg_cpt_option_sys_api_extended_units"><![CDATA[Использовать расширенные юниты]]></string>
     <string name="_adm_stg_cpt_option_sys_api_conn_in_prof_units"><![CDATA[Использовать списки связей в блоках профилей/групп.]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_guest"><![CDATA[Корневая страница для незарегистрированного пользователя]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_member"><![CDATA[Корневая страница для авторизованного пользователя]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_home"><![CDATA[Главная страница]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_dashboard"><![CDATA[Панель управления]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_profile"><![CDATA[Профиль]]></string>
+    <string name="_adm_stg_cpt_option_sys_api_root_page_splash"><![CDATA[Заставка]]></string>
     <string name="_adm_stg_cpt_option_sys_api_url_root_email"><![CDATA[Основной URL-адрес сайта в уведомлениях по электронной почте]]></string>
     <string name="_adm_stg_cpt_option_sys_api_url_root_push"><![CDATA[Основной URL-адрес сайта в push-уведомлениях]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_api_key"><![CDATA[API-ключ по умолчанию]]></string>

+ 6 - 4
template/scripts/BxBasePage.php

@@ -517,12 +517,14 @@ class BxBasePage extends BxDolPage
             $_GET = array_merge($_GET, $aQueryString);
         }
 
+        $bLogged = isLogged();
         $bIsAvailable = $this->_isAvailablePage($this->_aObject);
         $bIsVisible = $this->_isVisiblePage($this->_aObject);
         //TODO: If page isn't Available or isn't Visible then we should exit with related Error Codes immediately.
 
         $sMetaTitle = $this->_getPageMetaTitle();
         $sName = $this->_getPageTitle();
+        $sUri = $this->_aObject['uri'];
         $sModule = $this->getModule();
         $aElements = $this->getPageBlocksAPI($aBlocks);
 
@@ -533,13 +535,13 @@ class BxBasePage extends BxDolPage
             'description' => $this->_getPageMetaDesc(),
             'keywords' => $this->_getPageMetaKeywords(),
             'image' => '',
-            'uri' => $this->_aObject['uri'],
-            'url' => ($bGetParams && !empty($aGetParams[0]) ? $aGetParams[0] : $this->_aObject['uri']) . ($sQueryString != '' ? '?' . $sQueryString : ''),
+            'uri' => $sUri,
+            'url' => ($bGetParams && !empty($aGetParams[0]) ? $aGetParams[0] : $sUri) . ($sQueryString != '' ? '?' . $sQueryString : ''),
             'author' => $this->_aObject['author'],
             'added' => $this->_aObject['added'],
             'module' => $sModule,
             'type' => $this->getType (),
-            'layout' => str_replace('.html', '', $this->_aObject['template']),
+            'layout' => !$bLogged && $sUri == 'home' && ($sReplacement = getParam('sys_api_root_page_guest')) == 'splash' ? $sReplacement : str_replace('.html', '', $this->_aObject['template']),
             'layout_parsed' => !is_numeric(trim(current(array_keys($aElements)), 'cell_')),
             'cover_block' => '',
             'cover' => $this->_aObject['cover'],
@@ -651,7 +653,7 @@ class BxBasePage extends BxDolPage
             }
         }
 
-        if(isLogged() && ($o = BxDolProfile::getInstance()) !== false) {
+        if($bLogged && ($o = BxDolProfile::getInstance()) !== false) {
             $iLogged = $o->id();
 
             $a['user'] = BxDolProfile::getDataForPage($o);

+ 14 - 1
template/scripts/BxBaseServicePages.php

@@ -36,9 +36,22 @@ class BxBaseServicePages extends BxDol
      */
     public function serviceGetPageByRequest ($sRequest, $sBlocks = '', $sParams = '')
     {
+        $bLogged = isLogged();
+
+        if($sRequest == 'home' && ($sReplacement = getParam('sys_api_root_page_' . ($bLogged ? 'member' : 'guest'))))
+            switch($sReplacement) {
+                case 'dashboard':
+                    $sRequest = 'dashboard';
+                    break;
+
+                case 'profile':
+                    $sRequest = ltrim(bx_api_get_relative_url(BxDolProfile::getInstance()->getUrl()), '/');
+                    break;
+            }
+
         list($aRes, $aExtras) = $this->_getByRequest('page', $sRequest, $sBlocks, $sParams);
 
-        if(isset($aRes['code'], $aRes['data']) && (int)$aRes['code'] == 404 && isLogged())
+        if(isset($aRes['code'], $aRes['data']) && (int)$aRes['code'] == 404 && $bLogged)
             $aRes['data']['user'] = BxDolProfile::getDataForPage();
         
         $aExtras['data'] = &$aRes;

+ 21 - 0
template/scripts/BxBaseServices.php

@@ -1488,6 +1488,27 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
         return $aResults;
     }
 
+    public function serviceGetOptionsApiRootPageGuest()
+    {
+        $sKey = '_adm_stg_cpt_option_sys_api_root_page_';
+
+        return [
+            'home' => _t($sKey .'home'), 
+            'splash' => _t($sKey . 'splash')
+        ];
+    }
+
+    public function serviceGetOptionsApiRootPageMember()
+    {
+        $sKey = '_adm_stg_cpt_option_sys_api_root_page_';
+
+        return [
+            'home' => _t($sKey .'home'), 
+            'dashboard' => _t($sKey . 'dashboard'), 
+            'profile' => _t($sKey . 'profile')
+        ];
+    }
+
     public function serviceGetOptionsApiMenuTop()
     {
         $aMenus = BxDolMenuQuery::getMenuObjects();