RomanL 8 лет назад
Родитель
Сommit
5e10153a6c

+ 19 - 17
inc/classes/BxDolCmts.php

@@ -910,28 +910,33 @@ class BxDolCmts extends BxDolFactory implements iBxDolReplaceable, iBxDolContent
             return;
         };
 
-        $iObjId = $this->getId();
-        $iObjAthrId = $this->getObjectAuthorId($iObjId);
-
         $iCmtId = 0;
         if(bx_get('Cmt') !== false)
             $iCmtId = bx_process_input(bx_get('Cmt'), BX_DATA_INT);
-
-        $aCmt = $this->_oQuery->getCommentSimple ($iObjId, $iCmtId);
+        echoJson($this->remove($iCmtId));
+    }
+    
+    public function remove($iCmtId)
+    {
+        $aCmt = $this->_oQuery->getCommentsBy(array('type' => 'id', 'id' => $iCmtId));
         if(!$aCmt) {
-            echoJson(array('msg' => _t('_No such comment')));
-            return;
+            return array('msg' => _t('_No such comment'));
         }
-
+        
+        $iObjId = $this->getId();
+        if (!$iObjId){
+            $this->setId($aCmt['cmt_object_id']);
+            $iObjId = $aCmt['cmt_object_id'];
+        }
+        $iObjAthrId = $this->getObjectAuthorId($iObjId);
+        
         if ($aCmt['cmt_replies'] > 0) {
-            echoJson(array('msg' => _t('_Can not delete comments with replies')));
-            return;
+            return array('msg' => _t('_Can not delete comments with replies'));
         }
 
         $iPerformerId = $this->_getAuthorId();
         if(!$this->isRemoveAllowed($aCmt)) {
-            echoJson(array('msg' => $aCmt['cmt_author_id'] == $iPerformerId ? strip_tags($this->msgErrRemoveAllowed()) : _t('_Access denied')));
-            return;
+            return array('msg' => $aCmt['cmt_author_id'] == $iPerformerId ? strip_tags($this->msgErrRemoveAllowed()) : _t('_Access denied'));
         }
 
         if($this->_oQuery->removeComment($iObjId, $iCmtId, $aCmt['cmt_parent_id'])) {
@@ -990,12 +995,9 @@ class BxDolCmts extends BxDolFactory implements iBxDolReplaceable, iBxDolContent
                     ));
                 }
             }
-
-            echoJson(array('id' => $iCmtId));
-            return;
+            return array('id' => $iCmtId);
         }
-
-        echoJson(array('msg' => _t('_cmt_err_cannot_perform_action')));
+        return array('msg' => _t('_cmt_err_cannot_perform_action'));
     }
 
     public function actionResumeLiveUpdate()

+ 69 - 0
inc/classes/BxDolCmtsGridAdministration.php

@@ -0,0 +1,69 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+* Copyright (c) UNA, Inc - https://una.io
+* MIT License - https://opensource.org/licenses/MIT
+*
+* @defgroup    UnaCore UNA Core
+* @{
+*/
+
+define('BX_DOL_MANAGE_TOOLS_ADMINISTRATION', 'administration');
+
+class BxDolCmtsGridAdministration extends BxTemplGrid
+{
+    protected $_sManageType;
+	protected $_sParamsDivider;
+    
+    protected $_sFilter1Name;
+	protected $_sFilter1Value;
+	protected $_aFilter1Values;
+    
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        
+        $this->_sFilter1Name = 'filter1';
+
+        $aModules = BxDolModuleQuery::getInstance()->getModulesBy(array('type' => 'modules', 'active' => 1));
+        $this->_aFilter1Values[''] = _t('_adm_txt_select_module');
+        foreach($aModules as $aModule){
+            $oModule = BxDolModule::getInstance($aModule['name']);
+            if(isset($oModule->_oConfig->CNF['OBJECT_COMMENTS'])){
+                $this->_aFilter1Values[$aModule['name']] = $aModule['title'];
+            }
+        }
+
+    	$sFilter1 = bx_get($this->_sFilter1Name);
+        if(!empty($sFilter1)) {
+            $this->_sFilter1Value = bx_process_input($sFilter1);
+            $this->_aQueryAppend[$this->_sFilter1Name] = $this->_sFilter1Value;
+        }
+       
+    	if(!$oTemplate)
+			$oTemplate = BxDolTemplate::getInstance();
+        parent::__construct ($aOptions, $oTemplate);
+
+        $this->_sManageType = BX_DOL_MANAGE_TOOLS_ADMINISTRATION;
+        $this->_sParamsDivider = '#-#';
+
+        $this->_sDefaultSortingOrder = 'DESC';
+    }
+    
+	protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
+    {
+        if(strpos($sFilter, $this->_sParamsDivider) !== false)
+            list($this->_sFilter1Value, $sFilter) = explode($this->_sParamsDivider, $sFilter);
+
+    	if(!empty($this->_sFilter1Value)){
+            $oSelectedModule = BxDolModule::getInstance($this->_sFilter1Value);
+            $oCmts = BxDolCmts::getObjectInstance($oSelectedModule->_oConfig->CNF['OBJECT_COMMENTS'], 0, false);
+            $this->_aOptions['source'] = "SELECT  sys_cmts_ids.id, sys_cmts_ids.cmt_id, sys_cmts_ids.reports, cmts.* FROM sys_cmts_ids INNER JOIN " . $oCmts->getCommentsTableName() . " cmts ON cmts.cmt_id = sys_cmts_ids.cmt_id WHERE sys_cmts_ids.system_id = " . $oCmts->getSystemId();
+        }
+        else{
+            return '';
+        }
+
+        return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
+    }
+}
+
+/** @} */

