Răsfoiți Sursa

Ticket #4817 - Courses improvements.

AntonLV 2 ani în urmă
părinte
comite
56af54fec8

+ 22 - 1
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -756,6 +756,27 @@ class BxBaseModGeneralModule extends BxDolModule
         return $this->_oTemplate->unit($aContentInfo, true, $sUnitTemplate);
     }
 
+    /**
+     * @page service Service Calls
+     * @section bx_base_general Base General
+     * @subsection bx_base_general-browsing Browsing
+     * @subsubsection bx_base_general-get_view get_view
+     * 
+     * @code bx_srv('bx_posts', 'get_view', [3]); @endcode
+     * 
+     * Get view for the specified content
+     * @param $iContentId content id
+     * 
+     * @see BxBaseModGeneralModule::serviceGetView
+     */
+    /** 
+     * @ref bx_base_general-get_view "get_view"
+     */
+    public function serviceGetView ($iContentId)
+    {
+        return $this->serviceEntityTextBlock($iContentId);
+    }
+
     public function serviceGetAll ($aParams = array())
     {
         if(empty($aParams) || !is_array($aParams))
@@ -1580,7 +1601,7 @@ class BxBaseModGeneralModule extends BxDolModule
     public function serviceEntityCreate ($sParams = false)
     {
         if($this->_bIsApi && ($aParams = bx_api_get_browse_params($sParams))) {
-            if($aKeys = ['context_pid', 'context_nid', 'context_usage'] && ($aParamsContext = array_intersect_key($aParams, array_flip($aKeys)))) {
+            if(($aKeys = ['context_pid', 'context_nid', 'context_usage']) && ($aParamsContext = array_intersect_key($aParams, array_flip($aKeys)))) {
                 $_GET = array_merge($_GET, $aParamsContext);
                 $sParams = array_diff_key($aParams, array_flip($aKeys));
             }

+ 1 - 1
modules/base/text/template/entry-text.html

@@ -2,7 +2,7 @@
 <div class="bx-content-description">
     <bx_if:show_image>
         <div class="bx-base-text-entity-image mb-4 text-center __add_class__ relative flex justify-center items-center">
-            <img class="rounded __img_class__ aspect-video object-cover bg-cover bx-image-edit-source-__unique_id__" style="background-image:url(__entry_image__); __image_settings__"  src="<bx_icon_url:spacer.gif />"/>
+            <img class="rounded __img_class__ w-full aspect-video object-cover bg-cover bx-image-edit-source-__unique_id__" style="background-image:url(__entry_image__); __image_settings__"  src="<bx_icon_url:spacer.gif />"/>
             __image_tweak__
         </div>
         

+ 2 - 1
modules/boonex/courses/classes/BxCoursesConfig.php

@@ -303,7 +303,8 @@ class BxCoursesConfig extends BxBaseModGroupsConfig
 
         $sHtmlPrefix = str_replace('_', '-', $this->_sName);
         $this->_aHtmlIds = [
-            'popup_content_node' => $sHtmlPrefix . '-popup-content-node'
+            'popup_content_node' => $sHtmlPrefix . '-popup-content-node',
+            'popup_content_data' => $sHtmlPrefix . '-popup-content-data',
         ];
     }
 

+ 13 - 0
modules/boonex/courses/classes/BxCoursesDb.php

@@ -351,6 +351,19 @@ class BxCoursesDb extends BxBaseModGroupsDb
                     $sWhereClause .= " AND `tcd`.`usage`=:usage";
                 }
                 break;
+                
+            case 'siblings':
+                $aMethod['name'] = 'getAllWithKey';
+                $aMethod['params'][1] = 'order';
+                $aMethod['params'][2] = [
+                    'entry_id' => $aParams['entry_id'],
+                    'node_id' => $aParams['node_id'],
+                    'usage' => $aParams['usage'],
+                    'order' => $aParams['order']
+                ];
+                $sWhereClause = "AND `tcd`.`entry_id`=:entry_id AND `tcd`.`node_id`=:node_id AND `tcd`.`usage`=:usage AND (`tcd`.`order`=(:order - 1) OR `tcd`.`order`=(:order + 1))";
+                $sOrderClause = "`tcd`.`order` ASC";
+                break;
 
             case 'user_passed':
                 $aMethod['name'] = 'getRow';

+ 6 - 2
modules/boonex/courses/classes/BxCoursesModule.php

@@ -145,7 +145,11 @@ class BxCoursesModule extends BxBaseModGroupsModule
         }
 
         $aResult = ['code' => 0];
-        if(($sMethod = 'get_link') && bx_is_srv($aData['content_type'], $sMethod))
+        if(($sMethod = 'get_view') && bx_is_srv($aData['content_type'], $sMethod)) {
+            $sView = bx_srv($aData['content_type'], $sMethod, [$aData['content_id']]);
+            $aResult = $this->_oTemplate->entryData($aData, $sView);
+        }
+        else if(($sMethod = 'get_link') && bx_is_srv($aData['content_type'], $sMethod))
             $aResult['redirect'] = bx_srv($aData['content_type'], $sMethod, [$aData['content_id']]);
 
         if($this->_bIsApi)
@@ -218,7 +222,7 @@ class BxCoursesModule extends BxBaseModGroupsModule
             'content_id' => $iContentId,
             'usage' => $iContextUsage,
             'added' => time(),
-            'order' => $this->_oDb->getContentDataOrderMax($iContextId, $iContextNodeId)
+            'order' => $this->_oDb->getContentDataOrderMax($iContextId, $iContextNodeId) + 1
         ]);
 
         $aNode = $this->_oDb->getContentNodes(['sample' => 'id', 'id' => $iContextNodeId]);

