Jelajahi Sumber

Ticket #4558 - Build-in API support: Courses.

AntonLV 2 tahun lalu
induk
melakukan
6c545e348b

+ 39 - 1
modules/boonex/courses/classes/BxCoursesGridCntDataManage.php

@@ -124,7 +124,7 @@ class BxCoursesGridCntDataManage extends BxTemplGrid
     protected function _getActionBack($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = [])
     {
         if(empty($this->_aNodeInfo))
-            return '';
+            return $this->_bIsApi ? [] : '';
 
         $sUrl = $this->_sPageUrl;
         if(!empty($this->_aNodeInfo['parent_id']))
@@ -139,6 +139,9 @@ class BxCoursesGridCntDataManage extends BxTemplGrid
 
     protected function _getActionAddSt($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = [])
     {
+        if($this->_bIsApi)
+            return array_merge($a, ['name' => $sKey, 'type' => 'modal', 'action' => $sKey, 'values' => $this->_getValues(BX_COURSES_CND_USAGE_ST)]);
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         $a['attr'] = array_merge($a['attr'], [
@@ -149,6 +152,9 @@ class BxCoursesGridCntDataManage extends BxTemplGrid
 
     protected function _getActionAddAt($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = [])
     {
+        if($this->_bIsApi)
+            return array_merge($a, ['name' => $sKey, 'type' => 'modal', 'action' => $sKey, 'values' => $this->_getValues(BX_COURSES_CND_USAGE_AT)]);
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         $a['attr'] = array_merge($a['attr'], [
@@ -193,6 +199,38 @@ class BxCoursesGridCntDataManage extends BxTemplGrid
 
         return $aIds;
     }
+
+    protected function _getValues($iUsage)
+    {
+        $aValues = [];
+        $oPermalink = BxDolPermalinks::getInstance();
+
+        $aModules = $this->_oModule->_oConfig->getContentModules($iUsage);
+        foreach($aModules as $sModule) {
+            $oModule = BxDolModule::getInstance($sModule);
+            if(!$oModule)
+                continue;
+
+            $CNF = &$oModule->_oConfig->CNF;
+            if(!isset($CNF['URI_ADD_ENTRY']))
+                continue;
+
+            $aParams = [
+                'context_pid' => $this->_iEntryPid,
+                'context_nid' => $this->_iNodeId,
+                'context_usage' => $iUsage
+            ];
+
+            $aValues[] = [
+                'key' => $sModule, 
+                'title' => _t('_' . $sModule),
+                'link' => bx_api_get_relative_url(BX_DOL_URL_ROOT . $oPermalink->permalink('page.php?i=' . $CNF['URI_ADD_ENTRY'], $aParams)), 
+                'callback' => $sModule . '/entity_create/&params[]=' . json_encode($aParams)
+            ];
+        }
+
+        return $aValues;
+    }
 }
 
 /** @} */

+ 6 - 1
modules/boonex/courses/classes/BxCoursesTemplate.php

@@ -476,6 +476,7 @@ class BxCoursesTemplate extends BxBaseModGroupsTemplate
         ]);
 
         $sTxtUndefined = _t('_undefined');
+        $sTxtPass = _t('_bx_courses_txt_pass');
 
         $aResults = [];
         if(!empty($aDataItems) && is_array($aDataItems))
@@ -494,7 +495,8 @@ class BxCoursesTemplate extends BxBaseModGroupsTemplate
                     $aTmplVarsPass = [
                         'js_object' => $sJsObject,
                         'id' => $aDataItem['id'],
-                        'link' => $sLink
+                        'link' => $sLink,
+                        'title' => $sTxtPass
                     ];
                 }
 
@@ -520,12 +522,15 @@ class BxCoursesTemplate extends BxBaseModGroupsTemplate
                         $sText = bx_srv($aDataItem['content_type'], $sMethod, [$aDataItem['content_id']]);
 
                     $aResults[] = [
+                        'id' => $aDataItem['id'],
                         'type' => $sType,
                         'title' => $sTitle,
                         'text' => $sText,
                         'image' => $sImageUrl,
                         'link_view' => $bTmplVarsShowLink ? bx_api_get_relative_url($sLink) : '',
                         'link_pass' => $bTmplVarsPass ? bx_api_get_relative_url($sLink) : '',
+                        'link_title' => $sTxtPass,
+                        'status' => '???' //TODO: Some status is needed. Ask Roman.
                     ];
                 }
                 else 

+ 3 - 3
modules/boonex/courses/install/sql/enable.sql

@@ -662,10 +662,10 @@ INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `fie
 ('bx_courses_cnt_data_manage', 'Sql', 'SELECT * FROM `bx_courses_content_data` WHERE 1 ', 'bx_courses_content_data', 'id', 'order', '', '', 20, NULL, 'start', '', '', '', 'like', '', '', 2147483647, 'BxCoursesGridCntDataManage', 'modules/boonex/courses/classes/BxCoursesGridCntDataManage.php');
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
-('bx_courses_cnt_data_manage', 'order', '', '1%', 0, 0, '', 1),
-('bx_courses_cnt_data_manage', 'checkbox', '_sys_select', '2%', 0, 0, '', 2),
+('bx_courses_cnt_data_manage', 'order', '', '4%', 0, 0, '', 1),
+('bx_courses_cnt_data_manage', 'checkbox', '_sys_select', '4%', 0, 0, '', 2),
 ('bx_courses_cnt_data_manage', 'content_id', '_bx_courses_grid_column_title_cnt_content_id', '42%', 0, 0, '', 3),
-('bx_courses_cnt_data_manage', 'content_type', '_bx_courses_grid_column_title_cnt_content_type', '15%', 0, 0, '', 4),
+('bx_courses_cnt_data_manage', 'content_type', '_bx_courses_grid_column_title_cnt_content_type', '10%', 0, 0, '', 4),
 ('bx_courses_cnt_data_manage', 'usage', '_bx_courses_grid_column_title_cnt_usage', '10%', 0, 0, '', 5),
 ('bx_courses_cnt_data_manage', 'added', '_bx_courses_grid_column_title_cnt_added', '10%', 0, 0, '', 6),
 ('bx_courses_cnt_data_manage', 'actions', '', '20%', 0, '', '', 7);

+ 1 - 1
modules/boonex/courses/template/node_view.html

@@ -23,7 +23,7 @@
                     </div>
                     <div class="bx-courses-ni-action flex items-center">
                         <bx_if:show_pass>
-                            <a class="bx-btn bx-btn-small" href="__link__" onclick="javascript:return __js_object__.passData(this, __id__);"><bx_text:_bx_courses_txt_pass /></a>
+                            <a class="bx-btn bx-btn-small" href="__link__" onclick="javascript:return __js_object__.passData(this, __id__);">__title__</a>
                         </bx_if:show_pass>
                     </div>
                 </div>

+ 15 - 24
template/scripts/BxBaseGrid.php

@@ -751,19 +751,18 @@ class BxBaseGrid extends BxDolGrid
         if(empty($this->_aOptions[$sActionsType]) || !is_array($this->_aOptions[$sActionsType]))
             return [];
 
-        
-        
-        foreach ($this->_aOptions[$sActionsType] as $sKey => $aAction){
-            $sFunc = '_getAction' . $this->_genMethodName($sType . '_' . $sKey);
-            if (method_exists($this, $sFunc)){
-                $this->_aOptions[$sActionsType][$sKey] = $this->$sFunc($aAction);
-            }
-            else{
-                $this->_aOptions[$sActionsType][$sKey]['type'] = 'modal';
-                $this->_aOptions[$sActionsType][$sKey]['action'] = $sKey;
-                $this->_aOptions[$sActionsType][$sKey]['params'] = '';
-            }
+        foreach ($this->_aOptions[$sActionsType] as $sKey => $aAction) {
+            $sMethod = '_getAction' . $this->_genMethodName($sKey);
+            if(!method_exists($this, $sMethod))
+                $sMethod = '_getActionDefault';
+
+            if(!isset($aAction['attr']))
+                $aAction['attr'] = [];
+
+            if(($_aAction = $this->$sMethod($sType, $sKey, $aAction)))
+                $this->_aOptions[$sActionsType][$sKey] = $_aAction;
         }
+
         return $this->_aOptions[$sActionsType];
     }
 
@@ -777,23 +776,15 @@ class BxBaseGrid extends BxDolGrid
 
     protected function _getActionDefault ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
-        
         if ($a['icon_only'] && empty($a['attr']['title']) && !empty($a['title']))
             $a['attr']['title'] = $a['title'];
 
         if ($this->_bIsApi) {
-            $sFunc = '_getAction' . $this->_genMethodName($sType . '_' . $sKey);
-            if (method_exists($this, $sFunc)) {
-                $aAction = $this->$sFunc($a, ['id'=> $aRow[$this->_aOptions['field_id']]]);
-                if(empty($aAction) || !is_array($aAction))
-                    return [];
+            $sParams = '';
+            if($sType == 'single' && ($sFieldId = $this->_aOptions['field_id']) && isset($aRow[$sFieldId]))
+                $sParams = '&id=' . $aRow[$sFieldId];
 
-                return array_merge($a, ['name' => $sKey], $aAction);
-            }
-            else {
-                return array_merge($a, ['name' => $sKey, 'type' => 'modal', 'action' => $sKey, 'params' => '&id=' . $aRow[$this->_aOptions['field_id']] ]);
-            }
-            
+            return array_merge($a, ['name' => $sKey, 'type' => 'modal', 'action' => $sKey, 'params' => $sParams]);
         }
 
         $sAttr = $this->_convertAttrs(