From 4fb28787286cb01b92980313157a4ae9e0e9cff1 Mon Sep 17 00:00:00 2001 From: Shish Date: Tue, 28 Feb 2023 23:17:00 +0000 Subject: [PATCH 01/28] admins can vote too --- core/userclass.php | 1 + 1 file changed, 1 insertion(+) diff --git a/core/userclass.php b/core/userclass.php index d3fbc7e9..fc04b60b 100644 --- a/core/userclass.php +++ b/core/userclass.php @@ -184,6 +184,7 @@ new UserClass("admin", "base", [ Permissions::EDIT_FEATURE => true, Permissions::BULK_EDIT_VOTE => true, Permissions::EDIT_OTHER_VOTE => true, + Permissions::CREATE_VOTE => true, Permissions::VIEW_SYSINTO => true, Permissions::HELLBANNED => false, From 3b31187ea19d0d30194ae657cb725d3a22071422 Mon Sep 17 00:00:00 2001 From: Shish Date: Wed, 8 Mar 2023 22:26:30 +0000 Subject: [PATCH 02/28] bump --- composer.lock | 160 +++++++++++++++++++++++++------------------------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/composer.lock b/composer.lock index dca45b1d..bf2bf72a 100644 --- a/composer.lock +++ b/composer.lock @@ -171,27 +171,27 @@ "source": { "type": "git", "url": "https://github.com/google/recaptcha.git", - "reference": "ed5645e799e43afa9eb181f214dc52f22982682d" + "reference": "6ffa193021aa0e369a3c5b3909de2b4ed97ac359" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/recaptcha/zipball/ed5645e799e43afa9eb181f214dc52f22982682d", - "reference": "ed5645e799e43afa9eb181f214dc52f22982682d", + "url": "https://api.github.com/repos/google/recaptcha/zipball/6ffa193021aa0e369a3c5b3909de2b4ed97ac359", + "reference": "6ffa193021aa0e369a3c5b3909de2b4ed97ac359", "shasum": "" }, "require": { - "php": ">=5.5" + "php": ">=8" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.2.20|^2.15", - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^4.8.36|^5.7.27|^6.59|^7.5.11" + "friendsofphp/php-cs-fixer": "^3.14", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^10" }, "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -216,7 +216,7 @@ "issues": "https://github.com/google/recaptcha/issues", "source": "https://github.com/google/recaptcha" }, - "time": "2021-10-04T09:40:45+00:00" + "time": "2023-02-20T17:27:30+00:00" }, { "name": "ifixit/php-akismet", @@ -563,12 +563,12 @@ "source": { "type": "git", "url": "https://github.com/shish/gqla.git", - "reference": "f3c02ec9bcb6b43cc4963c6d0529bf3334f4684a" + "reference": "26bf0405445f4e32e68cd7f1ea2256e81c6c42cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shish/gqla/zipball/f3c02ec9bcb6b43cc4963c6d0529bf3334f4684a", - "reference": "f3c02ec9bcb6b43cc4963c6d0529bf3334f4684a", + "url": "https://api.github.com/repos/shish/gqla/zipball/26bf0405445f4e32e68cd7f1ea2256e81c6c42cb", + "reference": "26bf0405445f4e32e68cd7f1ea2256e81c6c42cb", "shasum": "" }, "require": { @@ -608,7 +608,7 @@ "issues": "https://github.com/shish/gqla/issues", "source": "https://github.com/shish/gqla/tree/main" }, - "time": "2023-02-16T01:02:40+00:00" + "time": "2023-03-03T00:12:44+00:00" }, { "name": "shish/microcrud", @@ -719,16 +719,16 @@ }, { "name": "webonyx/graphql-php", - "version": "v15.1.0", + "version": "v15.2.1", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "c58c08f3e2d6c43a8e0bb4bcc61ecb2a3e4f85df" + "reference": "6b02da9313065889eb783d623567476500a572ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/c58c08f3e2d6c43a8e0bb4bcc61ecb2a3e4f85df", - "reference": "c58c08f3e2d6c43a8e0bb4bcc61ecb2a3e4f85df", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/6b02da9313065889eb783d623567476500a572ef", + "reference": "6b02da9313065889eb783d623567476500a572ef", "shasum": "" }, "require": { @@ -740,13 +740,13 @@ "amphp/amp": "^2.6", "dms/phpunit-arraysubset-asserts": "^0.4", "ergebnis/composer-normalize": "^2.28", - "mll-lab/php-cs-fixer-config": "^4.4", + "mll-lab/php-cs-fixer-config": "^5.0", "nyholm/psr7": "^1.5", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.9.14", - "phpstan/phpstan-phpunit": "1.3.3", - "phpstan/phpstan-strict-rules": "1.4.5", + "phpstan/phpstan": "1.10.3", + "phpstan/phpstan-phpunit": "1.3.8", + "phpstan/phpstan-strict-rules": "1.5.0", "phpunit/phpunit": "^9.5", "psr/http-message": "^1", "react/http": "^1.6", @@ -777,7 +777,7 @@ ], "support": { "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v15.1.0" + "source": "https://github.com/webonyx/graphql-php/tree/v15.2.1" }, "funding": [ { @@ -785,7 +785,7 @@ "type": "open_collective" } ], - "time": "2023-02-04T15:00:26+00:00" + "time": "2023-02-28T13:00:18+00:00" } ], "packages-dev": [ @@ -1774,12 +1774,12 @@ "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "402a12629e3ad6d6897273769808a28c32745309" + "reference": "ac0b16ee5317d1aacc41deb91c6c325eae97c176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/402a12629e3ad6d6897273769808a28c32745309", - "reference": "402a12629e3ad6d6897273769808a28c32745309", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/ac0b16ee5317d1aacc41deb91c6c325eae97c176", + "reference": "ac0b16ee5317d1aacc41deb91c6c325eae97c176", "shasum": "" }, "require": { @@ -1801,7 +1801,7 @@ "phpbench/phpbench": "^1.0", "phpstan/phpstan": "^1.0.2", "phpunit/phpunit": "^8.5.21||^9.0", - "psr/container": "^1.0", + "psr/container": "^1.0|^2.0", "symfony/dependency-injection": "^3.0|^4.0|^5.0|^6.0", "symfony/expression-language": "^3.2|^4.0|^5.0|^6.0", "symfony/filesystem": "^3.0|^4.0|^5.0|^6.0", @@ -1855,7 +1855,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/serializer/issues", - "source": "https://github.com/schmittjoh/serializer/tree/master" + "source": "https://github.com/schmittjoh/serializer/tree/3.23.0" }, "funding": [ { @@ -1863,7 +1863,7 @@ "type": "github" } ], - "time": "2023-02-03T05:06:38+00:00" + "time": "2023-02-17T17:40:48+00:00" }, { "name": "myclabs/deep-copy", @@ -2107,20 +2107,20 @@ "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "00430c0532ae544fb1c81e45705b3d356bfc25d0" + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/00430c0532ae544fb1c81e45705b3d356bfc25d0", - "reference": "00430c0532ae544fb1c81e45705b3d356bfc25d0", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.30 || ^9.5.25" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" }, "default-branch": true, "type": "library", @@ -2163,7 +2163,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/master" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" }, "funding": [ { @@ -2175,7 +2175,7 @@ "type": "tidelift" } ], - "time": "2022-10-15T20:52:05+00:00" + "time": "2023-02-25T19:38:58+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -2228,12 +2228,12 @@ "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e4e424021a9a9ec9f4c06572c55feb09737d1f8e" + "reference": "aed9319bda4e1bf862e2576baf28949877891853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e4e424021a9a9ec9f4c06572c55feb09737d1f8e", - "reference": "e4e424021a9a9ec9f4c06572c55feb09737d1f8e", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/aed9319bda4e1bf862e2576baf28949877891853", + "reference": "aed9319bda4e1bf862e2576baf28949877891853", "shasum": "" }, "require": { @@ -2280,7 +2280,7 @@ "type": "tidelift" } ], - "time": "2023-02-15T20:23:03+00:00" + "time": "2023-03-02T09:48:34+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2288,19 +2288,19 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "8083be52c6f5ba5a48eafa154e0aeefd96bda098" + "reference": "700aa825126460ce5be79ae5e1cf2e2c5b71588b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/8083be52c6f5ba5a48eafa154e0aeefd96bda098", - "reference": "8083be52c6f5ba5a48eafa154e0aeefd96bda098", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/700aa825126460ce5be79ae5e1cf2e2c5b71588b", + "reference": "700aa825126460ce5be79ae5e1cf2e2c5b71588b", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -2357,7 +2357,7 @@ "type": "github" } ], - "time": "2023-02-11T08:53:26+00:00" + "time": "2023-02-27T12:51:14+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2606,12 +2606,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4e6f3c050b54192d0a28c6f314a3567c00a7d017" + "reference": "d6454d6dd71024848893a1e2d1f1dd78683351db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4e6f3c050b54192d0a28c6f314a3567c00a7d017", - "reference": "4e6f3c050b54192d0a28c6f314a3567c00a7d017", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d6454d6dd71024848893a1e2d1f1dd78683351db", + "reference": "d6454d6dd71024848893a1e2d1f1dd78683351db", "shasum": "" }, "require": { @@ -2700,7 +2700,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T15:49:39+00:00" + "time": "2023-02-28T06:43:37+00:00" }, { "name": "psr/cache", @@ -4136,12 +4136,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "766d8f0b461e01dcbb352e02dc72455b1e55aeb8" + "reference": "1090bd292e4de35682f80e94d196c62aab4b3ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/766d8f0b461e01dcbb352e02dc72455b1e55aeb8", - "reference": "766d8f0b461e01dcbb352e02dc72455b1e55aeb8", + "url": "https://api.github.com/repos/symfony/console/zipball/1090bd292e4de35682f80e94d196c62aab4b3ad7", + "reference": "1090bd292e4de35682f80e94d196c62aab4b3ad7", "shasum": "" }, "require": { @@ -4224,7 +4224,7 @@ "type": "tidelift" } ], - "time": "2023-02-15T16:09:02+00:00" + "time": "2023-02-25T17:00:13+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4232,12 +4232,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", "shasum": "" }, "require": { @@ -4276,7 +4276,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" }, "funding": [ { @@ -4292,7 +4292,7 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-03-01T10:25:55+00:00" }, { "name": "symfony/event-dispatcher", @@ -4300,12 +4300,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "be9d2633c312adc9804ee8aa6426cbc4277c2bf1" + "reference": "c58ec8623b8cbb3739fbaab5bf972df3f68ef312" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/be9d2633c312adc9804ee8aa6426cbc4277c2bf1", - "reference": "be9d2633c312adc9804ee8aa6426cbc4277c2bf1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c58ec8623b8cbb3739fbaab5bf972df3f68ef312", + "reference": "c58ec8623b8cbb3739fbaab5bf972df3f68ef312", "shasum": "" }, "require": { @@ -4376,7 +4376,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T09:04:20+00:00" + "time": "2023-02-16T09:01:12+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4384,12 +4384,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", "shasum": "" }, "require": { @@ -4440,7 +4440,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" }, "funding": [ { @@ -4456,7 +4456,7 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/filesystem", @@ -5156,12 +5156,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "8d7df636e53698bf990ec0a22b67ec273aabf608" + "reference": "e65ce5c9ccb249616aab1dbec53fc938c9017a4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8d7df636e53698bf990ec0a22b67ec273aabf608", - "reference": "8d7df636e53698bf990ec0a22b67ec273aabf608", + "url": "https://api.github.com/repos/symfony/process/zipball/e65ce5c9ccb249616aab1dbec53fc938c9017a4c", + "reference": "e65ce5c9ccb249616aab1dbec53fc938c9017a4c", "shasum": "" }, "require": { @@ -5209,7 +5209,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T09:04:20+00:00" + "time": "2023-02-24T10:44:40+00:00" }, { "name": "symfony/service-contracts", @@ -5217,12 +5217,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", "shasum": "" }, "require": { @@ -5279,7 +5279,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" }, "funding": [ { @@ -5295,7 +5295,7 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/stopwatch", @@ -5365,12 +5365,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "6515bacc98212164f10db4371fa70ee7b8c70b80" + "reference": "599f0f073afa9866d1d3b16c1ffafa74a69fb3ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6515bacc98212164f10db4371fa70ee7b8c70b80", - "reference": "6515bacc98212164f10db4371fa70ee7b8c70b80", + "url": "https://api.github.com/repos/symfony/string/zipball/599f0f073afa9866d1d3b16c1ffafa74a69fb3ce", + "reference": "599f0f073afa9866d1d3b16c1ffafa74a69fb3ce", "shasum": "" }, "require": { @@ -5443,7 +5443,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T09:04:20+00:00" + "time": "2023-02-24T10:44:40+00:00" }, { "name": "theseer/tokenizer", From 64c98e4755885142ec9d8f0ebf72bb659d0579d9 Mon Sep 17 00:00:00 2001 From: Shish Date: Wed, 8 Mar 2023 22:26:49 +0000 Subject: [PATCH 03/28] offset/limit for standard terminology in API --- core/imageboard/image.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/imageboard/image.php b/core/imageboard/image.php index 139b6e40..f40590a6 100644 --- a/core/imageboard/image.php +++ b/core/imageboard/image.php @@ -170,9 +170,9 @@ class Image * @return Image[] */ #[Query(name: "posts", type: "[Post!]!", args: ["tags" => "[string!]"])] - public static function find_images(?int $start = 0, ?int $limit = null, array $tags=[]): array + public static function find_images(?int $offset = 0, ?int $limit = null, array $tags=[]): array { - $result = self::find_images_internal($start, $limit, $tags); + $result = self::find_images_internal($offset, $limit, $tags); $images = []; foreach ($result as $row) { From 6bf7d63a297734a3c29fe3aaf248ee9b364b5a5b Mon Sep 17 00:00:00 2001 From: Shish Date: Wed, 8 Mar 2023 22:27:00 +0000 Subject: [PATCH 04/28] [grahpql] update_post_metadata --- ext/graphql/main.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ext/graphql/main.php b/ext/graphql/main.php index b6362771..77e9b6cb 100644 --- a/ext/graphql/main.php +++ b/ext/graphql/main.php @@ -10,6 +10,31 @@ use GraphQL\Error\DebugFlag; use GraphQL\Type\Schema; use GraphQL\Utils\SchemaPrinter; +#[\GQLA\InputObjectType] +class MetadataInput +{ + public function __construct( + #[\GQLA\Field] + public string $tags, + #[\GQLA\Field] + public string $source, + ) { + } + + #[\GQLA\Mutation] + public static function update_post_metadata(int $post_id, MetadataInput $metadata): Image + { + global $user; + $_POST['tag_edit__tags'] = $metadata->tags; + $_POST['tag_edit__source'] = $metadata->source; + $image = Image::by_id($post_id); + if (!$image->is_locked() || $user->can(Permissions::EDIT_IMAGE_LOCK)) { + send_event(new ImageInfoSetEvent($image)); + } + return Image::by_id($post_id); + } +} + class GraphQL extends Extension { public static function get_schema(): Schema @@ -73,6 +98,7 @@ class GraphQL extends Extension $body['stats'] = get_debug_info_arr(); $body['stats']['graphql_schema_time'] = round($t2 - $t1, 2); $body['stats']['graphql_execute_time'] = round($t3 - $t2, 2); + // sleep(1); $page->set_mode(PageMode::DATA); $page->set_mime("application/json"); $page->set_data(\json_encode($body, JSON_UNESCAPED_UNICODE)); From 48c3eae6b9c6f9b791421c247627551dbce2ca9d Mon Sep 17 00:00:00 2001 From: NottyNoz Date: Thu, 16 Mar 2023 22:29:45 -0400 Subject: [PATCH 05/28] fixes --- ext/private_image/main.php | 6 +++--- ext/private_image/theme.php | 2 +- ext/qr_code/info.php | 2 +- ext/static_files/static/README.txt | 2 +- themes/rule34v2/{ => static}/favicon.ico | Bin 5 files changed, 6 insertions(+), 6 deletions(-) rename themes/rule34v2/{ => static}/favicon.ico (100%) diff --git a/ext/private_image/main.php b/ext/private_image/main.php index 0e8034c1..a0768dd2 100644 --- a/ext/private_image/main.php +++ b/ext/private_image/main.php @@ -76,7 +76,7 @@ class PrivateImage extends Extension throw new SCoreException("Post not found."); } if ($image->owner_id!=$user->can(Permissions::SET_OTHERS_PRIVATE_IMAGES)) { - throw new SCoreException("Cannot set another user's image to private."); + throw new SCoreException("Cannot set another user's image to public."); } self::publicize_image($image_id); @@ -114,7 +114,7 @@ class PrivateImage extends Extension { global $user, $page; - if ($event->image->private===true && $event->image->owner_id!=$user->id && !$user->can(Permissions::SET_OTHERS_PRIVATE_IMAGES)) { + if ($event->image->private==true && $event->image->owner_id!=$user->id && !$user->can(Permissions::SET_OTHERS_PRIVATE_IMAGES)) { $page->set_mode(PageMode::REDIRECT); $page->set_redirect(make_link("post/list")); } @@ -221,7 +221,7 @@ class PrivateImage extends Extension public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event) { global $user; - if ($user->can(Permissions::SET_PRIVATE_IMAGE) && $user->id==$event->image->owner_id) { + if (($user->can(Permissions::SET_PRIVATE_IMAGE) && $user->id==$event->image->owner_id) || $user->can(Permissions::SET_OTHERS_PRIVATE_IMAGES)) { $event->add_part($this->theme->get_image_admin_html($event->image)); } } diff --git a/ext/private_image/theme.php b/ext/private_image/theme.php index a06a2239..9f63c7d2 100644 --- a/ext/private_image/theme.php +++ b/ext/private_image/theme.php @@ -10,7 +10,7 @@ class PrivateImageTheme extends Themelet { public function get_image_admin_html(Image $image): string { - if ($image->private===false) { + if ($image->private==false) { $html = SHM_SIMPLE_FORM( 'privatize_image/'.$image->id, INPUT(["type"=>'hidden', "name"=>'image_id', "value"=>$image->id]), diff --git a/ext/qr_code/info.php b/ext/qr_code/info.php index e8e6098c..8e9d5fd5 100644 --- a/ext/qr_code/info.php +++ b/ext/qr_code/info.php @@ -13,7 +13,7 @@ class QRImageInfo extends ExtensionInfo public string $url = "http://seemslegit.com"; public array $authors = ["Zach Hall"=>"zach@sosguy.net"]; public string $license = self::LICENSE_GPLV2; - public string $description = "Turns BBCode into HTML"; + public string $description = "Shows a QR Code for downloading a post to cell phones"; public ?string $documentation = "Shows a QR Code for downloading a post to cell phones. Based on Artanis's Link to Post Extension diff --git a/ext/static_files/static/README.txt b/ext/static_files/static/README.txt index fa7c2e9e..e9d67c48 100644 --- a/ext/static_files/static/README.txt +++ b/ext/static_files/static/README.txt @@ -1,4 +1,4 @@ These files can be overriden by placing files in themes/$your_theme/filename.foo. For example if you want your theme "radiance" to have a custom -favicon, place it in themes/radiance/favicon.ico +favicon, place it in themes/radiance/static/favicon.ico diff --git a/themes/rule34v2/favicon.ico b/themes/rule34v2/static/favicon.ico similarity index 100% rename from themes/rule34v2/favicon.ico rename to themes/rule34v2/static/favicon.ico From 0c1fc9b85e299e4e0c1698a320a6a2696dce9d03 Mon Sep 17 00:00:00 2001 From: NottyNoz Date: Thu, 16 Mar 2023 22:34:52 -0400 Subject: [PATCH 06/28] . --- ext/static_files/static/README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/static_files/static/README.txt b/ext/static_files/static/README.txt index e9d67c48..296e9bdc 100644 --- a/ext/static_files/static/README.txt +++ b/ext/static_files/static/README.txt @@ -1,4 +1,4 @@ These files can be overriden by placing files in -themes/$your_theme/filename.foo. For example if +themes/$your_theme/static/filename.foo. For example if you want your theme "radiance" to have a custom favicon, place it in themes/radiance/static/favicon.ico From 1b35b7af340f38d2f9f7e758f2bf53a255c04fd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 20:47:29 +0000 Subject: [PATCH 07/28] Bump enshrined/svg-sanitize from 0.15.4 to 0.16.0 Bumps [enshrined/svg-sanitize](https://github.com/darylldoyle/svg-sanitizer) from 0.15.4 to 0.16.0. - [Release notes](https://github.com/darylldoyle/svg-sanitizer/releases) - [Commits](https://github.com/darylldoyle/svg-sanitizer/compare/0.15.4...0.16.0) --- updated-dependencies: - dependency-name: enshrined/svg-sanitize dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- composer.json | 2 +- composer.lock | 80 +++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 72 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index 116bb6d8..22e36479 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,7 @@ "shish/microcrud" : "^2.0", "shish/microhtml" : "^2.0", "shish/gqla" : "dev-main", - "enshrined/svg-sanitize" : "^0.15", + "enshrined/svg-sanitize" : "^0.16", "bower-asset/jquery" : "^1.12", "bower-asset/jquery-timeago" : "^1.5", diff --git a/composer.lock b/composer.lock index bf2bf72a..59c692a5 100644 --- a/composer.lock +++ b/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": "605e247102c97c1320a4d1984a747c50", + "content-hash": "e4d47676467ba492d3be2d43d3950b9d", "packages": [ { "name": "bower-asset/jquery", @@ -65,25 +65,26 @@ }, { "name": "enshrined/svg-sanitize", - "version": "0.15.4", + "version": "0.16.0", "source": { "type": "git", "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4" + "reference": "239e257605e2141265b429e40987b2ee51bba4b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", - "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/239e257605e2141265b429e40987b2ee51bba4b4", + "reference": "239e257605e2141265b429e40987b2ee51bba4b4", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^7.0 || ^8.0" + "ezyang/htmlpurifier": "^4.16", + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^8.5" + "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5" }, "type": "library", "autoload": { @@ -104,9 +105,70 @@ "description": "An SVG sanitizer for PHP", "support": { "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.15.4" + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.16.0" }, - "time": "2022-02-21T09:13:59+00:00" + "time": "2023-03-20T10:51:12+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.16.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "shasum": "" + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + }, + "time": "2022-09-18T07:06:19+00:00" }, { "name": "flexihash/flexihash", From 2882bffe3562d35e7badc810b7aefd67589b365a Mon Sep 17 00:00:00 2001 From: Tegaki Date: Wed, 22 Mar 2023 21:08:23 +0100 Subject: [PATCH 08/28] implement MIME checks on upload --- ext/transcode/main.php | 12 ++++++++++++ ext/upload/config.php | 2 ++ ext/upload/main.php | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/ext/transcode/main.php b/ext/transcode/main.php index e284e81e..bc6abe30 100644 --- a/ext/transcode/main.php +++ b/ext/transcode/main.php @@ -167,6 +167,18 @@ class TranscodeImage extends Extension { global $config; + // this onDataUpload happens earlier (or could happen earlier) than handle_pixel.onDataUpload + // it mutates the image such that the incorrect mime type is not checked (checking against + // the post-transcode mime type instead). This is to give user feedback on what the mime type + // was before potential transcoding (the original) at the time of upload, and that it failed if not allowed. + // does it break bulk image importing? ZIP? SVG? there are a few flows that are untested! + if ($config->get_bool(UploadConfig::MIME_CHECK_ENABLED) == true) { + $allowed_mimes = $config->get_array(UploadConfig::ALLOWED_MIME_STRINGS); + if (!MimeType::matches_array($event->mime, $allowed_mimes)) { + throw new UploadException("MIME type not supported: " . $event->mime); + } + } + if ($config->get_bool(TranscodeConfig::UPLOAD) == true) { if ($event->mime === MimeType::GIF&&MimeType::is_animated_gif($event->tmpname)) { return; diff --git a/ext/upload/config.php b/ext/upload/config.php index 8f4b5124..313b0536 100644 --- a/ext/upload/config.php +++ b/ext/upload/config.php @@ -11,4 +11,6 @@ class UploadConfig public const MIN_FREE_SPACE = "upload_min_free_space"; public const TLSOURCE = "upload_tlsource"; public const TRANSLOAD_ENGINE = "transload_engine"; + public const MIME_CHECK_ENABLED = "mime_check_enabled"; + public const ALLOWED_MIME_STRINGS = "allowed_mime_strings"; } diff --git a/ext/upload/main.php b/ext/upload/main.php index 8ebc2f2d..d02a1f55 100644 --- a/ext/upload/main.php +++ b/ext/upload/main.php @@ -98,6 +98,12 @@ class Upload extends Extension } } } + + $config->set_default_bool(UploadConfig::MIME_CHECK_ENABLED, false); + $config->set_default_array( + UploadConfig::ALLOWED_MIME_STRINGS, + DataHandlerExtension::get_all_supported_mimes() + ); } public function onSetupBuilding(SetupBuildingEvent $event) @@ -119,8 +125,21 @@ class Upload extends Extension $sb->add_label("PHP Limit = " . ini_get('upload_max_filesize') . ""); $sb->add_choice_option(UploadConfig::TRANSLOAD_ENGINE, $tes, "
Transload: "); $sb->add_bool_option(UploadConfig::TLSOURCE, "
Use transloaded URL as source if none is provided: "); + + $sb->start_table(); + $sb->add_bool_option(UploadConfig::MIME_CHECK_ENABLED, "Enable upload MIME checks", true); + $sb->add_multichoice_option(UploadConfig::ALLOWED_MIME_STRINGS, $this->get_mime_options(), "Allowed MIME uploads", true); + $sb->end_table(); } + private function get_mime_options(): array + { + $output = []; + foreach (DataHandlerExtension::get_all_supported_mimes() as $mime) { + $output[MimeMap::get_name_for_mime($mime)] = $mime; + } + return $output; + } public function onPageNavBuilding(PageNavBuildingEvent $event) { From a352a02b2e4b686a786b46bc0c5e109b1ebc55ea Mon Sep 17 00:00:00 2001 From: myname Date: Sun, 26 Mar 2023 17:01:46 -0500 Subject: [PATCH 09/28] Bulk Actions for setting a chain of parent child relationships in the order of images selected. Does not support setting multiple children to one parent in bulk. --- core/permissions.php | 1 + core/userclass.php | 1 + ext/bulk_parent_child/info.php | 16 +++++++++++ ext/bulk_parent_child/main.php | 51 ++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 ext/bulk_parent_child/info.php create mode 100644 ext/bulk_parent_child/main.php diff --git a/core/permissions.php b/core/permissions.php index 351fa2a9..28142259 100644 --- a/core/permissions.php +++ b/core/permissions.php @@ -109,4 +109,5 @@ abstract class Permissions public const BULK_IMPORT = "bulk_import"; public const BULK_EXPORT = "bulk_export"; public const BULK_DOWNLOAD = "bulk_download"; + public const BULK_PARENT_CHILD = "bulk_parent_child"; } diff --git a/core/userclass.php b/core/userclass.php index a15d1767..a68ebb1b 100644 --- a/core/userclass.php +++ b/core/userclass.php @@ -199,6 +199,7 @@ new UserClass("admin", "base", [ Permissions::BULK_IMPORT =>true, Permissions::BULK_EXPORT =>true, Permissions::BULK_DOWNLOAD => true, + Permissions::BULK_PARENT_CHILD => true, Permissions::SET_PRIVATE_IMAGE => true, Permissions::SET_OTHERS_PRIVATE_IMAGES => true, diff --git a/ext/bulk_parent_child/info.php b/ext/bulk_parent_child/info.php new file mode 100644 index 00000000..f4a6b673 --- /dev/null +++ b/ext/bulk_parent_child/info.php @@ -0,0 +1,16 @@ +""]; + public string $license = self::LICENSE_WTFPL; + public string $description = "Allows bulk setting of parent-child relationships, in order of manual selection"; + public array $dependencies = [BulkActionsInfo::KEY]; +} diff --git a/ext/bulk_parent_child/main.php b/ext/bulk_parent_child/main.php new file mode 100644 index 00000000..9362debd --- /dev/null +++ b/ext/bulk_parent_child/main.php @@ -0,0 +1,51 @@ +can(Permissions::BULK_PARENT_CHILD)) { + $event->add_action(BulkParentChild::PARENT_CHILD_ACTION_NAME, "Set Parent Child"); + } + } + + public function onSetupBuilding(SetupBuildingEvent $event) + { + $sb = $event->panel->create_new_block("Bulk Parent Child"); + $sb->start_table(); + $sb->end_table(); + } + + public function onBulkAction(BulkActionEvent $event) + { + global $user, $page, $config; + if ($user->can(Permissions::BULK_PARENT_CHILD)&& + ($event->action == BulkParentChild::PARENT_CHILD_ACTION_NAME)) { + $prev_id = null; + foreach ($event->items as $image) { + if ($prev_id != null) { + send_event(new ImageRelationshipSetEvent($image->id, $prev_id)); + } + $prev_id = $image->id; + } + } + } +} From e7bc6c733aef7be08142b49ef9581ca6eea01d88 Mon Sep 17 00:00:00 2001 From: NottyNoz Date: Mon, 20 Mar 2023 13:17:39 -0400 Subject: [PATCH 10/28] . --- ext/approval/main.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ext/approval/main.php b/ext/approval/main.php index 736dc665..90158ff8 100644 --- a/ext/approval/main.php +++ b/ext/approval/main.php @@ -121,6 +121,13 @@ class Approval extends Extension } } + public function onUserBlockBuilding(UserBlockBuildingEvent $event) + { + global $user; + if ($user->can(Permissions::APPROVE_IMAGE)) { + $event->add_link("Pending Approval", make_link("/post/list/approved%3Ano/1"), 60); + } + } public const SEARCH_REGEXP = "/^approved:(yes|no)/"; public function onSearchTermParse(SearchTermParseEvent $event) From c4317cab0d48b2e75fee7902b90aa4e1c3fb8948 Mon Sep 17 00:00:00 2001 From: NottyNoz Date: Wed, 22 Mar 2023 19:15:41 -0400 Subject: [PATCH 11/28] documentation cleanup --- ext/browser_search/info.php | 4 +-- ext/bulk_actions/info.php | 23 +++++++++++- ext/custom_html_headers/info.php | 12 +++---- ext/danbooru_api/info.php | 60 +++++++++++++++----------------- ext/qr_code/info.php | 4 +-- ext/tag_list/theme.php | 2 +- 6 files changed, 62 insertions(+), 43 deletions(-) diff --git a/ext/browser_search/info.php b/ext/browser_search/info.php index ec07ed65..0644f9bc 100644 --- a/ext/browser_search/info.php +++ b/ext/browser_search/info.php @@ -17,6 +17,6 @@ class BrowserSearchInfo extends ExtensionInfo public string $description = "Allows the user to add a browser 'plugin' to search the site with real-time suggestions"; public ?string $documentation = "Once installed, users with an opensearch compatible browser should see their search box light up with whatever \"click here to add a search engine\" notification they have - -Some code (and lots of help) by Artanis (Erik Youngren ) from the 'tagger' extension - Used with permission"; +
+
Some code (and lots of help) by Artanis (Erik Youngren) from the 'tagger' extension - Used with permission"; } diff --git a/ext/bulk_actions/info.php b/ext/bulk_actions/info.php index b469d2a0..6d2f8fe0 100644 --- a/ext/bulk_actions/info.php +++ b/ext/bulk_actions/info.php @@ -13,5 +13,26 @@ class BulkActionsInfo extends ExtensionInfo public array $authors = ["Matthew Barbour"=>"matthew@darkholme.net"]; public string $license = self::LICENSE_WTFPL; public string $description = "Provides query and selection-based bulk action support"; - public ?string $documentation = "Provides bulk action section in list view. Allows performing actions against a set of posts based on query or manual selection. Based on Mass Tagger by Christian Walde , contributions by Shish and Agasa."; + public ?string $documentation = "Provides bulk action section in list view. Allows performing actions against a set of posts based on query or manual selection. Based on Mass Tagger by Christian Walde, contributions by Shish and Agasa. +

+

+ Delete +
Deletes all selected posts. +

+

+ Tag +
Add the tags to all selected posts. +
[background wallpaper] + [sky][background wallpaper sky] +
+
Remove the tags from all selected posts. +
[background wallpaper] + [-wallpaper][background] +
+
Replace the tags in all selected posts. +
[background wallpaper] + [sky][sky] +

+

+ Source +
Sets the source of all selected posts. +

+

"; } diff --git a/ext/custom_html_headers/info.php b/ext/custom_html_headers/info.php index 0c75d190..6cdee477 100644 --- a/ext/custom_html_headers/info.php +++ b/ext/custom_html_headers/info.php @@ -16,10 +16,10 @@ class CustomHtmlHeadersInfo extends ExtensionInfo public string $description = "Allows admins to modify & set custom <head> content"; public ?string $documentation = "When you go to board config you can find a block named Custom HTML Headers. -In that block you can simply place any thing you can place within <head></head> - -This can be useful if you want to add website tracking code or other javascript. -NOTE: Only use if you know what you're doing. - -You can also add your website name as prefix or suffix to the title of each page on your website."; +
In that block you can simply place any thing you can place within <head></head> +
+
This can be useful if you want to add website tracking code or other javascript. +
NOTE: Only use if you know what you're doing. +
+
You can also add your website name as prefix or suffix to the title of each page on your website."; } diff --git a/ext/danbooru_api/info.php b/ext/danbooru_api/info.php index 10113a91..06312b0f 100644 --- a/ext/danbooru_api/info.php +++ b/ext/danbooru_api/info.php @@ -13,7 +13,7 @@ class DanbooruApiInfo extends ExtensionInfo public array $authors = ["JJS"=>"jsutinen@gmail.com"]; public string $description = "Allow Danbooru apps like Danbooru Uploader for Firefox to communicate with Shimmie"; public ?string $documentation = -"

Notes: +"Notes:
danbooru API based on documentation from danbooru 1.0 - http://attachr.com/7569
I've only been able to test add_post and find_tags because I use the @@ -24,34 +24,32 @@ class DanbooruApiInfo extends ExtensionInfo

  • find_posts - sort of works, filename is returned as the original filename and probably won't help when it comes to actually downloading it
  • find_tags - id, name, and after_id all work but the tags parameter is ignored just like danbooru 1.0 ignores it - -CHANGELOG -13-OCT-08 8:00PM CST - JJS -Bugfix - Properly escape source attribute - -17-SEP-08 10:00PM CST - JJS -Bugfix for changed page name checker in PageRequestEvent - -13-APR-08 10:00PM CST - JJS -Properly escape the tags returned in find_tags and find_posts - Caught by ATravelingGeek -Updated extension info to be a bit more clear about its purpose -Deleted add_comment code as it didn't do anything anyway - -01-MAR-08 7:00PM CST - JJS -Rewrote to make it compatible with Shimmie trunk again (r723 at least) -It may or may not support the new file handling stuff correctly, I'm only testing with images and the danbooru uploader for firefox - -21-OCT-07 9:07PM CST - JJS -Turns out I actually did need to implement the new parameter names -for danbooru api v1.8.1. Now danbooruup should work when used with /api/danbooru/post/create.xml -Also correctly redirects the url provided by danbooruup in the event -of a duplicate image. - -19-OCT-07 4:46PM CST - JJS -Add compatibility with danbooru api v1.8.1 style urls -for find_posts and add_post. NOTE: This does not implement -the changes to the parameter names, it is simply a -workaround for the latest danbooruup firefox extension. -Completely compatibility will probably involve a rewrite with a different URL -"; +
    CHANGELOG +
    13-OCT-08 8:00PM CST - JJS +
    Bugfix - Properly escape source attribute +
    +
    17-SEP-08 10:00PM CST - JJS +
    Bugfix for changed page name checker in PageRequestEvent +
    +
    13-APR-08 10:00PM CST - JJS +
    Properly escape the tags returned in find_tags and find_posts - Caught by ATravelingGeek +
    Updated extension info to be a bit more clear about its purpose +
    Deleted add_comment code as it didn't do anything anyway +
    +
    01-MAR-08 7:00PM CST - JJS +
    Rewrote to make it compatible with Shimmie trunk again (r723 at least) +
    It may or may not support the new file handling stuff correctly, I'm only testing with images and the danbooru uploader for firefox +
    +
    21-OCT-07 9:07PM CST - JJS +
    Turns out I actually did need to implement the new parameter names +
    for danbooru api v1.8.1. Now danbooruup should work when used with /api/danbooru/post/create.xml +
    Also correctly redirects the url provided by danbooruup in the event +
    of a duplicate image. +
    +
    19-OCT-07 4:46PM CST - JJS +
    Add compatibility with danbooru api v1.8.1 style urls +
    for find_posts and add_post. NOTE: This does not implement +
    the changes to the parameter names, it is simply a +
    workaround for the latest danbooruup firefox extension. +
    Completely compatibility will probably involve a rewrite with a different URL"; } diff --git a/ext/qr_code/info.php b/ext/qr_code/info.php index 8e9d5fd5..c43b3fde 100644 --- a/ext/qr_code/info.php +++ b/ext/qr_code/info.php @@ -16,6 +16,6 @@ class QRImageInfo extends ExtensionInfo public string $description = "Shows a QR Code for downloading a post to cell phones"; public ?string $documentation = "Shows a QR Code for downloading a post to cell phones. -Based on Artanis's Link to Post Extension -Further modified by Shish to remove the 7MB local QR generator and replace it with a link to google chart APIs"; +
    Based on Artanis's Link to Post Extension. +
    Further modified by Shish to remove the 7MB local QR generator and replace it with a link to Google Chart APIs"; } diff --git a/ext/tag_list/theme.php b/ext/tag_list/theme.php index c274a743..08f053a4 100644 --- a/ext/tag_list/theme.php +++ b/ext/tag_list/theme.php @@ -211,7 +211,7 @@ class TagListTheme extends Themelet ); $main_html .= " 
    Full List\n"; - $page->add_block(new Block("refine Search", $main_html, "left", 60)); + $page->add_block(new Block("Refine Search", $main_html, "left", 60)); } public function return_tag(array $row, array $tag_category_dict): array From 4253d357af10547782a7c59fbf4e480664f059bd Mon Sep 17 00:00:00 2001 From: NottyNoz Date: Wed, 22 Mar 2023 19:33:16 -0400 Subject: [PATCH 12/28] board config cleanup --- ext/image/main.php | 2 +- ext/rating/main.php | 2 +- ext/user/main.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/image/main.php b/ext/image/main.php index 8709ddf7..1520b344 100644 --- a/ext/image/main.php +++ b/ext/image/main.php @@ -33,7 +33,7 @@ class ImageIO extends Extension public const THUMBNAIL_TYPES = [ 'JPEG' => MimeType::JPEG, - 'WEBP (Not IE/Safari compatible)' => MimeType::WEBP + 'WEBP (Not IE compatible)' => MimeType::WEBP ]; public function onInitExt(InitExtEvent $event) diff --git a/ext/rating/main.php b/ext/rating/main.php index ba54383a..bd2644a4 100644 --- a/ext/rating/main.php +++ b/ext/rating/main.php @@ -153,7 +153,7 @@ class Ratings extends Extension $options[$rating->name] = $rating->code; } - $sb = $event->panel->create_new_block("Post Ratings"); + $sb = $event->panel->create_new_block("Post Rating Visibility"); $sb->start_table(); foreach (array_keys($_shm_user_classes) as $key) { if ($key == "base" || $key == "hellbanned") { diff --git a/ext/user/main.php b/ext/user/main.php index 75ab6154..8e468bf2 100644 --- a/ext/user/main.php +++ b/ext/user/main.php @@ -345,8 +345,8 @@ class UserPage extends Extension $sb->add_choice_option( "user_loginshowprofile", [ - "return to previous page" => 0, // 0 is default - "send to user profile" => 1], + "Return to previous page" => 0, // 0 is default + "Send to user profile" => 1], "On log in/out", true ); From a98560b0619abe1d611436b8ff9114c3c57d0e91 Mon Sep 17 00:00:00 2001 From: NottyNoz Date: Sun, 26 Mar 2023 02:42:25 -0400 Subject: [PATCH 13/28] tagit fix and ui --- ext/autocomplete/script.js | 8 +++++++- ext/comment/theme.php | 2 +- ext/index/style.css | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ext/autocomplete/script.js b/ext/autocomplete/script.js index 06b9b826..41e1fda5 100644 --- a/ext/autocomplete/script.js +++ b/ext/autocomplete/script.js @@ -93,8 +93,14 @@ document.addEventListener('DOMContentLoaded', () => { //Stop tags containing space. if(keyCode === 32) { e.preventDefault(); + var el = $('.ui-widget-content:focus'); - $('.autocomplete_tags').tagit('createTag', $(this).val()); + //Find the correct element in a page with multiple tagit input boxes. + $('.autocomplete_tags').each(function(_,n){ + if (n.parentNode.contains(el[0])){ + $(n.parentNode).find('.autocomplete_tags').tagit('createTag', el.val()); + } + }); $(this).autocomplete('close'); } else if (keyCode === 9) { e.preventDefault(); diff --git a/ext/comment/theme.php b/ext/comment/theme.php index c7ba9e94..6f92e7ef 100644 --- a/ext/comment/theme.php +++ b/ext/comment/theme.php @@ -37,7 +37,7 @@ class CommentListTheme extends Themelet $page->set_title("Comments"); $page->set_heading("Comments"); - $page->add_block(new Block("Navigation", $nav, "left")); + $page->add_block(new Block("Navigation", $nav, "left", 0)); $this->display_paginator($page, "comment/list", null, $page_number, $total_pages); // parts for each image diff --git a/ext/index/style.css b/ext/index/style.css index c23a0c12..5ecd5a28 100644 --- a/ext/index/style.css +++ b/ext/index/style.css @@ -6,5 +6,6 @@ box-shadow: none; margin: 0px; padding: 0px; - text-align: justify; + text-align: left; + margin: 0 10px 10px 0; } From 0b5f6c310d1250c590fc0c2d6d6d436c3a0eb1b7 Mon Sep 17 00:00:00 2001 From: myname Date: Mon, 27 Mar 2023 14:26:39 -0500 Subject: [PATCH 14/28] Adding namespace --- ext/bulk_parent_child/info.php | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/bulk_parent_child/info.php b/ext/bulk_parent_child/info.php index f4a6b673..4f30a9d8 100644 --- a/ext/bulk_parent_child/info.php +++ b/ext/bulk_parent_child/info.php @@ -2,6 +2,7 @@ declare(strict_types=1); +namespace Shimmie2; class BulkParentChildInfo extends ExtensionInfo { From f43ed0ee7176738206e9a28ce65d8f3b0dad7c31 Mon Sep 17 00:00:00 2001 From: myname Date: Mon, 27 Mar 2023 14:28:44 -0500 Subject: [PATCH 15/28] Removing unnecessary lines, fixing namespace --- ext/bulk_parent_child/main.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/ext/bulk_parent_child/main.php b/ext/bulk_parent_child/main.php index 9362debd..296c9af8 100644 --- a/ext/bulk_parent_child/main.php +++ b/ext/bulk_parent_child/main.php @@ -2,6 +2,8 @@ declare(strict_types=1); +namespace Shimmie2; + class BulkParentChildConfig { } @@ -13,11 +15,6 @@ class BulkParentChild extends Extension { private const PARENT_CHILD_ACTION_NAME = "bulk_parent_child"; - public function onInitExt(InitExtEvent $event) - { - global $config; - } - public function onBulkActionBlockBuilding(BulkActionBlockBuildingEvent $event) { global $user; @@ -27,13 +24,6 @@ class BulkParentChild extends Extension } } - public function onSetupBuilding(SetupBuildingEvent $event) - { - $sb = $event->panel->create_new_block("Bulk Parent Child"); - $sb->start_table(); - $sb->end_table(); - } - public function onBulkAction(BulkActionEvent $event) { global $user, $page, $config; From 46f75f7b34325e79d9ac321a7e5ba2e4f32afd44 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 30 Mar 2023 20:36:58 +0100 Subject: [PATCH 16/28] [static] allow extensions to customise robots.txt --- ext/comment/main.php | 7 +++++++ ext/rule34/main.php | 8 ++++++++ ext/static_files/main.php | 22 ++++++++++++++++++++++ ext/static_files/static/robots.txt | 11 ----------- ext/view/main.php | 8 ++++++++ 5 files changed, 45 insertions(+), 11 deletions(-) delete mode 100644 ext/static_files/static/robots.txt diff --git a/ext/comment/main.php b/ext/comment/main.php index b6da4eed..bf588318 100644 --- a/ext/comment/main.php +++ b/ext/comment/main.php @@ -216,6 +216,13 @@ class CommentList extends Extension } } + public function onRobotsBuilding(RobotsBuildingEvent $event) + { + // comment lists change all the time, crawlers should + // index individual image's comments + $event->add_disallow("comment"); + } + private function onPageRequest_add() { global $user, $page; diff --git a/ext/rule34/main.php b/ext/rule34/main.php index 9e3758d7..22000a0a 100644 --- a/ext/rule34/main.php +++ b/ext/rule34/main.php @@ -101,6 +101,14 @@ class Rule34 extends Extension } } + public function onRobotsBuilding(RobotsBuildingEvent $event) + { + // robots should only check the canonical site, not mirrors + if ($_SERVER['HTTP_HOST'] != "rule34.paheal.net") { + $event->add_disallow(""); + } + } + public function onPageRequest(PageRequestEvent $event) { global $database, $page, $user; diff --git a/ext/static_files/main.php b/ext/static_files/main.php index 8a8693f0..c2b4aef7 100644 --- a/ext/static_files/main.php +++ b/ext/static_files/main.php @@ -4,11 +4,33 @@ declare(strict_types=1); namespace Shimmie2; +class RobotsBuildingEvent extends Event +{ + public array $parts = [ + "User-agent: *", + // Site is rate limited to 1 request / sec, + // returns 503 for more than that + "Crawl-delay: 3", + ]; + + public function add_disallow(string $path): void + { + $this->parts[] = "Disallow: /$path"; + } +} + class StaticFiles extends Extension { public function onPageRequest(PageRequestEvent $event) { global $config, $page; + + if ($event->page_matches("robots.txt")) { + $rbe = send_event(new RobotsBuildingEvent()); + $page->set_mode(PageMode::DATA); + $page->set_data(join("\n", $rbe->parts)); + } + // hax. if ($page->mode == PageMode::PAGE && (!isset($page->blocks) || $this->count_main($page->blocks) == 0)) { $h_pagename = html_escape(implode('/', $event->args)); diff --git a/ext/static_files/static/robots.txt b/ext/static_files/static/robots.txt deleted file mode 100644 index e9ae5fde..00000000 --- a/ext/static_files/static/robots.txt +++ /dev/null @@ -1,11 +0,0 @@ -User-agent: * -# comment lists change all the time, crawlers should -# index individual image's comments -Disallow: /comment/ -# next and prev are just CPU-heavier ways of getting -# to the same images that the index shows -Disallow: /post/next/ -Disallow: /post/prev/ -# Site is rate limited to 1 request / sec, -# returns 503 for more than that -Crawl-delay: 3 diff --git a/ext/view/main.php b/ext/view/main.php index ceb2c83d..24700253 100644 --- a/ext/view/main.php +++ b/ext/view/main.php @@ -94,6 +94,14 @@ class ViewImage extends Extension } } + public function onRobotsBuilding(RobotsBuildingEvent $event) + { + // next and prev are just CPU-heavier ways of getting + // to the same images that the index shows + $event->add_disallow("post/next"); + $event->add_disallow("post/prev"); + } + public function onDisplayingImage(DisplayingImageEvent $event) { global $page, $user; From 7e017ded3b0e55fa9e31362c9229d42e0993358e Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 30 Mar 2023 20:37:06 +0100 Subject: [PATCH 17/28] format --- core/permissions.php | 2 +- core/userclass.php | 2 +- ext/bulk_parent_child/main.php | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/permissions.php b/core/permissions.php index aedf3a5c..0cf1d9c4 100644 --- a/core/permissions.php +++ b/core/permissions.php @@ -118,5 +118,5 @@ abstract class Permissions public const BULK_IMPORT = "bulk_import"; public const BULK_EXPORT = "bulk_export"; public const BULK_DOWNLOAD = "bulk_download"; - public const BULK_PARENT_CHILD = "bulk_parent_child"; + public const BULK_PARENT_CHILD = "bulk_parent_child"; } diff --git a/core/userclass.php b/core/userclass.php index 5e66256c..22d2f698 100644 --- a/core/userclass.php +++ b/core/userclass.php @@ -223,7 +223,7 @@ new UserClass("admin", "base", [ Permissions::BULK_IMPORT =>true, Permissions::BULK_EXPORT =>true, Permissions::BULK_DOWNLOAD => true, - Permissions::BULK_PARENT_CHILD => true, + Permissions::BULK_PARENT_CHILD => true, Permissions::SET_PRIVATE_IMAGE => true, Permissions::SET_OTHERS_PRIVATE_IMAGES => true, diff --git a/ext/bulk_parent_child/main.php b/ext/bulk_parent_child/main.php index 296c9af8..b7eda773 100644 --- a/ext/bulk_parent_child/main.php +++ b/ext/bulk_parent_child/main.php @@ -27,15 +27,15 @@ class BulkParentChild extends Extension public function onBulkAction(BulkActionEvent $event) { global $user, $page, $config; - if ($user->can(Permissions::BULK_PARENT_CHILD)&& + if ($user->can(Permissions::BULK_PARENT_CHILD)&& ($event->action == BulkParentChild::PARENT_CHILD_ACTION_NAME)) { - $prev_id = null; - foreach ($event->items as $image) { - if ($prev_id != null) { - send_event(new ImageRelationshipSetEvent($image->id, $prev_id)); - } - $prev_id = $image->id; - } - } + $prev_id = null; + foreach ($event->items as $image) { + if ($prev_id != null) { + send_event(new ImageRelationshipSetEvent($image->id, $prev_id)); + } + $prev_id = $image->id; + } + } } } From fddc1fd453ad186fe442a0bb26686e365cc712a7 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 30 Mar 2023 19:38:23 +0000 Subject: [PATCH 18/28] [img] allow CLI image deletion --- ext/image/main.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ext/image/main.php b/ext/image/main.php index 1520b344..3871799e 100644 --- a/ext/image/main.php +++ b/ext/image/main.php @@ -196,6 +196,19 @@ class ImageIO extends Extension $event->image->delete(); } + public function onCommand(CommandEvent $event) + { + if ($event->cmd == "help") { + print "\tdelete \n"; + print "\t\tdelete a specific post\n\n"; + } + if ($event->cmd == "delete") { + $post_id = (int)$event->args[0]; + $image = Image::by_id($post_id); + send_event(new ImageDeletionEvent($image)); + } + } + public function onImageReplace(ImageReplaceEvent $event) { try { From 6b1084eed74e08975ed0a374afc7346cc48eb2b3 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 30 Mar 2023 19:39:25 +0000 Subject: [PATCH 19/28] tweak --- themes/rule34v2/header.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/rule34v2/header.inc b/themes/rule34v2/header.inc index d1b296ce..99046e9a 100644 --- a/themes/rule34v2/header.inc +++ b/themes/rule34v2/header.inc @@ -87,7 +87,7 @@ From 7d6615c2985f0df40447d40d6469603f447884be Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 30 Mar 2023 19:40:06 +0000 Subject: [PATCH 20/28] trim --- ext/tag_edit/main.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/tag_edit/main.php b/ext/tag_edit/main.php index 51d70a31..b19e1dd0 100644 --- a/ext/tag_edit/main.php +++ b/ext/tag_edit/main.php @@ -33,7 +33,7 @@ class SourceSetEvent extends Event { parent::__construct(); $this->image = $image; - $this->source = $source; + $this->source = trim($source); } } From 33e1e20beb19b1831bee46bae40fd067ec05ba84 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 30 Mar 2023 19:43:14 +0000 Subject: [PATCH 21/28] [static] also avoid robots getting stuck on history pages --- ext/source_history/main.php | 5 +++++ ext/tag_history/main.php | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/ext/source_history/main.php b/ext/source_history/main.php index f9726b4d..db98272e 100644 --- a/ext/source_history/main.php +++ b/ext/source_history/main.php @@ -51,6 +51,11 @@ class SourceHistory extends Extension } } + public function onRobotsBuilding(RobotsBuildingEvent $event) + { + $event->add_disallow("source_history"); + } + public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event) { $event->add_part(" diff --git a/ext/tag_history/main.php b/ext/tag_history/main.php index 4a6064be..8b9d2a79 100644 --- a/ext/tag_history/main.php +++ b/ext/tag_history/main.php @@ -51,6 +51,11 @@ class TagHistory extends Extension } } + public function onRobotsBuilding(RobotsBuildingEvent $event) + { + $event->add_disallow("tag_history"); + } + public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event) { $event->add_part(" From 9b463ce6747e6c1892a852af45e5552f3e0f2352 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 30 Mar 2023 21:27:12 +0000 Subject: [PATCH 22/28] text --- ext/static_files/main.php | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/static_files/main.php b/ext/static_files/main.php index c2b4aef7..d66b2557 100644 --- a/ext/static_files/main.php +++ b/ext/static_files/main.php @@ -28,6 +28,7 @@ class StaticFiles extends Extension if ($event->page_matches("robots.txt")) { $rbe = send_event(new RobotsBuildingEvent()); $page->set_mode(PageMode::DATA); + $page->set_mime("text/plain"); $page->set_data(join("\n", $rbe->parts)); } From 05da99c428e9a87d6e38d4f37f54e32879e2ece0 Mon Sep 17 00:00:00 2001 From: Shish Date: Mon, 3 Apr 2023 22:14:41 +0000 Subject: [PATCH 23/28] fix error in error handler --- core/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/util.php b/core/util.php index 84796074..f761a599 100644 --- a/core/util.php +++ b/core/util.php @@ -645,7 +645,7 @@ function _fatal_error(\Exception $e): void foreach ($t as $n => $f) { $c = $f['class'] ?? ''; $t = $f['type'] ?? ''; - $a = implode(", ", array_map("Shimmie2\stringer", $f['args'])); + $a = implode(", ", array_map("Shimmie2\stringer", $f['args'] ?? [])); print("$n: {$f['file']}({$f['line']}): {$c}{$t}{$f['function']}({$a})\n"); } From b5b7fe7d9eab7d1cd5f50f4396826e26394caad6 Mon Sep 17 00:00:00 2001 From: Shish Date: Mon, 3 Apr 2023 22:14:51 +0000 Subject: [PATCH 24/28] allow admin to bypass user creation block --- ext/user/main.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/user/main.php b/ext/user/main.php index 8e468bf2..6bfb7451 100644 --- a/ext/user/main.php +++ b/ext/user/main.php @@ -422,7 +422,7 @@ class UserPage extends Extension if (!$user->can(Permissions::CREATE_USER)) { throw new UserCreationException("Account creation is currently disabled"); } - if (!$config->get_bool("login_signup_enabled")) { + if (!$config->get_bool("login_signup_enabled") && !$user->can(Permissions::CREATE_OTHER_USER)) { throw new UserCreationException("Account creation is currently disabled"); } if (strlen($name) < 1) { From 4ba3af7926c506935420eb9589f608122f82849d Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 25 May 2023 12:57:21 +0100 Subject: [PATCH 25/28] version bumps --- composer.lock | 465 +++++++++++++++---------------- ext/media/main.php | 30 +- ext/media/video_codecs.php | 16 +- ext/mime/mime_type.php | 8 +- ext/transcode_video/main.php | 56 ++-- themes/material/upload.theme.php | 2 +- 6 files changed, 284 insertions(+), 293 deletions(-) diff --git a/composer.lock b/composer.lock index 59c692a5..2276eea2 100644 --- a/composer.lock +++ b/composer.lock @@ -11,7 +11,7 @@ "version": "1.12.4", "source": { "type": "git", - "url": "git@github.com:jquery/jquery-dist.git", + "url": "https://github.com/jquery/jquery-dist.git", "reference": "5e89585e0121e72ff47de177c5ef604f3089a53d" }, "dist": { @@ -50,7 +50,7 @@ "version": "v2.2.1", "source": { "type": "git", - "url": "git@github.com:js-cookie/js-cookie.git", + "url": "https://github.com/js-cookie/js-cookie.git", "reference": "54962f884e9ae33f93e13ac903ffaf1d5a523598" }, "dist": { @@ -781,16 +781,16 @@ }, { "name": "webonyx/graphql-php", - "version": "v15.2.1", + "version": "v15.4.0", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "6b02da9313065889eb783d623567476500a572ef" + "reference": "99290f7945a5b39ad823f7600fa196de62597e9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/6b02da9313065889eb783d623567476500a572ef", - "reference": "6b02da9313065889eb783d623567476500a572ef", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/99290f7945a5b39ad823f7600fa196de62597e9d", + "reference": "99290f7945a5b39ad823f7600fa196de62597e9d", "shasum": "" }, "require": { @@ -800,24 +800,27 @@ }, "require-dev": { "amphp/amp": "^2.6", + "amphp/http-server": "^2.1", "dms/phpunit-arraysubset-asserts": "^0.4", "ergebnis/composer-normalize": "^2.28", "mll-lab/php-cs-fixer-config": "^5.0", "nyholm/psr7": "^1.5", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.10.3", - "phpstan/phpstan-phpunit": "1.3.8", - "phpstan/phpstan-strict-rules": "1.5.0", + "phpstan/phpstan": "1.10.15", + "phpstan/phpstan-phpunit": "1.3.11", + "phpstan/phpstan-strict-rules": "1.5.1", "phpunit/phpunit": "^9.5", - "psr/http-message": "^1", + "psr/http-message": "^1 || ^2", "react/http": "^1.6", "react/promise": "^2.9", + "rector/rector": "^0.16.0", "symfony/polyfill-php81": "^1.23", "symfony/var-exporter": "^5 || ^6", "thecodingmachine/safe": "^1.3 || ^2" }, "suggest": { + "amphp/http-server": "To leverage async resolving with webserver on AMPHP platform", "psr/http-message": "To use standard GraphQL server", "react/promise": "To leverage async resolving on React PHP platform" }, @@ -839,7 +842,7 @@ ], "support": { "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v15.2.1" + "source": "https://github.com/webonyx/graphql-php/tree/v15.4.0" }, "funding": [ { @@ -847,7 +850,7 @@ "type": "open_collective" } ], - "time": "2023-02-28T13:00:18+00:00" + "time": "2023-05-11T10:26:08+00:00" } ], "packages-dev": [ @@ -1077,12 +1080,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + "reference": "4b68cf86b766ec429f4f68af648817cdfb360582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/4b68cf86b766ec429f4f68af648817cdfb360582", + "reference": "4b68cf86b766ec429f4f68af648817cdfb360582", "shasum": "" }, "require": { @@ -1144,9 +1147,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" + "source": "https://github.com/doctrine/annotations/tree/2.0.x" }, - "time": "2023-02-02T22:02:53+00:00" + "time": "2023-03-27T17:43:32+00:00" }, { "name": "doctrine/deprecations", @@ -1218,7 +1221,6 @@ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.30 || ^5.4" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -1343,16 +1345,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.14.4", + "version": "v3.17.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b" + "reference": "3f0ed862f22386c55a767461ef5083bddceeed79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1b3d9dba63d93b8a202c31e824748218781eae6b", - "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3f0ed862f22386c55a767461ef5083bddceeed79", + "reference": "3f0ed862f22386c55a767461ef5083bddceeed79", "shasum": "" }, "require": { @@ -1419,9 +1421,15 @@ } ], "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.4" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.17.0" }, "funding": [ { @@ -1429,26 +1437,26 @@ "type": "github" } ], - "time": "2023-02-09T21:49:13+00:00" + "time": "2023-05-22T19:59:32+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "dev-master", + "version": "7.7.x-dev", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "8459341c16f96b9610dcdfe22bd3060d60c0da04" + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8459341c16f96b9610dcdfe22bd3060d60c0da04", - "reference": "8459341c16f96b9610dcdfe22bd3060d60c0da04", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1459,7 +1467,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -1474,9 +1483,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -1542,7 +1548,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/master" + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" }, "funding": [ { @@ -1558,39 +1564,38 @@ "type": "tidelift" } ], - "time": "2022-08-29T11:03:19+00:00" + "time": "2023-05-21T14:04:53+00:00" }, { "name": "guzzlehttp/promises", - "version": "dev-master", + "version": "2.0.x-dev", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "4a94655427efd6906ed3eb628c79693291264713" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/4a94655427efd6906ed3eb628c79693291264713", + "reference": "4a94655427efd6906ed3eb628c79693291264713", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "default-branch": true, "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/" } @@ -1627,7 +1632,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.0" }, "funding": [ { @@ -1643,26 +1648,26 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2023-05-21T19:15:14+00:00" }, { "name": "guzzlehttp/psr7", - "version": "dev-master", + "version": "2.6.x-dev", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "58d0734481de3fbc62f3d13da4d991e051521282" + "reference": "b635f279edd83fc275f822a1188157ffea568ff6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/58d0734481de3fbc62f3d13da4d991e051521282", - "reference": "58d0734481de3fbc62f3d13da4d991e051521282", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -1677,15 +1682,11 @@ "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, - "default-branch": true, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" } }, "autoload": { @@ -1747,7 +1748,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/master" + "source": "https://github.com/guzzle/psr7/tree/2.5.0" }, "funding": [ { @@ -1763,7 +1764,7 @@ "type": "tidelift" } ], - "time": "2023-02-15T13:59:53+00:00" + "time": "2023-04-17T16:11:26+00:00" }, { "name": "jms/metadata", @@ -1836,12 +1837,12 @@ "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "ac0b16ee5317d1aacc41deb91c6c325eae97c176" + "reference": "d5cc4674015e362370cbd370948e2ae03496a7cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/ac0b16ee5317d1aacc41deb91c6c325eae97c176", - "reference": "ac0b16ee5317d1aacc41deb91c6c325eae97c176", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/d5cc4674015e362370cbd370948e2ae03496a7cc", + "reference": "d5cc4674015e362370cbd370948e2ae03496a7cc", "shasum": "" }, "require": { @@ -1862,7 +1863,7 @@ "ocramius/proxy-manager": "^1.0|^2.0", "phpbench/phpbench": "^1.0", "phpstan/phpstan": "^1.0.2", - "phpunit/phpunit": "^8.5.21||^9.0", + "phpunit/phpunit": "^8.5.21||^9.0||^10.0", "psr/container": "^1.0|^2.0", "symfony/dependency-injection": "^3.0|^4.0|^5.0|^6.0", "symfony/expression-language": "^3.2|^4.0|^5.0|^6.0", @@ -1917,7 +1918,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/serializer/issues", - "source": "https://github.com/schmittjoh/serializer/tree/3.23.0" + "source": "https://github.com/schmittjoh/serializer/tree/master" }, "funding": [ { @@ -1925,7 +1926,7 @@ "type": "github" } ], - "time": "2023-02-17T17:40:48+00:00" + "time": "2023-05-18T04:58:29+00:00" }, { "name": "myclabs/deep-copy", @@ -1933,12 +1934,12 @@ "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "928a96f585b86224ebc78f8f09d0482cf15b04f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/928a96f585b86224ebc78f8f09d0482cf15b04f5", + "reference": "928a96f585b86224ebc78f8f09d0482cf15b04f5", "shasum": "" }, "require": { @@ -1946,11 +1947,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "default-branch": true, @@ -1977,7 +1979,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.x" }, "funding": [ { @@ -1985,7 +1987,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T17:24:01+00:00" }, { "name": "nikic/php-parser", @@ -1993,12 +1995,12 @@ "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "c9e5a13d68486e9fd75f9be1b4639644e54e7f4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c9e5a13d68486e9fd75f9be1b4639644e54e7f4f", + "reference": "c9e5a13d68486e9fd75f9be1b4639644e54e7f4f", "shasum": "" }, "require": { @@ -2040,9 +2042,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/4.x" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2023-05-21T19:22:47+00:00" }, { "name": "phar-io/manifest", @@ -2241,22 +2243,23 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.16.1", + "version": "1.21.x-dev", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571" + "reference": "7f78fd1ff463a7884a331fdb84a25f724dbfd9ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e27e92d939e2e3636f0a1f0afaba59692c0bf571", - "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/7f78fd1ff463a7884a331fdb84a25f724dbfd9ea", + "reference": "7f78fd1ff463a7884a331fdb84a25f724dbfd9ea", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { + "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.5", @@ -2265,6 +2268,7 @@ "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -2280,9 +2284,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.16.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.21.x" }, - "time": "2023-02-07T18:11:17+00:00" + "time": "2023-05-17T16:44:57+00:00" }, { "name": "phpstan/phpstan", @@ -2290,12 +2294,12 @@ "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "aed9319bda4e1bf862e2576baf28949877891853" + "reference": "42afb02dce13d12623865f068f32ad340ee8ed6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/aed9319bda4e1bf862e2576baf28949877891853", - "reference": "aed9319bda4e1bf862e2576baf28949877891853", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/42afb02dce13d12623865f068f32ad340ee8ed6f", + "reference": "42afb02dce13d12623865f068f32ad340ee8ed6f", "shasum": "" }, "require": { @@ -2304,7 +2308,6 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "default-branch": true, "bin": [ "phpstan", "phpstan.phar" @@ -2325,8 +2328,11 @@ "static analysis" ], "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.10.x" + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { @@ -2342,7 +2348,7 @@ "type": "tidelift" } ], - "time": "2023-03-02T09:48:34+00:00" + "time": "2023-05-25T11:20:07+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2350,12 +2356,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "700aa825126460ce5be79ae5e1cf2e2c5b71588b" + "reference": "100663232669bdacd3ac18f4cc12c38beec9aff1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/700aa825126460ce5be79ae5e1cf2e2c5b71588b", - "reference": "700aa825126460ce5be79ae5e1cf2e2c5b71588b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/100663232669bdacd3ac18f4cc12c38beec9aff1", + "reference": "100663232669bdacd3ac18f4cc12c38beec9aff1", "shasum": "" }, "require": { @@ -2377,8 +2383,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -2411,6 +2417,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2" }, "funding": [ @@ -2419,7 +2426,7 @@ "type": "github" } ], - "time": "2023-02-27T12:51:14+00:00" + "time": "2023-05-25T06:20:28+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2668,12 +2675,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d6454d6dd71024848893a1e2d1f1dd78683351db" + "reference": "9d8ffd638716761de07b60262fceb553cb4afcd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d6454d6dd71024848893a1e2d1f1dd78683351db", - "reference": "d6454d6dd71024848893a1e2d1f1dd78683351db", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9d8ffd638716761de07b60262fceb553cb4afcd9", + "reference": "9d8ffd638716761de07b60262fceb553cb4afcd9", "shasum": "" }, "require": { @@ -2706,8 +2713,8 @@ "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -2746,6 +2753,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6" }, "funding": [ @@ -2762,7 +2770,7 @@ "type": "tidelift" } ], - "time": "2023-02-28T06:43:37+00:00" + "time": "2023-05-25T06:23:23+00:00" }, { "name": "psr/cache", @@ -2930,17 +2938,17 @@ "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "22b2ef5687f43679481615605d7a15c557ce85b1" + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/22b2ef5687f43679481615605d7a15c557ce85b1", - "reference": "22b2ef5687f43679481615605d7a15c557ce85b1", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "default-branch": true, "type": "library", @@ -2973,9 +2981,9 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client/tree/1.0.2" }, - "time": "2020-09-19T09:12:31+00:00" + "time": "2023-04-10T20:12:12+00:00" }, { "name": "psr/http-factory", @@ -2983,17 +2991,17 @@ "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "5a4f141ac2e5bc35e615134f127e1833158d2944" + "reference": "6d70f402f0eddb2b154b22950b5381bbf5b28469" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/5a4f141ac2e5bc35e615134f127e1833158d2944", - "reference": "5a4f141ac2e5bc35e615134f127e1833158d2944", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/6d70f402f0eddb2b154b22950b5381bbf5b28469", + "reference": "6d70f402f0eddb2b154b22950b5381bbf5b28469", "shasum": "" }, "require": { "php": ">=7.0.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "default-branch": true, "type": "library", @@ -3017,7 +3025,7 @@ "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", @@ -3031,7 +3039,7 @@ "support": { "source": "https://github.com/php-fig/http-factory/tree/master" }, - "time": "2022-07-14T07:21:53+00:00" + "time": "2023-05-17T18:32:11+00:00" }, { "name": "psr/http-message", @@ -3039,22 +3047,22 @@ "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", - "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", + "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" }, "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3069,7 +3077,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -3083,9 +3091,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": "2019-08-29T13:16:46+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", @@ -3528,16 +3536,16 @@ }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -3582,7 +3590,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0" }, "funding": [ { @@ -3590,7 +3598,7 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", @@ -4034,12 +4042,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "e1157eac767e4dc4ae40dd9aab7fb4de6e56bd32" + "reference": "20bdda85c7c585ab265c0c37ec052a019bae29c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/e1157eac767e4dc4ae40dd9aab7fb4de6e56bd32", - "reference": "e1157eac767e4dc4ae40dd9aab7fb4de6e56bd32", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/20bdda85c7c585ab265c0c37ec052a019bae29c4", + "reference": "20bdda85c7c585ab265c0c37ec052a019bae29c4", "shasum": "" }, "require": { @@ -4081,7 +4089,7 @@ "type": "github" } ], - "time": "2023-02-08T06:53:39+00:00" + "time": "2023-03-25T08:11:39+00:00" }, { "name": "sebastian/type", @@ -4194,16 +4202,16 @@ }, { "name": "symfony/console", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1090bd292e4de35682f80e94d196c62aab4b3ad7" + "reference": "6d340bfbfc082c9ed7eec4844f12132a26b2d344" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1090bd292e4de35682f80e94d196c62aab4b3ad7", - "reference": "1090bd292e4de35682f80e94d196c62aab4b3ad7", + "url": "https://api.github.com/repos/symfony/console/zipball/6d340bfbfc082c9ed7eec4844f12132a26b2d344", + "reference": "6d340bfbfc082c9ed7eec4844f12132a26b2d344", "shasum": "" }, "require": { @@ -4211,7 +4219,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -4225,18 +4233,12 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4265,12 +4267,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/6.3" + "source": "https://github.com/symfony/console/tree/6.4" }, "funding": [ { @@ -4286,30 +4288,29 @@ "type": "tidelift" } ], - "time": "2023-02-25T17:00:13+00:00" + "time": "2023-05-23T16:34:37+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "dev-main", + "version": "3.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { "php": ">=8.1" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4338,7 +4339,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/3.4" }, "funding": [ { @@ -4354,20 +4355,20 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:25:55+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/event-dispatcher", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "c58ec8623b8cbb3739fbaab5bf972df3f68ef312" + "reference": "9ebe352542105f5f7186610a83deb18b90fae3d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c58ec8623b8cbb3739fbaab5bf972df3f68ef312", - "reference": "c58ec8623b8cbb3739fbaab5bf972df3f68ef312", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9ebe352542105f5f7186610a83deb18b90fae3d3", + "reference": "9ebe352542105f5f7186610a83deb18b90fae3d3", "shasum": "" }, "require": { @@ -4384,17 +4385,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4422,7 +4419,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/6.3" + "source": "https://github.com/symfony/event-dispatcher/tree/6.4" }, "funding": [ { @@ -4438,34 +4435,30 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:01:12+00:00" + "time": "2023-05-23T16:34:37+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "dev-main", + "version": "3.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4502,7 +4495,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/3.4" }, "funding": [ { @@ -4518,20 +4511,20 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/filesystem", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "bf3226d895bb4cd6635ef42649ec4a5818e3bf01" + "reference": "c2196aa8b563ed0bc645ee316c40ead823adfead" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf3226d895bb4cd6635ef42649ec4a5818e3bf01", - "reference": "bf3226d895bb4cd6635ef42649ec4a5818e3bf01", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c2196aa8b563ed0bc645ee316c40ead823adfead", + "reference": "c2196aa8b563ed0bc645ee316c40ead823adfead", "shasum": "" }, "require": { @@ -4565,7 +4558,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/6.3" + "source": "https://github.com/symfony/filesystem/tree/v6.3.0-RC1" }, "funding": [ { @@ -4581,27 +4574,27 @@ "type": "tidelift" } ], - "time": "2023-02-14T09:04:20+00:00" + "time": "2023-04-28T16:05:33+00:00" }, { "name": "symfony/finder", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "f5891f0383dc22a615ebd5848e87328d1efad0be" + "reference": "1bb60aa99f06979e6078007a812eb7c5ffc8efc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/f5891f0383dc22a615ebd5848e87328d1efad0be", - "reference": "f5891f0383dc22a615ebd5848e87328d1efad0be", + "url": "https://api.github.com/repos/symfony/finder/zipball/1bb60aa99f06979e6078007a812eb7c5ffc8efc2", + "reference": "1bb60aa99f06979e6078007a812eb7c5ffc8efc2", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -4629,7 +4622,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/6.3" + "source": "https://github.com/symfony/finder/tree/6.4" }, "funding": [ { @@ -4645,20 +4638,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T09:04:20+00:00" + "time": "2023-05-23T16:34:37+00:00" }, { "name": "symfony/options-resolver", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "2fdfd4259397b1300da21c04ba52a673763b73c9" + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2fdfd4259397b1300da21c04ba52a673763b73c9", - "reference": "2fdfd4259397b1300da21c04ba52a673763b73c9", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "shasum": "" }, "require": { @@ -4696,7 +4689,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/6.3" + "source": "https://github.com/symfony/options-resolver/tree/v6.3.0-RC1" }, "funding": [ { @@ -4712,7 +4705,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T09:04:20+00:00" + "time": "2023-05-12T14:21:09+00:00" }, { "name": "symfony/polyfill-ctype", @@ -5214,16 +5207,16 @@ }, { "name": "symfony/process", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e65ce5c9ccb249616aab1dbec53fc938c9017a4c" + "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e65ce5c9ccb249616aab1dbec53fc938c9017a4c", - "reference": "e65ce5c9ccb249616aab1dbec53fc938c9017a4c", + "url": "https://api.github.com/repos/symfony/process/zipball/8741e3ed7fe2e91ec099e02446fb86667a0f1628", + "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628", "shasum": "" }, "require": { @@ -5255,7 +5248,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/6.3" + "source": "https://github.com/symfony/process/tree/v6.3.0-RC1" }, "funding": [ { @@ -5271,20 +5264,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:44:40+00:00" + "time": "2023-05-19T08:06:44+00:00" }, { "name": "symfony/service-contracts", - "version": "dev-main", + "version": "3.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { @@ -5294,14 +5287,10 @@ "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -5341,7 +5330,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/service-contracts/tree/3.4" }, "funding": [ { @@ -5357,20 +5346,20 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/stopwatch", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "f7fa451783b748e7b5942b9afe889b8df062e935" + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f7fa451783b748e7b5942b9afe889b8df062e935", - "reference": "f7fa451783b748e7b5942b9afe889b8df062e935", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "shasum": "" }, "require": { @@ -5403,7 +5392,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/6.3" + "source": "https://github.com/symfony/stopwatch/tree/v6.3.0-RC1" }, "funding": [ { @@ -5419,20 +5408,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T09:04:20+00:00" + "time": "2023-02-16T10:14:28+00:00" }, { "name": "symfony/string", - "version": "6.3.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "599f0f073afa9866d1d3b16c1ffafa74a69fb3ce" + "reference": "89bc6d5dcc94c89781e1f986e4d01b7ee91d684b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/599f0f073afa9866d1d3b16c1ffafa74a69fb3ce", - "reference": "599f0f073afa9866d1d3b16c1ffafa74a69fb3ce", + "url": "https://api.github.com/repos/symfony/string/zipball/89bc6d5dcc94c89781e1f986e4d01b7ee91d684b", + "reference": "89bc6d5dcc94c89781e1f986e4d01b7ee91d684b", "shasum": "" }, "require": { @@ -5446,11 +5435,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5489,7 +5478,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/6.3" + "source": "https://github.com/symfony/string/tree/6.4" }, "funding": [ { @@ -5505,7 +5494,7 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:44:40+00:00" + "time": "2023-05-23T16:34:37+00:00" }, { "name": "theseer/tokenizer", diff --git a/ext/media/main.php b/ext/media/main.php index f7451f41..46966016 100644 --- a/ext/media/main.php +++ b/ext/media/main.php @@ -85,20 +85,20 @@ class Media extends Extension { $sb = $event->panel->create_new_block("Media Engines"); -// if (self::imagick_available()) { -// try { -// $image = new Imagick(realpath('tests/favicon.png')); -// $image->clear(); -// $sb->add_label("ImageMagick detected"); -// } catch (ImagickException $e) { -// $sb->add_label("ImageMagick not detected"); -// } -// } else { + // if (self::imagick_available()) { + // try { + // $image = new Imagick(realpath('tests/favicon.png')); + // $image->clear(); + // $sb->add_label("ImageMagick detected"); + // } catch (ImagickException $e) { + // $sb->add_label("ImageMagick not detected"); + // } + // } else { $sb->start_table(); $sb->add_table_header("Commands"); $sb->add_text_option(MediaConfig::CONVERT_PATH, "convert", true); -// } + // } $sb->add_text_option(MediaConfig::FFMPEG_PATH, "ffmpeg", true); $sb->add_text_option(MediaConfig::FFPROBE_PATH, "ffprobe", true); @@ -202,8 +202,8 @@ class Media extends Extension break; case MediaEngine::IMAGICK: -// if (self::imagick_available()) { -// } else { + // if (self::imagick_available()) { + // } else { self::image_resize_convert( $event->input_path, $event->input_mime, @@ -227,9 +227,9 @@ class Media extends Extension } // TODO: Get output optimization tools working better -// if ($config->get_bool("thumb_optim", false)) { -// exec("jpegoptim $outname", $output, $ret); -// } + // if ($config->get_bool("thumb_optim", false)) { + // exec("jpegoptim $outname", $output, $ret); + // } } public const CONTENT_SEARCH_TERM_REGEX = "/^content[=|:]((video)|(audio)|(image)|(unknown))$/i"; diff --git a/ext/media/video_codecs.php b/ext/media/video_codecs.php index 1a2d2060..0b5c794f 100644 --- a/ext/media/video_codecs.php +++ b/ext/media/video_codecs.php @@ -63,12 +63,12 @@ abstract class VideoCodecs -// -// public static function is_input_supported(string $engine, string $mime): bool -// { -// return MimeType::matches_array( -// $mime, -// MediaEngine::INPUT_SUPPORT[$engine] -// ); -// } + // + // public static function is_input_supported(string $engine, string $mime): bool + // { + // return MimeType::matches_array( + // $mime, + // MediaEngine::INPUT_SUPPORT[$engine] + // ); + // } } diff --git a/ext/mime/mime_type.php b/ext/mime/mime_type.php index 906028b0..b600ec13 100644 --- a/ext/mime/mime_type.php +++ b/ext/mime/mime_type.php @@ -251,9 +251,11 @@ class MimeType $output = MimeType::PPM; break; // TODO: There is no uniquely defined Mime type for the cursor format. Need to figure this out. -// case FileExtension::CUR: -// $output = MimeType::CUR; -// break; + /* + case FileExtension::CUR: + $output = MimeType::CUR; + break; + */ } } } diff --git a/ext/transcode_video/main.php b/ext/transcode_video/main.php index 9a778f8a..8165f0f1 100644 --- a/ext/transcode_video/main.php +++ b/ext/transcode_video/main.php @@ -65,37 +65,37 @@ class TranscodeVideo extends Extension $sb->end_table(); } +/* public function onDataUpload(DataUploadEvent $event) { -// global $config; -// -// if ($config->get_bool(TranscodeVideoConfig::UPLOAD) == true) { -// $ext = strtolower($event->type); -// -// $ext = Media::normalize_format($ext); -// -// if ($event->type=="gif"&&Media::is_animated_gif($event->tmpname)) { -// return; -// } -// -// if (in_array($ext, array_values(self::INPUT_FORMATS))) { -// $target_format = $config->get_string(TranscodeVideoConfig::UPLOAD_PREFIX.$ext); -// if (empty($target_format)) { -// return; -// } -// try { -// $new_image = $this->transcode_image($event->tmpname, $ext, $target_format); -// $event->set_tmpname($new_image, Media::determine_ext($target_format)); -// } catch (Exception $e) { -// log_error("transcode_video", "Error while performing upload transcode: ".$e->getMessage()); -// // We don't want to interfere with the upload process, -// // so if something goes wrong the untranscoded image jsut continues -// } -// } -// } + global $config; + + if ($config->get_bool(TranscodeVideoConfig::UPLOAD) == true) { + $ext = strtolower($event->type); + + $ext = Media::normalize_format($ext); + + if ($event->type=="gif"&&Media::is_animated_gif($event->tmpname)) { + return; + } + + if (in_array($ext, array_values(self::INPUT_FORMATS))) { + $target_format = $config->get_string(TranscodeVideoConfig::UPLOAD_PREFIX.$ext); + if (empty($target_format)) { + return; + } + try { + $new_image = $this->transcode_image($event->tmpname, $ext, $target_format); + $event->set_tmpname($new_image, Media::determine_ext($target_format)); + } catch (Exception $e) { + log_error("transcode_video", "Error while performing upload transcode: ".$e->getMessage()); + // We don't want to interfere with the upload process, + // so if something goes wrong the untranscoded image jsut continues + } + } + } } - - +*/ public function onPageRequest(PageRequestEvent $event) { diff --git a/themes/material/upload.theme.php b/themes/material/upload.theme.php index dca4d9bb..b0bff3a0 100644 --- a/themes/material/upload.theme.php +++ b/themes/material/upload.theme.php @@ -9,7 +9,7 @@ class CustomUploadTheme extends UploadTheme // public function display_block(Page $page) { // $page->add_block(new Block("Upload", $this->build_upload_block(), "left", 20)); // } - // + // // public function display_full(Page $page) { // $page->add_block(new Block("Upload", "Disk nearly full, uploads disabled", "left", 20)); // } From 12f0bc3a81b7f739de02411623152be309ea5a36 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 25 May 2023 11:26:31 +0100 Subject: [PATCH 26/28] Allow SearchTermParseEvent to have a bit more control over results Rather than "add querylet or do nothing", moving more code into the event means that event handlers are able to add a positive or negative querylet, add a positive or negative tag, or do nothing This means that events can respond to the `null` search term by adding a tag, which would be useful for #917 --- core/imageboard/image.php | 35 ++++------------------------------- ext/index/events.php | 31 ++++++++++++++++++++++++++++--- ext/index/main.php | 11 +++++++++++ 3 files changed, 43 insertions(+), 34 deletions(-) diff --git a/core/imageboard/image.php b/core/imageboard/image.php index f40590a6..d16c8d85 100644 --- a/core/imageboard/image.php +++ b/core/imageboard/image.php @@ -283,38 +283,11 @@ class Image * Turn a bunch of strings into a bunch of TagCondition * and ImgCondition objects */ - $stpe = send_event(new SearchTermParseEvent($stpen++, null, $terms)); - if ($stpe->order) { - $order = $stpe->order; - } elseif (!empty($stpe->querylets)) { - foreach ($stpe->querylets as $querylet) { - $img_conditions[] = new ImgCondition($querylet, true); - } - } - - foreach ($terms as $term) { - $positive = true; - if (is_string($term) && !empty($term) && ($term[0] == '-')) { - $positive = false; - $term = substr($term, 1); - } - if (strlen($term) === 0) { - continue; - } - + foreach (array_merge([null], $terms) as $term) { $stpe = send_event(new SearchTermParseEvent($stpen++, $term, $terms)); - if ($stpe->order) { - $order = $stpe->order; - } elseif (!empty($stpe->querylets)) { - foreach ($stpe->querylets as $querylet) { - $img_conditions[] = new ImgCondition($querylet, $positive); - } - } else { - // if the whole match is wild, skip this - if (str_replace("*", "", $term) != "") { - $tag_conditions[] = new TagCondition($term, $positive); - } - } + $order ??= $stpe->order; + $img_conditions = array_merge($img_conditions, $stpe->img_conditions); + $tag_conditions = array_merge($tag_conditions, $stpe->tag_conditions); } return [$tag_conditions, $img_conditions, $order]; } diff --git a/ext/index/events.php b/ext/index/events.php index 35268381..235cfc4e 100644 --- a/ext/index/events.php +++ b/ext/index/events.php @@ -12,23 +12,48 @@ class SearchTermParseEvent extends Event { public int $id = 0; public ?string $term = null; + public bool $positive = true; /** @var string[] */ public array $context = []; - /** @var Querylet[] */ - public array $querylets = []; + /** @var ImgCondition[] */ + public array $img_conditions = []; + /** @var TagCondition[] */ + public array $tag_conditions = []; public ?string $order = null; public function __construct(int $id, string $term=null, array $context=[]) { parent::__construct(); + + if ($term == "-" || $term == "*") { + throw new SearchTermParseException("'$term' is not a valid search term"); + } + + $positive = true; + if (is_string($term) && !empty($term) && ($term[0] == '-')) { + $positive = false; + $term = substr($term, 1); + } + $this->id = $id; + $this->positive = $positive; $this->term = $term; $this->context = $context; } public function add_querylet(Querylet $q) { - $this->querylets[] = $q; + $this->add_img_condition(new ImgCondition($q, $this->positive)); + } + + public function add_img_condition(ImgCondition $c) + { + $this->img_conditions[] = $c; + } + + public function add_tag_condition(TagCondition $c) + { + $this->tag_conditions[] = $c; } } diff --git a/ext/index/main.php b/ext/index/main.php index 446732e1..e28c091f 100644 --- a/ext/index/main.php +++ b/ext/index/main.php @@ -257,5 +257,16 @@ class Index extends Extension $seed = date("Ymd"); $event->order = "RAND($seed)"; } + + // If we've reached this far, and nobody else has done anything with this term, then treat it as a tag + if ($event->order == null && $event->img_conditions == [] && $event->tag_conditions == []) { + $event->add_tag_condition(new TagCondition($event->term, $event->positive)); + } + } + + public function get_priority(): int + { + // we want to turn a search term into a TagCondition only if nobody did anything else with that term + return 95; } } From ac293241846a81bee2f669891c16f3eba1656689 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 25 May 2023 12:29:41 +0100 Subject: [PATCH 27/28] simplify search a little --- core/imageboard/image.php | 62 +++++++++++++++------------------------ 1 file changed, 23 insertions(+), 39 deletions(-) diff --git a/core/imageboard/image.php b/core/imageboard/image.php index d16c8d85..af2483df 100644 --- a/core/imageboard/image.php +++ b/core/imageboard/image.php @@ -272,26 +272,6 @@ class Image return (int)ceil(Image::count_images($tags) / $config->get_int(IndexConfig::IMAGES)); } - private static function terms_to_conditions(array $terms): array - { - $tag_conditions = []; - $img_conditions = []; - $stpen = 0; // search term parse event number - $order = null; - - /* - * Turn a bunch of strings into a bunch of TagCondition - * and ImgCondition objects - */ - foreach (array_merge([null], $terms) as $term) { - $stpe = send_event(new SearchTermParseEvent($stpen++, $term, $terms)); - $order ??= $stpe->order; - $img_conditions = array_merge($img_conditions, $stpe->img_conditions); - $tag_conditions = array_merge($tag_conditions, $stpe->tag_conditions); - } - return [$tag_conditions, $img_conditions, $order]; - } - /* * Accessors & mutators */ @@ -822,19 +802,24 @@ class Image ): Querylet { global $config; - list($tag_conditions, $img_conditions, $order) = self::terms_to_conditions($terms); - $order = ($order ?: "images.".$config->get_string(IndexConfig::ORDER)); + $tag_conditions = []; + $img_conditions = []; + $order = null; - $positive_tag_count = 0; - $negative_tag_count = 0; - foreach ($tag_conditions as $tq) { - if ($tq->positive) { - $positive_tag_count++; - } else { - $negative_tag_count++; - } + /* + * Turn a bunch of strings into a bunch of TagCondition + * and ImgCondition objects + */ + $stpen = 0; // search term parse event number + foreach (array_merge([null], $terms) as $term) { + $stpe = send_event(new SearchTermParseEvent($stpen++, $term, $terms)); + $order ??= $stpe->order; + $img_conditions = array_merge($img_conditions, $stpe->img_conditions); + $tag_conditions = array_merge($tag_conditions, $stpe->tag_conditions); } + $order = ($order ?: "images.".$config->get_string(IndexConfig::ORDER)); + /* * Turn a bunch of Querylet objects into a base query * @@ -848,7 +833,7 @@ class Image */ // no tags, do a simple search - if ($positive_tag_count === 0 && $negative_tag_count === 0) { + if (count($tag_conditions) === 0) { $query = new Querylet("SELECT images.* FROM images WHERE 1=1"); } @@ -856,21 +841,20 @@ class Image // and do the offset / limit there, which is 10x faster than fetching // all the image_tags and doing the offset / limit on the result. elseif ( - ( - ($positive_tag_count === 1 && $negative_tag_count === 0) - || ($positive_tag_count === 0 && $negative_tag_count === 1) - ) + count($tag_conditions) === 1 && empty($img_conditions) && ($order == "id DESC" || $order == "images.id DESC") && !is_null($offset) && !is_null($limit) ) { - $in = $positive_tag_count === 1 ? "IN" : "NOT IN"; + $tc = $tag_conditions[0]; + $in = $tc->positive ? "IN" : "NOT IN"; // IN (SELECT id FROM tags) is 100x slower than doing a separate // query and then a second query for IN(first_query_results)?? - $tag_array = self::tag_or_wildcard_to_ids($tag_conditions[0]->tag); + $tag_array = self::tag_or_wildcard_to_ids($tc->tag); if (count($tag_array) == 0) { - if ($positive_tag_count == 1) { + // if wildcard expanded to nothing, take a shortcut + if ($tc->positive) { $query = new Querylet("SELECT images.* FROM images WHERE 1=0"); } else { $query = new Querylet("SELECT images.* FROM images WHERE 1=1"); @@ -896,7 +880,7 @@ class Image } } - // more than one positive tag, or more than zero negative tags + // more than one tag, or more than zero other conditions, or a non-default sort order else { $positive_tag_id_array = []; $positive_wildcard_id_array = []; From 133616e508b2f4d9154d07db7c10bfb7cbbb5a98 Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 25 May 2023 14:04:13 +0100 Subject: [PATCH 28/28] Autocomplete tags for anything with class=autocomplete_tags Not all search boxes are tag-search boxes If somebody doesn't want autocompleted tags, then don't use class=autocomplete_tags? --- ext/autocomplete/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/autocomplete/script.js b/ext/autocomplete/script.js index 41e1fda5..d437bbf9 100644 --- a/ext/autocomplete/script.js +++ b/ext/autocomplete/script.js @@ -1,7 +1,7 @@ document.addEventListener('DOMContentLoaded', () => { var metatags = ['order:id', 'order:width', 'order:height', 'order:filesize', 'order:filename', 'order:favorites']; - $('[name="search"]').tagit({ + $('.autocomplete_tags').tagit({ singleFieldDelimiter: ' ', beforeTagAdded: function(event, ui) { if(metatags.indexOf(ui.tagLabel) !== -1) {