[!!!][FEATURE] Filename filters: pass additional information
authorAndreas Wolf <andreas.wolf@typo3.org>
Tue, 24 Apr 2012 12:42:21 +0000 (14:42 +0200)
committerTolleiv Nietsch <tolleiv.nietsch@typo3.org>
Sun, 6 May 2012 18:53:01 +0000 (20:53 +0200)
The file/folder name filter methods now get an additional
parameter, $additionalInformation, that can be filled by
the driver as necessary. It could e.g. contain additional
information fetched from the storage, that might be relevant
for a filter.

This change requires adding this parameter in all filters, so it is
considered a breaking API change. Apart from that, driver authors have
to adjust their driver if they use the dispatch method from
AbstractDriver, as the parameter order changed there.

Change-Id: I24b43cc02c0bf79fb637b51081f65ef3321c5b99
Resolves: #36783
Releases: 6.0
Reviewed-on: http://review.typo3.org/10932
Reviewed-by: Tolleiv Nietsch
Tested-by: Tolleiv Nietsch
t3lib/file/Driver/AbstractDriver.php
t3lib/file/Driver/LocalDriver.php
t3lib/file/Utility/FilenameFilters.php
tests/Unit/t3lib/file/Driver/Fixtures/LocalDriverFilenameFilter.php

index 1745a77..9cd201b 100644 (file)
@@ -454,16 +454,17 @@ abstract class t3lib_file_Driver_AbstractDriver {
         * Applies a set of filter methods to a file name to find out if it should be used or not. This is e.g. used by
         * directory listings.
         *
+        * @param array $filterMethods The filter methods to use
         * @param string $itemName
         * @param string $itemIdentifier
         * @param string $parentIdentifier
-        * @param array $filterMethods
+        * @param array $additionalInformation Additional information about the inspected item
         * @return bool
         */
-       protected function applyFilterMethodsToDirectoryItem($itemName, $itemIdentifier, $parentIdentifier, array $filterMethods) {
+       protected function applyFilterMethodsToDirectoryItem(array $filterMethods, $itemName, $itemIdentifier, $parentIdentifier, array $additionalInformation = array()) {
                foreach ($filterMethods as $filter) {
                        if (is_array($filter)) {
-                               $result = call_user_func($filter, $itemName, $itemIdentifier, $parentIdentifier, $this);
+                               $result = call_user_func($filter, $itemName, $itemIdentifier, $parentIdentifier, $additionalInformation, $this);
 
                                        // We have to use -1 as the „don't include“ return value, as call_user_func() will return FALSE
                                        // If calling the method succeeded and thus we can't use that as a return value.
index f46f97b..84b53d3 100644 (file)
@@ -363,7 +363,7 @@ class t3lib_file_Driver_LocalDriver extends t3lib_file_Driver_AbstractDriver {
                        $iterator->next();
                        $identifier = $path . $iteratorItem;
 
-                       if ($this->applyFilterMethodsToDirectoryItem($iteratorItem, $identifier, $path, $filterMethods) === FALSE) {
+                       if ($this->applyFilterMethodsToDirectoryItem($filterMethods, $iteratorItem, $identifier, $path) === FALSE) {
                                continue;
                        }
 
index ad22477..2378300 100644 (file)
@@ -50,10 +50,11 @@ class t3lib_file_Utility_FilenameFilters {
         * @param string $itemName
         * @param string $itemIdentifier
         * @param string $parentIdentifier
+        * @param array $additionalInformation Additional information (driver dependent) about the inspected item
         * @param t3lib_file_Driver_AbstractDriver $driverInstance
         * @return boolean|integer -1 if the file should not be included in a listing
         */
-       public static function filterHiddenFilesAndFolders($itemName, $itemIdentifier, $parentIdentifier, t3lib_file_Driver_AbstractDriver $driverInstance) {
+       public static function filterHiddenFilesAndFolders($itemName, $itemIdentifier, $parentIdentifier, array $additionalInformation, t3lib_file_Driver_AbstractDriver $driverInstance) {
                        // Only apply the filter if you want to hide the hidden files
                if (self::$showHiddenFilesAndFolders === FALSE && substr($itemName, 0, 1) == '.') {
                        return -1;
index d044060..980b786 100644 (file)
@@ -36,7 +36,7 @@ class t3lib_file_Tests_Driver_Fixtures_LocalDriverFilenameFilter {
         * @param t3lib_file_Driver_AbstractDriver $driverInstance
         * @return boolean|integer
         */
-       public static function filterFilename($itemName, $itemIdentifier, $parentIdentifier, t3lib_file_Driver_AbstractDriver $driverInstance) {
+       public static function filterFilename($itemName, $itemIdentifier, $parentIdentifier, array $additionalInformation, t3lib_file_Driver_AbstractDriver $driverInstance) {
                if ($itemName == 'fileA' || $itemName == 'folderA/') {
                        return -1;
                } else {