From c853e76b843ec0904eada3ab140e7460af9ad140 Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Wed, 21 Oct 2026 22:39:35 +0300 Subject: [PATCH 01/16] chore(deps): bump kohana-aliases to v1.0.0 Makes Model_Uri __sleep and __wakeup public: PHP 8 warns about private magic methods and prints the warning into the first page after FPM start. --- www/modules/aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/modules/aliases b/www/modules/aliases index 8fea075c..28d2f1d0 160000 --- a/www/modules/aliases +++ b/www/modules/aliases @@ -1 +1 @@ -Subproject commit 8fea075c6986164fb74678b129abb136c595ffdf +Subproject commit 28d2f1d0952d9f311f26f2bca5cb3efc34895710 From fc6ba5f11264e1676f1aa42d0f69519d256b5e88 Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Wed, 21 Oct 2026 22:39:36 +0300 Subject: [PATCH 02/16] chore(docker): upgrade PHP from 7.2 to 8.4.27 PHP 8.4.27 fixes CVE-2026-109618 and CVE-2026-109619 (RCE in PHP-FPM), PHP 7.2 does not get security fixes. - use Debian Bookworm image: it ships ImageMagick 6 where Imagick::setImageOpacity() used by social covers still exists - install memcache 8.2, imagick 3.8.1 and redis 6.3.0 from PECL - use new GD configure flags - build fontconfig cache to avoid errors in FPM logs --- docker/php/Dockerfile | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile index 9ce8112d..06eec473 100644 --- a/docker/php/Dockerfile +++ b/docker/php/Dockerfile @@ -1,10 +1,9 @@ -FROM php:7.2-fpm - -# Fix Debian Buster EOL - point to archive repositories -RUN sed -i 's/deb.debian.org/archive.debian.org/g' /etc/apt/sources.list && \ - sed -i 's|security.debian.org/debian-security|archive.debian.org/debian-security|g' /etc/apt/sources.list && \ - sed -i '/stretch-updates/d' /etc/apt/sources.list && \ - sed -i '/buster-updates/d' /etc/apt/sources.list +# PHP 8.4.27 fixes CVE-2026-109618 and CVE-2026-109619 (RCE in PHP-FPM) +# Read: https://www.php.net/archive/2026.php#2026-10-21-5 +# +# > use Debian Bookworm cause it ships ImageMagick 6: Imagick::setImageOpacity() +# > used by pavelzotikov/social-covers-generator does not exist with ImageMagick 7 +FROM php:8.4.27-fpm-bookworm RUN apt-get update && apt-get install -y --no-install-recommends \ git \ @@ -15,6 +14,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libssl-dev libpcre3 libpcre3-dev \ libmagickwand-dev imagemagick +# Build fonts cache for ImageMagick. Otherwise PHP-FPM workers log +# "Fontconfig error: No writable cache directories" on every cover render +RUN fc-cache -f + # Set the locale RUN apt-get -qq update && apt-get -qqy install locales RUN sed -i -e 's/# ru_RU ISO-8859-5/ru_RU ISO-8859-5/' /etc/locale.gen && \ @@ -35,33 +38,25 @@ RUN curl -sS https://getcomposer.org/installer | php RUN mv composer.phar /usr/local/bin/composer # Install memcache extension -RUN set -x \ - && cd /tmp \ - && curl -sSL -o php7.zip https://github.com/websupport-sk/pecl-memcache/archive/php7.zip \ - && unzip php7 \ - && cd pecl-memcache-php7 \ - && /usr/local/bin/phpize \ - && ./configure --with-php-config=/usr/local/bin/php-config \ - && make \ - && make install \ - && echo "extension=memcache.so" > /usr/local/etc/php/conf.d/ext-memcache.ini \ - && rm -rf /tmp/pecl-memcache-php7 php7.zip +# > version 8.x supports PHP 8 +RUN pecl install memcache-8.2 +RUN docker-php-ext-enable \ + memcache # Install ImageMagick -# > use version 3.4.3 cause "Function Imagick::setImageOpacity() is deprecated" -# > in 3.4.4 and above. Read: https://www.php.net/manual/en/imagick.setimageopacity.php -RUN pecl install -f imagick-3.4.3 +# > Imagick::setImageOpacity() is deprecated since 3.4.4, so we disable +# > E_DEPRECATED in bootstrap. Read: https://www.php.net/manual/en/imagick.setimageopacity.php +RUN pecl install imagick-3.8.1 RUN docker-php-ext-enable \ imagick # Install redis php-exts -# > use version 5.3.7 - last version compatible with PHP 7.2 -RUN pecl install redis-5.3.7 +RUN pecl install redis-6.3.0 RUN docker-php-ext-enable \ redis # Configure GD library -RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ +RUN docker-php-ext-configure gd --with-freetype --with-jpeg # Enable some php-exts RUN docker-php-ext-install \ From 8d1d250c1e6043ec1a144045a10a4562408a3672 Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Wed, 21 Oct 2026 22:39:36 +0300 Subject: [PATCH 03/16] chore(deps): update hawk.php and drop phpunit 3.7 for PHP 8 - codex-team/hawk.php 2.1.4 requires PHP ^7.1, update to 2.3.0 - phpunit 3.7 can not be installed or run on PHP 8, the only test is a sample --- www/composer.json | 1 - www/composer.lock | 623 +++------------------------------------------- 2 files changed, 40 insertions(+), 584 deletions(-) diff --git a/www/composer.json b/www/composer.json index cb35f0eb..4554cff0 100755 --- a/www/composer.json +++ b/www/composer.json @@ -1,6 +1,5 @@ { "require": { - "phpunit/phpunit": "3.7.*", "vlucas/phpdotenv": "^2.4", "codex-team/editor.js": "^2.0", "euskadi31/opengraph": "^1.0", diff --git a/www/composer.lock b/www/composer.lock index ed7a7601..24cf135a 100644 --- a/www/composer.lock +++ b/www/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e96043ca5c19ba7924400ebab1a6107d", + "content-hash": "f39a76abb25f759f72cbd73abf8316a0", "packages": [ { "name": "aws/aws-crt-php", @@ -197,29 +197,31 @@ }, { "name": "codex-team/hawk.php", - "version": "2.1.4", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/codex-team/hawk.php.git", - "reference": "900844cf475938334aac66f9d21b75a9380063ba" + "reference": "358ff5a96234fba4eaa2768a43392daa5be0d50f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/codex-team/hawk.php/zipball/900844cf475938334aac66f9d21b75a9380063ba", - "reference": "900844cf475938334aac66f9d21b75a9380063ba", + "url": "https://api.github.com/repos/codex-team/hawk.php/zipball/358ff5a96234fba4eaa2768a43392daa5be0d50f", + "reference": "358ff5a96234fba4eaa2768a43392daa5be0d50f", "shasum": "" }, "require": { - "ext-curl": "*", "ext-json": "*", - "monolog/monolog": "^2.2", - "php": "^7.1" + "jean85/pretty-package-versions": "^1.5 || ^2.0", + "php": "^7.2 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.15", "phpunit/phpunit": "^8.2", "symfony/var-dumper": "^5.2" }, + "suggest": { + "ext-curl": "Required to use the default CurlTransport. Not needed when providing a custom transport." + }, "type": "library", "autoload": { "psr-4": { @@ -235,14 +237,13 @@ "catcher", "error", "hawk", - "monolog", "php" ], "support": { "issues": "https://github.com/codex-team/hawk.php/issues", - "source": "https://github.com/codex-team/hawk.php/tree/v2.1.4" + "source": "https://github.com/codex-team/hawk.php/tree/v2.3.0" }, - "time": "2021-08-11T08:16:13+00:00" + "time": "2026-08-13T15:10:02+00:00" }, { "name": "euskadi31/opengraph", @@ -680,65 +681,40 @@ "time": "2022-10-26T14:07:24+00:00" }, { - "name": "monolog/monolog", - "version": "2.3.2", + "name": "jean85/pretty-package-versions", + "version": "2.1.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "71312564759a7db5b789296369c1a264efc43aad" + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/71312564759a7db5b789296369c1a264efc43aad", - "reference": "71312564759a7db5b789296369c1a264efc43aad", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1" - }, - "provide": { - "psr/log-implementation": "1.0.0" + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", - "graylog2/gelf-php": "^1.4.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <7.0.1", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "rector/rector": "^2.0", + "vimeo/psalm": "^4.3 || ^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Jean85\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -747,33 +723,22 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", + "description": "A library to get pretty versions strings of installed dependencies", "keywords": [ - "log", - "logging", - "psr-3" + "composer", + "package", + "release", + "versions" ], "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.2" + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2021-07-23T07:42:52+00:00" + "time": "2025-03-19T14:43:43+00:00" }, { "name": "mtdowling/jmespath.php", @@ -880,411 +845,6 @@ }, "time": "2018-07-23T16:51:22+00:00" }, - { - "name": "phpunit/php-code-coverage", - "version": "1.2.18", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b", - "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": ">=1.3.0@stable", - "phpunit/php-text-template": ">=1.2.0@stable", - "phpunit/php-token-stream": ">=1.1.3,<1.3.0" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*@dev" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.0.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "irc": "irc://irc.freenode.net/phpunit", - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/1.2.18" - }, - "time": "2014-09-02T10:13:14+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "irc": "irc://irc.freenode.net/phpunit", - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5" - }, - "time": "2017-11-27T13:52:08+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" - }, - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/master" - }, - "time": "2017-02-26T11:10:40+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32", - "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "support": { - "irc": "irc://irc.freenode.net/phpunit", - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/1.2.2" - }, - "abandoned": true, - "time": "2014-03-03T05:10:30+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "3.7.38", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/38709dc22d519a3d1be46849868aa2ddf822bcf6", - "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": "~1.2", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.1", - "phpunit/php-timer": "~1.0", - "phpunit/phpunit-mock-objects": "~1.2", - "symfony/yaml": "~2.0" - }, - "require-dev": { - "pear-pear.php.net/pear": "1.9.4" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "composer/bin/phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.7.x-dev" - } - }, - "autoload": { - "classmap": [ - "PHPUnit/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "irc": "irc://irc.freenode.net/phpunit", - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/3.7" - }, - "time": "2014-10-17T09:04:17+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875", - "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-text-template": ">=1.1.1@stable" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "PHPUnit/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "support": { - "irc": "irc://irc.freenode.net/phpunit", - "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", - "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/1.2.3" - }, - "abandoned": true, - "time": "2013-01-13T10:24:48+00:00" - }, { "name": "psr/http-client", "version": "1.0.1", @@ -1445,56 +1005,6 @@ }, "time": "2016-08-06T14:39:51+00:00" }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, { "name": "ralouphie/getallheaders", "version": "3.0.3", @@ -1848,59 +1358,6 @@ ], "time": "2022-11-03T14:55:06+00:00" }, - { - "name": "symfony/yaml", - "version": "v2.8.52", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "02c1859112aa779d9ab394ae4f3381911d84052b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/02c1859112aa779d9ab394ae4f3381911d84052b", - "reference": "02c1859112aa779d9ab394ae4f3381911d84052b", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v2.8.52" - }, - "time": "2018-11-11T11:18:13+00:00" - }, { "name": "vlucas/phpdotenv", "version": "v2.6.7", @@ -1989,6 +1446,6 @@ "platform": { "ext-simplexml": "*" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": {}, + "plugin-api-version": "2.9.0" } From d7028094e1d5ec5e82179a643aed435f33ce8323 Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Wed, 21 Oct 2026 22:39:36 +0300 Subject: [PATCH 04/16] fix: make Kohana core compatible with PHP 8 - Arr::path() passed Config_Group to array_key_exists(), which throws TypeError since PHP 8.0 and broke every POST request via XSS filter - replace each() removed in PHP 8.0 in Response::cookie() - drop imagerotate() ignore_transparent argument removed in PHP 8.3 --- www/modules/image/classes/Kohana/Image/GD.php | 2 +- www/system/classes/Kohana/Arr.php | 3 ++- www/system/classes/Kohana/Response.php | 3 +-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/www/modules/image/classes/Kohana/Image/GD.php b/www/modules/image/classes/Kohana/Image/GD.php index 6f383e3d..47331a99 100755 --- a/www/modules/image/classes/Kohana/Image/GD.php +++ b/www/modules/image/classes/Kohana/Image/GD.php @@ -259,7 +259,7 @@ protected function _do_rotate($degrees) $transparent = imagecolorallocatealpha($this->_image, 0, 0, 0, 127); // Rotate, setting the transparent color - $image = imagerotate($this->_image, 360 - $degrees, $transparent, 1); + $image = imagerotate($this->_image, 360 - $degrees, $transparent); // Save the alpha of the rotated image imagesavealpha($image, TRUE); diff --git a/www/system/classes/Kohana/Arr.php b/www/system/classes/Kohana/Arr.php index 479b72f6..084ca671 100755 --- a/www/system/classes/Kohana/Arr.php +++ b/www/system/classes/Kohana/Arr.php @@ -101,7 +101,8 @@ public static function path($array, $path, $default = NULL, $delimiter = NULL) } else { - if (array_key_exists($path, $array)) + // array_key_exists() does not accept objects since PHP 8.0 + if (is_array($array) ? array_key_exists($path, $array) : ($array instanceof ArrayAccess AND $array->offsetExists($path))) { // No need to do extra processing return $array[$path]; diff --git a/www/system/classes/Kohana/Response.php b/www/system/classes/Kohana/Response.php index d9ab5fc5..25774fec 100755 --- a/www/system/classes/Kohana/Response.php +++ b/www/system/classes/Kohana/Response.php @@ -297,8 +297,7 @@ public function cookie($key = NULL, $value = NULL) // Handle the set cookie calls if (is_array($key)) { - reset($key); - while (list($_key, $_value) = each($key)) + foreach ($key as $_key => $_value) { $this->cookie($_key, $_value); } From 4b20a11bd4a06fa7ae28c79a5a6eaa4df9d78845 Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Wed, 21 Oct 2026 22:39:36 +0300 Subject: [PATCH 05/16] fix: disable E_DEPRECATED on production Kohana converts every reported error into an exception, and Kohana 3.3 raises a lot of deprecations on PHP 8, so production returned 500 on every page. E_STRICT constant is deprecated in PHP 8.4. --- www/application/bootstrap.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/www/application/bootstrap.php b/www/application/bootstrap.php index c059c660..af72d4d1 100755 --- a/www/application/bootstrap.php +++ b/www/application/bootstrap.php @@ -111,12 +111,16 @@ } /** -* Turn off notices and strict errors on production +* Turn off notices and deprecations on production * @since 2017.16.02 @neSpecc +* +* > E_DEPRECATED must stay disabled: Kohana converts every reported error into +* > an exception, and Kohana 3.3 raises a lot of deprecations on PHP 8. +* > E_STRICT is not used since PHP 8.0 and the constant is deprecated in PHP 8.4 */ if ( Kohana::$environment === Kohana::PRODUCTION ) { - error_reporting(E_ALL ^ E_NOTICE ^ E_STRICT); + error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); } From 71873d823c07dc933bf85eaae94ee8954aff976a Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 19:40:59 +0000 Subject: [PATCH 06/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index 301f8c74..6387d840 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792542020632} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792611655293} \ No newline at end of file From 327a414c08fe4da371f8ad8ef1ae9f4e50340f93 Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Wed, 21 Oct 2026 20:39:46 +0300 Subject: [PATCH 07/16] chore(deps): update AWS SDK and Guzzle to fix security advisories composer update aws/aws-sdk-php guzzlehttp/guzzle guzzlehttp/psr7 \ guzzlehttp/promises mtdowling/jmespath.php -W Closes 18 advisories reported by `composer audit`: - mtdowling/jmespath.php 2.6.1 -> 2.9.2: CVE-2026-54133 - aws/aws-sdk-php 3.256.2 -> 3.401.4: CVE-2023-51651, CVE-2025-14761, GHSA-27qh-8cxx-2cr5 (CloudFront policy injection, no CVE) - guzzlehttp/guzzle 7.5.0 -> 7.16.0: CVE-2026-55568, CVE-2026-55767, CVE-2026-59883, CVE-2026-67339, CVE-2026-67353, CVE-2026-67354, CVE-2026-67355, CVE-2026-69245, CVE-2026-69246 - guzzlehttp/psr7 2.4.3 -> 2.13.2: CVE-2023-29197, CVE-2026-48998, CVE-2026-49214, CVE-2026-55766, CVE-2026-59882 Dependencies updated along: guzzlehttp/promises 1.5.2 -> 2.6.0, aws/aws-crt-php v1.0.2 -> v1.2.7, psr/http-message 1.0.1 -> 2.0, psr/http-client 1.0.1 -> 1.0.3, psr/http-factory 1.0.1 -> 1.1.0, symfony/deprecation-contracts v2.5.2 -> v3.7.1, symfony/polyfill-ctype v1.23.0 -> v1.37.0, symfony/polyfill-mbstring v1.27.0 -> v1.43.0, new symfony/filesystem v8.1.9 and symfony/polyfill-php80 v1.43.0. aws/aws-sdk-php now requires PHP >= 8.1 and symfony/filesystem 8.1 requires PHP >= 8.4.1, so this lock needs the php-8.4-upgrade image. --- www/composer.lock | 483 +++++++++++++++++++++++++++++++--------------- 1 file changed, 330 insertions(+), 153 deletions(-) diff --git a/www/composer.lock b/www/composer.lock index 24cf135a..e2d2344e 100644 --- a/www/composer.lock +++ b/www/composer.lock @@ -8,23 +8,27 @@ "packages": [ { "name": "aws/aws-crt-php", - "version": "v1.0.2", + "version": "v1.2.7", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "3942776a8c99209908ee0b287746263725685732" + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/3942776a8c99209908ee0b287746263725685732", - "reference": "3942776a8c99209908ee0b287746263725685732", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", "shasum": "" }, "require": { "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.8.35|^5.4.3" + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." }, "type": "library", "autoload": { @@ -43,7 +47,7 @@ } ], "description": "AWS Common Runtime for PHP", - "homepage": "http://aws.amazon.com/sdkforphp", + "homepage": "https://github.com/awslabs/aws-crt-php", "keywords": [ "amazon", "aws", @@ -52,59 +56,59 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.0.2" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" }, - "time": "2021-09-03T22:57:30+00:00" + "time": "2024-10-18T22:15:13+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.256.2", + "version": "3.401.4", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "a72094f7d968bdc743839e309087d51f868ba26c" + "reference": "b5941e2da9fb860f06ad5046d96219c4288ab6b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a72094f7d968bdc743839e309087d51f868ba26c", - "reference": "a72094f7d968bdc743839e309087d51f868ba26c", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b5941e2da9fb860f06ad5046d96219c4288ab6b8", + "reference": "b5941e2da9fb860f06ad5046d96219c4288ab6b8", "shasum": "" }, "require": { - "aws/aws-crt-php": "^1.0.2", + "aws/aws-crt-php": "^1.2.3", "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.8.5 || ^2.3", - "mtdowling/jmespath.php": "^2.6", - "php": ">=5.5" + "guzzlehttp/guzzle": "^7.8.2 || ^8.0", + "guzzlehttp/promises": "^2.0.3 || ^3.0", + "guzzlehttp/psr7": "^2.6.3 || ^3.0", + "mtdowling/jmespath.php": "^2.9.1", + "php": ">=8.1", + "psr/http-message": "^1.0 || ^2.0", + "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", "aws/aws-php-sns-message-validator": "~1.0", "behat/behat": "~3.0", - "composer/composer": "^1.10.22", - "dms/phpunit-arraysubset-asserts": "^0.4.0", + "composer/composer": "^2.7.8", + "dms/phpunit-arraysubset-asserts": "^v0.5.0", "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", - "ext-pcntl": "*", "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" + "phpunit/phpunit": "^10.0", + "psr/cache": "^2.0 || ^3.0", + "psr/simple-cache": "^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", + "yoast/phpunit-polyfills": "^2.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", "doctrine/cache": "To use the DoctrineCacheAdapter", "ext-curl": "To send requests using cURL", "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-pcntl": "To use client-side monitoring", "ext-sockets": "To use client-side monitoring" }, "type": "library", @@ -119,7 +123,10 @@ ], "psr-4": { "Aws\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/data/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -128,11 +135,11 @@ "authors": [ { "name": "Amazon Web Services", - "homepage": "http://aws.amazon.com" + "homepage": "https://aws.amazon.com" } ], "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "http://aws.amazon.com/sdkforphp", + "homepage": "https://aws.amazon.com/sdk-for-php", "keywords": [ "amazon", "aws", @@ -144,11 +151,11 @@ "sdk" ], "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.256.2" + "source": "https://github.com/aws/aws-sdk-php/tree/3.401.4" }, - "time": "2023-01-11T20:12:50+00:00" + "time": "2026-10-20T18:15:27+00:00" }, { "name": "codex-team/editor.js", @@ -351,34 +358,37 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.5.0", + "version": "7.16.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + "reference": "ffb62ec787050ae4fa9449cdd6b80335db69bda2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ffb62ec787050ae4fa9449cdd6b80335db69bda2", + "reference": "ffb62ec787050ae4fa9449cdd6b80335db69bda2", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^2.6", + "guzzlehttp/psr7": "^2.13.2", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "guzzle/client-integration-tests": "3.0.3", + "guzzlehttp/test-server": "^0.7", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -391,9 +401,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -459,7 +466,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + "source": "https://github.com/guzzle/guzzle/tree/7.16.0" }, "funding": [ { @@ -475,38 +482,38 @@ "type": "tidelift" } ], - "time": "2022-08-28T15:39:27+00:00" + "time": "2026-10-18T13:38:36+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/3d88c829bd5f13d13847b39067dbf09a60af2154", + "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -543,7 +550,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/2.6.0" }, "funding": [ { @@ -559,36 +566,39 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2026-10-18T12:46:59+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.3", + "version": "2.13.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "67c26b443f348a51926030c83481b85718457d3d" + "reference": "adee536f95101929f262b8c59e8a61472f347d58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", - "reference": "67c26b443f348a51926030c83481b85718457d3d", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/adee536f95101929f262b8c59e8a61472f347d58", + "reference": "adee536f95101929f262b8c59e8a61472f347d58", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -598,9 +608,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" } }, "autoload": { @@ -662,7 +669,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.3" + "source": "https://github.com/guzzle/psr7/tree/2.13.2" }, "funding": [ { @@ -678,7 +685,7 @@ "type": "tidelift" } ], - "time": "2022-10-26T14:07:24+00:00" + "time": "2026-10-17T23:49:46+00:00" }, { "name": "jean85/pretty-package-versions", @@ -742,25 +749,25 @@ }, { "name": "mtdowling/jmespath.php", - "version": "2.6.1", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" + "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", + "reference": "2157c5e50e813ec6a96c1eed3be7f64a20fb32a8", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0", + "php": "^7.2.5 || ^8.0", "symfony/polyfill-mbstring": "^1.17" }, "require-dev": { - "composer/xdebug-handler": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^7.5.15" + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.52" }, "bin": [ "bin/jp.php" @@ -768,7 +775,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.9-dev" } }, "autoload": { @@ -784,6 +791,11 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", @@ -797,9 +809,9 @@ ], "support": { "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" + "source": "https://github.com/jmespath/jmespath.php/tree/2.9.2" }, - "time": "2021-06-14T00:11:39+00:00" + "time": "2026-07-06T18:56:19+00:00" }, { "name": "pavelzotikov/social-covers-generator", @@ -847,21 +859,21 @@ }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -881,7 +893,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -893,27 +905,27 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -933,10 +945,10 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -948,31 +960,31 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -987,7 +999,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -1001,9 +1013,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "ralouphie/getallheaders", @@ -1131,29 +1143,29 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" } }, "autoload": { @@ -1178,7 +1190,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" }, "funding": [ { @@ -1189,50 +1201,125 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "43d109c803d22c00bb820ed45df250b6a8792ca2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/43d109c803d22c00bb820ed45df250b6a8792ca2", + "reference": "43d109c803d22c00bb820ed45df250b6a8792ca2", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v8.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2026-10-06T20:05:50+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" }, "suggest": { "ext-ctype": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1257,7 +1344,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" }, "funding": [ { @@ -1268,29 +1355,34 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1300,12 +1392,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1340,7 +1429,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" }, "funding": [ { @@ -1351,12 +1440,100 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-24T15:19:04+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2026-09-25T15:50:05+00:00" }, { "name": "vlucas/phpdotenv", From c03b70fd2e35f31a2995055efbd3d484ce41ba6c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 19:45:59 +0000 Subject: [PATCH 08/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index 6387d840..45e8b232 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792611655293} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792611955939} \ No newline at end of file From 7fefa9a1ab9e8b3210e4eafb0f1355e7cc56406e Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Wed, 21 Oct 2026 22:47:02 +0300 Subject: [PATCH 09/16] fix(image): keep GD transformations on PHP 8 Since PHP 8.0 GD returns GdImage objects instead of resources, so _load_image() treated a loaded image as not loaded and reloaded the original file on save() and render(), losing rotate, resize and crop. --- www/modules/image/classes/Kohana/Image/GD.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/modules/image/classes/Kohana/Image/GD.php b/www/modules/image/classes/Kohana/Image/GD.php index 47331a99..31204f5a 100755 --- a/www/modules/image/classes/Kohana/Image/GD.php +++ b/www/modules/image/classes/Kohana/Image/GD.php @@ -138,7 +138,8 @@ public function __destruct() */ protected function _load_image() { - if ( ! is_resource($this->_image)) + // GD returns GdImage objects instead of resources since PHP 8.0 + if ( ! is_resource($this->_image) AND ! ($this->_image instanceof GdImage)) { // Gets create function $create = $this->_create_function; From bf39bf16a13e1ebb96f938467edced206125c329 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 19:47:50 +0000 Subject: [PATCH 10/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index 6387d840..706f9c7a 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792611655293} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792612065445} \ No newline at end of file From b2d1271614d035e2e8142262625d1e677393dac4 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 19:56:18 +0000 Subject: [PATCH 11/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index 706f9c7a..e128d2cf 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792612065445} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792612575051} \ No newline at end of file From 02d64918c29979bcef6b87b06d275b89b0bb1b44 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 19:59:30 +0000 Subject: [PATCH 12/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index e128d2cf..7907ae6f 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792612575051} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792612766363} \ No newline at end of file From c47c1e6110ab23a24b4cfa286fce8f906cebc017 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:36:16 +0000 Subject: [PATCH 13/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index e128d2cf..29cee015 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792612575051} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792618572556} \ No newline at end of file From f98df8bfc2bac9204bcdc71acd206c104c051f3c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:38:48 +0000 Subject: [PATCH 14/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index 29cee015..90aff902 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792618572556} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792618724472} \ No newline at end of file From 604d6e9daa9f6d4c43cea9d588e061943916342e Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:41:28 +0000 Subject: [PATCH 15/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index 29cee015..07a368ff 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792618572556} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792618884438} \ No newline at end of file From 36e87b91fb3bd1b62dc3341adc5e2876410a5db5 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:43:06 +0000 Subject: [PATCH 16/16] Build frontend --- www/public/build/release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/public/build/release.json b/www/public/build/release.json index 07a368ff..473c0963 100644 --- a/www/public/build/release.json +++ b/www/public/build/release.json @@ -1 +1 @@ -{"release":"0dbef819201fa99bd372","date":1792618884438} \ No newline at end of file +{"release":"0dbef819201fa99bd372","date":1792618981849} \ No newline at end of file