Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/CarnetApp/CarnetNextcloud.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/nelexa/zip/src/PhpZip/Model/ZipEntryMatcher.php')
-rw-r--r--vendor/nelexa/zip/src/PhpZip/Model/ZipEntryMatcher.php166
1 files changed, 166 insertions, 0 deletions
diff --git a/vendor/nelexa/zip/src/PhpZip/Model/ZipEntryMatcher.php b/vendor/nelexa/zip/src/PhpZip/Model/ZipEntryMatcher.php
new file mode 100644
index 0000000..7ce6406
--- /dev/null
+++ b/vendor/nelexa/zip/src/PhpZip/Model/ZipEntryMatcher.php
@@ -0,0 +1,166 @@
+<?php
+
+namespace PhpZip\Model;
+
+/**
+ * @author Ne-Lexa alexey@nelexa.ru
+ * @license MIT
+ */
+class ZipEntryMatcher implements \Countable
+{
+ /**
+ * @var ZipModel
+ */
+ protected $zipModel;
+
+ /**
+ * @var array
+ */
+ protected $matches = [];
+
+ /**
+ * ZipEntryMatcher constructor.
+ * @param ZipModel $zipModel
+ */
+ public function __construct(ZipModel $zipModel)
+ {
+ $this->zipModel = $zipModel;
+ }
+
+ /**
+ * @param string|array $entries
+ * @return ZipEntryMatcher
+ */
+ public function add($entries)
+ {
+ $entries = (array)$entries;
+ $entries = array_map(function ($entry) {
+ return $entry instanceof ZipEntry ? $entry->getName() : $entry;
+ }, $entries);
+ $this->matches = array_unique(
+ array_merge(
+ $this->matches,
+ array_keys(
+ array_intersect_key(
+ $this->zipModel->getEntries(),
+ array_flip($entries)
+ )
+ )
+ )
+ );
+ return $this;
+ }
+
+ /**
+ * @param string $regexp
+ * @return ZipEntryMatcher
+ */
+ public function match($regexp)
+ {
+ array_walk($this->zipModel->getEntries(), function (
+ /** @noinspection PhpUnusedParameterInspection */
+ $entry,
+ $entryName
+ ) use ($regexp) {
+ if (preg_match($regexp, $entryName)) {
+ $this->matches[] = $entryName;
+ }
+ });
+ $this->matches = array_unique($this->matches);
+ return $this;
+ }
+
+ /**
+ * @return ZipEntryMatcher
+ */
+ public function all()
+ {
+ $this->matches = array_keys($this->zipModel->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, function ($entryName) use ($callable) {
+ call_user_func($callable, $entryName);
+ });
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function getMatches()
+ {
+ return $this->matches;
+ }
+
+ public function delete()
+ {
+ array_walk($this->matches, function ($entry) {
+ $this->zipModel->deleteEntry($entry);
+ });
+ $this->matches = [];
+ }
+
+ /**
+ * @param string|null $password
+ * @param int|null $encryptionMethod
+ */
+ public function setPassword($password, $encryptionMethod = null)
+ {
+ array_walk($this->matches, function ($entry) use ($password, $encryptionMethod) {
+ $entry = $this->zipModel->getEntry($entry);
+ if (!$entry->isDirectory()) {
+ $this->zipModel->getEntryForChanges($entry)->setPassword($password, $encryptionMethod);
+ }
+ });
+ }
+
+ /**
+ * @param int $encryptionMethod
+ */
+ public function setEncryptionMethod($encryptionMethod)
+ {
+ array_walk($this->matches, function ($entry) use ($encryptionMethod) {
+ $entry = $this->zipModel->getEntry($entry);
+ if (!$entry->isDirectory()) {
+ $this->zipModel->getEntryForChanges($entry)->setEncryptionMethod($encryptionMethod);
+ }
+ });
+ }
+
+ public function disableEncryption()
+ {
+ array_walk($this->matches, function ($entry) {
+ $entry = $this->zipModel->getEntry($entry);
+ if (!$entry->isDirectory()) {
+ $entry = $this->zipModel->getEntryForChanges($entry);
+ $entry->clearEncryption();
+ }
+ });
+ }
+
+ /**
+ * Count elements of an object
+ * @link http://php.net/manual/en/countable.count.php
+ * @return int The custom count as an integer.
+ * </p>
+ * <p>
+ * The return value is cast to an integer.
+ * @since 5.1.0
+ */
+ public function count()
+ {
+ return count($this->matches);
+ }
+}