AntonLV 2 лет назад
Родитель
Сommit
2ba6b31270

+ 1 - 1
modules/boonex/accounts/updates/14.0.1_14.0.2/install/config.php

@@ -35,7 +35,7 @@ $aConfig = array(
     'install' => array(
         'execute_sql' => 1,
         'update_files' => 1,
-        'update_languages' => 0,
+        'update_languages' => 1,
         'clear_db_cache' => 1,
     ),
 

+ 4 - 0
modules/boonex/accounts/updates/14.0.1_14.0.2/install/langs/en.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+	<string_add name="_bx_accounts_option_last_active_sorting"><![CDATA[Enable sorting by Last Active]]></string_add>
+</resources>

+ 9 - 1
modules/boonex/accounts/updates/14.0.1_14.0.2/install/sql/enable.sql

@@ -1,5 +1,13 @@
 SET @sName = 'bx_accounts';
 
 
+-- OPTIONS
+SET @iCategId = (SELECT `id` FROM `sys_options_categories` WHERE `name`=@sName LIMIT 1);
+
+DELETE FROM `sys_options` WHERE `name`='bx_accounts_last_active_sorting';
+INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_error`, `extra`, `order`) VALUES
+('bx_accounts_last_active_sorting', '', @iCategId, '_bx_accounts_option_last_active_sorting', 'checkbox', '', '', '', 1);
+
+
 -- GRIDS
-UPDATE `sys_objects_grid` SET `source`='SELECT `ta`.*, `tp`.`status` AS `status`, `ta`.`active`, `ts`.`date` AS `last_active` FROM `sys_accounts` AS `ta` LEFT JOIN `sys_sessions` AS `ts` ON `ta`.`id`=`ts`.`user_id` LEFT JOIN `sys_profiles` AS `tp` ON `ta`.`id`=`tp`.`account_id` AND `tp`.`type`=''system'' WHERE 1 ', `sorting_fields`='email_confirmed,logged,last_active,added' WHERE `object`='bx_accounts_administration';
+UPDATE `sys_objects_grid` SET `source`='SELECT `ta`.*, `tp`.`status` AS `status`, `ta`.`active` {select} FROM `sys_accounts` AS `ta` LEFT JOIN `sys_profiles` AS `tp` ON `ta`.`id`=`tp`.`account_id` AND `tp`.`type`=''system'' {join} WHERE 1 ' WHERE `object`='bx_accounts_administration';

+ 109 - 0
modules/boonex/accounts/updates/14.0.1_14.0.2/source/classes/BxAccntConfig.php

@@ -0,0 +1,109 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Accounts Accounts
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxAccntConfig extends BxBaseModGeneralConfig
+{
+    protected $_oDb;
+    protected $_aHtmlIds;
+
+    /**
+     * Constructor
+     */
+    public function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $this->CNF = array (
+            // some params
+            'PARAM_PROFILE_NAME_LENGTH_MAX' => 10,
+            'PARAM_LA_SORTING' => 'bx_accounts_last_active_sorting',
+            'PARAM_EXPORT_TO' => 'bx_accounts_export_to',
+            'PARAM_EXPORT_FIELDS' => 'bx_accounts_export_fields',
+
+            // page URIs
+            'URL_MANAGE_ADMINISTRATION' => 'page.php?i=accounts-administration',
+
+            // objects
+            'OBJECT_STORAGE_FILES' => 'sys_files',
+            'OBJECT_FORM_ACCOUNT' => 'bx_accounts_account',
+            'OBJECT_FORM_ACCOUNT_DISPLAY_SETTINGS_EMAIL' => 'bx_accounts_account_settings_email',
+            'OBJECT_FORM_ACCOUNT_DISPLAY_CREATE' => 'bx_accounts_account_create',
+            'OBJECT_MENU_MANAGE_TOOLS' => 'bx_accounts_menu_manage_tools', //manage menu in content administration tools
+            'OBJECT_GRID_ADMINISTRATION' => 'bx_accounts_administration',
+            'OBJECT_GRID_MODERATION' => 'bx_accounts_moderation',
+
+                // some language keys
+            'T' => array (
+                'grid_action_err_delete' => '_bx_accnt_grid_action_err_delete',
+                'grid_action_err_perform' => '_bx_accnt_grid_action_err_perform',
+                'filter_item_active' => '_bx_accnt_grid_filter_item_title_adm_active',
+                'filter_item_operators' => '_bx_accnt_grid_filter_item_title_adm_operators',
+                'filter_item_pending' => '_bx_accnt_grid_filter_item_title_adm_pending',
+                'filter_item_suspended' => '_bx_accnt_grid_filter_item_title_adm_suspended',
+                'filter_item_unconfirmed' => '_bx_accnt_grid_filter_item_title_adm_unconfirmed',
+                'filter_item_locked' => '_bx_accnt_grid_filter_item_title_adm_locked',
+                'filter_item_without_profile' => '_bx_accnt_grid_filter_item_title_adm_without_profile',
+                'filter_item_select_one_filter1' => '_bx_accnt_grid_filter_item_title_adm_select_one_filter1',
+                'filter_item_select_one_filter2' => '_bx_accnt_grid_filter_item_title_adm_select_one_filter2',
+            )
+        );
+
+        $this->_aObjects = array(
+            'alert' => $this->_sName,
+        );
+
+        $this->_aJsClasses = array(
+            'main' => 'BxAccntMain',
+            'manage_tools' => 'BxAccntManageTools'
+        );
+
+        $this->_aJsObjects = array(
+            'main' => 'oBxAccntMain',
+            'manage_tools' => 'oBxAccntManageTools'
+        );
+
+        $this->_aGridObjects = array(
+            'moderation' => $this->CNF['OBJECT_GRID_MODERATION'],
+            'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
+
+        );
+
+        $sHtmlPrefix = str_replace('_', '-', $this->_sName);
+        $this->_aHtmlIds = array(
+            'profile' => $sHtmlPrefix . '-profile-',
+            'profile_more_popup' => $sHtmlPrefix . '-profile-more-popup-',
+
+            'password_text' => $sHtmlPrefix . '-txt-password',
+            'password_button' => $sHtmlPrefix . '-btn-copy',
+            'password_popup' => $sHtmlPrefix . '-password-popup',
+        );
+    }
+
+    public function init(&$oDb)
+    {
+        $this->_oDb = &$oDb;
+    }
+
+    public function isLastActiveSorting()
+    {
+        return getParam($this->CNF['PARAM_LA_SORTING']) == 'on';
+    }
+
+    public function getHtmlIds($sKey = '')
+    {
+        if(empty($sKey))
+            return $this->_aHtmlIds;
+
+        return isset($this->_aHtmlIds[$sKey]) ? $this->_aHtmlIds[$sKey] : '';
+    }
+}
+
+/** @} */

+ 39 - 16
modules/boonex/accounts/updates/14.0.1_14.0.2/source/classes/BxAccntGridAdministration.php

@@ -44,6 +44,17 @@ class BxAccntGridAdministration extends BxBaseModProfileGridAdministration
         if(strpos($sFilter, $this->_sParamsDivider) !== false)
             list($this->_sFilter1Value, $this->_sFilter2Value, $sFilter) = explode($this->_sParamsDivider, $sFilter);
 
+        $sSelectClause = $sJoinClause = '';
+        if($this->_oModule->_oConfig->isLastActiveSorting()) {
+            $sSelectClause = ', `ts`.`date` AS `last_active`';
+            $sJoinClause = ' LEFT JOIN `sys_sessions` AS `ts` ON `ts`.`id` = (SELECT `id` FROM `sys_sessions` WHERE `user_id`=`ta`.`id` ORDER BY `date` DESC LIMIT 1)';
+        }
+
+        $this->_aOptions['source'] = bx_replace_markers($this->_aOptions['source'], [
+            'select' => $sSelectClause,
+            'join' => $sJoinClause
+        ]);
+
     	if(!empty($this->_sFilter1Value))
             switch($this->_sFilter1Value) {
                 case 'unconfirmed':
@@ -162,9 +173,9 @@ class BxAccntGridAdministration extends BxBaseModProfileGridAdministration
         }
     }
 	
-	public function performActionSendMessage()
+    public function performActionSendMessage()
     {
-		$sAction = 'send_message';
+        $sAction = 'send_message';
 		
         $CNF = &$this->_oModule->_oConfig->CNF;
 
@@ -172,24 +183,23 @@ class BxAccntGridAdministration extends BxBaseModProfileGridAdministration
         if(!$aIds || !is_array($aIds))
             return echoJson(array());
 		
-		$oForm = BxDolForm::getObjectInstance('bx_accounts_account', 'bx_accounts_send_test');
+        $oForm = BxDolForm::getObjectInstance('bx_accounts_account', 'bx_accounts_send_test');
         if (!$oForm)
             return '';
 		
         $oForm->aFormAttrs['action'] = BX_DOL_URL_ROOT . 'grid.php?' . bx_encode_url_params($_GET, array('_r'));
         $oForm->initChecker();
         if($oForm->isSubmittedAndValid()) {
-        	$aIdsAffected = array();
-			foreach($aIds as $iId) {
-				if(sendMail(BxDolAccount::getInstance()->getEmail($iId), $oForm->getCleanValue('message_subject'), $oForm->getCleanValue('message_text'), 0, [], BX_EMAIL_MASS, 'text', false, ['From' => "=?UTF-8?B?" . base64_encode(getParam('site_title')) . "?= <" . getParam('site_email_notify') . ">"], false)){
-					$aIdsAffected[] = $iId;
-				}	
-			}
-			
+            $aIdsAffected = array();
+                foreach($aIds as $iId) {
+                    if(sendMail(BxDolAccount::getInstance()->getEmail($iId), $oForm->getCleanValue('message_subject'), $oForm->getCleanValue('message_text'), 0, [], BX_EMAIL_MASS, 'text', false, ['From' => "=?UTF-8?B?" . base64_encode(getParam('site_title')) . "?= <" . getParam('site_email_notify') . ">"], false)){
+                        $aIdsAffected[] = $iId;
+                    }	
+                }
+
             echoJson(count($aIdsAffected) > 0 ? array('grid' => $this->getCode(false), 'blink' => $aIdsAffected) : array('msg' => _t($CNF['T']['grid_action_err_perform'])));
         }
         else {
-            
             $sContent = BxTemplStudioFunctions::getInstance()->popupBox('bx-account-send-message', _t('_bx_accounts_form_display_account_send_message'), $this->_oModule->_oTemplate->parseHtmlByName('manage_item.html', array(
                 'form_id' => $oForm->id,
                 'form' => $oForm->getCode(true),
@@ -610,13 +620,16 @@ class BxAccntGridAdministration extends BxBaseModProfileGridAdministration
 
         return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
     } 
-    
+
     protected function _getCellLastActive($mixedValue, $sKey, $aField, $aRow)
     {
+        if(!isset($aRow['last_active']))
+            $mixedValue = (new BxDolSessionQuery())->getLastActivityAccount($aRow['id']);
+
         $iTs = max((int)$mixedValue, (int)$aRow['active']);
         return parent::_getCellDefault($iTs ? bx_time_js($iTs) : _t('_sys_not_available'), $sKey, $aField, $aRow);
-    } 
-    
+    }
+
     protected function _getCellAdded($mixedValue, $sKey, $aField, $aRow)
     {
         $mixedValue = !empty($mixedValue) ? bx_time_js($mixedValue) : _t('_sys_not_available');
@@ -633,17 +646,27 @@ class BxAccntGridAdministration extends BxBaseModProfileGridAdministration
         return parent::_getCellDefault(_t('_bx_accnt_grid_confirmation_status_' . $s), $sKey, $aField, $aRow);
     }
 
+    protected function _getOrderFields($bTranslatable = false)
+    {
+        $aResult = parent::_getOrderFields($bTranslatable);
+
+        if(!$bTranslatable && $this->_oModule->_oConfig->isLastActiveSorting())
+            $aResult[] = 'last_active';
+
+        return $aResult;
+    }
+    
     protected function _isCheckboxDisabled($aRow)
     {
         return false;
     }
 
-	protected function _getContentInfo($iId)
+    protected function _getContentInfo($iId)
     {
     	return BxDolAccountQuery::getInstance()->getInfoById($iId);
     }
 
-	protected function _doDelete($iId, $aParams = array())
+    protected function _doDelete($iId, $aParams = array())
     {
         $oAccount = BxDolAccount::getInstance($iId);
         if($oAccount)

+ 124 - 0
modules/boonex/accounts/updates/14.0.1_14.0.2/source/install/langs/en.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+    <string name="_bx_accnt"><![CDATA[Accounts]]></string>
+    <string name="_bx_accounts"><![CDATA[Accounts]]></string>
+
+    <string name="_bx_accounts_option_last_active_sorting"><![CDATA[Enable sorting by Last Active]]></string>
+    <string name="_bx_accounts_option_export_to"><![CDATA[Export to]]></string>
+    <string name="_bx_accounts_option_export_fields"><![CDATA[Export fields]]></string>
+
+    <string name="_bx_accounts_form_display_account_settings_email_popup"><![CDATA[Edit Email]]></string>
+    <string name="_bx_accounts_form_display_account_create_popup"><![CDATA[Create new Account]]></string>
+    <string name="_bx_accounts_form_display_account_settings_password_popup"><![CDATA[Reset Password]]></string>
+    <string name="_bx_accounts_form_display_account_send_message"><![CDATA[Send test email]]></string>
+
+    <string name="_bx_accnt_page_title_sys_manage_administration"><![CDATA[Manage All Accounts]]></string>
+    <string name="_bx_accnt_page_title_manage"><![CDATA[Manage Accounts]]></string>
+    <string name="_bx_accnt_page_title_browse"><![CDATA[Accounts]]></string>
+
+    <string name="_bx_accnt_page_block_title_system_manage_administration"><![CDATA[Manage All Accounts]]></string>
+    <string name="_bx_accnt_page_block_title_manage"><![CDATA[Manage Accounts]]></string>
+
+    <string name="_bx_accnt_menu_set_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_accnt_menu_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_accnt_menu_item_title_system_resend_cemail"><![CDATA[Resend Confirmation]]></string>
+    <string name="_bx_accnt_menu_item_title_resend_cemail"><![CDATA[Resend Confirmation]]></string>
+    <string name="_bx_accnt_menu_item_title_system_confirm"><![CDATA[Confirm]]></string>
+    <string name="_bx_accnt_menu_item_title_confirm"><![CDATA[Confirm]]></string>
+    <string name="_bx_accnt_menu_item_title_system_edit_email"><![CDATA[Edit Email]]></string>
+    <string name="_bx_accnt_menu_item_title_edit_email"><![CDATA[Edit Email]]></string>
+    <string name="_bx_accnt_menu_item_title_system_reset_password"><![CDATA[Reset Password]]></string>
+    <string name="_bx_accnt_menu_item_title_reset_password"><![CDATA[Reset Password]]></string>
+    <string name="_bx_accnt_menu_item_title_system_resend_remail"><![CDATA[Resend Reset Password]]></string>
+    <string name="_bx_accnt_menu_item_title_resend_remail"><![CDATA[Resend Reset Password]]></string>
+    <string name="_bx_accnt_menu_item_title_system_unlock_account"><![CDATA[Unlock]]></string>
+    <string name="_bx_accnt_menu_item_title_unlock_account"><![CDATA[Unlock]]></string>
+    <string name="_bx_accnt_menu_item_title_system_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_accnt_menu_item_title_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_accnt_menu_item_title_system_delete_with_content"><![CDATA[Delete With Content]]></string>
+    <string name="_bx_accnt_menu_item_title_delete_with_content"><![CDATA[Delete With Content]]></string>
+    <string name="_bx_accnt_menu_item_title_system_make_operator"><![CDATA[Make Operator]]></string>
+    <string name="_bx_accnt_menu_item_title_make_operator"><![CDATA[Make Operator]]></string>
+    <string name="_bx_accnt_menu_item_title_system_unmake_operator"><![CDATA[Unmake Operator]]></string>
+    <string name="_bx_accnt_menu_item_title_unmake_operator"><![CDATA[Unmake Operator]]></string>
+    <string name="_bx_accnt_menu_item_title_system_set_operator_role"><![CDATA[Set Operator Role]]></string>
+    <string name="_bx_accnt_menu_item_title_set_operator_role"><![CDATA[Set Operator Role]]></string>
+    <string name="_bx_accnt_menu_item_title_system_admt_accounts"><![CDATA[Accounts]]></string>
+    <string name="_bx_accnt_menu_item_title_admt_accounts"><![CDATA[Accounts]]></string>
+    <string name="_bx_accnt_menu_item_title_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_accnt_menu_dashboard_manage_tools_addon_counter1_caption"><![CDATA[unconfirmed]]></string>
+
+    <string name="_bx_accnt_acl_action_edit_any_account"><![CDATA[Edit Any Account]]></string>
+    <string name="_bx_accnt_acl_action_delete_any_account"><![CDATA[Delete Any Account]]></string>
+
+    <string name="_bx_accnt_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_select_one_filter2"><![CDATA[All]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_operators"><![CDATA[Operators]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_pending"><![CDATA[Pending]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_suspended"><![CDATA[Suspended]]></string>    
+    <string name="_bx_accnt_grid_filter_item_title_adm_unconfirmed"><![CDATA[Unconfirmed]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_locked"><![CDATA[Locked]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_without_profile"><![CDATA[Without profile]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_name"><![CDATA[Name]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_email"><![CDATA[Email]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_ip"><![CDATA[IP]]></string>
+
+    <string name="_bx_accnt_grid_column_title_adm_is_confirmed"><![CDATA[Confirmed]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_profiles"><![CDATA[Profiles]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_logged"><![CDATA[Last Logged]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_last_active"><![CDATA[Last Active]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_added"><![CDATA[Created]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_activate"><![CDATA[Activate]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_suspend"><![CDATA[Suspend]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_confirm"><![CDATA[Confirm]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_edit_email"><![CDATA[Edit Email]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_export"><![CDATA[Export]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_export_all"><![CDATA[Export All]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_resend_cemail"><![CDATA[Resend Confirmation]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_resend_remail"><![CDATA[Resend Reset Password]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_reset_password"><![CDATA[Reset Password]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_unlock_account"><![CDATA[Unlock]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_delete_with_content"><![CDATA[Delete With Content]]></string>
+	<string name="_bx_accnt_grid_action_title_adm_send_message"><![CDATA[Send email]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_more_add"><![CDATA[Add new]]></string>
+    <string name="_bx_accnt_grid_action_err_delete"><![CDATA[Cannot delete the selected account(s).]]></string>
+    <string name="_bx_accnt_grid_action_err_perform"><![CDATA[Cannot perform the action for selected account(s).]]></string>
+    <string name="_bx_accnt_grid_action_unlock_successed"><![CDATA[Successfully unlocked]]></string>
+    <string name="_bx_accnt_grid_action_unlock_error"><![CDATA[Account is not blocked]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_none"><![CDATA[No]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_email"><![CDATA[Email]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_phone"><![CDATA[Phone]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_email_and_phone"><![CDATA[All]]></string>
+
+    <string name="_bx_accnt_form_login_input_caption_system_email_confirmed"><![CDATA[Email confirmed]]></string>
+    <string name="_bx_accnt_form_account_input_email_confirmed"><![CDATA[Email confirmed]]></string>
+	<string name="_bx_accnt_form_account_input_caption_system_message_subject"><![CDATA[Subject]]></string>
+    <string name="_bx_accnt_form_account_input_caption_message_subject"><![CDATA[Subject]]></string>
+	<string name="_bx_accnt_form_account_input_message_subject_error"><![CDATA[Subject can't be empty]]></string>
+	<string name="_bx_accnt_form_account_input_caption_system_message_text"><![CDATA[Text]]></string>
+    <string name="_bx_accnt_form_account_input_caption_message_text"><![CDATA[Text]]></string>
+	<string name="_bx_accnt_form_account_input_message_text_error"><![CDATA[Text can't be empty]]></string>
+	<string name="_bx_accnt_form_display_send_message"><![CDATA[Send email]]></string>
+ 
+    <string name="_bx_accnt_txt_more"><![CDATA[{0} more]]></string>
+    <string name="_bx_accnt_txt_see_more"><![CDATA[See more]]></string>
+    <string name="_bx_accnt_txt_copy_to_clipboard"><![CDATA[Copy to Clipboard]]></string>
+    <string name="_bx_accnt_txt_not_operator"><![CDATA[Not an Operator]]></string>
+    <string name="_bx_accnt_txt_export_to_csv"><![CDATA[CSV]]></string>
+    <string name="_bx_accnt_txt_export_to_xml"><![CDATA[XML]]></string>
+    <string name="_bx_accnt_txt_field_name"><![CDATA[Name]]></string>
+    <string name="_bx_accnt_txt_field_email"><![CDATA[Email]]></string>
+    <string name="_bx_accnt_txt_field_email_confirmed"><![CDATA[Email Confirmed]]></string>
+    <string name="_bx_accnt_txt_field_phone"><![CDATA[Phone]]></string>
+    <string name="_bx_accnt_txt_field_receive_updates"><![CDATA[Receive Updates]]></string>
+    <string name="_bx_accnt_txt_field_receive_news"><![CDATA[Receive News]]></string>
+    <string name="_bx_accnt_txt_field_added"><![CDATA[Added]]></string>
+    <string name="_bx_accnt_txt_field_changed"><![CDATA[Changed]]></string>
+    <string name="_bx_accnt_txt_field_logged"><![CDATA[Logged]]></string>
+    <string name="_bx_accnt_txt_field_ip"><![CDATA[IP]]></string>
+    <string name="_bx_accnt_txt_field_lang_id"><![CDATA[Language]]></string>
+</resources>

+ 2 - 1
modules/boonex/accounts/updates/14.0.1_14.0.2/source/install/sql/enable.sql

@@ -12,6 +12,7 @@ VALUES (@iTypeId, @sName, '_bx_accounts', 1);
 SET @iCategId = LAST_INSERT_ID();
 
 INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_error`, `extra`, `order`) VALUES
