Release of v3.2.5
Add [AllowDynamicProperties] in the base view class for J5. Move the _prepareDocument above the display call in the base view class. Remove all backward compatibility issues, so JCB will not need the [Backward Compatibility] plugin to run. Added new import powers for custom import of spreadsheets. Move the setDocument and _prepareDocument above the display in the site view and custom admin view. Update the trashhelper layout to work in Joomla 5. Add AllowDynamicProperties (Joomla 4+5) to view class to allow Custom Dynamic Get methods to work without issues. Fix Save failed issue in dynamicGet. #1148. Move all [TEXT, EDITOR, TEXTAREA] fields from [NOT NULL] to [NULL]. Add the DateHelper class and improve the date methods. Add simple SessionHelper class. Add first classes for the new import engine. Improve the [VDM Registry] to be Joomla Registry Compatible. Move all registries to the [VDM Registry] class. Fix Checked Out to be null and not 0. (#1194). Fix created_by, modified_by, checked_out fields in the compiler of the SQL. (#1194). Update all core date fields in table class. (#1188). Update created_by, modified_by, checked_out fields in table class. Implementation of the decentralized Super-Power CORE repository network. (#1190). Fix the noticeboard to display Llewellyn's Joomla Social feed.
This commit is contained in:
135
libraries/phpspreadsheet/vendor/maennchen/zipstream-php/test/Util.php
vendored
Normal file
135
libraries/phpspreadsheet/vendor/maennchen/zipstream-php/test/Util.php
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ZipStream\Test;
|
||||
|
||||
use function fgets;
|
||||
use function pclose;
|
||||
use function popen;
|
||||
use function preg_match;
|
||||
|
||||
use RecursiveDirectoryIterator;
|
||||
use RecursiveIteratorIterator;
|
||||
|
||||
use function strtolower;
|
||||
|
||||
use ZipArchive;
|
||||
|
||||
trait Util
|
||||
{
|
||||
protected function getTmpFileStream(): array
|
||||
{
|
||||
$tmp = tempnam(sys_get_temp_dir(), 'zipstreamtest');
|
||||
$stream = fopen($tmp, 'wb+');
|
||||
|
||||
return [$tmp, $stream];
|
||||
}
|
||||
|
||||
protected function cmdExists(string $command): bool
|
||||
{
|
||||
if (strtolower(\substr(PHP_OS, 0, 3)) === 'win') {
|
||||
$fp = popen("where $command", 'r');
|
||||
$result = fgets($fp, 255);
|
||||
$exists = !preg_match('#Could not find files#', $result);
|
||||
pclose($fp);
|
||||
} else { // non-Windows
|
||||
$fp = popen("which $command", 'r');
|
||||
$result = fgets($fp, 255);
|
||||
$exists = !empty($result);
|
||||
pclose($fp);
|
||||
}
|
||||
|
||||
return $exists;
|
||||
}
|
||||
|
||||
protected function dumpZipContents(string $path): string
|
||||
{
|
||||
if (!$this->cmdExists('hexdump')) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$output = [];
|
||||
|
||||
if (!exec("hexdump -C \"$path\" | head -n 50", $output)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return "\nHexdump:\n" . implode("\n", $output);
|
||||
}
|
||||
|
||||
protected function validateAndExtractZip(string $zipPath): string
|
||||
{
|
||||
$tmpDir = $this->getTmpDir();
|
||||
|
||||
$zipArchive = new ZipArchive();
|
||||
$result = $zipArchive->open($zipPath);
|
||||
|
||||
if ($result !== true) {
|
||||
$codeName = $this->zipArchiveOpenErrorCodeName($result);
|
||||
$debugInformation = $this->dumpZipContents($zipPath);
|
||||
|
||||
$this->fail("Failed to open {$zipPath}. Code: $result ($codeName)$debugInformation");
|
||||
|
||||
return $tmpDir;
|
||||
}
|
||||
|
||||
$this->assertSame(0, $zipArchive->status);
|
||||
$this->assertSame(0, $zipArchive->statusSys);
|
||||
|
||||
$zipArchive->extractTo($tmpDir);
|
||||
$zipArchive->close();
|
||||
|
||||
return $tmpDir;
|
||||
}
|
||||
|
||||
protected function zipArchiveOpenErrorCodeName(int $code): string
|
||||
{
|
||||
switch($code) {
|
||||
case ZipArchive::ER_EXISTS: return 'ER_EXISTS';
|
||||
case ZipArchive::ER_INCONS: return 'ER_INCONS';
|
||||
case ZipArchive::ER_INVAL: return 'ER_INVAL';
|
||||
case ZipArchive::ER_MEMORY: return 'ER_MEMORY';
|
||||
case ZipArchive::ER_NOENT: return 'ER_NOENT';
|
||||
case ZipArchive::ER_NOZIP: return 'ER_NOZIP';
|
||||
case ZipArchive::ER_OPEN: return 'ER_OPEN';
|
||||
case ZipArchive::ER_READ: return 'ER_READ';
|
||||
case ZipArchive::ER_SEEK: return 'ER_SEEK';
|
||||
default: return 'unknown';
|
||||
}
|
||||
}
|
||||
|
||||
protected function getTmpDir(): string
|
||||
{
|
||||
$tmp = tempnam(sys_get_temp_dir(), 'zipstreamtest');
|
||||
unlink($tmp);
|
||||
mkdir($tmp) or $this->fail('Failed to make directory');
|
||||
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
protected function getRecursiveFileList(string $path, bool $includeDirectories = false): array
|
||||
{
|
||||
$data = [];
|
||||
$path = (string)realpath($path);
|
||||
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
|
||||
|
||||
$pathLen = strlen($path);
|
||||
foreach ($files as $file) {
|
||||
$filePath = $file->getRealPath();
|
||||
|
||||
if (is_dir($filePath) && !$includeDirectories) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$data[] = substr($filePath, $pathLen + 1);
|
||||
}
|
||||
|
||||
sort($data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user