+ 49 - 0
modules/boonex/courses/classes/BxCoursesTemplate.php

@@ -465,6 +465,55 @@ class BxCoursesTemplate extends BxBaseModGroupsTemplate
         ];
     }
 
+    public function entryData($aData, $sView)
+    {
+        $sJsObject = $this->_oConfig->getJsObject('entry');
+
+        $aNode = $this->_oDb->getContentNodes([
+            'sample' => 'id', 
+            'id' => $aData['node_id']
+        ]);  
+
+        $iOrder = (int)$aData['order'];
+        $aSiblings = $this->_oDb->getContentData([
+            'sample' => 'siblings', 
+            'entry_id' => $aData['entry_id'], 
+            'node_id' => $aData['node_id'], 
+            'usage' => BX_COURSES_CND_USAGE_ST, 
+            'order' => $iOrder
+        ]);
+
+        $bTmplVarsBack = false;
+        $aTmplVarsBack = ($iOrderB = $iOrder - 1) && ($bTmplVarsBack = !empty($aSiblings[$iOrderB]) && is_array($aSiblings[$iOrderB])) ? [
+            'js_object' => $sJsObject,
+            'id_back' => $aSiblings[$iOrderB]['id']
+        ] : [true];
+
+        $bTmplVarsNext = false;
+        $aTmplVarsNext = ($iOrderN = $iOrder + 1) && ($bTmplVarsNext = !empty($aSiblings[$iOrderN]) && is_array($aSiblings[$iOrderN])) ? [
+            'js_object' => $sJsObject,
+            'id_next' => $aSiblings[$iOrderN]['id']
+        ] : [true];
+
+        return ['popup' => [
+            'html' => BxTemplFunctions::getInstance()->popupBox($this->_oConfig->getHtmlIds('popup_content_data'), $aNode['title'], $this->parseHtmlByName('node_data_view.html', [
+                'js_object' => $sJsObject,
+                'view' => $sView,
+                'bx_if:show_back' => [
+                    'condition' => $bTmplVarsBack,
+                    'content' => $aTmplVarsBack
+                ],
+                'bx_if:show_next' => [
+                    'condition' => $bTmplVarsNext,
+                    'content' => $aTmplVarsNext
+                ]
+            ]), true),
+            'options' => [
+                'onHide' => 'document.location = document.location'
+            ]
+        ]];
+    }
+
     protected function _entryNodeItems($iProfileId, $iContentId, $aNode, $iUsage)
     {
         $sJsObject = $this->_oConfig->getJsObject('entry');

+ 3 - 0
modules/boonex/courses/install/langs/en.xml

@@ -458,7 +458,10 @@
     <string name="_bx_courses_txt_data_type_bx_videos"><![CDATA[video]]></string>
     <string name="_bx_courses_txt_data_usage_0"><![CDATA[step]]></string>
     <string name="_bx_courses_txt_data_usage_1"><![CDATA[attachment]]></string>
+    <string name="_bx_courses_txt_back_step"><![CDATA[Back]]></string>
+    <string name="_bx_courses_txt_next_step"><![CDATA[Next]]></string>
     <string name="_bx_courses_txt_download"><![CDATA[Download]]></string>
+    
 
     <string name="_bx_courses_msg_performed"><![CDATA[The action was successfully performed.]]></string>
     <string name="_bx_courses_err_price_duplicate"><![CDATA[Similar pricing plan is already exists.]]></string>

+ 18 - 0
modules/boonex/courses/template/node_data_view.html

@@ -0,0 +1,18 @@
+<div class="bx-courses-node-data-view">
+    <div class="bx-courses-node-data-view-cnt px-2 pb-2">
+        <div class="bx-courses-ndv-view">__view__</div>
+        <div class="bx-courses-ndv-actions flex items-center mt-4">
+            <bx_if:show_back>
+                <div class="bx-courses-ndva-back">
+                    <a class="bx-btn bx-btn-small" href="javascript:void(0)" onclick="javascript:return __js_object__.passData(this, __id_back__);"><bx_text:_bx_courses_txt_back_step /></a>
+                </div>
+            </bx_if:show_back>
+            <div class="bx-courses-ndva-stretcher flex-1"></div>
+            <bx_if:show_next>
+                <div class="bx-courses-ndva-next">
+                    <a class="bx-btn bx-btn-small" href="javascript:void(0)" onclick="javascript:return __js_object__.passData(this, __id_next__);"><bx_text:_bx_courses_txt_next_step /></a>
+                </div>
+            </bx_if:show_next>
+        </div>
+    </div>
+</div>

+ 5 - 0
modules/boonex/photos/classes/BxPhotosModule.php

@@ -24,6 +24,11 @@ class BxPhotosModule extends BxBaseModFilesModule
         echo BxDolPage::getObjectInstance($this->_oConfig->CNF['OBJECT_PAGE_VIEW_ENTRY_BRIEF'], $this->_oTemplate)->getCodeDynamic();
     }
 
+    public function serviceGetView ($iContentId)
+    {
+        return $this->serviceEntityPhotoBlock($iContentId);
+    }
+
     public function serviceGetFile ($iContentId, $aParams = []) 
     {
         $CNF = &$this->_oConfig->CNF;

+ 2 - 0
modules/boonex/russian/data/langs/bx_courses/ru.xml

@@ -457,6 +457,8 @@
     <string name="_bx_courses_txt_data_type_bx_videos"><![CDATA[видео]]></string>
     <string name="_bx_courses_txt_data_usage_0"><![CDATA[шаг]]></string>
     <string name="_bx_courses_txt_data_usage_1"><![CDATA[вложение]]></string>
+    <string name="_bx_courses_txt_back_step"><![CDATA[Назад]]></string>
+    <string name="_bx_courses_txt_next_step"><![CDATA[Вперед]]></string>
     <string name="_bx_courses_txt_download"><![CDATA[Скачать]]></string>
 
     <string name="_bx_courses_msg_performed"><![CDATA[Действие было успешно выполнено.]]></string>