+('bx_accounts_last_active_sorting', '', @iCategId, '_bx_accounts_option_last_active_sorting', 'checkbox', '', '', '', 1),
 ('bx_accounts_export_to', 'csv', @iCategId, '_bx_accounts_option_export_to', 'select', '', '', 'a:2:{s:6:"module";s:11:"bx_accounts";s:6:"method";s:21:"get_options_export_to";}', 10),
 ('bx_accounts_export_fields', 'name,email', @iCategId, '_bx_accounts_option_export_fields', 'list', '', '', 'a:2:{s:6:"module";s:11:"bx_accounts";s:6:"method";s:25:"get_options_export_fields";}', 20);
 
@@ -81,7 +82,7 @@ INSERT INTO `sys_acl_matrix` (`IDLevel`, `IDAction`) VALUES
 
 -- GRIDS: administration
 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`, `show_total_count`, `override_class_name`, `override_class_file`) VALUES
-('bx_accounts_administration', 'Sql', 'SELECT `ta`.*, `tp`.`status` AS `status`, `ta`.`active`, `ts`.`date` AS `last_active` FROM `sys_accounts` AS `ta` LEFT JOIN `sys_sessions` AS `ts` ON `ta`.`id`=`ts`.`user_id` LEFT JOIN `sys_profiles` AS `tp` ON `ta`.`id`=`tp`.`account_id` AND `tp`.`type`=''system'' WHERE 1 ', 'sys_accounts', 'id', 'logged', 'status', '', 20, NULL, 'start', '', 'name,email,ip,phone', '', 'like', 'email_confirmed,logged,last_active,added', '', 192, 1, 'BxAccntGridAdministration', 'modules/boonex/accounts/classes/BxAccntGridAdministration.php');
+('bx_accounts_administration', 'Sql', 'SELECT `ta`.*, `tp`.`status` AS `status`, `ta`.`active` {select} FROM `sys_accounts` AS `ta` LEFT JOIN `sys_profiles` AS `tp` ON `ta`.`id`=`tp`.`account_id` AND `tp`.`type`=''system'' {join} WHERE 1 ', 'sys_accounts', 'id', 'logged', 'status', '', 20, NULL, 'start', '', 'name,email,ip,phone', '', 'like', 'email_confirmed,logged,added', '', 192, 1, 'BxAccntGridAdministration', 'modules/boonex/accounts/classes/BxAccntGridAdministration.php');
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
 ('bx_accounts_administration', 'checkbox', '_sys_select', '2%', 0, '', '', 1),

+ 2 - 1
modules/boonex/channels/updates/14.0.3_14.0.4/install/installer.php

@@ -22,7 +22,8 @@ class BxCnlUpdater extends BxDolStudioUpdater
                 $this->oDb->query("ALTER TABLE `bx_cnl_data` ADD `contents` int(11) NOT NULL default '0' AFTER `lc_date`");
 
             if(!$this->oDb->isFieldExists('bx_cnl_content', 'date'))
-        }           $this->oDb->query("ALTER TABLE `bx_cnl_content` ADD `date` int(11) NOT NULL default '0' AFTER `module_name`");
+                $this->oDb->query("ALTER TABLE `bx_cnl_content` ADD `date` int(11) NOT NULL default '0' AFTER `module_name`");
+        }
 
         return parent::actionExecuteSql($sOperation);
     }

+ 1 - 0
modules/boonex/russian/updates/14.0.4_14.0.5/install/config.php

@@ -44,6 +44,7 @@ $aConfig = array(
      * Category for language keys.
      */
     'language_category' => array(
+        array('name' => 'Accounts', 'path' => 'bx_accounts/'),
         array('name' => 'Boonex Artificer Template', 'path' => 'bx_artificer/'),
         array('name' => 'Channels', 'path' => 'bx_channels/'),
         array('name' => 'Credits', 'path' => 'bx_credits/'),

+ 4 - 0
modules/boonex/russian/updates/14.0.4_14.0.5/install/langs/bx_accounts/ru.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="ru" flag="ru" title="Russian">
+	<string_add name="_bx_accounts_option_last_active_sorting"><![CDATA[Включить сортировку по последней активности]]></string_add>
+</resources>

+ 124 - 0
modules/boonex/russian/updates/14.0.4_14.0.5/source/data/langs/bx_accounts/ru.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="ru" flag="ru" title="Russian">
+    <string name="_bx_accnt"><![CDATA[Аккаунты]]></string>
+    <string name="_bx_accounts"><![CDATA[Аккаунты]]></string>
+
+    <string name="_bx_accounts_option_last_active_sorting"><![CDATA[Включить сортировку по последней активности]]></string>
+    <string name="_bx_accounts_option_export_to"><![CDATA[Экспортировать в]]></string>
+    <string name="_bx_accounts_option_export_fields"><![CDATA[Экспортируемые поля]]></string>
+
+    <string name="_bx_accounts_form_display_account_settings_email_popup"><![CDATA[Изменить email]]></string>
+    <string name="_bx_accounts_form_display_account_create_popup"><![CDATA[Создать новый аккаунт]]></string>
+    <string name="_bx_accounts_form_display_account_settings_password_popup"><![CDATA[Сбросить пароль]]></string>
+    <string name="_bx_accounts_form_display_account_send_message"><![CDATA[Отправить тестовое письмо]]></string>
+
+    <string name="_bx_accnt_page_title_sys_manage_administration"><![CDATA[Управление всеми аккаунтами]]></string>
+    <string name="_bx_accnt_page_title_manage"><![CDATA[Управление аккаунтами]]></string>
+    <string name="_bx_accnt_page_title_browse"><![CDATA[Аккаунты]]></string>
+
+    <string name="_bx_accnt_page_block_title_system_manage_administration"><![CDATA[Управление всеми аккаунтами]]></string>
+    <string name="_bx_accnt_page_block_title_manage"><![CDATA[Управление аккаунтами]]></string>
+
+    <string name="_bx_accnt_menu_set_title_manage_tools"><![CDATA[Управление меню инструментов]]></string>
+    <string name="_bx_accnt_menu_title_manage_tools"><![CDATA[Управление меню инструментов]]></string>
+    <string name="_bx_accnt_menu_item_title_system_edit_email"><![CDATA[Изменить email]]></string>
+    <string name="_bx_accnt_menu_item_title_edit_email"><![CDATA[Изменить email]]></string>
+    <string name="_bx_accnt_menu_item_title_system_resend_cemail"><![CDATA[Переслать подтверждение]]></string>
+    <string name="_bx_accnt_menu_item_title_resend_cemail"><![CDATA[Переслать подтверждение]]></string>
+    <string name="_bx_accnt_menu_item_title_system_confirm"><![CDATA[Подтвердить]]></string>
+    <string name="_bx_accnt_menu_item_title_confirm"><![CDATA[Подтвердить]]></string>
+    <string name="_bx_accnt_menu_item_title_system_reset_password"><![CDATA[Сбросить пароль]]></string>
+    <string name="_bx_accnt_menu_item_title_reset_password"><![CDATA[Сбросить пароль]]></string>
+    <string name="_bx_accnt_menu_item_title_system_resend_remail"><![CDATA[Переслать сброс пароля]]></string>
+    <string name="_bx_accnt_menu_item_title_resend_remail"><![CDATA[Переслать сброс пароля]]></string>
+    <string name="_bx_accnt_menu_item_title_system_unlock_account"><![CDATA[Разблокировать]]></string>
+    <string name="_bx_accnt_menu_item_title_unlock_account"><![CDATA[Разблокировать]]></string>
+    <string name="_bx_accnt_menu_item_title_system_delete"><![CDATA[Удалить]]></string>
+    <string name="_bx_accnt_menu_item_title_delete"><![CDATA[Удалить]]></string>
+    <string name="_bx_accnt_menu_item_title_system_delete_with_content"><![CDATA[Удалить вместе с содержимым]]></string>
+    <string name="_bx_accnt_menu_item_title_delete_with_content"><![CDATA[Удалить вместе с содержимым]]></string>
+    <string name="_bx_accnt_menu_item_title_system_make_operator"><![CDATA[Дать доступ Оператора]]></string>
+    <string name="_bx_accnt_menu_item_title_make_operator"><![CDATA[Дать доступ Оператора]]></string>
+    <string name="_bx_accnt_menu_item_title_system_unmake_operator"><![CDATA[Отменить доступ Оператора]]></string>
+    <string name="_bx_accnt_menu_item_title_unmake_operator"><![CDATA[Отменить доступ Оператора]]></string>
+    <string name="_bx_accnt_menu_item_title_system_set_operator_role"><![CDATA[Сменить роль оператора]]></string>
+    <string name="_bx_accnt_menu_item_title_set_operator_role"><![CDATA[Сменить роль оператора]]></string>
+    <string name="_bx_accnt_menu_item_title_system_admt_accounts"><![CDATA[Аккаунты]]></string>
+    <string name="_bx_accnt_menu_item_title_admt_accounts"><![CDATA[Аккаунты]]></string>
+    <string name="_bx_accnt_menu_item_title_manage"><![CDATA[Управление]]></string>
+    <string name="_bx_accnt_menu_dashboard_manage_tools_addon_counter1_caption"><![CDATA[неподтверждено]]></string>
+
+    <string name="_bx_accnt_acl_action_edit_any_account"><![CDATA[Редактировать любой аккаунт]]></string>
+    <string name="_bx_accnt_acl_action_delete_any_account"><![CDATA[Удалять любой аккаунт]]></string>
+
+    <string name="_bx_accnt_grid_filter_item_title_adm_select_one_filter1"><![CDATA[Все статусы]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_select_one_filter2"><![CDATA[Все]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_active"><![CDATA[Активный]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_operators"><![CDATA[Операторы]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_pending"><![CDATA[Неактивный]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_suspended"><![CDATA[Приостановленный]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_unconfirmed"><![CDATA[Неподтверждённый]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_locked"><![CDATA[Заблокированный]]></string>
+    <string name="_bx_accnt_grid_filter_item_title_adm_without_profile"><![CDATA[Без профайлов]]></string>
+
+    <string name="_bx_accnt_grid_column_title_adm_active"><![CDATA[Активный]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_name"><![CDATA[Имя]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_email"><![CDATA[Email]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_ip"><![CDATA[IP]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_is_confirmed"><![CDATA[Подтверждён]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_profiles"><![CDATA[Профили]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_logged"><![CDATA[Последний вход]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_last_active"><![CDATA[Последняя активность]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_added"><![CDATA[Создана]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_activate"><![CDATA[Активировать]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_suspend"><![CDATA[Заблокировать]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_confirm"><![CDATA[Подтвердить]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_edit_email"><![CDATA[Изменить email]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_export"><![CDATA[Экспортировать]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_export_all"><![CDATA[Экспортировать все]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_resend_cemail"><![CDATA[Переслать подтверждение]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_resend_remail"><![CDATA[Переслать сброс пароля]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_reset_password"><![CDATA[Сбросить пароль]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_unlock_account"><![CDATA[Разблокировать]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_delete"><![CDATA[Удалить]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_delete_with_content"><![CDATA[Удалить вместе с содержимым]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_send_message"><![CDATA[Отправить письмо]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_more_actions"><![CDATA[Дополнительно]]></string>
+    <string name="_bx_accnt_grid_action_title_adm_more_add"><![CDATA[Добавить новый]]></string>
+    <string name="_bx_accnt_grid_action_err_delete"><![CDATA[Невозможно удалить выбранный(ные) аккаунт(ы).]]></string>
+    <string name="_bx_accnt_grid_action_err_perform"><![CDATA[Невозможно выполнить действие для выбранного(ных) аккаунта(ов).]]></string>
+    <string name="_bx_accnt_grid_action_unlock_successed"><![CDATA[Успешно разблокирован]]></string>
+    <string name="_bx_accnt_grid_action_unlock_error"><![CDATA[Аккаунт не является заблокированным]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_none"><![CDATA[Нет]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_email"><![CDATA[Email]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_phone"><![CDATA[Телефон]]></string>
+    <string name="_bx_accnt_grid_confirmation_status_email_and_phone"><![CDATA[Все]]></string>
+
+    <string name="_bx_accnt_form_login_input_caption_system_email_confirmed"><![CDATA[Email подтвержден]]></string>
+    <string name="_bx_accnt_form_account_input_email_confirmed"><![CDATA[Email подтвержден]]></string>
+    <string name="_bx_accnt_form_account_input_caption_system_message_subject"><![CDATA[Тема письма]]></string>
+    <string name="_bx_accnt_form_account_input_caption_message_subject"><![CDATA[Тема письма]]></string>
+    <string name="_bx_accnt_form_account_input_message_subject_error"><![CDATA[Тема письма не может быть пустой]]></string>
+    <string name="_bx_accnt_form_account_input_caption_system_message_text"><![CDATA[Текст письма]]></string>
+    <string name="_bx_accnt_form_account_input_caption_message_text"><![CDATA[Текст письма]]></string>
+    <string name="_bx_accnt_form_account_input_message_text_error"><![CDATA[Текст письма не может быть пустой]]></string>
+    <string name="_bx_accnt_form_display_send_message"><![CDATA[Отправка тестового письма]]></string>
+
+    <string name="_bx_accnt_txt_more"><![CDATA[{0} ещё]]></string>
+    <string name="_bx_accnt_txt_see_more"><![CDATA[Ещё]]></string>
+    <string name="_bx_accnt_txt_copy_to_clipboard"><![CDATA[Скопировать]]></string>
+    <string name="_bx_accnt_txt_not_operator"><![CDATA[Не оператор]]></string>
+    <string name="_bx_accnt_txt_export_to_csv"><![CDATA[CSV]]></string>
+    <string name="_bx_accnt_txt_export_to_xml"><![CDATA[XML]]></string>
+    <string name="_bx_accnt_txt_field_name"><![CDATA[Имя]]></string>
+    <string name="_bx_accnt_txt_field_email"><![CDATA[Email]]></string>
+    <string name="_bx_accnt_txt_field_email_confirmed"><![CDATA[Email подтвержден]]></string>
+    <string name="_bx_accnt_txt_field_phone"><![CDATA[Телефон]]></string>
+    <string name="_bx_accnt_txt_field_receive_updates"><![CDATA[Получать обновления]]></string>
+    <string name="_bx_accnt_txt_field_receive_news"><![CDATA[Получать новости]]></string>
+    <string name="_bx_accnt_txt_field_added"><![CDATA[Создан]]></string>
+    <string name="_bx_accnt_txt_field_changed"><![CDATA[Изменен]]></string>
+    <string name="_bx_accnt_txt_field_logged"><![CDATA[Заходил]]></string>
+    <string name="_bx_accnt_txt_field_ip"><![CDATA[IP]]></string>
+    <string name="_bx_accnt_txt_field_lang_id"><![CDATA[Язык]]></string>
+</resources>