AntonLV 1 год назад
Родитель
Сommit
2396d43e15

+ 1 - 0
modules/boonex/reputation/classes/BxReputationConfig.php

@@ -36,6 +36,7 @@ class BxReputationConfig extends BxBaseModNotificationsConfig
             'PARAM_MULTILEVEL' => 'bx_reputation_enable_multilevel',
             'PARAM_MULTILEVEL' => 'bx_reputation_enable_multilevel',
             'PARAM_LEADERBOARD_LIMIT' => 'bx_reputation_leaderboard_limit',
             'PARAM_LEADERBOARD_LIMIT' => 'bx_reputation_leaderboard_limit',
             'PARAM_HISTORY_LIMIT' => 'bx_reputation_history_limit',
             'PARAM_HISTORY_LIMIT' => 'bx_reputation_history_limit',
+            'PARAM_ACTIONS_LIMIT' => 'bx_reputation_actions_limit',
 
 
             // objects
             // objects
             'OBJECT_FORM_HANDLER' => 'bx_reputation_handler',
             'OBJECT_FORM_HANDLER' => 'bx_reputation_handler',

+ 22 - 2
modules/boonex/reputation/classes/BxReputationDb.php

@@ -285,7 +285,7 @@ class BxReputationDb extends BxBaseModNotificationsDb
     {
     {
         $aMethod = ['name' => 'getAll', 'params' => [0 => 'query']];
         $aMethod = ['name' => 'getAll', 'params' => [0 => 'query']];
         $sSelectClause = '*';
         $sSelectClause = '*';
-        $sWhereClause = '';
+        $sWhereClause = $sOrderClause = $sLimitClause = '';
 
 
         if(!empty($aParams))
         if(!empty($aParams))
             switch($aParams['type']) {
             switch($aParams['type']) {
@@ -296,11 +296,31 @@ class BxReputationDb extends BxBaseModNotificationsDb
                     $sSelectClause = 'DISTINCT `alert_unit`';
                     $sSelectClause = 'DISTINCT `alert_unit`';
                     break;
                     break;
 
 
+                case 'all':
+                    if(isset($aParams['active'])) {
+                        $aMethod['params'][1] = [
+                            'active' => (int)$aParams['active'] ? 1 : 0
+                        ];
+
+                        $sWhereClause = "AND `active` = :active";
+                    }
+
+                    $sOrderClause = "`group` ASC, `type` ASC";
+                    if(isset($aParams['start'], $aParams['limit']))
+                        $sLimitClause = $aParams['start'] . ', ' . $aParams['limit'];
+                    break;
+
                 default:
                 default:
                     return parent::getHandlers($aParams);
                     return parent::getHandlers($aParams);
             }
             }
 
 
-        $aMethod['params'][0] = "SELECT " . $sSelectClause . " FROM `{$this->_sTableHandlers}` WHERE 1 " . $sWhereClause;
+        if($sOrderClause)
+            $sOrderClause = "ORDER BY " . $sOrderClause;
+
+        if($sLimitClause)
+            $sLimitClause = "LIMIT " . $sLimitClause;
+
+        $aMethod['params'][0] = "SELECT " . $sSelectClause . " FROM `{$this->_sTableHandlers}` WHERE 1 " . $sWhereClause . " " . $sOrderClause . " " . $sLimitClause;
         return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
         return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
     }
     }
 }
 }

+ 13 - 3
modules/boonex/reputation/classes/BxReputationModule.php

@@ -56,10 +56,15 @@ class BxReputationModule extends BxBaseModNotificationsModule
             'profile_id' => $iProfileId
             'profile_id' => $iProfileId
         ]);
         ]);
     }
     }
-    
-    public function serviceGetBlockPoints()
+
+    public function serviceGetBlockActions($iStart = 0, $iLimit = 0)
     {
     {
-        return 'TODO: Block with Unit + Action --- points';
+        if(($iGetStart = bx_get('start')) !== false)
+            $iStart = (int)$iGetStart;
+        if(($iGetPerPage = bx_get('per_page')) !== false)
+            $iLimit = (int)$iGetPerPage;
+
+        return $this->_oTemplate->getBlockActions($iStart, $iLimit);
     }
     }
 
 
     public function serviceGetBlockLevels()
     public function serviceGetBlockLevels()
