Просмотр исходного кода

#4868 Content update services and API: logout

Alex Trofimov 1 год назад
Родитель
Сommit
aae6cb3f8c
2 измененных файлов с 23 добавлено и 5 удалено
  1. 15 3
      inc/classes/BxDolSessionQuery.php
  2. 8 2
      template/scripts/BxBaseServiceContent.php

+ 15 - 3
inc/classes/BxDolSessionQuery.php

@@ -84,6 +84,15 @@ class BxDolSessionQuery extends BxDolDb
         return $iRet;
     }
     
+    function deleteByAccountId($iAccountId)
+    {
+        $iDate = $this->getOne("SELECT `date` FROM `" . $this->sTable . "` WHERE `user_id` = :id ORDER BY `date` DESC", ['id' => $iAccountId]);
+        if ($iDate)
+            $this->updateLastActivityAccount($iAccountId, $iDate);
+        
+        return (int)$this->query("DELETE FROM `" . $this->sTable . "` WHERE `user_id` = :id", ['id' => $iAccountId]);
+    }
+
     function updateLastActivity($iId)
     {
         if (defined('BX_DOL_SESSION_UPDATE_ACTIVE') && ($aRow = $this->getRow("SELECT `date`, `user_id` FROM `" . $this->sTable . "` WHERE `id` = :id AND `date` < UNIX_TIMESTAMP() - " . BX_DOL_SESSION_UPDATE_ACTIVE, ['id' => $iId]))) {
@@ -91,10 +100,13 @@ class BxDolSessionQuery extends BxDolDb
         }
     }
 
-    function updateLastActivityAccount($iId, $iDate)
+    function updateLastActivityAccount($iAccountId, $iDate)
     {
-        if ($iDate > 0)
-            BxDolAccountQuery::getInstance()->_updateField($iId, 'active', $iDate);
+        if ($iDate > 0) {
+            $a = BxDolAccountQuery::getInstance()->getInfoById($iAccountId);
+            if ($iDate > $a['active'])
+                BxDolAccountQuery::getInstance()->_updateField($iAccountId, 'active', $iDate);
+        }
     }
 
     function getLastActivityAccount($iUserId)

+ 8 - 2
template/scripts/BxBaseServiceContent.php

@@ -72,12 +72,18 @@ class BxBaseServiceContent extends BxDol
     /** 
      * @ref bx_system_general_cnt-logout "Logout current user"
      */
-    function serviceLogout()
+    function serviceLogout($bAllSessions = false)
     {
         if (!isLogged())
             return false;
         
-        bx_logout();
+        if ($bAllSessions) {
+            $o = new BxDolSessionQuery();
+            $o->deleteByAccountId(getLoggedId());
+        }
+        else {
+            bx_logout();
+        }
 
         return true;
     }