Parcourir la source

Ticket #4558 - Build-in API support: 'Bento grid' page block type.

AntonLV il y a 2 ans
Parent
commit
dd564d431d

+ 21 - 1
inc/classes/BxDolPageQuery.php

@@ -147,7 +147,27 @@ class BxDolPageQuery extends BxDolDb
             $sWhereClause .= " AND `content_id` = :content_id AND `content_module` = :content_module";
         }
 
-        return $this->getOne("SELECT `data` FROM `sys_pages_blocks_data` WHERE `block_id` = :block_id", $aBindings);
+        return $this->getOne("SELECT `data` FROM `sys_pages_blocks_data` WHERE `block_id` = :block_id" . $sWhereClause, $aBindings);
+    }
+    
+    public function setPageBlockData($iBlockId, $mixedData, $iContentId = 0, $sContentModule = '')
+    {
+        $aBindings = [
+            'block_id' => $iBlockId,
+            'data' => is_array($mixedData) ? json_encode($mixedData) : $mixedData
+        ];
+
+        $sWhereClause = "";
+        if(!empty($iContentId) && !empty($sContentModule)) {
+            $aBindings = array_merge($aBindings, [
+                'content_id' => $iContentId,
+                'content_module' => $sContentModule
+            ]);
+
+            $sWhereClause .= " AND `content_id` = :content_id AND `content_module` = :content_module";
+        }
+
+        return $this->query("UPDATE `sys_pages_blocks_data` SET `data` = :data WHERE `block_id` = :block_id" . $sWhereClause, $aBindings);
     }
 
     public function getPageBlockContent($iId)

+ 6 - 3
template/scripts/BxBasePage.php

@@ -681,7 +681,7 @@ class BxBasePage extends BxDolPage
                     continue;
                 }
 
-                $sFunc = '_getBlock' . ucfirst($aBlock['type']);
+                $sFunc = '_getBlock' . bx_gen_method_name($aBlock['type']);
                 $mBlock = method_exists($this, $sFunc) ? $this->$sFunc($aBlock) : $aBlock['content'];
 
                 $aCells[$sKey][$i] = array_merge($aCells[$sKey][$i], [
@@ -1102,13 +1102,16 @@ class BxBasePage extends BxDolPage
 
             $bIsAllowedEdit = false;
             if(!empty($sContentModule) && bx_is_srv($sContentModule, 'check_allowed_with_content'))
-                $bIsAllowedEdit = bx_srv($sContentModule, 'check_allowed_with_content', ['edit', $iContentId]);
+                $bIsAllowedEdit = bx_srv($sContentModule, 'check_allowed_with_content', ['edit', $iContentId]) === CHECK_ACTION_RESULT_ALLOWED;
             else
                 $bIsAllowedEdit = isAdmin();
 
+            $sData = $this->_oQuery->getPageBlockData($iBlockId, $iContentId, $sContentModule);
+            $aData = !empty($sData) ? json_decode($sData, true) : [];
+
             return [bx_api_get_block('bento_grid', [
                 'title' => _t($aBlock['title']), 
-                'content' => $this->_oQuery->getPageBlockData($iBlockId, $iContentId, $sContentModule)
+                'content' => $aData
             ], ['ext' => [
                 'block_id' => $iBlockId,
                 'content_id' => $iContentId,

+ 13 - 2
template/scripts/BxBaseServicePages.php

@@ -106,9 +106,20 @@ class BxBaseServicePages extends BxDol
         return $aRes;
     }
 
-    public function serviceSetPageBlockData($iBlockId, $aData, $iContentId = 0, $sContentModule = '')
+    public function serviceSetPageBlockData($iBlockId, $iContentId = 0, $sContentModule = '')
     {
-        
+        $oDb = new BxDolPageQuery([]);
+
+        $sData = @file_get_contents("php://input");
+        $aData = json_decode($sData, true);
+        if($aData === null)
+            return false;
+
+        $aParams = [$iBlockId, $sData];
+        if(!empty($iContentId) && !empty($sContentModule))
+            $aParams += [$iContentId, $sContentModule];
+
+        return call_user_func_array([$oDb, 'setPageBlockData'], $aParams);
     }
 }