[BUGFIX] Fix several typos in php comments
[Packages/TYPO3.CMS.git] / typo3 / sysext / recycler / Classes / Utility / RecyclerUtility.php
index 34b1c9d..3da23e9 100644 (file)
@@ -15,11 +15,13 @@ namespace TYPO3\CMS\Recycler\Utility;
  */
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Type\Bitmask\Permission;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
  * Helper class for the 'recycler' extension.
+ * @internal
  */
 class RecyclerUtility
 {
@@ -33,13 +35,21 @@ class RecyclerUtility
      * as well as the table access rights of the user.
      *
      * @param string $table The table to check access for
-     * @param string $row Record array
+     * @param array $row Record array
      * @return bool Returns TRUE is the user has access, or FALSE if not
      */
     public static function checkAccess($table, $row)
     {
         $backendUser = static::getBackendUser();
 
+        if ($backendUser->isAdmin()) {
+            return true;
+        }
+
+        if (!$backendUser->check('tables_modify', $table)) {
+            return false;
+        }
+
         // Checking if the user has permissions? (Only working as a precaution, because the final permission check is always down in TCE. But it's good to notify the user on beforehand...)
         // First, resetting flags.
         $hasAccess = false;
@@ -47,8 +57,6 @@ class RecyclerUtility
         BackendUtility::fixVersioningPid($table, $calcPRec);
         if (is_array($calcPRec)) {
             if ($table === 'pages') {
-                // If pages:
-                // @todo: find a decent way for non-admins to get deleted pages respecting the permissions WITHOUT some isInWebMount stuff.
                 $calculatedPermissions = $backendUser->calcPerms($calcPRec);
                 $hasAccess = (bool)($calculatedPermissions & Permission::PAGE_EDIT);
             } else {
@@ -61,9 +69,6 @@ class RecyclerUtility
                 $hasAccess = $backendUser->recordEditAccessInternals($table, $calcPRec);
             }
         }
-        if (!$backendUser->check('tables_modify', $table)) {
-            $hasAccess = false;
-        }
         return $hasAccess;
     }
 
@@ -73,38 +78,36 @@ class RecyclerUtility
      * Deleted pages are filtered out.
      *
      * @param int $uid Page uid for which to create record path
-     * @param string $clause is additional where clauses, eg.
-     * @param int $titleLimit Title limit
-     * @param int $fullTitleLimit Title limit of Full title (typ. set to 1000 or so)
-     * @return mixed Path of record (string) OR array with short/long title if $fullTitleLimit is set.
+     * @return string Path of record (string) OR array with short/long title if $fullTitleLimit is set.
      */
-    public static function getRecordPath($uid, $clause = '', $titleLimit = 1000, $fullTitleLimit = 0)
+    public static function getRecordPath($uid)
     {
         $uid = (int)$uid;
-        $output = ($fullOutput = '/');
+        $output = '/';
         if ($uid === 0) {
             return $output;
         }
-        $databaseConnection = static::getDatabaseConnection();
-        $clause = trim($clause) !== '' ? ' AND ' . $clause : '';
+        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+        $queryBuilder->getRestrictions()->removeAll();
+
         $loopCheck = 100;
         while ($loopCheck > 0) {
             $loopCheck--;
-            $res = $databaseConnection->exec_SELECTquery('uid,pid,title,deleted,t3ver_oid,t3ver_wsid', 'pages', 'uid=' . $uid . $clause);
-            if ($res !== false) {
-                $row = $databaseConnection->sql_fetch_assoc($res);
-                $databaseConnection->sql_free_result($res);
+
+            $queryBuilder
+                ->select('uid', 'pid', 'title', 'deleted', 't3ver_oid', 't3ver_wsid')
+                ->from('pages')
+                ->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)));
+            $row = $queryBuilder->execute()->fetch();
+            if ($row !== false) {
                 BackendUtility::workspaceOL('pages', $row);
                 if (is_array($row)) {
                     BackendUtility::fixVersioningPid('pages', $row);
                     $uid = (int)$row['pid'];
-                    $output = '/' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($row['title'], $titleLimit)) . $output;
+                    $output = '/' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($row['title'], 1000)) . $output;
                     if ($row['deleted']) {
                         $output = '<span class="text-danger">' . $output . '</span>';
                     }
-                    if ($fullTitleLimit) {
-                        $fullOutput = '/' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($row['title'], $fullTitleLimit)) . $fullOutput;
-                    }
                 } else {
                     break;
                 }
