Daniel Kerr 2025-01-13 03:32:03 +08:00
parent ee59c8a562
commit 8c9afc5a13
14 changed files with 127 additions and 112 deletions

View File

@ -22,10 +22,10 @@
"vendor-dir": "upload/system/storage/vendor/" "vendor-dir": "upload/system/storage/vendor/"
}, },
"require": { "require": {
"php": ">=7.4", "php": ">=8.0.2",
"scssphp/scssphp": "^1.10.0", "scssphp/scssphp": "^1.10.0",
"twig/twig": "^3.3.7", "twig/twig": "^3.18.0",
"aws/aws-sdk-php": "^3.306" "aws/aws-sdk-php": "^3.336.13"
}, },
"autoload-dev": { "autoload-dev": {
"psr-4": { "psr-4": {

4
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "ef7a9cd4b6f9e6483051023d627b600e", "content-hash": "812202261cd9c13d3c68e9bb303e92f8",
"packages": [ "packages": [
{ {
"name": "aws/aws-crt-php", "name": "aws/aws-crt-php",
@ -1223,7 +1223,7 @@
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
"php": ">=7.4" "php": ">=8.0.2"
}, },
"platform-dev": {}, "platform-dev": {},
"plugin-api-version": "2.6.0" "plugin-api-version": "2.6.0"

View File

@ -611,100 +611,9 @@ class Installer extends \Opencart\System\Engine\Controller {
} }
if (!$json) { if (!$json) {
// Generate php autoload file $this->load->helper('vendor');
$code = '<?php' . "\n";
$files = glob(DIR_STORAGE . 'vendor/*/*/composer.json'); oc_generate_vendor();
foreach ($files as $file) {
$output = json_decode(file_get_contents($file), true);
$code .= '// ' . $output['name'] . "\n";
if (isset($output['autoload'])) {
$directory = substr(dirname($file), strlen(DIR_STORAGE . 'vendor/'));
// Autoload psr-4 files
if (isset($output['autoload']['psr-4'])) {
$autoload = $output['autoload']['psr-4'];
foreach ($autoload as $namespace => $path) {
if (!is_array($path)) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($path, '/') . '/' . '\', true);' . "\n";
} else {
foreach ($path as $value) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($value, '/') . '/' . '\', true);' . "\n";
}
}
}
}
// Autoload psr-0 files
if (isset($output['autoload']['psr-0'])) {
$autoload = $output['autoload']['psr-0'];
foreach ($autoload as $namespace => $path) {
if (!is_array($path)) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($path, '/') . '/' . '\', true);' . "\n";
} else {
foreach ($path as $value) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($value, '/') . '/' . '\', true);' . "\n";
}
}
}
}
// Autoload classmap
if (isset($output['autoload']['classmap'])) {
$autoload = [];
$classmaps = $output['autoload']['classmap'];
foreach ($classmaps as $classmap) {
$directories = [dirname($file) . '/' . $classmap];
while (count($directories) != 0) {
$next = array_shift($directories);
if (is_dir($next)) {
foreach (glob(trim($next, '/') . '/{*,.[!.]*,..?*}', GLOB_BRACE) as $file) {
if (is_dir($file)) {
$directories[] = $file . '/';
}
if (is_file($file)) {
$namespace = substr(dirname($file), strlen(DIR_STORAGE . 'vendor/' . $directory . $classmap) + 1);
if ($namespace) {
$autoload[$namespace] = substr(dirname($file), strlen(DIR_STORAGE . 'vendor/'));
}
}
}
}
}
}
foreach ($autoload as $namespace => $path) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . rtrim($path, '/') . '/' . '\', true);' . "\n";
}
}
// Autoload files
if (isset($output['autoload']['files'])) {
$files = $output['autoload']['files'];
foreach ($files as $file) {
$code .= 'if (is_file(DIR_STORAGE . \'vendor/' . $directory . '/' . $file . '\')) {' . "\n";
$code .= ' require_once(DIR_STORAGE . \'vendor/' . $directory . '/' . $file . '\');' . "\n";
$code .= '}' . "\n";
}
}
}
$code .= "\n";
}
file_put_contents(DIR_SYSTEM . 'vendor.php', trim($code));
$json['success'] = $this->language->get('text_success'); $json['success'] = $this->language->get('text_success');
} }

View File

