[BUGFIX] Remove wrong break; statement in rootline check
[Packages/TYPO3.CMS.git] / typo3 / sysext / frontend / Classes / Hooks / TreelistCacheUpdateHooks.php
index 7661dc2..34a8560 100644 (file)
@@ -15,12 +15,13 @@ namespace TYPO3\CMS\Frontend\Hooks;
  */
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\DataHandling\DataHandler;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
- * Class that hooks into TCEmain and listens for updates to pages to update the
+ * Class that hooks into DataHandler and listens for updates to pages to update the
  * treelist cache
  */
 class TreelistCacheUpdateHooks
@@ -58,27 +59,26 @@ class TreelistCacheUpdateHooks
     }
 
     /**
-     * waits for TCEmain commands and looks for changed pages, if found further
+     * waits for DataHandler commands and looks for changed pages, if found further
      * changes take place to determine whether the cache needs to be updated
      *
-     * @param string $status TCEmain operation status, either 'new' or 'update'
+     * @param string $status DataHandler operation status, either 'new' or 'update'
      * @param string $table The DB table the operation was carried out on
      * @param mixed $recordId The record's uid for update records, a string to look the record's uid up after it has been created
-     * @param array $updatedFields Array of changed fiels and their new values
-     * @param DataHandler $tceMain TCEmain parent object
-     * @return void
+     * @param array $updatedFields Array of changed fields and their new values
+     * @param DataHandler $dataHandler DataHandler parent object
      */
