Просмотр исходного кода

#4558 - Build-in API support (events & grids)

roman.lesnikov@gmail.com 2 лет назад
Родитель
Сommit
ab11e48319

+ 10 - 3
inc/classes/BxDolForm.php

@@ -1657,9 +1657,16 @@ class BxDolFormCheckerHelper
     }
     static public function checkDateTime ($s)
     {
-        // remove unnecessary opera's input value;
-        $s = str_replace('T', ' ', $s);
-        $s = str_replace('Z', ':00', $s);
+        
+        if (!bx_is_api()){
+            // remove unnecessary opera's input value;
+            $s = str_replace('T', ' ', $s);
+            $s = str_replace('Z', ':00', $s);
+        }
+        else{
+            // remove unnecessary opera's input value;
+            $s = str_replace('Z', '+00:00', $s);
+        }
 
         return self::checkPreg ($s, '#^\d+\-\d+\-\d+[\sT]{1}\d+:\d+(:\d+)?(\+\d+:\d+)?$#');
     }

+ 14 - 4
modules/base/groups/classes/BxBaseModGroupsGridQuestionsManage.php

@@ -33,6 +33,10 @@ class BxBaseModGroupsGridQuestionsManage extends BxTemplGrid
             $this->setProfileId($iGroupProfileId);
     }
 
+    function getFormCallBackUrlAPI($sAction, $iId = 0){
+         return '/api.php?r=system/perfom_action_api/TemplServiceGrid/&params[]=&o=' . $this->_sObject . '&profile_id=' . $this->_iGroupProfileId . '&a=' . $sAction . '&id=' . $iId;
+    }
+    
     public function setProfileId($iProfileId)
     {
         $this->_iGroupProfileId = (int)$iProfileId;
@@ -51,7 +55,7 @@ class BxBaseModGroupsGridQuestionsManage extends BxTemplGrid
     	$sAction = 'add';
 
         if(($mixedResult = $this->_oModule->checkAllowedEdit($this->_aGroupContentInfo)) !== CHECK_ACTION_RESULT_ALLOWED)
-            return echoJson(['msg' => $mixedResult]);
+             return bx_is_api() ? [bx_api_get_msg($mixedResult)] : echoJson(['msg' => $mixedResult]);
 
         $sForm = $CNF['OBJECT_FORM_QUESTION_DISPLAY_ADD'];
     	$oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_QUESTION'], $CNF['OBJECT_FORM_QUESTION_DISPLAY_ADD']);
@@ -67,9 +71,12 @@ class BxBaseModGroupsGridQuestionsManage extends BxTemplGrid
             else
                 $aResult = ['msg' => _t($CNF['T']['err_cannot_perform'])];
 
-            return echoJson($aResult);
+            return bx_is_api() ? [] : echoJson($aResult);
         }
 
+        if (bx_is_api())
+            return $this->getFormBlockAPI($oForm, $sAction);
+        
         bx_import('BxTemplFunctions');
         $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('popup_question'), _t($CNF['T']['popup_title_question_add']), $this->_oModule->_oTemplate->parseHtmlByName('popup_qnr_question.html', [
             'form_id' => $oForm->getId(),
@@ -88,7 +95,7 @@ class BxBaseModGroupsGridQuestionsManage extends BxTemplGrid
         $sAction = 'edit';
 
         if(($mixedResult = $this->_oModule->checkAllowedEdit($this->_aGroupContentInfo)) !== CHECK_ACTION_RESULT_ALLOWED)
-            return echoJson(['msg' => $mixedResult]);
+             return bx_is_api() ? [bx_api_get_msg($mixedResult)] : echoJson(['msg' => $mixedResult]);
 
         $aIds = $this->_getIds();
         if($aIds === false)
@@ -112,9 +119,12 @@ class BxBaseModGroupsGridQuestionsManage extends BxTemplGrid
             else
                 $aResult = ['msg' => _t($CNF['T']['err_cannot_perform'])];
 
-            return echoJson($aResult);
+            return bx_is_api() ? [] : echoJson($aResult);
         }
 
+        if (bx_is_api())
+            return $this->getFormBlockAPI($oForm, $sAction, $iItem);
+        
         bx_import('BxTemplFunctions');
         $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('popup_question'), _t($CNF['T']['popup_title_question_edit']), $this->_oModule->_oTemplate->parseHtmlByName('popup_qnr_question.html', [
             'form_id' => $oForm->getId(),

+ 17 - 6
modules/boonex/events/classes/BxEventsGridSessionsManage.php

@@ -33,6 +33,10 @@ class BxEventsGridSessionsManage extends BxTemplGrid
         if(($iEventProfileId = bx_get('profile_id')) !== false)
             $this->setProfileId($iEventProfileId);
     }
+    
+    function getFormCallBackUrlAPI($sAction, $iId = 0){
+         return '/api.php?r=system/perfom_action_api/TemplServiceGrid/&params[]=&o=' . $this->_sObject . '&profile_id=' . $this->_iEventProfileId . '&a=' . $sAction . '&id=' . $iId;
+    }
 
     public function setProfileId($iProfileId)
     {
@@ -44,7 +48,7 @@ class BxEventsGridSessionsManage extends BxTemplGrid
             $this->_aEventContentInfo = $this->_oModule->_oDb->getContentInfoById($this->_iEventContentId);
         }
     }
-
+    
     public function performActionAdd()
     {
     	$CNF = &$this->_oModule->_oConfig->CNF;
@@ -52,7 +56,7 @@ class BxEventsGridSessionsManage extends BxTemplGrid
     	$sAction = 'add';
 
         if(($mixedResult = $this->_oModule->checkAllowedEdit($this->_aEventContentInfo)) !== CHECK_ACTION_RESULT_ALLOWED)
-            return echoJson(['msg' => $mixedResult]);
+             return bx_is_api() ? [bx_api_get_msg($mixedResult)] : echoJson(['msg' => $mixedResult]);
 
         $sForm = $CNF['OBJECT_FORM_SESSION_DISPLAY_ADD'];
     	$oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_SESSION'], $CNF['OBJECT_FORM_SESSION_DISPLAY_ADD']);
@@ -68,9 +72,13 @@ class BxEventsGridSessionsManage extends BxTemplGrid
             else
                 $aResult = ['msg' => _t($CNF['T']['err_cannot_perform'])];
 
-            return echoJson($aResult);
+            return bx_is_api() ? [] : echoJson($aResult);
+
         }
 
+        if (bx_is_api())
+            return $this->getFormBlockAPI($oForm, $sAction);
+        
         bx_import('BxTemplFunctions');
         $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('popup_session'), _t('_bx_events_popup_title_sn_add'), $this->_oModule->_oTemplate->parseHtmlByName('popup_session.html', [
             'form_id' => $oForm->getId(),
@@ -78,7 +86,7 @@ class BxEventsGridSessionsManage extends BxTemplGrid
             'object' => $this->_sObject,
             'action' => $sAction
         ]));
