added feature #6545: Hook Request: db_list
authorIngo Renner <ingo.renner@typo3.org>
Fri, 16 Nov 2007 09:54:15 +0000 (09:54 +0000)
committerIngo Renner <ingo.renner@typo3.org>
Fri, 16 Nov 2007 09:54:15 +0000 (09:54 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@2728 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/interfaces/interface.t3lib_localrecordlistgettablehook.php [new file with mode: 0644]
typo3/class.db_list_extra.inc

index b5def06..4a22a45 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-11-16  Ingo Renner        <ingo@typo3.org>
+
+       * added feature #6545: Hook Request: db_list
+
 2007-11-15  Ingmar Schlecht  <ingmar@typo3.org>
 
        * Release of TYPO3 4.2.0alpha2
diff --git a/t3lib/interfaces/interface.t3lib_localrecordlistgettablehook.php b/t3lib/interfaces/interface.t3lib_localrecordlistgettablehook.php
new file mode 100644 (file)
index 0000000..aaa50e9
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2007 Ingo Renner <ingo@typo3.org>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+
+/**
+ * interface for classes which hook into localRecordList and do additional getTable processing
+ *
+ * @author     Ingo Renner <ingo@typo3.org>
+ * @package TYPO3
+ * @subpackage t3lib
+ */
+interface t3lib_localRecordListGetTableHook {
+
+       /**
+        * modifies the DB list query
+        *
+        * @param       string          the current database table
+        * @param       integer         the record's unique ID
+        * @param       string          an additional WHERE clause
+        * @param       string          comma separated list of selected fields
+        * @param       localRecordList         parent localRecordList object
+        * @return      void
+        */
+       public function getDBlistQuery($table, $uid, $additionalWhereClause, $selectedFieldsList, $parentObject);
+
+}
+
+?>
\ No newline at end of file
index 9d9d6b0..f6794c6 100755 (executable)
@@ -306,7 +306,7 @@ class localRecordList extends recordList {
         * @return      string          HTML table with the listing for the record.
         */
        function getTable($table,$id,$rowlist)  {
-               global $TCA;
+               global $TCA, $TYPO3_CONF_VARS;
 
                        // Loading all TCA details for this table:
                t3lib_div::loadTCA($table);
@@ -388,6 +388,19 @@ class localRecordList extends recordList {
                $selectFields = array_intersect($selectFields,$this->makeFieldList($table,1));          // Making sure that the fields in the field-list ARE in the field-list from TCA!
                $selFieldList = implode(',',$selectFields);             // implode it into a list of fields for the SQL-statement.
 
+                       // DB-List getTable-Hook
+               if(is_array($TYPO3_CONF_VARS['SC_OPTIONS']['typo3/class.db_list_extra.inc']['getTable'])) {
+                       foreach($TYPO3_CONF_VARS['SC_OPTIONS']['typo3/class.db_list_extra.inc']['getTable'] as $classData) {
+                               $hookObject = &t3lib_div::getUserObj($classData);
+
+                               if(!($hookObject instanceof t3lib_localRecordListGetTableHook)) {
+                                       throw new UnexpectedValueException('$hookObject must implement interface t3lib_localRecordListGetTableHook', 1195114460);
+                               }
+
+                               $hookObject->getDBlistQuery($table, $id, $addWhere, $selFieldList, $this);
+                       }
+               }
+
                        // Create the SQL query for selecting the elements in the listing:
                $queryParts = $this->makeQueryArray($table, $id,$addWhere,$selFieldList);       // (API function from class.db_list.inc)
                $this->setTotalItems($queryParts);              // Finding the total amount of records on the page (API function from class.db_list.inc)
@@ -460,10 +473,10 @@ class localRecordList extends recordList {
                                $prevPrevUid = 0;
                                $accRows = array();     // Accumulate rows here
                                while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result))    {
-                                       
+
                                                // In offline workspace, look for alternative record:
                                        t3lib_BEfunc::workspaceOL($table, $row, $GLOBALS['BE_USER']->workspace, TRUE);
-                                       
+
                                        if (is_array($row))     {
                                                $accRows[] = $row;
                                                $currentIdList[] = $row['uid'];
@@ -520,7 +533,7 @@ class localRecordList extends recordList {
                                                                foreach($translations as $lRow) {
                                                                                // In offline workspace, look for alternative record:
                                                                        t3lib_BEfunc::workspaceOL($table, $lRow, $GLOBALS['BE_USER']->workspace);
-                                                                       
+
                                                                        if (is_array($lRow) && $GLOBALS['BE_USER']->checkLanguageAccess($lRow[$TCA[$table]['ctrl']['languageField']]))  {
                                                                                $currentIdList[] = $lRow['uid'];
                                                                                $iOut.=$this->renderListRow($table,$lRow,$cc,$titleCol,$thumbsCol,18);
@@ -991,7 +1004,7 @@ class localRecordList extends recordList {
                                $stat.=t3lib_div::callUserFunction($_funcRef,$_params,$this);
                        }
                        $cells[] = $stat;
-               }               
+               }
 
                        // Compile items into a DIV-element:
                return '