zipModel = $zipModel; } /** * @param string|array $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->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[] = (string) $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, static function ($entryName) use ($callable) { $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->disableEncryption(); } } ); } /** * Count elements of an object. * * @see http://php.net/manual/en/countable.count.php * * @return int The custom count as an integer. *
** The return value is cast to an integer. * * @since 5.1.0 */ public function count() { return \count($this->matches); } }