-    public function processDatamap_afterDatabaseOperations($status, $table, $recordId, array $updatedFields, DataHandler $tceMain)
+    public function processDatamap_afterDatabaseOperations($status, $table, $recordId, array $updatedFields, DataHandler $dataHandler)
     {
-        if ($table == 'pages' && $this->requiresUpdate($updatedFields)) {
+        if ($table === 'pages' && $this->requiresUpdate($updatedFields)) {
             $affectedPagePid = 0;
             $affectedPageUid = 0;
-            if ($status == 'new') {
+            if ($status === 'new') {
                 // Detect new pages
                 // Resolve the uid
-                $affectedPageUid = $tceMain->substNEWwithIDs[$recordId];
+                $affectedPageUid = $dataHandler->substNEWwithIDs[$recordId];
                 $affectedPagePid = $updatedFields['pid'];
-            } elseif ($status == 'update') {
+            } elseif ($status === 'update') {
                 // Detect updated pages
                 $affectedPageUid = $recordId;
                 // When updating a page the pid is not directly available so we
@@ -99,10 +99,9 @@ class TreelistCacheUpdateHooks
      * @param string $table The record's table
      * @param int $recordId The record's uid
      * @param array $commandValue The commands value, typically an array with more detailed command information
-     * @param DataHandler $tceMain The TCEmain parent object
-     * @return void
+     * @param DataHandler $dataHandler The DataHandler parent object
      */
-    public function processCmdmap_postProcess($command, $table, $recordId, $commandValue, DataHandler $tceMain)
+    public function processCmdmap_postProcess($command, $table, $recordId, $commandValue, DataHandler $dataHandler)
     {
         $action = (is_array($commandValue) && isset($commandValue['action'])) ? (string)$commandValue['action'] : '';
         if ($table === 'pages' && ($command === 'delete' || ($command === 'version' && $action === 'swap'))) {
@@ -128,7 +127,7 @@ class TreelistCacheUpdateHooks
     }
 
     /**
-     * waits for TCEmain commands and looks for moved pages, if found further
+     * waits for DataHandler commands and looks for moved pages, if found further
      * changes take place to determine whether the cache needs to be updated
      *
      * @param string $table Table name of the moved record
@@ -136,12 +135,11 @@ class TreelistCacheUpdateHooks
      * @param int $destinationPid The record's destination page id
      * @param array $movedRecord The record that moved
      * @param array $updatedFields Array of changed fields
-     * @param DataHandler $tceMain TCEmain parent object
-     * @return void
+     * @param DataHandler $dataHandler DataHandler parent object
      */
-    public function moveRecord_firstElementPostProcess($table, $recordId, $destinationPid, array $movedRecord, array $updatedFields, DataHandler $tceMain)
+    public function moveRecord_firstElementPostProcess($table, $recordId, $destinationPid, array $movedRecord, array $updatedFields, DataHandler $dataHandler)
     {
-        if ($table == 'pages' && $this->requiresUpdate($updatedFields)) {
+        if ($table === 'pages' && $this->requiresUpdate($updatedFields)) {
             $affectedPageUid = $recordId;
             $affectedPageOldPid = $movedRecord['pid'];
             $affectedPageNewPid = $updatedFields['pid'];
@@ -154,7 +152,7 @@ class TreelistCacheUpdateHooks
     }
 
     /**
-     * Waits for TCEmain commands and looks for moved pages, if found further
+     * Waits for DataHandler commands and looks for moved pages, if found further
      * changes take place to determine whether the cache needs to be updated
      *
      * @param string $table Table name of the moved record
@@ -163,12 +161,11 @@ class TreelistCacheUpdateHooks
      * @param int $originalDestinationPid (negative) page id th page has been moved after
      * @param array $movedRecord The record that moved
      * @param array $updatedFields Array of changed fields
-     * @param DataHandler $tceMain TCEmain parent object
-     * @return void
+     * @param DataHandler $dataHandler DataHandler parent object
      */
-    public function moveRecord_afterAnotherElementPostProcess($table, $recordId, $destinationPid, $originalDestinationPid, array $movedRecord, array $updatedFields, DataHandler $tceMain)
+    public function moveRecord_afterAnotherElementPostProcess($table, $recordId, $destinationPid, $originalDestinationPid, array $movedRecord, array $updatedFields, DataHandler $dataHandler)
     {
-        if ($table == 'pages' && $this->requiresUpdate($updatedFields)) {
+        if ($table === 'pages' && $this->requiresUpdate($updatedFields)) {
             $affectedPageUid = $recordId;
             $affectedPageOldPid = $movedRecord['pid'];
             $affectedPageNewPid = $updatedFields['pid'];
@@ -191,7 +188,7 @@ class TreelistCacheUpdateHooks
         $requiresUpdate = false;
         $updatedFieldNames = array_keys($updatedFields);
         foreach ($updatedFieldNames as $updatedFieldName) {
-            if (in_array($updatedFieldName, $this->updateRequiringFields)) {
+            if (in_array($updatedFieldName, $this->updateRequiringFields, true)) {
                 $requiresUpdate = true;
                 break;
             }
@@ -200,13 +197,12 @@ class TreelistCacheUpdateHooks
     }
 
     /**
-     * Calls the cache maintainance functions according to the determined actions
+     * Calls the cache maintenance functions according to the determined actions
      *
      * @param int $affectedPage uid of the affected page
      * @param int $affectedParentPage parent uid of the affected page
      * @param array $updatedFields Array of updated fields and their new values
      * @param array $actions Array of actions to carry out
-     * @return void
      */
     protected function processClearCacheActions($affectedPage, $affectedParentPage, $updatedFields, array $actions)
     {
@@ -229,7 +225,7 @@ class TreelistCacheUpdateHooks
         // From time to time clean the cache from expired entries
         // (theoretically every 1000 calls)
         $randomNumber = rand(1, 1000);
-        if ($randomNumber == 500) {
+        if ($randomNumber === 500) {
             $this->removeExpiredCacheEntries();
         }
     }
@@ -239,7 +235,6 @@ class TreelistCacheUpdateHooks
      * gets called after creating a new page and after moving a page
      *
      * @param int $affectedParentPage Parent page id of the changed page, the page to start clearing from
-     * @return void
      */
     protected function clearCacheForAllParents($affectedParentPage)
     {
@@ -256,7 +251,10 @@ class TreelistCacheUpdateHooks
             $queryBuilder
                 ->delete('cache_treelist')
                 ->where(
-                    $queryBuilder->expr()->in('pid', $rootLineIds)
+                    $queryBuilder->expr()->in(
+                        'pid',
+                        $queryBuilder->createNamedParameter($rootLineIds, Connection::PARAM_INT_ARRAY)
+                    )
                 )
                 ->execute();
         }
@@ -267,7 +265,6 @@ class TreelistCacheUpdateHooks
      * in the treelist
      *
      * @param int $affectedPage ID of the changed page
-     * @return void
      */
     protected function clearCacheWhereUidInTreelist($affectedPage)
     {
@@ -276,7 +273,7 @@ class TreelistCacheUpdateHooks
         $queryBuilder
             ->delete('cache_treelist')
             ->where(
-                $queryBuilder->expr()->inSet('treelist', (int)$affectedPage)
+                $queryBuilder->expr()->inSet('treelist', $queryBuilder->quote($affectedPage))
             )
             ->execute();
     }
@@ -287,7 +284,6 @@ class TreelistCacheUpdateHooks
      *
      * @param int $affectedPage Uid of the changed page
      * @param int $expirationTime
-     * @return void
      */
     protected function setCacheExpiration($affectedPage, $expirationTime)
     {
@@ -296,7 +292,7 @@ class TreelistCacheUpdateHooks
         $queryBuilder
             ->update('cache_treelist')
             ->where(
-                $queryBuilder->expr()->inSet('treelist', (int)$affectedPage)
+                $queryBuilder->expr()->inSet('treelist', $queryBuilder->quote($affectedPage))
             )
             ->set('expires', $expirationTime)
             ->execute();
@@ -304,8 +300,6 @@ class TreelistCacheUpdateHooks
 
     /**
      * Removes all expired treelist cache entries
-     *
-     * @return void
      */
     protected function removeExpiredCacheEntries()
     {
@@ -314,7 +308,10 @@ class TreelistCacheUpdateHooks
         $queryBuilder
             ->delete('cache_treelist')
             ->where(
-                $queryBuilder->expr()->lte('expires', (int)$GLOBALS['EXEC_TIME'])
+                $queryBuilder->expr()->lte(
+                    'expires',
+                    $queryBuilder->createNamedParameter($GLOBALS['EXEC_TIME'], \PDO::PARAM_INT)
+                )
             )
             ->execute();
     }
@@ -323,17 +320,17 @@ class TreelistCacheUpdateHooks
      * Determines what happened to the page record, this is necessary to clear
      * as less cache entries as needed later
      *
-     * @param string $status TCEmain operation status, either 'new' or 'update'
+     * @param string $status DataHandler operation status, either 'new' or 'update'
      * @param array $updatedFields Array of updated fields
      * @return string List of actions that happened to the page record
      */
     protected function determineClearCacheActions($status, $updatedFields)
     {
         $actions = [];
-        if ($status == 'new') {
+        if ($status === 'new') {
             // New page
             $actions['allParents'] = true;
-        } elseif ($status == 'update') {
+        } elseif ($status === 'update') {
             $updatedFieldNames = array_keys($updatedFields);
             foreach ($updatedFieldNames as $updatedFieldName) {
                 switch ($updatedFieldName) {
@@ -368,7 +365,7 @@ class TreelistCacheUpdateHooks
                         }
                         break;
                     default:
-                        if (in_array($updatedFieldName, $this->updateRequiringFields)) {
+                        if (in_array($updatedFieldName, $this->updateRequiringFields, true)) {
                             $actions['uidInTreelist'] = true;
                         }
                 }