mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-31 01:34:09 +02:00
lib: Add FileExtensionFilterIterator
Add iterator for iterating over files having a specific file extension.
This commit is contained in:
parent
00a09284ef
commit
1afc2a0b1d
71
library/Icinga/File/FileExtensionFilterIterator.php
Normal file
71
library/Icinga/File/FileExtensionFilterIterator.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
|
||||||
|
namespace Icinga\File;
|
||||||
|
|
||||||
|
use FilterIterator;
|
||||||
|
use Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterator over files having a specific file extension
|
||||||
|
*
|
||||||
|
* Usage example:
|
||||||
|
* <code>
|
||||||
|
* <?php
|
||||||
|
*
|
||||||
|
* namespace Icinga\Example;
|
||||||
|
*
|
||||||
|
* use RecursiveDirectoryIterator;
|
||||||
|
* use RecursiveIteratorIterator;
|
||||||
|
* use Icinga\File\FileExtensionFilterIterator;
|
||||||
|
*
|
||||||
|
* $markdownFiles = new FileExtensionFilterIterator(
|
||||||
|
* new RecursiveIteratorIterator(
|
||||||
|
* new RecursiveDirectoryIterator(__DIR__),
|
||||||
|
* RecursiveIteratorIterator::SELF_FIRST
|
||||||
|
* ),
|
||||||
|
* 'md'
|
||||||
|
* );
|
||||||
|
* </code>
|
||||||
|
*/
|
||||||
|
class FileExtensionFilterIterator extends FilterIterator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The extension to filter for
|
||||||
|
*
|
||||||
|
* @type string
|
||||||
|
*/
|
||||||
|
protected $extension;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new FileExtensionFilterIterator
|
||||||
|
*
|
||||||
|
* @param Iterator $iterator Apply filter to this iterator
|
||||||
|
* @param string $extension The file extension to filter for. The file extension may not contain the leading dot
|
||||||
|
*/
|
||||||
|
public function __construct(Iterator $iterator, $extension)
|
||||||
|
{
|
||||||
|
$this->extension = '.' . ltrim(strtolower((string) $extension), '.');
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accept files which match the file extension to filter for
|
||||||
|
*
|
||||||
|
* @return bool Whether the current element of the iterator is acceptable
|
||||||
|
* through this filter
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
$current = $this->current();
|
||||||
|
/* @var $current \SplFileInfo */
|
||||||
|
if (! $current->isFile()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// SplFileInfo::getExtension() is only available since PHP 5 >= 5.3.6
|
||||||
|
$filename = $current->getFilename();
|
||||||
|
$sfx = substr($filename, -strlen($this->extension));
|
||||||
|
return $sfx === false ? false : strtolower($sfx) === $this->extension;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user