@ -9,7 +9,7 @@ class Sass extends \Opencart\System\Engine\Controller {
/** /**
* Index * Index
* *
* @throws \Exception&\ScssPhp\ScssPhp\Exception\SassException * @throws \Exception\ScssPhp\ScssPhp\Exception\SassException
* *
* @return void * @return void
*/ */

View File

@ -9,7 +9,7 @@ class Sass extends \Opencart\System\Engine\Controller {
/** /**
* Index * Index
* *
* @throws \Exception&\ScssPhp\ScssPhp\Exception\SassException * @throws \Exception\ScssPhp\ScssPhp\Exception\SassException
* *
* @return void * @return void
*/ */

View File

@ -34,7 +34,13 @@
</div> </div>
{% else %} {% else %}
<div class="row row-cols-sm-2 row-cols-lg-4"> <div class="row row-cols-sm-2 row-cols-lg-4">
{% for category in categories|batch((categories|length / 4)|round(1, 'ceil')) %} {% set total = category.children|length %}
{% if total > 20 %}
{% set batch = (total / 4)|round(0, 'ceil') %}
{% else %}
{% set batch = 5 %}
{% endif %}
{% for category in categories|batch(batch) %}
<div class="col"> <div class="col">
<ul> <ul>
{% for child in category %} {% for child in category %}

View File

@ -5,6 +5,9 @@ $autoloader->register('Opencart\\' . APPLICATION, DIR_APPLICATION);
$autoloader->register('Opencart\Extension', DIR_EXTENSION); $autoloader->register('Opencart\Extension', DIR_EXTENSION);
$autoloader->register('Opencart\System', DIR_SYSTEM); $autoloader->register('Opencart\System', DIR_SYSTEM);
//require_once(DIR_SYSTEM . 'helper/vendor.php');
//oc_generate_vendor();
require_once(DIR_SYSTEM . 'vendor.php'); require_once(DIR_SYSTEM . 'vendor.php');
// Registry // Registry

View File

@ -0,0 +1,97 @@
<?php
// Generate php autoload file
function oc_generate_vendor() {
$code = '<?php' . "\n";
$files = glob(DIR_STORAGE . 'vendor/*/*/composer.json');
foreach ($files as $file) {
$output = json_decode(file_get_contents($file), true);
$code .= '// ' . $output['name'] . "\n";
if (isset($output['autoload'])) {
$directory = substr(dirname($file), strlen(DIR_STORAGE . 'vendor/'));
// Autoload psr-4 files
if (isset($output['autoload']['psr-4'])) {
$autoload = $output['autoload']['psr-4'];
foreach ($autoload as $namespace => $path) {
if (!is_array($path)) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($path, '/') . '/' . '\', true);' . "\n";
} else {
foreach ($path as $value) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($value, '/') . '/' . '\', true);' . "\n";
}
}
}
}
// Autoload psr-0 files
if (isset($output['autoload']['psr-0'])) {
$autoload = $output['autoload']['psr-0'];
foreach ($autoload as $namespace => $path) {
if (!is_array($path)) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($path, '/') . '/' . '\', true);' . "\n";
} else {
foreach ($path as $value) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . $directory . '/' . rtrim($value, '/') . '/' . '\', true);' . "\n";
}
}
}
}
// Autoload classmap
if (isset($output['autoload']['classmap'])) {
$autoload = [];
$classmaps = $output['autoload']['classmap'];
foreach ($classmaps as $classmap) {
$directories = [dirname($file) . '/' . $classmap];
while (count($directories) != 0) {
$next = array_shift($directories);
if (is_dir($next)) {
foreach (glob(trim($next, '/') . '/{*,.[!.]*,..?*}', GLOB_BRACE) as $file) {
if (is_dir($file)) {
$directories[] = $file . '/';
}
if (is_file($file)) {
$namespace = substr(dirname($file), strlen(DIR_STORAGE . 'vendor/' . $directory . $classmap) + 1);
if ($namespace) {
$autoload[$namespace] = substr(dirname($file), strlen(DIR_STORAGE . 'vendor/'));
}
}
}
}
}
}
foreach ($autoload as $namespace => $path) {
$code .= '$autoloader->register(\'' . rtrim($namespace, '\\') . '\', DIR_STORAGE . \'vendor/' . rtrim($path, '/') . '/' . '\', true);' . "\n";
}
}
// Autoload files
if (isset($output['autoload']['files'])) {
$files = $output['autoload']['files'];
foreach ($files as $file) {
$code .= 'if (is_file(DIR_STORAGE . \'vendor/' . $directory . '/' . $file . '\')) {' . "\n";
$code .= ' require_once(DIR_STORAGE . \'vendor/' . $directory . '/' . $file . '\');' . "\n";
$code .= '}' . "\n";
}
}
}
$code .= "\n";
}
file_put_contents(DIR_SYSTEM . 'vendor.php', trim($code));
}

