--- /dev/null
+<?php
+
+/** @file nocvsdir.php
+ * @brief Program Dir without CVS subdirs
+ * @ingroup Examples
+ * @author Marcus Boerger
+ * @date 2003 - 2004
+ *
+ * Usage: php nocvsdir.php \<path\>
+ *
+ * Simply specify the path to tree with parameter \<path\>.
+ */
+
+if ($argc < 2) {
+ echo <<<EOF
+Usage: php ${_SERVER['PHP_SELF']} <path>
+
+Show the directory and all it's contents without any CVS directory in <path>.
+
+<path> The directory for which to generate the directory.
+
+
+EOF;
+ exit(1);
+}
+
+if (!class_exists("RecursiveFilterIterator")) require_once("recursivefilteriterator.inc");
+
+class NoCvsDirectory extends RecursiveFilterIterator
+{
+ function accept()
+ {
+ return $this->getInnerIterator()->getFilename() != 'CVS';
+ }
+}
+
+$it = new RecursiveIteratorIterator(new NoCvsDirectory(new RecursiveDirectoryIterator($argv[1])));
+
+foreach($it as $pathname => $file)
+{
+ echo $pathname."\n";
+}
+
+?>
\ No newline at end of file
<?php
-/** @file norewinditerator.inc
+/** @file recursivefilteriterator.inc
* @ingroup Examples
- * @brief class NoRewindIterator
+ * @brief class RecursiveFilterIterator
* @author Marcus Boerger
* @date 2003 - 2004
*
* @author Marcus Boerger
* @version 1.0
*
+ * Passes the RecursiveIterator interface to the inner Iterator and provides
+ * the same functionality as FilterIterator. This allows you to skip parents
+ * and all their childs before loading them all. You need to care about
+ * function getChildren() because it may not always suit your needs. The
+ * builtin behavior uses reflection to return a new instance of the exact same
+ * class it is called from. That is you extend RecursiveFilterIterator and
+ * getChildren() will create instance of that class. The problem is that doing
+ * this does not transport any state or control information of your accept()
+ * implementation to the new instance. To overcome this problem you might
+ * need to overwrite getChildren(), call this implementation and pass the
+ * control vaules manually.
*/
abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator
{
+ /*! The constructor takes a RecursiveIterator
+ */
function __construct(RecursiveIterator $it)
{
+ $this->ref = new ReflectionClass($this);
parent::__construct($it);
}
-
+
+ /*! return whether the inner iterator has children
+ */
function hasChildren()
{
return $this->getInnerIterator()->hasChildren();
}
+ /*! \return children as instance of derived RecursiveFilterIterator class
+ *
+ * \see RecursiveFilterIterator
+ */
function getChildren()
{
- return $this->getInnerIterator()->getChildren();
+ return $this->ref->newInstance($this->getInnerIterator()->getChildren());
}
+
+ private $ref;
}
?>
\ No newline at end of file