@@ -84,6 +89,11 @@ class BxReputationModule extends BxBaseModNotificationsModule
         if(!$iProfileId)
         if(!$iProfileId)
             return false;
             return false;
 
 
+        if(($iGetStart = bx_get('start')) !== false)
+            $iStart = (int)$iGetStart;
+        if(($iGetPerPage = bx_get('per_page')) !== false)
+            $iLimit = (int)$iGetPerPage;
+
         return $this->_oTemplate->getBlockHistory($iProfileId, $iStart, $iLimit);
         return $this->_oTemplate->getBlockHistory($iProfileId, $iStart, $iLimit);
     }
     }
 
 

+ 59 - 3
modules/boonex/reputation/classes/BxReputationTemplate.php

@@ -16,6 +16,54 @@ class BxReputationTemplate extends BxBaseModNotificationsTemplate
         parent::__construct($oConfig, $oDb);
         parent::__construct($oConfig, $oDb);
     }
     }
 
 
+    public function getBlockActions($iStart = 0, $iLimit = 0)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        if(!$iLimit)
+            $iLimit = (int)getParam($CNF['PARAM_ACTIONS_LIMIT']);
+
+        $aHandlers = $this->_oDb->getHandlers([
+            'type' => 'all', 
+            'active' => true,
+            'start' => $iStart,
+            'limit' => $iLimit + 1
+        ]);
+
+        $aTmplVarsActions = [];
+        foreach($aHandlers as $aHandler) {
+            $aTmplVarsActions[] = [
+                'action' => _t('_bx_reputation_txt_unit_action_value', $this->_oModule->getUnitTitle($aHandler['alert_unit']), $this->_oModule->getActionTitle($aHandler['alert_action'])),
+                'points_active' => ($iPa = (int)$aHandler['points_active']) > 0 ? '+' . $iPa : '-' . abs($iPa),
+                'points_passive' => ($iPp = (int)$aHandler['points_passive']) > 0 ? '+' . $iPp : '-' . abs($iPp)
+            ];
+        }
+
+        if($this->_bIsApi)
+            return [
+                bx_api_get_block('reputation_actions', $aTmplVarsActions)
+            ];
+
+        $oPaginate = new BxTemplPaginate([
+            'start' => $iStart,
+            'per_page' => $iLimit,
+            'on_change_page' => "return !loadDynamicBlockAutoPaginate(this, '{start}', '{per_page}')"
+        ]);
+        $oPaginate->setNumFromDataArray($aTmplVarsActions);
+        $sPaginate = $oPaginate->getSimplePaginate();
+
+        $this->addCss(['main.css']);
+        return $this->parseHtmlByName('block_actions.html', [
+            'bx_repeat:actions' => $aTmplVarsActions,
+            'bx_if:show_paginate' => [
+                'condition' => !empty($sPaginate),
+                'content' => [
+                    'paginate' => $sPaginate
+                ]
+            ]
+        ]);
+    }
+
     public function getBlockLevels()
     public function getBlockLevels()
     {
     {
         $oFunctions = BxTemplFunctions::getInstance();
         $oFunctions = BxTemplFunctions::getInstance();
@@ -62,6 +110,11 @@ class BxReputationTemplate extends BxBaseModNotificationsTemplate
             ]));
             ]));
         }
         }
 
 
+        if($this->_bIsApi)
+            return [
+                bx_api_get_block('reputation_levels', $aTmplVarsLevels)
+            ];
+
         return $this->parseHtmlByName('block_levels.html', [
         return $this->parseHtmlByName('block_levels.html', [
             'bx_repeat:levels' => $aTmplVarsLevels
             'bx_repeat:levels' => $aTmplVarsLevels
         ]);
         ]);