View File

@ -819,8 +819,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"bamarni-bin": { "bamarni-bin": {
"forward-command": false, "bin-links": false,
"bin-links": false "forward-command": false
} }
}, },
"installation-source": "dist", "installation-source": "dist",

View File

@ -5052,7 +5052,7 @@ EOL;
* *
* @return array * @return array
*/ */
protected function multiplyMedia(Environment $env = null, $childQueries = null) protected function multiplyMedia(?Environment $env = null, $childQueries = null)
{ {
if ( if (
! isset($env) || ! isset($env) ||
@ -5144,7 +5144,7 @@ EOL;
* *
* @return \ScssPhp\ScssPhp\Compiler\Environment * @return \ScssPhp\ScssPhp\Compiler\Environment
*/ */
protected function pushEnv(Block $block = null) protected function pushEnv(?Block $block = null)
{ {
$env = new Environment(); $env = new Environment();
$env->parent = $this->env; $env->parent = $this->env;
@ -5208,7 +5208,7 @@ EOL;
* *
* @return void * @return void
*/ */
protected function set($name, $value, $shadow = false, Environment $env = null, $valueUnreduced = null) protected function set($name, $value, $shadow = false, ?Environment $env = null, $valueUnreduced = null)
{ {
$name = $this->normalizeName($name); $name = $this->normalizeName($name);
@ -5314,7 +5314,7 @@ EOL;
* *
* @return mixed|null * @return mixed|null
*/ */
public function get($name, $shouldThrow = true, Environment $env = null, $unreduced = false) public function get($name, $shouldThrow = true, ?Environment $env = null, $unreduced = false)
{ {
$normalizedName = $this->normalizeName($name); $normalizedName = $this->normalizeName($name);
$specialContentKey = static::$namespaces['special'] . 'content'; $specialContentKey = static::$namespaces['special'] . 'content';
@ -5379,7 +5379,7 @@ EOL;
* *
* @return bool * @return bool
*/ */
protected function has($name, Environment $env = null) protected function has($name, ?Environment $env = null)
{ {
return ! \is_null($this->get($name, false, $env)); return ! \is_null($this->get($name, false, $env));
} }

View File

@ -272,7 +272,7 @@ abstract class Formatter
* *
* @return string * @return string
*/ */
public function format(OutputBlock $block, SourceMapGenerator $sourceMapGenerator = null) public function format(OutputBlock $block, ?SourceMapGenerator $sourceMapGenerator = null)
{ {
$this->sourceMapGenerator = null; $this->sourceMapGenerator = null;

View File

@ -578,7 +578,7 @@ class Number extends Node implements \ArrayAccess, \JsonSerializable
* *
* @return string * @return string
*/ */
public function output(Compiler $compiler = null) public function output(?Compiler $compiler = null)
{ {
$dimension = round($this->dimension, self::PRECISION); $dimension = round($this->dimension, self::PRECISION);

View File

@ -140,7 +140,7 @@ class Parser
* @param bool $cssOnly * @param bool $cssOnly
* @param LoggerInterface|null $logger * @param LoggerInterface|null $logger
*/ */
public function __construct($sourceName, $sourceIndex = 0, $encoding = 'utf-8', Cache $cache = null, $cssOnly = false, LoggerInterface $logger = null) public function __construct($sourceName, $sourceIndex = 0, $encoding = 'utf-8', ?Cache $cache = null, $cssOnly = false, ?LoggerInterface $logger = null)
{ {
$this->sourceName = $sourceName ?: '(stdin)'; $this->sourceName = $sourceName ?: '(stdin)';
$this->sourceIndex = $sourceIndex; $this->sourceIndex = $sourceIndex;

View File

@ -59,7 +59,7 @@ final class Warn
* *
* @internal * @internal
*/ */
public static function setCallback(callable $callback = null) public static function setCallback(?callable $callback = null)
{ {
$previousCallback = self::$callback; $previousCallback = self::$callback;
self::$callback = $callback; self::$callback = $callback;