X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ffile_directories%2Fdirectory%2Fclass_FrameworkDirectoryPointer.php;h=d2f47d3c93a8649fc0d5daa351afcabf0444d592;hp=da220403458c081e6531ca4f7cc5a0b937c3efd5;hb=88edbab806256235ce080fc18d6602061777a6ba;hpb=5c59e6f195a02fdedd26f04150a83a3b87b8ba24 diff --git a/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php b/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php index da220403..d2f47d3c 100644 --- a/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php +++ b/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2014 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class FrameworkDirectoryPointer extends BaseFrameworkSystem { +class FrameworkDirectoryPointer extends BaseFrameworkSystem implements Directory { /** * The current path we are working in */ @@ -30,7 +30,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { /** * The directory iterator instance */ - private $directoryInstance = NULL; + private $iteratorInstance = NULL; /** * Protected constructor @@ -45,7 +45,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { */ public function __destruct() { // Is there a resource pointer? Then we have to close the directory here! - if ($this->getDirectoryInstance() instanceof DirectoryIterator) { + if ($this->getIteratorInstance() instanceof DirectoryIterator) { // Try to close a directory $this->closeDirectory(); } // END - if @@ -99,43 +99,44 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { } } - // Get an iterator for the directory - $directoryInstance = new DirectoryIterator($pathName); - // Create new instance $pointerInstance = new FrameworkDirectoryPointer(); + // Get an iterator for the directory + $iteratorInstance = new DirectoryIterator($pathName); + + // ... and rewind back + $iteratorInstance->rewind(); + // Set directory pointer and path name - $pointerInstance->setDirectoryInstance($directoryInstance); + $pointerInstance->setIteratorInstance($iteratorInstance); $pointerInstance->setPathName($pathName); // Return the instance + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: Opened pathName=' . $pathName . ' - EXIT!'); return $pointerInstance; } /** * Read raw lines of data from a directory pointer and return the data * - * @return $current Current entry from encapsulated iterator + * @return $currentEntry Current entry from encapsulated iterator */ public function readRawDirectory () { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . '] - CALLED!'); + // Can the next entry be read? - assert($this->getDirectoryInstance()->valid()); + assert($this->getIteratorInstance()->valid()); // Default is FALSE - $current = FALSE; - - // Is it a dot directory? - if (!$this->getDirectoryInstance()->isDot()) { - // Read data from the directory pointer and return it - $current = $this->getDirectoryInstance()->current(); - } // END - if + $currentEntry = FALSE; - // Advance to next entry - $this->getDirectoryInstance()->next(); + // Read data from the directory pointer and return it + $currentEntry = $this->getIteratorInstance()->current(); // Return found entry - return $current; + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: currentEntry[]=' . gettype($currentEntry) . ' - EXIT!'); + return $currentEntry; } /** @@ -150,26 +151,41 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { // No exception given, so read all files and directories, but not recursive self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: No exceptions given, please use readRawDirectory() instead!'); return $this->readRawDirectory(); - } // END - if + } elseif (!$this->getIteratorInstance()->valid()) { + // No more left to read + return NULL; + } + + // Init raw line + $rawLine = NULL; // Read a raw line... - $rawLine = $this->readRawDirectory(); - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawLine[' . gettype($rawLine) . ']=' . $rawLine); + $currentEntry = $this->readRawDirectory(); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: currentEntry[]=' . gettype($currentEntry)); // Shall we exclude directories? - if ((!is_null($rawLine)) && ($rawLine !== FALSE) && (!in_array($rawLine, $except))) { - // Return read data + if (is_object($currentEntry)) { + // Get file name + $rawLine = $currentEntry->getFilename(); //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawLine[' . gettype($rawLine) . ']=' . $rawLine); - return $rawLine; - } elseif ((!is_null($rawLine)) && ($rawLine !== FALSE)) { - // Exclude this part - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawline[' . gettype($rawLine) . ']=' . $rawLine . ' - Recursive call!'); - return $this->readDirectoryExcept($except); - } - // End pointer reached - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: Returning NULL!'); - return NULL; + // Is it not excluded? + if (in_array($rawLine, $except)) { + // To next entry + $this->getIteratorInstance()->next(); + + // Exclude this part + $rawLine = $this->readDirectoryExcept($except); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawline[' . gettype($rawLine) . ']=' . $rawLine . ' - Recursive call!'); + } // END - if + } // END - if + + // To next entry + $this->getIteratorInstance()->next(); + + // Return read line + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawLine[' . gettype($rawLine) . ']=' . $rawLine); + return $rawLine; } /** @@ -180,28 +196,28 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { */ public function closeDirectory () { // Close the directory by unsetting it - $this->setDirectoryInstance(NULL); + $this->setIteratorInstance(NULL); $this->setPathName(''); } /** * Setter for the directory pointer * - * @param $directoryInstance An instanceof a DirectoryIterator class or NULL to unset ("close") it. + * @param $iteratorInstance An instanceof a DirectoryIterator class or NULL to unset ("close") it. * @return void */ - protected final function setDirectoryInstance (DirectoryIterator $directoryInstance = NULL) { + protected final function setIteratorInstance (DirectoryIterator $iteratorInstance = NULL) { // Set instance (or NULL) - $this->directoryInstance = $directoryInstance; + $this->iteratorInstance = $iteratorInstance; } /** * Getter for the directory pointer * - * @return $directoryInstance The directory pointer which shall be a valid directory resource + * @return $iteratorInstance The directory pointer which shall be a valid directory resource */ - public final function getDirectoryInstance () { - return $this->directoryInstance; + public final function getIteratorInstance () { + return $this->iteratorInstance; } /** @@ -210,7 +226,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { * @param $pathName The new path name * @return void */ - public final function setPathName ($pathName) { + protected final function setPathName ($pathName) { $pathName = (string) $pathName; $this->pathName = $pathName; }