@@ -158,13 +211,15 @@ class BxReputationTemplate extends BxBaseModNotificationsTemplate
             $aTmplVarsItems[] = [
             $aTmplVarsItems[] = [
                 'unit' => $oModule->getUnitTitle($aItem['type']),
                 'unit' => $oModule->getUnitTitle($aItem['type']),
                 'action' => $oModule->getActionTitle($aItem['action']),
                 'action' => $oModule->getActionTitle($aItem['action']),
-                'points' => ($iPoints = (int)$aItem['points']) > 0 ? '+' . $iPoints : $iPoints,
-                'date' => bx_time_js($aItem['date'])
+                'points' => ($iPoints = (int)$aItem['points']) > 0 ? '+' . $iPoints : '-' . abs($iPoints),
+                'date' => $this->_bIsApi ? $aItem['date'] : bx_time_js($aItem['date'])
             ];
             ];
         }
         }
 
 
         if($this->_bIsApi)
         if($this->_bIsApi)
-            return $aTmplVarsItems;
+            return [
+                bx_api_get_block('reputation_history', $aTmplVarsItems)
+            ];
 
 
         $oPaginate = new BxTemplPaginate([
         $oPaginate = new BxTemplPaginate([
             'start' => $iStart,
             'start' => $iStart,
@@ -174,6 +229,7 @@ class BxReputationTemplate extends BxBaseModNotificationsTemplate
         $oPaginate->setNumFromDataArray($aTmplVarsItems);
         $oPaginate->setNumFromDataArray($aTmplVarsItems);
         $sPaginate = $oPaginate->getSimplePaginate();
         $sPaginate = $oPaginate->getSimplePaginate();
 
 
+        $this->addCss(['main.css']);
         return $this->parseHtmlByName('block_history.html', [
         return $this->parseHtmlByName('block_history.html', [
             'bx_repeat:items' => $aTmplVarsItems,
             'bx_repeat:items' => $aTmplVarsItems,
             'bx_if:show_paginate' => [
             'bx_if:show_paginate' => [

+ 7 - 0
modules/boonex/reputation/install/langs/en.xml

@@ -6,6 +6,7 @@
     <string name="_bx_reputation_option_enable_multilevel"><![CDATA[Enable the ability to have multiple levels at the same time]]></string>
     <string name="_bx_reputation_option_enable_multilevel"><![CDATA[Enable the ability to have multiple levels at the same time]]></string>
     <string name="_bx_reputation_option_leaderboard_limit"><![CDATA[Number of items in leaderboard]]></string>
     <string name="_bx_reputation_option_leaderboard_limit"><![CDATA[Number of items in leaderboard]]></string>
     <string name="_bx_reputation_option_history_limit"><![CDATA[Number of items per page in points history]]></string>
     <string name="_bx_reputation_option_history_limit"><![CDATA[Number of items per page in points history]]></string>
+    <string name="_bx_reputation_option_actions_limit"><![CDATA[Number of items per page in actions list]]></string>
 
 
     <!-- Forms -->
     <!-- Forms -->
     <string name="_bx_reputation_form_handler"><![CDATA[Handler]]></string>
     <string name="_bx_reputation_form_handler"><![CDATA[Handler]]></string>
@@ -50,6 +51,7 @@
     <string name="_bx_reputation_form_input_err"><![CDATA[The field is essential. Please, fill it in.]]></string>
     <string name="_bx_reputation_form_input_err"><![CDATA[The field is essential. Please, fill it in.]]></string>
 
 
     <!-- Pages -->
     <!-- Pages -->
+    <string name="_bx_reputation_page_block_title_actions"><![CDATA[Actions]]></string>
     <string name="_bx_reputation_page_block_title_levels"><![CDATA[Levels]]></string>
     <string name="_bx_reputation_page_block_title_levels"><![CDATA[Levels]]></string>
     <string name="_bx_reputation_page_title_sys_leaderboard"><![CDATA[Leaderboard]]></string>
     <string name="_bx_reputation_page_title_sys_leaderboard"><![CDATA[Leaderboard]]></string>
     <string name="_bx_reputation_page_title_leaderboard"><![CDATA[Leaderboard]]></string>
     <string name="_bx_reputation_page_title_leaderboard"><![CDATA[Leaderboard]]></string>
@@ -97,6 +99,11 @@
     <!-- Other -->
     <!-- Other -->
     <string name="_bx_reputation_txt_points"><![CDATA[points]]></string>
     <string name="_bx_reputation_txt_points"><![CDATA[points]]></string>
     <string name="_bx_reputation_txt_from_to"><![CDATA[{0}]]></string>
     <string name="_bx_reputation_txt_from_to"><![CDATA[{0}]]></string>
+    <string name="_bx_reputation_txt_unit_action"><![CDATA[Action]]></string>
+    <string name="_bx_reputation_txt_unit_action_value"><![CDATA[{0}: {1}]]></string>
+    <string name="_bx_reputation_txt_points_active"><![CDATA[Points (active)*]]></string>
+    <string name="_bx_reputation_txt_points_passive"><![CDATA[Points (passive)**]]></string>
+    <string name="_bx_reputation_txt_actions_legend"><![CDATA[<b>*</b> - actions you've performed<br /><b>**</b> - actions performed by somebody else with your profile and/or content]]></string>
 
 
     <string name="_bx_reputation_txt_au_sys_profiles_friends"><![CDATA[Friendship]]></string>
     <string name="_bx_reputation_txt_au_sys_profiles_friends"><![CDATA[Friendship]]></string>
     <string name="_bx_reputation_txt_au_sys_profiles_subscriptions"><![CDATA[Following]]></string>
     <string name="_bx_reputation_txt_au_sys_profiles_subscriptions"><![CDATA[Following]]></string>

+ 4 - 2
modules/boonex/reputation/install/sql/enable.sql

@@ -14,7 +14,8 @@ SET @iCategId = LAST_INSERT_ID();
 INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
 INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
 ('bx_reputation_enable_multilevel', '', @iCategId, '_bx_reputation_option_enable_multilevel', 'checkbox', '', '', '', 1),
 ('bx_reputation_enable_multilevel', '', @iCategId, '_bx_reputation_option_enable_multilevel', 'checkbox', '', '', '', 1),
 ('bx_reputation_leaderboard_limit', '10', @iCategId, '_bx_reputation_option_leaderboard_limit', 'digit', '', '', '', 11),
 ('bx_reputation_leaderboard_limit', '10', @iCategId, '_bx_reputation_option_leaderboard_limit', 'digit', '', '', '', 11),
-('bx_reputation_history_limit', '20', @iCategId, '_bx_reputation_option_history_limit', 'digit', '', '', '', 13);
+('bx_reputation_history_limit', '20', @iCategId, '_bx_reputation_option_history_limit', 'digit', '', '', '', 13),
+('bx_reputation_actions_limit', '20', @iCategId, '_bx_reputation_option_actions_limit', 'digit', '', '', '', 15);
 
 
 
 
 -- PAGE: leaderboard
 -- PAGE: leaderboard
@@ -48,7 +49,8 @@ INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `
 -- PAGE: service blocks
 -- PAGE: service blocks
 SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = '' AND `cell_id` = 0 ORDER BY `order` DESC LIMIT 1);
 SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = '' AND `cell_id` = 0 ORDER BY `order` DESC LIMIT 1);
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
-('', 0, @sName, '', '_bx_reputation_page_block_title_levels', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:13:"bx_reputation";s:6:"method";s:16:"get_block_levels";}', 0, 1, IFNULL(@iBlockOrder, 0) + 1);
+('', 0, @sName, '', '_bx_reputation_page_block_title_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:13:"bx_reputation";s:6:"method";s:17:"get_block_actions";}', 0, 1, IFNULL(@iBlockOrder, 0) + 1),
+('', 0, @sName, '', '_bx_reputation_page_block_title_levels', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:13:"bx_reputation";s:6:"method";s:16:"get_block_levels";}', 0, 1, IFNULL(@iBlockOrder, 0) + 2);
 
 
 
 
 -- MENU: add to site menu
 -- MENU: add to site menu

+ 20 - 0
modules/boonex/reputation/template/block_actions.html

@@ -0,0 +1,20 @@
+<div class="bx-reputation-actions">
+    <div class="bx-reputation-a-items">
+        <div class="bx-reputation-a-item flex items-center w-full mt-2 first:mt-0 font-semibold">
+            <div class="bx-reputation-ai-action flex-1"><bx_text:_bx_reputation_txt_unit_action /></div>
+            <div class="bx-reputation-ai-points-active w-1/5 text-center"><bx_text:_bx_reputation_txt_points_active /></div>
+            <div class="bx-reputation-ai-points-passive w-1/5 text-center"><bx_text:_bx_reputation_txt_points_passive /></div>
+        </div>
+        <bx_repeat:actions>
+            <div class="bx-reputation-a-item flex items-center w-full mt-2 first:mt-0">
+                <div class="bx-reputation-ai-action flex-1">__action__</div>
+                <div class="bx-reputation-ai-points-active w-1/5 text-xl text-center">__points_active__</div>
+                <div class="bx-reputation-ai-points-passive w-1/5 text-xl text-center">__points_passive__</div>
+            </div>
+        </bx_repeat:actions>
+    </div>
+</div>
+<div class="bx-reputation-a-footer mt-4 flex justify-between items-center">
+    <div class="bx-reputation-af-legend bx-def-font-meta"><bx_text:_bx_reputation_txt_actions_legend /></div>
+    <bx_if:show_paginate>__paginate__</bx_if:show_paginate>
+</div>

+ 1 - 1
modules/boonex/reputation/template/block_history.html

@@ -9,6 +9,6 @@
         </bx_repeat:items>
         </bx_repeat:items>
     </div>
     </div>
     <bx_if:show_paginate>
     <bx_if:show_paginate>
-        <div class="bx-reputation-h-paginate mt-4">__paginate__</div>
+        <div class="bx-reputation-h-footer mt-4">__paginate__</div>
     </bx_if:show_paginate>
     </bx_if:show_paginate>
 </div>
 </div>

+ 1 - 0
modules/boonex/reputation/template/css/handlers.css

@@ -1,3 +1,4 @@
+/*--- Studio: Handlers manager ---*/
 div.bx-grid-header div.bx-form-element-wrapper {
 div.bx-grid-header div.bx-form-element-wrapper {
     position: relative;
     position: relative;
     float: left;
     float: left;

+ 4 - 1
modules/boonex/reputation/template/css/levels.css

@@ -1,3 +1,4 @@
+/*--- Studio: Levels manager ---*/
 .bx-reputation-level-icon {
 .bx-reputation-level-icon {
     display: inline-block;
     display: inline-block;
     width: 1.5rem;
     width: 1.5rem;
@@ -7,4 +8,6 @@ i.bx-reputation-level-icon {
     text-align: center;
     text-align: center;
     line-height: 1.5rem;
     line-height: 1.5rem;
     font-size: 1.0rem;
     font-size: 1.0rem;
-}
+}
+
+/*--- User End: Levels list  ---*/

+ 11 - 1
modules/boonex/reputation/template/css/main.css

@@ -2,4 +2,14 @@
 .bx-reputation-leaderboard .bx-base-pofile-unit {
 .bx-reputation-leaderboard .bx-base-pofile-unit {
     width: auto;
     width: auto;
     margin: 0;
     margin: 0;
-}
+}
+
+/*--- History ---*/
+.bx-reputation-h-footer .bx-paginate {
+    justify-content: flex-end;
+}
+
+/*--- Actions ---*/
+.bx-reputation-a-footer .bx-paginate {
+    justify-content: flex-end;
+}

+ 7 - 0
modules/boonex/russian/data/langs/bx_reputation/ru.xml

@@ -6,6 +6,7 @@
     <string name="_bx_reputation_option_enable_multilevel"><![CDATA[Включить возможность иметь несколько уровней одновременно]]></string>
     <string name="_bx_reputation_option_enable_multilevel"><![CDATA[Включить возможность иметь несколько уровней одновременно]]></string>
     <string name="_bx_reputation_option_leaderboard_limit"><![CDATA[Количество элементов в таблице лидеров]]></string>
     <string name="_bx_reputation_option_leaderboard_limit"><![CDATA[Количество элементов в таблице лидеров]]></string>
     <string name="_bx_reputation_option_history_limit"><![CDATA[Количество элементов на странице в истории баллов]]></string>
     <string name="_bx_reputation_option_history_limit"><![CDATA[Количество элементов на странице в истории баллов]]></string>
+    <string name="_bx_reputation_option_actions_limit"><![CDATA[Количество элементов на странице в списке действий]]></string>
 
 
     <!-- Forms -->
     <!-- Forms -->
     <string name="_bx_reputation_form_handler"><![CDATA[Обработчик]]></string>
     <string name="_bx_reputation_form_handler"><![CDATA[Обработчик]]></string>
@@ -47,6 +48,7 @@
     <string name="_bx_reputation_form_input_err"><![CDATA[Поле обязательно. Пожалуйста, заполните его.]]></string>
     <string name="_bx_reputation_form_input_err"><![CDATA[Поле обязательно. Пожалуйста, заполните его.]]></string>
 
 
     <!-- Pages -->
     <!-- Pages -->
+    <string name="_bx_reputation_page_block_title_actions"><![CDATA[Действия]]></string>
     <string name="_bx_reputation_page_block_title_levels"><![CDATA[Уровни]]></string>
     <string name="_bx_reputation_page_block_title_levels"><![CDATA[Уровни]]></string>
     <string name="_bx_reputation_page_title_sys_leaderboard"><![CDATA[Таблица лидеров]]></string>
     <string name="_bx_reputation_page_title_sys_leaderboard"><![CDATA[Таблица лидеров]]></string>
     <string name="_bx_reputation_page_title_leaderboard"><![CDATA[Таблица лидеров]]></string>
     <string name="_bx_reputation_page_title_leaderboard"><![CDATA[Таблица лидеров]]></string>
@@ -94,6 +96,11 @@
     <!-- Other -->
     <!-- Other -->
     <string name="_bx_reputation_txt_points"><![CDATA[баллов]]></string>
     <string name="_bx_reputation_txt_points"><![CDATA[баллов]]></string>
     <string name="_bx_reputation_txt_from_to"><![CDATA[{0}]]></string>
     <string name="_bx_reputation_txt_from_to"><![CDATA[{0}]]></string>
+    <string name="_bx_reputation_txt_unit_action"><![CDATA[Действие]]></string>
+    <string name="_bx_reputation_txt_unit_action_value"><![CDATA[{0}: {1}]]></string>
+    <string name="_bx_reputation_txt_points_active"><![CDATA[Баллы (активные)*]]></string>
+    <string name="_bx_reputation_txt_points_passive"><![CDATA[Баллы (пассивные)**]]></string>
+    <string name="_bx_reputation_txt_actions_legend"><![CDATA[<b>*</b> - действия, которые вы выполнили;<br /><b>**</b> - действия, выполненные кем-то другим с вашим профилем и/или контентом.]]></string>
 
 
     <string name="_bx_reputation_txt_au_sys_profiles_friends"><![CDATA[Дружба]]></string>
     <string name="_bx_reputation_txt_au_sys_profiles_friends"><![CDATA[Дружба]]></string>
     <string name="_bx_reputation_txt_au_sys_profiles_subscriptions"><![CDATA[Подписка]]></string>
     <string name="_bx_reputation_txt_au_sys_profiles_subscriptions"><![CDATA[Подписка]]></string>