[TASK] Remove $db property in UserAuthentication classes 66/48366/2
authorMarkus Klein <markus.klein@typo3.org>
Sat, 28 May 2016 16:14:18 +0000 (18:14 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Sat, 28 May 2016 16:31:43 +0000 (18:31 +0200)
Resolves: #76353
Releases: master
Change-Id: I90799c3652e7edd8ee3048f39b50237470fed19b
Reviewed-on: https://review.typo3.org/48366
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/backend/Classes/FrontendBackendUserAuthentication.php
typo3/sysext/core/Classes/Authentication/AbstractUserAuthentication.php
typo3/sysext/core/Classes/Authentication/BackendUserAuthentication.php
typo3/sysext/core/Tests/Unit/Authentication/BackendUserAuthenticationTest.php
typo3/sysext/frontend/Classes/Authentication/FrontendUserAuthentication.php

index 83df9c5..2d3d856 100755 (executable)
@@ -231,6 +231,7 @@ class FrontendBackendUserAuthentication extends \TYPO3\CMS\Core\Authentication\B
      */
     public function extGetTreeList($id, $depth, $begin = 0, $perms_clause)
     {
+        $db = $this->getDatabaseConnection();
         $depth = (int)$depth;
         $begin = (int)$begin;
         $id = (int)$id;
@@ -238,8 +239,8 @@ class FrontendBackendUserAuthentication extends \TYPO3\CMS\Core\Authentication\B
         if ($id && $depth > 0) {
             $where = 'pid=' . $id . ' AND doktype IN (' . $GLOBALS['TYPO3_CONF_VARS']['FE']['content_doktypes']
                 . ') AND deleted=0 AND ' . $perms_clause;
-            $res = $this->db->exec_SELECTquery('uid,title', 'pages', $where);
-            while (($row = $this->db->sql_fetch_assoc($res))) {
+            $res = $db->exec_SELECTquery('uid,title', 'pages', $where);
+            while (($row = $db->sql_fetch_assoc($res))) {
                 if ($begin <= 0) {
                     $theList .= $row['uid'] . ',';
                     $this->extPageInTreeInfo[] = array($row['uid'], htmlspecialchars($row['title'], $depth));
@@ -248,7 +249,7 @@ class FrontendBackendUserAuthentication extends \TYPO3\CMS\Core\Authentication\B
                     $theList .= $this->extGetTreeList($row['uid'], $depth - 1, $begin - 1, $perms_clause);
                 }
             }
-            $this->db->sql_free_result($res);
+            $db->sql_free_result($res);
         }
         return $theList;
     }
index abec38e..0c169ef 100644 (file)
@@ -341,16 +341,10 @@ abstract class AbstractUserAuthentication
     public $uc;
 
     /**
-     * @var DatabaseConnection
-     */
-    protected $db = null;
-
-    /**
      * Initialize some important variables
      */
     public function __construct()
     {
-        $this->db = $this->getDatabaseConnection();
     }
 
     /**
@@ -911,7 +905,6 @@ abstract class AbstractUserAuthentication
      */
     public function fetchUserSession($skipSessionUpdate = false)
     {
-        $user = false;
         if ($this->writeDevLog) {
             GeneralUtility::devLog('Fetch session ses_id = ' . $this->id, AbstractUserAuthentication::class);
         }
index a93371f..ca0ab84 100644 (file)
@@ -846,7 +846,7 @@ class BackendUserAuthentication extends \TYPO3\CMS\Core\Authentication\AbstractU
      *   and where the stage is not preventing records
      *
      * @param string $table Table of record
-     * @param array $recData Integer (record uid) or array where fields are at least: pid, t3ver_wsid, t3ver_stage (if versioningWS is set)
+     * @param array|int $recData Integer (record uid) or array where fields are at least: pid, t3ver_wsid, t3ver_stage (if versioningWS is set)
      * @return string String error code, telling the failure state. FALSE=All ok
      */
     public function workspaceCannotEditRecord($table, $recData)
@@ -903,7 +903,7 @@ class BackendUserAuthentication extends \TYPO3\CMS\Core\Authentication\AbstractU
      * Evaluates if a user is allowed to edit the offline version
      *
      * @param string $table Table of record
-     * @param array $recData Integer (record uid) or array where fields are at least: pid, t3ver_wsid, t3ver_stage (if versioningWS is set)
+     * @param array|int $recData Integer (record uid) or array where fields are at least: pid, t3ver_wsid, t3ver_stage (if versioningWS is set)
      * @return string String error code, telling the failure state. FALSE=All ok
      * @see workspaceCannotEditRecord()
      */
index 29fd572..e664c4e 100644 (file)
@@ -19,6 +19,7 @@ use Prophecy\Prophecy\ObjectProphecy;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Database\DatabaseConnection;
 use TYPO3\CMS\Core\Type\Bitmask\JsConfirmation;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
@@ -92,10 +93,10 @@ class BackendUserAuthenticationTest extends \TYPO3\CMS\Core\Tests\UnitTestCase
         // logoff() call the static factory that has a dependency to a valid BE_USER object. Mock this away
         $GLOBALS['BE_USER'] = $this->getMock(BackendUserAuthentication::class, array(), array(), '', false);
         $GLOBALS['BE_USER']->user = array('uid' => $this->getUniqueId());
-        $GLOBALS['TYPO3_DB'] = $this->getMock(\TYPO3\CMS\Core\Database\DatabaseConnection::class, array(), array(), '', false);
+        $GLOBALS['TYPO3_DB'] = $this->getMock(DatabaseConnection::class, array(), array(), '', false);
 
-        $subject = $this->getAccessibleMock(BackendUserAuthentication::class, array('dummy'), array(), '', false);
-        $subject->_set('db', $GLOBALS['TYPO3_DB']);
+        /** @var BackendUserAuthentication|\PHPUnit_Framework_MockObject_MockObject $subject */
+        $subject = $this->getMock(BackendUserAuthentication::class, array('dummy'), array(), '', false);
         $subject->logoff();
     }
 
index a3799d7..133a431 100644 (file)
@@ -399,9 +399,10 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
      */
     public function fetchSessionData()
     {
+        $db = $this->getDatabaseConnection();
         // Gets SesData if any AND if not already selected by session fixation check in ->isExistingSessionRecord()
         if ($this->id && empty($this->sesData)) {
-            $statement = $this->db->prepare_SELECTquery('*', 'fe_session_data', 'hash = :hash');
+            $statement = $db->prepare_SELECTquery('*', 'fe_session_data', 'hash = :hash');
             $statement->execute(array(':hash' => $this->id));
             if (($sesDataRow = $statement->fetch()) !== false) {
                 $this->sesData = unserialize($sesDataRow['content']);
@@ -426,6 +427,7 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
         if ($this->userData_change) {
             $this->writeUC('');
         }
+        $db = $this->getDatabaseConnection();
         if ($this->sesData_change && $this->id) {
             if (empty($this->sesData)) {
                 // Remove session-data
@@ -442,7 +444,7 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
                     'tstamp' => $GLOBALS['EXEC_TIME']
                 );
                 $this->sessionDataTimestamp = $GLOBALS['EXEC_TIME'];
-                $this->db->exec_INSERTquery('fe_session_data', $insertFields);
+                $db->exec_INSERTquery('fe_session_data', $insertFields);
                 // Now set the cookie (= fix the session)
                 $this->setSessionCookie();
             } else {
@@ -452,7 +454,7 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
                     'tstamp' => $GLOBALS['EXEC_TIME']
                 );
                 $this->sessionDataTimestamp = $GLOBALS['EXEC_TIME'];
-                $this->db->exec_UPDATEquery('fe_session_data', 'hash=' . $this->db->fullQuoteStr($this->id, 'fe_session_data'), $updateFields);
+                $db->exec_UPDATEquery('fe_session_data', 'hash=' . $db->fullQuoteStr($this->id, 'fe_session_data'), $updateFields);
             }
         }
     }
@@ -464,8 +466,9 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
      */
     public function removeSessionData()
     {
+        $db = $this->getDatabaseConnection();
         $this->sessionDataTimestamp = null;
-        $this->db->exec_DELETEquery('fe_session_data', 'hash=' . $this->db->fullQuoteStr($this->id, 'fe_session_data'));
+        $db->exec_DELETEquery('fe_session_data', 'hash=' . $db->fullQuoteStr($this->id, 'fe_session_data'));
     }
 
     /**
@@ -491,12 +494,13 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
      */
     protected function regenerateSessionId()
     {
+        $db = $this->getDatabaseConnection();
         $oldSessionId = $this->id;
         parent::regenerateSessionId();
         // Update session data with new ID
-        $this->db->exec_UPDATEquery(
+        $db->exec_UPDATEquery(
             'fe_session_data',
-            'hash=' . $this->db->fullQuoteStr($oldSessionId, 'fe_session_data'),
+            'hash=' . $db->fullQuoteStr($oldSessionId, 'fe_session_data'),
             array('hash' => $this->id)
         );
 
@@ -513,7 +517,7 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
     public function gc()
     {
         $timeoutTimeStamp = (int)($GLOBALS['EXEC_TIME'] - $this->sessionDataLifetime);
-        $this->db->exec_DELETEquery('fe_session_data', 'tstamp < ' . $timeoutTimeStamp);
+        $this->getDatabaseConnection()->exec_DELETEquery('fe_session_data', 'tstamp < ' . $timeoutTimeStamp);
         parent::gc();
     }
 
@@ -658,7 +662,7 @@ class FrontendUserAuthentication extends AbstractUserAuthentication
         $count = parent::isExistingSessionRecord($id);
         // Check if there are any fe_session_data records for the session ID the client claims to have
         if ($count == false) {
-            $statement = $this->db->prepare_SELECTquery('content,tstamp', 'fe_session_data', 'hash = :hash');
+            $statement = $this->getDatabaseConnection()->prepare_SELECTquery('content,tstamp', 'fe_session_data', 'hash = :hash');
             $res = $statement->execute(array(':hash' => $id));
             if ($res !== false) {
                 if ($sesDataRow = $statement->fetch()) {