Again adding nelexa's zip library
This commit is contained in:
206
SafeBoxEncryptor/vendor/nelexa/zip/src/Model/ZipEntryMatcher.php
vendored
Normal file
206
SafeBoxEncryptor/vendor/nelexa/zip/src/Model/ZipEntryMatcher.php
vendored
Normal file
@ -0,0 +1,206 @@
|
||||
<?php
|
||||
|
||||
namespace PhpZip\Model;
|
||||
|
||||
/**
|
||||
* @author Ne-Lexa alexey@nelexa.ru
|
||||
* @license MIT
|
||||
*/
|
||||
class ZipEntryMatcher implements \Countable
|
||||
{
|
||||
/** @var ZipContainer */
|
||||
protected $zipContainer;
|
||||
|
||||
/** @var array */
|
||||
protected $matches = [];
|
||||
|
||||
/**
|
||||
* ZipEntryMatcher constructor.
|
||||
*
|
||||
* @param ZipContainer $zipContainer
|
||||
*/
|
||||
public function __construct(ZipContainer $zipContainer)
|
||||
{
|
||||
$this->zipContainer = $zipContainer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|ZipEntry|string[]|ZipEntry[] $entries
|
||||
*
|
||||
* @return ZipEntryMatcher
|
||||
*/
|
||||
public function add($entries)
|
||||
{
|
||||
$entries = (array) $entries;
|
||||
$entries = array_map(
|
||||
static function ($entry) {
|
||||
return $entry instanceof ZipEntry ? $entry->getName() : (string) $entry;
|
||||
},
|
||||
$entries
|
||||
);
|
||||
$this->matches = array_values(
|
||||
array_map(
|
||||
'strval',
|
||||
array_unique(
|
||||
array_merge(
|
||||
$this->matches,
|
||||
array_keys(
|
||||
array_intersect_key(
|
||||
$this->zipContainer->getEntries(),
|
||||
array_flip($entries)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $regexp
|
||||
*
|
||||
* @return ZipEntryMatcher
|
||||
*
|
||||
* @noinspection PhpUnusedParameterInspection
|
||||
*/
|
||||
public function match($regexp)
|
||||
{
|
||||
array_walk(
|
||||
$this->zipContainer->getEntries(),
|
||||
/**
|
||||
* @param ZipEntry $entry
|
||||
* @param string $entryName
|
||||
*/
|
||||
function (ZipEntry $entry, $entryName) use ($regexp) {
|
||||
if (preg_match($regexp, $entryName)) {
|
||||
$this->matches[] = (string) $entryName;
|
||||
}
|
||||
}
|
||||
);
|
||||
$this->matches = array_unique($this->matches);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ZipEntryMatcher
|
||||
*/
|
||||
public function all()
|
||||
{
|
||||
$this->matches = array_map(
|
||||
'strval',
|
||||
array_keys($this->zipContainer->getEntries())
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callable function for all select entries.
|
||||
*
|
||||
* Callable function signature:
|
||||
* function(string $entryName){}
|
||||
*
|
||||
* @param callable $callable
|
||||
*/
|
||||
public function invoke(callable $callable)
|
||||
{
|
||||
if (!empty($this->matches)) {
|
||||
array_walk(
|
||||
$this->matches,
|
||||
/** @param string $entryName */
|
||||
static function ($entryName) use ($callable) {
|
||||
$callable($entryName);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getMatches()
|
||||
{
|
||||
return $this->matches;
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
array_walk(
|
||||
$this->matches,
|
||||
/** @param string $entryName */
|
||||
function ($entryName) {
|
||||
$this->zipContainer->deleteEntry($entryName);
|
||||
}
|
||||
);
|
||||
$this->matches = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $password
|
||||
* @param int|null $encryptionMethod
|
||||
*/
|
||||
public function setPassword($password, $encryptionMethod = null)
|
||||
{
|
||||
array_walk(
|
||||
$this->matches,
|
||||
/** @param string $entryName */
|
||||
function ($entryName) use ($password, $encryptionMethod) {
|
||||
$entry = $this->zipContainer->getEntry($entryName);
|
||||
|
||||
if (!$entry->isDirectory()) {
|
||||
$entry->setPassword($password, $encryptionMethod);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $encryptionMethod
|
||||
*/
|
||||
public function setEncryptionMethod($encryptionMethod)
|
||||
{
|
||||
array_walk(
|
||||
$this->matches,
|
||||
/** @param string $entryName */
|
||||
function ($entryName) use ($encryptionMethod) {
|
||||
$entry = $this->zipContainer->getEntry($entryName);
|
||||
|
||||
if (!$entry->isDirectory()) {
|
||||
$entry->setEncryptionMethod($encryptionMethod);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function disableEncryption()
|
||||
{
|
||||
array_walk(
|
||||
$this->matches,
|
||||
/** @param string $entryName */
|
||||
function ($entryName) {
|
||||
$entry = $this->zipContainer->getEntry($entryName);
|
||||
|
||||
if (!$entry->isDirectory()) {
|
||||
$entry->disableEncryption();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Count elements of an object.
|
||||
*
|
||||
* @see http://php.net/manual/en/countable.count.php
|
||||
*
|
||||
* @return int the custom count as an integer
|
||||
*
|
||||
* @since 5.1.0
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return \count($this->matches);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user