-
+        
         echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
     }
 
@@ -89,7 +97,7 @@ class BxEventsGridSessionsManage extends BxTemplGrid
         $sAction = 'edit';
 
         if(($mixedResult = $this->_oModule->checkAllowedEdit($this->_aEventContentInfo)) !== CHECK_ACTION_RESULT_ALLOWED)
-            return echoJson(['msg' => $mixedResult]);
+             return bx_is_api() ? [bx_api_get_msg($mixedResult)] : echoJson(['msg' => $mixedResult]);
 
         $aIds = $this->_getIds();
         if($aIds === false)
@@ -113,8 +121,11 @@ class BxEventsGridSessionsManage extends BxTemplGrid
             else
                 $aResult = ['msg' => _t($CNF['T']['err_cannot_perform'])];
 
-            return echoJson($aResult);
+            return bx_is_api() ? [] : echoJson($aResult);
         }
+        
+        if (bx_is_api())
+            return $this->getFormBlockAPI($oForm, $sAction, $iItem);
 
         bx_import('BxTemplFunctions');
         $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('popup_session'), _t('_bx_events_popup_title_sn_edit'), $this->_oModule->_oTemplate->parseHtmlByName('popup_session.html', [

+ 4 - 0
template/scripts/BxBaseFormView.php

@@ -369,6 +369,10 @@ class BxBaseFormView extends BxDolForm
                     $aInput['values_src'] = '';
                 }
                 
+                if (isset($aInput['type']) && 'block_header' == $aInput['type']){
+                    $aInput['name'] = $key;
+                }
+                
                 if (isset($aInput['type']) && 'block_header' == $aInput['type']){
                     $aInput['name'] = $key;
                 }

+ 36 - 3
template/scripts/BxBaseGrid.php

@@ -336,7 +336,7 @@ class BxBaseGrid extends BxDolGrid
                 'query_append' => $aQueryAppend
             ],
             'header' => $this->_getRowHeadAPI(),
-            'data' => $aData,
+            'data' => defined('BX_API_PAGE') ? [] : $aData,
             'actions' => [
                 'independent' => $this->_getActionsAPI('independent'), 
                 'bulk' => $this->_getActionsAPI('bulk')
@@ -367,6 +367,19 @@ class BxBaseGrid extends BxDolGrid
         }
         return $aDataRv;
     }
+    
+    function getFormBlockAPI($oForm, $sAction, $iId = 0){
+        return [
+            bx_api_get_block(
+                'form', 
+                $oForm->getCodeAPI(), 
+                ['ext' => [
+                    'name' => $this->_oModule->getName(), 
+                    'request' => ['url' => $this->getFormCallBackUrlAPI($sAction, $iId), 'immutable' => true]]
+                ]
+            )
+        ];
+    }
 
     /**
      * Reset query params, like filter and page number
@@ -717,6 +730,17 @@ 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'] = '';
+            }
+        }
         return $this->_aOptions[$sActionsType];
     }
 
@@ -730,11 +754,20 @@ 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)
-            return array_merge($a, ['name' => $sKey, 'type' => 'callback']);
+        if ($this->_bIsApi){
+            $sFunc = '_getAction' . $this->_genMethodName($sType . '_' . $sKey);
+            if (method_exists($this, $sFunc)){
+                return array_merge($a, ['name' => $sKey], $this->$sFunc($a, ['id'=> $aRow[$this->_aOptions['field_id']]]));
+            }
+            else{
+                return array_merge($a, ['name' => $sKey, 'type' => 'modal', 'action' => $sKey, 'params' => '&id=' . $aRow[$this->_aOptions['field_id']] ]);
+            }
+            
+        }
 
         $sAttr = $this->_convertAttrs(
             $a, 'attr',

+ 2 - 2
template/scripts/BxBaseServiceGrid.php

@@ -20,7 +20,7 @@ class BxBaseServiceGrid extends BxDol
 
         $oGrid = BxDolGrid::getObjectInstance($sObject);
         if(!$oGrid)
-            return [];
+            return ['grid not found'];
 
         $sAction = '';
         if(!empty($aParams['action']))
@@ -30,7 +30,7 @@ class BxBaseServiceGrid extends BxDol
 
         $sMethod = 'performAction' . bx_gen_method_name($sAction);
         if(!method_exists($oGrid, $sMethod)) 
-            return [];
+            return ['method not found'];
 
         return $oGrid->$sMethod();       
     }