Added restriction to live workspace
authorfrancois <francois@735d13b6-9817-0410-8766-e36946ffe9aa>
Tue, 31 Aug 2010 14:22:29 +0000 (14:22 +0000)
committerfrancois <francois@735d13b6-9817-0410-8766-e36946ffe9aa>
Tue, 31 Aug 2010 14:22:29 +0000 (14:22 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Extensions/overlays/trunk@37492 735d13b6-9817-0410-8766-e36946ffe9aa

class.tx_overlays.php
doc/manual.sxw

index 3a9451d..c693e6c 100644 (file)
@@ -51,8 +51,9 @@ final class tx_overlays {
         * @return      array           Fully overlaid recordset
         */
        public static function getAllRecordsForTable($selectFields, $fromTable, $whereClause = '', $groupBy = '', $orderBy = '', $limit = '') {
-                       // SQL WHERE clause is the base clause passed to the function, plus language condition, plus enable fields condition
+                       // SQL WHERE clause is the base clause passed to the function
                $where = $whereClause;
+                       // Add language condition
                $condition = self::getLanguageCondition($fromTable);
                if (!empty($condition)) {
                        if (!empty($where)) {
@@ -60,6 +61,7 @@ final class tx_overlays {
                        }
                        $where .= '(' . $condition . ')';
                }
+                       // Add enable fields condition
                $condition = self::getEnableFieldsCondition($fromTable);
                if (!empty($condition)) {
                        if (!empty($where)) {
@@ -67,6 +69,14 @@ final class tx_overlays {
                        }
                        $where .= '(' . $condition . ')';
                }
+                       // Add workspace condition
+               $condition = self::getWorkspaceCondition($fromTable);
+               if (!empty($condition)) {
+                       if (!empty($where)) {
+                               $where .= ' AND ';
+                       }
+                       $where .= '(' . $condition . ')';
+               }
 
                        // If the language is not default, prepare for overlays
                $doOverlays = FALSE;
@@ -84,6 +94,7 @@ final class tx_overlays {
 
                        // Execute the query itself
                $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($selectFields, $fromTable, $where, $groupBy, $orderBy, $limit);
+echo $GLOBALS['TYPO3_DB']->SELECTquery($selectFields, $fromTable, $where, $groupBy, $orderBy, $limit);
                        // Assemble a raw recordset
                $records = array();
                while (($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))) {
@@ -155,6 +166,27 @@ final class tx_overlays {
        }
 
        /**
+        * This method assembles the proper condition with regards to versioning/workspaces
+        *
+        * NOTE: this is not complete yet! It just makes sure that only live records
+        * are shown in the FE, but workspace preview does not work yet.
+        *
+        * @param       string          $table: name of the table to build the condition for
+        * @return      string
+        */
+       public static function getWorkspaceCondition($table) {
+               $workspaceCondition = '';
+                       // If the table has some TCA definition, check workspace handling
+               if (isset($GLOBALS['TCA'][$table]['ctrl']) && !empty($GLOBALS['TCA'][$table]['ctrl']['versioningWS'])) {
+                               // If not performing a workspace preview, make sure to grab only live records
+                       if (!$GLOBALS['TSFE']->sys_page->versioningPreview) {
+                               $workspaceCondition .= $table . '.t3ver_oid = 0 AND ' . $table . '.t3ver_state <= 0';
+                       }
+               }
+               return $workspaceCondition;
+       }
+
+       /**
         * This method makes sure that all the fields necessary for proper overlaying are included
         * in the list of selected fields and exist in the table being queried
         * If not, it throws an exception
index 62d984c..3a25087 100755 (executable)
Binary files a/doc/manual.sxw and b/doc/manual.sxw differ