@@ -112,11 +115,7 @@ class RecyclerUtility
                 break;
             }
         }
-        if ($fullTitleLimit) {
-            return array($output, $fullOutput);
-        } else {
-            return $output;
-        }
+        return $output;
     }
 
     /**
@@ -140,17 +139,22 @@ class RecyclerUtility
      * @param int $pid
      * @return bool
      */
-    public static function isParentPageDeleted($pid) {
+    public static function isParentPageDeleted($pid)
+    {
         if ((int)$pid === 0) {
             return false;
         }
-        $db = static::getDatabaseConnection();
-        $res = $db->exec_SELECTquery('deleted', 'pages', 'uid=' . (int)$pid);
-        if ($res !== false) {
-            $record = $db->sql_fetch_assoc($res);
-            return (bool)$record['deleted'];
-        }
-        return false;
+        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+        $queryBuilder->getRestrictions()->removeAll();
+
+        $deleted = $queryBuilder
+            ->select('deleted')
+            ->from('pages')
+            ->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($pid, \PDO::PARAM_INT)))
+            ->execute()
+            ->fetchColumn();
+
+        return (bool)$deleted;
     }
 
     /**
@@ -160,21 +164,26 @@ class RecyclerUtility
      * @param string $table
      * @return int
      */
-    public static function getPidOfUid($uid, $table) {
-        $db = static::getDatabaseConnection();
-        $res = $db->exec_SELECTquery('pid', $table, 'uid=' . (int)$uid);
-        if ($res !== false) {
-            $record = $db->sql_fetch_assoc($res);
-            return $record['pid'];
-        }
-        return 0;
+    public static function getPidOfUid($uid, $table)
+    {
+        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table);
+        $queryBuilder->getRestrictions()->removeAll();
+
+        $pid = $queryBuilder
+            ->select('pid')
+            ->from($table)
+            ->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)))
+            ->execute()
+            ->fetchColumn();
+
+        return (int)$pid;
     }
 
     /**
      * Gets the TCA of the table used in the current context.
      *
      * @param string $tableName Name of the table to get TCA for
-     * @return array|FALSE TCA of the table used in the current context
+     * @return array|false TCA of the table used in the current context
      */
     public static function getTableTCA($tableName)
     {
@@ -186,16 +195,6 @@ class RecyclerUtility
     }
 
     /**
-     * Returns an instance of DatabaseConnection
-     *
-     * @return \TYPO3\CMS\Core\Database\DatabaseConnection
-     */
-    protected static function getDatabaseConnection()
-    {
-        return $GLOBALS['TYPO3_DB'];
-    }
-
-    /**
      * Returns the BackendUser
      *
      * @return \TYPO3\CMS\Core\Authentication\BackendUserAuthentication
@@ -208,7 +207,7 @@ class RecyclerUtility
     /**
      * Returns an instance of LanguageService
      *
-     * @return \TYPO3\CMS\Lang\LanguageService
+     * @return \TYPO3\CMS\Core\Localization\LanguageService
      */
     protected static function getLanguageService()
     {
@@ -216,11 +215,11 @@ class RecyclerUtility
     }
 
     /**
-     * Returns the modifyable tables of the current user
+     * Returns the modifiable tables of the current user
      */
     public static function getModifyableTables()
     {
-        if ((bool)$GLOBALS['BE_USER']->user['admin']) {
+        if ($GLOBALS['BE_USER']->isAdmin()) {
             $tables = array_keys($GLOBALS['TCA']);
         } else {
             $tables = explode(',', $GLOBALS['BE_USER']->groupData['tables_modify']);