فهرست منبع

Merge branch 'master' of https://github.com/unaio/una

AntonLV 3 سال پیش
والد
کامیت
0fbf7341ad

+ 1 - 1
inc/classes/BxDolAccountQuery.php

@@ -336,7 +336,7 @@ class BxDolAccountQuery extends BxDolDb implements iBxDolSingleton
      * @param  mixed     $sValue          database field value
      * @return specified account field value
      */
-    protected function _updateField ($iId, $sFieldForUpdate, $sValue)
+    public function _updateField ($iId, $sFieldForUpdate, $sValue)
     {
         $sSql = $this->prepare("UPDATE `sys_accounts` SET `$sFieldForUpdate` = ? WHERE `id` = ? LIMIT 1", $sValue, $iId);
         return $this->query($sSql);

+ 18 - 0
inc/classes/BxDolSessionQuery.php

@@ -54,17 +54,35 @@ class BxDolSessionQuery extends BxDolDb
     }
     function delete($sId)
     {
+        $sSql = $this->prepare("SELECT `user_id`, `date` FROM `" . $this->sTable . "` WHERE `id`=? LIMIT 1", $sId);
+        $aRow = $this->getRow($sSql);
+        $this->updateLastActivityAccount($aRow['user_id'], $aRow['date']);
+        
         $sSql = $this->prepare("DELETE FROM `" . $this->sTable . "` WHERE `id`=? LIMIT 1", $sId);
         return (int)$this->query($sSql) > 0;
     }
     function deleteExpired()
     {
+        $sSql = $this->prepare("SELECT `user_id`, `date` FROM `" . $this->sTable . "` WHERE `date` < (UNIX_TIMESTAMP() - ?)", BX_DOL_SESSION_LIFETIME);
+        $aRows = $this->getAll($sSql);
+        
+        foreach ($aRows as $aRow) {
+            $this->updateLastActivityAccount($aRow['user_id'], $aRow['date']);
+        }
+        
         $sSql = $this->prepare("DELETE FROM `" . $this->sTable . "` WHERE `date` < (UNIX_TIMESTAMP() - ?)", BX_DOL_SESSION_LIFETIME);
         $iRet = (int)$this->query($sSql);
         if ($iRet)
             $this->query("OPTIMIZE TABLE `" . $this->sTable . "`");
         return $iRet;
     }
+    
+    function updateLastActivityAccount($iId, $iDate)
+    {
+        if ($iDate > 0)
+            BxDolAccountQuery::getInstance()->_updateField($iId, 'active', $iDate);
+    }
+    
     function getOldSession($iUserId) {
         $sSql = $this->prepare("SELECT `id` FROM `" . $this->sTable . "` WHERE `user_id`=? LIMIT 1", $iUserId);
         $sSession = $this->getOne($sSql);

+ 1 - 0
install/sql/system.sql

@@ -1210,6 +1210,7 @@ CREATE TABLE `sys_accounts` (
   `login_attempts` tinyint(4) NOT NULL DEFAULT '0',
   `locked` tinyint(4) NOT NULL DEFAULT '0',
   `password_expired` int(11) NOT NULL DEFAULT '0',
+  `active` int(11) NOT NULL DEFAULT '0',    
   PRIMARY KEY (`id`),
   UNIQUE KEY `email` (`email`(191)),
   KEY `added` (`added`),

+ 7 - 0
modules/boonex/accounts/classes/BxAccntGridAdministration.php

@@ -611,6 +611,13 @@ class BxAccntGridAdministration extends BxBaseModProfileGridAdministration
         return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
     } 
     
+    protected function _getCellLastActive($mixedValue, $sKey, $aField, $aRow)
+    {
+        $mixedValue = !empty($mixedValue) ? bx_time_js($mixedValue) : _t('_sys_not_available');
+
+        return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+    } 
+    
     protected function _getCellAdded($mixedValue, $sKey, $aField, $aRow)
     {
         $mixedValue = !empty($mixedValue) ? bx_time_js($mixedValue) : _t('_sys_not_available');

+ 1 - 0
modules/boonex/accounts/install/langs/en.xml

@@ -67,6 +67,7 @@
     <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>

+ 8 - 7
modules/boonex/accounts/install/sql/enable.sql

@@ -81,18 +81,19 @@ 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` FROM `sys_accounts` AS `ta` 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,added', '', 192, 1, 'BxAccntGridAdministration', 'modules/boonex/accounts/classes/BxAccntGridAdministration.php');
+('bx_accounts_administration', 'Sql', 'SELECT `ta`.*, `tp`.`status` AS `status`, IFNULL(`ts`.`date`, `ta`.`active`) AS `last_active` FROM `sys_accounts` AS `ta` LEFT JOIN `sys_profiles` AS `tp` ON `ta`.`id`=`tp`.`account_id` AND `tp`.`type`=''system'' LEFT JOIN `sys_sessions` AS `ts` ON `ts`.`user_id` = `ta`.`id` WHERE 1 ', 'sys_accounts', 'id', 'logged', 'status', '', 20, NULL, 'start', '', 'name,email,ip,phone', '', 'like', 'email_confirmed,logged,added,last_active', '', 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),
 ('bx_accounts_administration', 'switcher', '_bx_accnt_grid_column_title_adm_active', '6%', 0, '', '', 2),
-('bx_accounts_administration', 'name', '_bx_accnt_grid_column_title_adm_name', '16%', 0, '16', '', 3),
-('bx_accounts_administration', 'email', '_bx_accnt_grid_column_title_adm_email', '22%', 0, '16', '', 4),
-('bx_accounts_administration', 'is_confirmed', '_bx_accnt_grid_column_title_adm_is_confirmed', '5%', 0, '', '', 5),
-('bx_accounts_administration', 'profiles', '_bx_accnt_grid_column_title_adm_profiles', '23%', 0, '', '', 6),
+('bx_accounts_administration', 'name', '_bx_accnt_grid_column_title_adm_name', '12%', 0, '16', '', 3),
+('bx_accounts_administration', 'email', '_bx_accnt_grid_column_title_adm_email', '16%', 0, '16', '', 4),
+('bx_accounts_administration', 'is_confirmed', '_bx_accnt_grid_column_title_adm_is_confirmed', '4%', 0, '', '', 5),
+('bx_accounts_administration', 'profiles', '_bx_accnt_grid_column_title_adm_profiles', '24%', 0, '', '', 6),
 ('bx_accounts_administration', 'logged', '_bx_accnt_grid_column_title_adm_logged', '10%', 0, '15', '', 7),
-('bx_accounts_administration', 'added', '_bx_accnt_grid_column_title_adm_added', '10%', 0, '15', '', 8),
-('bx_accounts_administration', 'actions', '', '6%', 0, '', '', 9);
+('bx_accounts_administration', 'last_active', '_bx_accnt_grid_column_title_adm_last_active', '10%', 0, '15', '', 8),
+('bx_accounts_administration', 'added', '_bx_accnt_grid_column_title_adm_added', '10%', 0, '15', '', 9),
+('bx_accounts_administration', 'actions', '', '6%', 0, '', '', 10);
 
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
 ('bx_accounts_administration', 'bulk', 'activate', '_bx_accnt_grid_action_title_adm_activate', '', 0, 0, 1),

+ 2 - 1
modules/boonex/russian/data/langs/bx_accounts/ru.xml

@@ -66,7 +66,8 @@
     <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_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>