+ 46 - 0
inc/js/classes/BxDolCmtsManageTools.js

@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaCore UNA Core
+ * @{
+ */
+
+function BxDolCmtsManageTools(oOptions) {
+    this._iSearchTimeoutId = false;
+    this._sObjNameGrid = oOptions.sObjNameGrid;
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxDolCmtsManageTools' : oOptions.sObjName;
+
+    this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'fade' : oOptions.sAnimationEffect;
+    this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
+    this._sParamsDivider = oOptions.sParamsDivider == undefined ? '#-#' : oOptions.sParamsDivider;
+
+    this._aHtmlIds = oOptions.aHtmlIds == undefined ? {} : oOptions.aHtmlIds;
+    this._oRequestParams = oOptions.oRequestParams == undefined ? {} : oOptions.oRequestParams;
+}
+
+BxDolCmtsManageTools.prototype.onChangeFilter = function (oFilter) {
+    var $this = this;
+    var oFilter1 = $('#bx-grid-filter1-' + this._sObjNameGrid);
+    var sValueFilter1 = oFilter1.length > 0 ? oFilter1.val() : '';
+
+    var oSearch = $('#bx-grid-search-' + this._sObjNameGrid);
+    var sValueSearch = oSearch.length > 0 ? oSearch.val() : '';
+    if (sValueSearch == _t('_sys_grid_search'))
+        sValueSearch = '';
+
+    clearTimeout($this._iSearchTimeoutId);
+    $this._iSearchTimeoutId = setTimeout(function () {
+        glGrids[$this._sObjNameGrid].setFilter(sValueFilter1 + $this._sParamsDivider + sValueSearch, true);
+    }, 500);
+};
+
+BxDolCmtsManageTools.prototype.onClickDelete = function (iContentId) {
+    $('.bx-popup-applied:visible').dolPopupHide();
+
+    glGrids[this._sObjNameGrid].actionWithId(iContentId, 'delete', {}, '', false, 1);
+};
+
+
+
+/** @} */

+ 25 - 2
install/sql/system.sql

@@ -3602,6 +3602,10 @@ INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `tit
 ('sys_social_sharing', 'system', 'social-sharing-twitter', '_sys_menu_item_title_system_social_sharing_twitter', '_sys_menu_item_title_social_sharing_twitter', 'https://twitter.com/share?url={url_encoded}', '', '_blank', 'twitter', '', 2147483647, 1, 1, 3),
 ('sys_social_sharing', 'system', 'social-sharing-pinterest', '_sys_menu_item_title_system_social_sharing_pinterest', '_sys_menu_item_title_social_sharing_pinterest', 'http://pinterest.com/pin/create/button/?url={url_encoded}&media={img_url_encoded}&description={title_encoded}', '', '_blank', 'pinterest', '', 2147483647, 1, 1, 4);
 
+-- MENU: dashboard manage tools
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_account_dashboard_manage_tools', 'system', 'cmts-administration', '_sys_menu_item_title_system_cmts_administration', '_sys_menu_item_title_cmts_administration', 'page.php?i=cmts-administration', '', '', '', 'a:2:{s:6:"module";s:6:"system";s:6:"method";s:27:"get_menu_addon_manage_tools";}', '', 192, 1, 0, 1);
+
 -- --------------------------------------------------------
 
 
@@ -3655,7 +3659,7 @@ INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `fie
 ('sys_studio_forms_pre_values', 'Sql', 'SELECT * FROM `sys_form_pre_values` WHERE 1 ', 'sys_form_pre_values', 'id', 'Order', '', '', 1000, NULL, 'start', '', 'Key,Value', 'LKey,LKey2', 'auto', '', '', 'BxTemplStudioFormsPreValues', ''),
 
 ('sys_studio_search_forms', 'Sql', 'SELECT * FROM `sys_objects_search_extended` WHERE 1 ', 'sys_objects_search_extended', 'id', 'module,title', 'active', '', 100, NULL, 'start', '', 'module', 'title', 'like', 'module', 'title', 'BxTemplStudioFormsSearchForms', ''),
-('sys_studio_search_forms_fields', 'Sql', 'SELECT * FROM `sys_search_extended_fields` WHERE 1 AND `object`=?', 'sys_search_extended_fields', 'id', 'order', 'active', '', 100, NULL, 'start', '', 'type', 'caption', 'like', '', '', 'BxTemplStudioFormsSearchFields', '');
+('sys_studio_search_forms_fields', 'Sql', 'SELECT * FROM `sys_search_extended_fields` WHERE 1 AND `object`=?', 'sys_search_extended_fields', 'id', 'order', 'active', '', 100, NULL, 'start', '', 'type', 'caption', 'like', '', '', 'BxTemplStudioFormsSearchFields', ''),
 
 CREATE TABLE IF NOT EXISTS `sys_grid_fields` (
   `object` varchar(64) NOT NULL,
@@ -3835,6 +3839,22 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `conf
 ('sys_studio_search_forms_fields', 'single', 'edit', '', 'pencil', 0, 1),
 ('sys_studio_search_forms_fields', 'independent', 'reset', '_adm_form_btn_search_forms_fields_reset', '', 0, 1);
 
+-- GRIDS: moderation tools
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('sys_cmts_administration', 'Sql', '', '', 'cmt_id', 'cmt_time', '', '', 20, NULL, 'start', '', 'cmt_text', '', 'like', 'reports', '', 192, 'BxTemplCmtsGridAdministration', '');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('sys_cmts_administration', 'checkbox', '_sys_select', '2%', 0, '0', '', 1),
+('sys_cmts_administration', 'reports', '_sys_txt_reports_title', '5%', 0, '0', '', 2),
+('sys_cmts_administration', 'cmt_text', '_sys_cmts_administration_grid_column_title_adm_cmt_text', '33%', 0, '25', '', 3),
+('sys_cmts_administration', 'cmt_time', '_sys_cmts_administration_grid_column_title_adm_cmt_time', '20%', 1, '25', '', 4),
+('sys_cmts_administration', 'cmt_author_id', '_sys_cmts_administration_grid_column_title_adm_cmt_author_id', '20%', 0, '25', '', 5),
+('sys_cmts_administration', 'actions', '', '20%', 0, '', '', 6);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('sys_cmts_administration', 'bulk', 'delete', '_sys_cmts_administration_grid_action_title_adm_delete', '', 0, 1, 1),
+('sys_cmts_administration', 'single', 'delete', '_sys_cmts_administration_grid_action_title_adm_delete', 'remove', 1, 1, 1);
+
 
 -- GRID: Storage managers
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `override_class_name`, `override_class_file`) VALUES
@@ -4112,7 +4132,8 @@ INSERT INTO `sys_objects_page` (`object`, `uri`, `title_system`, `title`, `modul
 ('sys_account_profile_switcher', 'account-profile-switcher', '_sys_page_title_system_account_profile_switcher', '_sys_page_title_account_profile_switcher', 'system', 5, 2147483647, 1, 'page.php?i=account-profile-switcher', '', '', '', 0, 1, 0, 'BxTemplPageAccount', ''),
 ('sys_unsubscribe_notifications', 'unsubscribe-notifications', '_sys_page_title_system_unsubscribe_notifications', '_sys_page_title_unsubscribe_notifications', 'system', 5, 2147483647, 1, 'page.php?i=unsubscribe-notifications', '', '', '', 0, 1, 0, '', ''),
 ('sys_unsubscribe_news', 'unsubscribe-news', '_sys_page_title_system_unsubscribe_news', '_sys_page_title_unsubscribe_news', 'system', 5, 2147483647, 1, 'page.php?i=unsubscribe-news', '', '', '', 0, 1, 0, '', ''),
-('sys_std_dashboard', '', '_sys_page_title_system_studio_dashboard', '_sys_page_title_studio_dashboard', 'system', 4, 2147483647, 1, '', '', '', '', 0, 1, 0, '', '');
+('sys_std_dashboard', '', '_sys_page_title_system_studio_dashboard', '_sys_page_title_studio_dashboard', 'system', 4, 2147483647, 1, '', '', '', '', 0, 1, 0, '', ''),
+('sys_cmts_administration' ,'cmts-administration', '_sys_page_title_system_cmts_administration', '_sys_page_title_cmts_administration', 'system', 5, 192, 1, 'page.php?i=cmts-administration', '', '', '', 0, 1, 0, '', '');
 
 
 
@@ -4247,6 +4268,8 @@ INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `
 
 ('sys_unsubscribe_news', 1, 'system', '', '_sys_page_block_title_unsubscribe_news', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:16:"unsubscribe_news";s:6:"params";a:0:{}s:5:"class";s:19:"TemplServiceAccount";}', 0, 1, 1, 1),
 
+('sys_cmts_administration', 1, 'system', '_sys_page_block_title_system_cmts_administration', '_sys_page_block_title_cmts_administration', 11, 192, 'service', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:12:"manage_tools";s:6:"params";a:1:{i:0;s:14:"administration";}s:5:"class";s:27:"TemplCmtsGridAdministration";}', 0, 1, 1, 1),
+
 -- studio dashboard blocks
 ('sys_std_dashboard', 1, 'system', '', '_sys_page_block_title_std_dash_version', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:17:"get_block_version";s:6:"params";a:0:{}s:5:"class";s:20:"TemplStudioDashboard";}', 0, 0, 1, 1),
 

+ 21 - 0
modules/boonex/decorous/data/template/system/scripts/BxTemplCmtsGridAdministration.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxBaseCmtsGridAdministration
+ */
+class BxTemplCmtsGridAdministration extends BxBaseCmtsGridAdministration
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 17 - 4
modules/boonex/english/data/langs/system/en.xml

@@ -1673,7 +1673,13 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_block_types_custom"><![CDATA[Custom]]></string>
 	<string name="_sys_block_types_skeletons"><![CDATA[Skeletons]]></string>
 	<string name="_sys_block_types_system"><![CDATA[System]]></string>
-	<string name="_sys_chart_growth_object"><![CDATA[Display]]></string>
+  
+  <string name="_sys_cmts_administration_grid_column_title_adm_cmt_text"><![CDATA[Text]]></string>
+  <string name="_sys_cmts_administration_grid_column_title_adm_cmt_time"><![CDATA[Added]]></string>
+  <string name="_sys_cmts_administration_grid_column_title_adm_cmt_author_id"><![CDATA[Author]]></string>
+  <string name="_sys_cmts_administration_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+  
+  <string name="_sys_chart_growth_object"><![CDATA[Display]]></string>
 	<string name="_sys_chart_growth_date_from"><![CDATA[From]]></string>
 	<string name="_sys_chart_growth_date_to"><![CDATA[To]]></string>
 	<string name="_sys_chart_accounts_growth"><![CDATA[Accounts: Growth]]></string>
@@ -2030,7 +2036,8 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_format_size_tb"><![CDATA[{0} TB]]></string>
 	<string name="_sys_grid_confirmation"><![CDATA[Are you sure?]]></string>
 	<string name="_sys_grid_delete_failed"><![CDATA[Delete failed]]></string>
-	<string name="_sys_grid_search"><![CDATA[Search...]]></string>
+  <string name="_sys_grid_search"><![CDATA[Search...]]></string>
+  <string name="_sys_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 	<string name="_sys_inst_conf_desc"><![CDATA[{0}{1}<br />Example: {2}]]></string>
 	<string name="_sys_inst_conf_desc_admin_email"><![CDATA[Admin user e-mail address.]]></string>
 	<string name="_sys_inst_conf_desc_admin_pwd"><![CDATA[Admin user password here.]]></string>
@@ -2145,6 +2152,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_menu_item_title_account_settings_pwd"><![CDATA[Password]]></string>
 	<string name="_sys_menu_item_title_add_content"><![CDATA[Add...]]></string>
 	<string name="_sys_menu_item_title_cart"><![CDATA[Shopping Cart]]></string>
+  <string name="_sys_menu_item_title_cmts_administration"><![CDATA[Manage comments]]></string>
 	<string name="_sys_menu_item_title_cmts_item_delete"><![CDATA[Delete]]></string>
 	<string name="_sys_menu_item_title_cmts_item_edit"><![CDATA[Edit]]></string>
 	<string name="_sys_menu_item_title_cmts_item_reply"><![CDATA[]]></string>
@@ -2204,6 +2212,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_menu_item_title_system_account_settings_pwd"><![CDATA[Password]]></string>
 	<string name="_sys_menu_item_title_system_add_content"><![CDATA[Add Content]]></string>
 	<string name="_sys_menu_item_title_system_cart"><![CDATA[Shopping Cart]]></string>
+  <string name="_sys_menu_item_title_system_cmts_administration"><![CDATA[Manage comments]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_delete"><![CDATA[Delete]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_edit"><![CDATA[Edit]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_reply"><![CDATA[Reply]]></string>
@@ -2338,7 +2347,8 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_page_block_title_add_content"><![CDATA[Add Content]]></string>
 	<string name="_sys_page_block_title_chart_growth"><![CDATA[Growth Charts]]></string>
 	<string name="_sys_page_block_title_chart_stats"><![CDATA[Content]]></string>
-	<string name="_sys_page_block_title_confirm_email"><![CDATA[Email Confirmation]]></string>
+  <string name="_sys_page_block_title_cmts_administration"><![CDATA[Manage comments]]></string>
+  <string name="_sys_page_block_title_confirm_email"><![CDATA[Email Confirmation]]></string>
 	<string name="_sys_page_block_title_confirm_phone"><![CDATA[Phone Confirmation]]></string>
 	<string name="_sys_page_block_title_create_account"><![CDATA[Sign up]]></string>
 	<string name="_sys_page_block_title_dashboard"><![CDATA[Dashboard]]></string>
@@ -2348,6 +2358,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_page_block_system_title_login_step2"><![CDATA[Log in - step2]]></string>
 	<string name="_sys_page_block_system_title_login_step3"><![CDATA[Log in - step3]]></string>
 	<string name="_sys_page_block_system_title_login_only"><![CDATA[Log in]]></string>
+  <string name="_sys_page_block_title_system_cmts_administration"><![CDATA[Manage comments]]></string>
 	<string name="_sys_page_block_title_login"><![CDATA[Log in]]></string>
 	<string name="_sys_page_block_title_login_step2"><![CDATA[Log in - step 2]]></string>
 	<string name="_sys_page_block_title_login_step3"><![CDATA[Log in - step 3]]></string>
@@ -2372,6 +2383,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_page_title_account_settings_info"><![CDATA[Edit Account]]></string>
 	<string name="_sys_page_title_account_settings_pwd"><![CDATA[Change Password]]></string>
 	<string name="_sys_page_title_add_content"><![CDATA[Add Content]]></string>
+  <string name="_sys_page_title_cmts_administration"><![CDATA[Manage comments]]></string>
 	<string name="_sys_page_title_confirm_email"><![CDATA[Email Confirmation]]></string>
 	<string name="_sys_page_title_confirm_phone"><![CDATA[Phone Confirmation]]></string>
 	<string name="_sys_page_title_create_account"><![CDATA[Sign up]]></string>
@@ -2390,7 +2402,8 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_page_title_system_account_settings_info"><![CDATA[Edit Account]]></string>
 	<string name="_sys_page_title_system_account_settings_pwd"><![CDATA[Change Password]]></string>
 	<string name="_sys_page_title_system_add_content"><![CDATA[Add Content]]></string>
-	<string name="_sys_page_title_system_confirm_email"><![CDATA[Email Confirmation]]></string>
+  <string name="_sys_page_title_system_cmts_administration"><![CDATA[Manage comments]]></string>
+  <string name="_sys_page_title_system_confirm_email"><![CDATA[Email Confirmation]]></string>
 	<string name="_sys_page_title_system_confirm_phone"><![CDATA[Phone Confirmation]]></string>
 	<string name="_sys_page_title_system_create_account"><![CDATA[Sign up]]></string>
 	<string name="_sys_page_title_system_dashboard"><![CDATA[Dashboard]]></string>

+ 21 - 0
modules/boonex/ocean/data/template/system/scripts/BxTemplCmtsGridAdministration.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxBaseCmtsGridAdministration
+ */
+class BxTemplCmtsGridAdministration extends BxBaseCmtsGridAdministration
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/protean/data/template/system/scripts/BxTemplCmtsGridAdministration.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxBaseCmtsGridAdministration
+ */
+class BxTemplCmtsGridAdministration extends BxBaseCmtsGridAdministration
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 14 - 1
modules/boonex/russian/data/langs/system/ru.xml

@@ -1671,7 +1671,13 @@
 	<string name="_sys_block_types_custom"><![CDATA[Индивидуальный]]></string>
 	<string name="_sys_block_types_skeletons"><![CDATA[Скелеты]]></string>
 	<string name="_sys_block_types_system"><![CDATA[Система]]></string>
-	<string name="_sys_chart_growth_object"><![CDATA[Вывести]]></string>
+  
+  <string name="_sys_cmts_administration_grid_column_title_adm_cmt_text"><![CDATA[Текст]]></string>
+  <string name="_sys_cmts_administration_grid_column_title_adm_cmt_time"><![CDATA[Добавлено]]></string>
+  <string name="_sys_cmts_administration_grid_column_title_adm_cmt_author_id"><![CDATA[Автор]]></string>
+  <string name="_sys_cmts_administration_grid_action_title_adm_delete"><![CDATA[Удалить]]></string>
+	
+    <string name="_sys_chart_growth_object"><![CDATA[Вывести]]></string>
     <string name="_sys_chart_growth_date_from"><![CDATA[С]]></string>
     <string name="_sys_chart_growth_date_to"><![CDATA[По]]></string>
     <string name="_sys_chart_accounts_growth"><![CDATA[Аккаунты: Развитие]]></string>
@@ -2030,6 +2036,7 @@
 	<string name="_sys_grid_confirmation"><![CDATA[Вы уверены?]]></string>
 	<string name="_sys_grid_delete_failed"><![CDATA[Удалить ошибочные]]></string>
 	<string name="_sys_grid_search"><![CDATA[Поиск...]]></string>
+  <string name="_sys_grid_txt_account_manager"><![CDATA[Перенаправить в Управление аккаунтом.]]></string>
 	<string name="_sys_inst_conf_desc"><![CDATA[{0}{1}<br />Пример: {2}]]></string>
 	<string name="_sys_inst_conf_desc_admin_email"><![CDATA[Администратор - имейл.]]></string>
 	<string name="_sys_inst_conf_desc_admin_pwd"><![CDATA[Администратор - пароль.]]></string>
@@ -2144,6 +2151,7 @@
 	<string name="_sys_menu_item_title_account_settings_pwd"><![CDATA[Пароль]]></string>
 	<string name="_sys_menu_item_title_add_content"><![CDATA[Добавить...]]></string>
 	<string name="_sys_menu_item_title_cart"><![CDATA[Корзина]]></string>
+  <string name="_sys_menu_item_title_cmts_administration"><![CDATA[Управление комментариями]]></string>
 	<string name="_sys_menu_item_title_cmts_item_delete"><![CDATA[Удалить]]></string>
 	<string name="_sys_menu_item_title_cmts_item_edit"><![CDATA[Редактировать]]></string>
 	<string name="_sys_menu_item_title_cmts_item_reply"><![CDATA[]]></string>
@@ -2203,6 +2211,7 @@
 	<string name="_sys_menu_item_title_system_account_settings_pwd"><![CDATA[Пароль]]></string>
 	<string name="_sys_menu_item_title_system_add_content"><![CDATA[Добавить Содержимое]]></string>
 	<string name="_sys_menu_item_title_system_cart"><![CDATA[Корзина]]></string>
+  <string name="_sys_menu_item_title_system_cmts_administration"><![CDATA[Управление комментариями]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_delete"><![CDATA[Удалить]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_edit"><![CDATA[Редактировать]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_reply"><![CDATA[Ответить]]></string>
@@ -2337,6 +2346,7 @@
     <string name="_sys_page_block_title_add_content"><![CDATA[Добавить содержимое]]></string>
     <string name="_sys_page_block_title_chart_growth"><![CDATA[Диаграммы развития]]></string>
     <string name="_sys_page_block_title_chart_stats"><![CDATA[Содержимое]]></string>    
+  <string name="_sys_page_block_title_cmts_administration"><![CDATA[Управление комментариями]]></string>
 	<string name="_sys_page_block_title_confirm_email"><![CDATA[Имейл - Подтверждение]]></string>
 	<string name="_sys_page_block_title_confirm_phone"><![CDATA[Телефон - Подтверждение]]></string>
 	<string name="_sys_page_block_title_create_account"><![CDATA[Присоединиться]]></string>
@@ -2347,6 +2357,7 @@
 	<string name="_sys_page_block_system_title_login_step2"><![CDATA[Вход - шаг 2]]></string>
 	<string name="_sys_page_block_system_title_login_step3"><![CDATA[Вход - шаг 3]]></string>
 	<string name="_sys_page_block_system_title_login_only"><![CDATA[Вход]]></string>
+  <string name="_sys_page_block_title_system_cmts_administration"><![CDATA[Управление комментариями]]></string>
 	<string name="_sys_page_block_title_login"><![CDATA[Вход]]></string>
 	<string name="_sys_page_block_title_login_step2"><![CDATA[Вход - шаг 2]]></string>
 	<string name="_sys_page_block_title_login_step3"><![CDATA[Вход - шаг 3]]></string>
@@ -2371,6 +2382,7 @@
 	<string name="_sys_page_title_account_settings_info"><![CDATA[Редактировать аккаунт]]></string>
 	<string name="_sys_page_title_account_settings_pwd"><![CDATA[Изменить пароль]]></string>
 	<string name="_sys_page_title_add_content"><![CDATA[Добавить содержимое]]></string>
+  <string name="_sys_page_title_cmts_administration"><![CDATA[Управление комментариями]]></string>
 	<string name="_sys_page_title_confirm_email"><![CDATA[Имейл - Подтверждение]]></string>
 	<string name="_sys_page_title_confirm_phone"><![CDATA[Телефон - Подтверждение]]></string>
 	<string name="_sys_page_title_create_account"><![CDATA[Присоединиться]]></string>
@@ -2389,6 +2401,7 @@
 	<string name="_sys_page_title_system_account_settings_info"><![CDATA[Редактировать аккаунт]]></string>
 	<string name="_sys_page_title_system_account_settings_pwd"><![CDATA[Изменить пароль]]></string>
 	<string name="_sys_page_title_system_add_content"><![CDATA[Добавить содержимое]]></string>
+  <string name="_sys_page_title_system_cmts_administration"><![CDATA[Управление комментариями]]></string>
 	<string name="_sys_page_title_system_confirm_email"><![CDATA[Имейл подтверждение]]></string>
 	<string name="_sys_page_title_system_confirm_phone"><![CDATA[Подтверждение телефона]]></string>
 	<string name="_sys_page_title_system_create_account"><![CDATA[Присоединиться]]></string>

+ 1 - 0
template/author_link.html

@@ -0,0 +1 @@
+<bx_include_base:../modules/base/text/template/author_link.html />

+ 18 - 0
template/css/cmts_manage_tools.css

@@ -0,0 +1,18 @@
+/*--- General ---*/
+div.bx-grid-header div.bx-form-element-wrapper {
+    position: relative;
+    float: left;
+    width: 165px;
+}
+
+/*--- Administration tools ---*/
+div.bx-grid-header div#bx-form-element-filter1,
+div.bx-grid-header div#bx-form-element-filter2
+{
+    margin-right: 20px;
+}
+div.bx-grid-header div#bx-form-element-filter1,
+div.bx-grid-header div#bx-form-element-filter2,
+div.bx-grid-header div#bx-form-element-search {
+    margin-top: 0px;
+}

+ 197 - 0
template/scripts/BxBaseCmtsGridAdministration.php

@@ -0,0 +1,197 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaBaseView UNA Base Representation Classes
+ * @{
+ */
+
+class BxBaseCmtsGridAdministration extends BxDolCmtsGridAdministration
+{
+    protected $sJsObject = 'oBxDolCmtsManageTools';
+    
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        parent::__construct($aInfo, $oTemplate);
+    }
+    
+    public function getCode($isDisplayHeader = true)
+    {
+        return $this->getJsCode() . parent::getCode($isDisplayHeader);
+    }
+    
+    public function getJsCode()
+    {
+        $aParams = array(
+            'sObjName' => $this->sJsObject,
+            'aHtmlIds' => array(),
+            'oRequestParams' => array(),
+        	'sObjNameGrid' => 'sys_cmts_administration'
+        );
+        return BxDolTemplate::getInstance()->_wrapInTagJsCode("var " . $this->sJsObject . " = new BxDolCmtsManageTools(" . json_encode($aParams) . ");");
+    }
+    
+    public function performActionDelete($aParams = array())
+    {
+        $iAffected = 0;
+        $aIds = bx_get('ids');
+        if(!$aIds || !is_array($aIds)) {
+            echoJson(array());
+            exit;
+        }
+        
+        $sFilter = bx_get('filter');
+        if(strpos($sFilter, $this->_sParamsDivider) !== false)
+            list($this->_sFilter1Value, $sFilter) = explode($this->_sParamsDivider, $sFilter);
+        if(!empty($this->_sFilter1Value)){
+            $this->_oSelectedModule = BxDolModule::getInstance($this->_sFilter1Value);
+            $oCmts = BxDolCmts::getObjectInstance($this->_oSelectedModule->_oConfig->CNF['OBJECT_COMMENTS'], 0, false);
+            if ($oCmts){
+                $aIdsAffected = array ();
+                foreach($aIds as $iId) {
+                    $aTmp = $oCmts->remove($iId);
+                    if (isset($aTmp['id'])){
+                        $aIdsAffected[] = $iId;
+                        $iAffected++;
+                    }
+                }
+            }
+        }
+        echoJson($iAffected ? array('grid' => $this->getCode(false), 'blink' => $aIdsAffected) : array('msg' => _t('_sys_grid_delete_failed')));
+    }
+    
+    protected function _getFilterControls()
+    {
+        parent::_getFilterControls();
+
+        return  $this->_getFilterSelectOne($this->_sFilter1Name, $this->_sFilter1Value, $this->_aFilter1Values) . $this->_getSearchInput();
+    }
+    
+    protected function _getFilterSelectOne($sFilterName, $sFilterValue, $aFilterValues)
+    {
+        if(empty($sFilterName) || empty($aFilterValues))
+            return '';
+
+        //todo
+		$CNF = &$this->_oModule->_oConfig->CNF;
+		
+
+		foreach($aFilterValues as $sKey => $sValue)
+			$aFilterValues[$sKey] = _t($sValue);
+
+        $aInputModules = array(
+            'type' => 'select',
+            'name' => $sFilterName,
+            'attrs' => array(
+                'id' => 'bx-grid-' . $sFilterName . '-' . $this->_sObject,
+                'onChange' => 'javascript:' . $this->sJsObject . '.onChangeFilter(this)'
+            ),
+            'value' => $sFilterValue,
+            'values' => array_merge(array('' => _t($CNF['T']['filter_item_select_one_' . $sFilterName])), $aFilterValues)
+        );
+
+        $oForm = new BxTemplFormView(array());
+        return $oForm->genRow($aInputModules);
+    }
+    
+    protected function _getSearchInput()
+    {
+        $aInputSearch = array(
+            'type' => 'text',
+            'name' => 'search',
+            'attrs' => array(
+                'id' => 'bx-grid-search-' . $this->_sObject,
+                'onKeyup' => 'javascript:$(this).off(\'keyup focusout\'); ' . $this->sJsObject . '.onChangeFilter(this)',
+                'onBlur' => 'javascript:' . $this->sJsObject . '.onChangeFilter(this)',
+            )
+        );
+        $oForm = new BxTemplFormView(array());
+        return $oForm->genRow($aInputSearch);
+    }
+    
+    protected function _getCellCmtTime($mixedValue, $sKey, $aField, $aRow)
+    {
+        return parent::_getCellDefault(bx_time_js($mixedValue), $sKey, $aField, $aRow);
+    }
+    
+    protected function _getCellCmtText($mixedValue, $sKey, $aField, $aRow)
+    {
+        $sTmp = strip_tags($aRow['cmt_text']);
+        return parent::_getCellDefault($sTmp, $sKey, $aField, $aRow);
+    }
+    
+    protected function _getCellCmtAuthorId($mixedValue, $sKey, $aField, $aRow)
+    {
+    	$oProfile = BxDolProfile::getInstance($aRow['cmt_author_id']);
+    	$sProfile = $oProfile->getDisplayName();
+
+		$oAcl = BxDolAcl::getInstance();
+
+    	$sAccountEmail = '';
+    	$sManageAccountUrl = '';
+    	if($oProfile && $oProfile instanceof BxDolProfile && $oAcl->isMemberLevelInSet(128)) {
+    		$sAccountEmail = $oProfile->getAccountObject()->getEmail();
+	    	$sManageAccountUrl = $this->_getManageAccountUrl($sAccountEmail);
+    	}
+
+        $mixedValue = $this->_oTemplate->parseHtmlByName('author_link.html', array(
+            'href' => $oProfile->getUrl(),
+            'title' => $sProfile,
+            'content' => $sProfile,
+        	'bx_if:show_account' => array(
+        		'condition' => !empty($sManageAccountUrl), 
+        		'content' => array(
+        			'href' => $sManageAccountUrl,
+		        	'title' => _t('_sys_grid_txt_account_manager'),
+		        	'content' => $sAccountEmail
+        		)
+        	)
+        ));
+
+        return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+    }
+    
+    protected function _getCellHeaderReports ($sKey, $aField)
+    {
+        $s = parent::_getCellHeaderDefault($sKey, $aField);
+        return preg_replace ('/<a(.*?)>(.*?)<\/a>/', '<a$1 title="' . bx_html_attribute(_t('_sys_txt_reports_title')) . '"><i class="sys-icon exclamation-triangle"></i></a>', $s);
+    }
+    
+    protected function _getCellReports($mixedValue, $sKey, $aField, $aRow)
+    {
+        if ($mixedValue == 0){
+            $mixedValue = '';
+        }
+        else{
+            $oReports = BxDolReport::getObjectInstance('sys_cmts', $aRow['id']);
+            if ($oReports){
+                $mixedValue = $oReports->getCounter().$oReports->getJsScript();
+            }
+        }
+        return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+    }
+    
+    protected function _getManageAccountUrl($sFilter = '')
+    {
+    	$sModuleAccounts = 'bx_accounts';
+    	if(!BxDolModuleQuery::getInstance()->isEnabledByName($sModuleAccounts))
+    		return '';
+
+		$sTypeUpc = strtoupper($this->_sManageType);
+		$oModuleAccounts = BxDolModule::getInstance($sModuleAccounts);
+		if(!$oModuleAccounts || empty($oModuleAccounts->_oConfig->CNF['URL_MANAGE_' . $sTypeUpc]))
+			return '';
+
+		$sLink = $oModuleAccounts->_oConfig->CNF['URL_MANAGE_' . $sTypeUpc];
+
+		$sLink = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink($sLink);
+		
+		if(!empty($sFilter))
+			$sLink = bx_append_url_params($sLink, array('filter' => $sFilter));
+
+		return $sLink;
+    }
+}
+
+/** @} */

+ 14 - 0
template/scripts/BxBaseCmtsServices.php

@@ -52,6 +52,20 @@ class BxBaseCmtsServices extends BxDol
     		),  // optional, may have some additional data to be passed in JS method provided using 'method' param above.
     	);
     }
+    
+    public function serviceManageTools($sType = 'common')
+    {
+        $oGrid = BxDolGrid::getObjectInstance('sys_cmts_administration');
+        if(!$oGrid)
+            return '';
+        $oTemplate = BxDolTemplate::getInstance();
+        $oTemplate->addJs(array('BxDolCmtsManageTools.js'));
+        $oTemplate->addCss(array('cmts_manage_tools.css'));
+        $oTemplate->addJsTranslation(array('_sys_grid_search'));
+        return array(
+        	'content' =>  $oGrid->getCode()
+        );
+    }
 }
 
 /** @} */