From 69309b9a98a1fae0ce35cb97653a6765708da64f Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 31 Oct 2023 20:20:26 +0200 Subject: [PATCH 01/59] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0d6d65e..5dd91cf 100644 --- a/README.md +++ b/README.md @@ -107,8 +107,8 @@ git checkout -b my-pr-branch-name * [Symfony Framework](https://symfony.com) * [SVG icons](https://icons.getbootstrap.com) * [Scrapper](https://github.com/medariox/scrapeer) / [Composer Edition](https://github.com/YGGverse/scrapeer) -* [Bencode Library](https://github.com/Rhilip/Bencode) -* [Transliteration Library](https://github.com/ashtokalo/php-translit) +* [Bencode](https://github.com/Rhilip/Bencode) +* [Transliteration](https://github.com/ashtokalo/php-translit) * [Identicons](https://github.com/dmester/jdenticon-php) #### Support From 3589d2eef4669b6aa095ab7a18029d4a059f3bb0 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 31 Oct 2023 23:05:48 +0200 Subject: [PATCH 02/59] set new users as sensitive by default --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 9d51a78..92541c2 100644 --- a/.env +++ b/.env @@ -69,7 +69,7 @@ APP_THEME=default APP_THEMES=default # Default sensitive status for new users -APP_SENSITIVE=0 +APP_SENSITIVE=1 # Default approved status for new users APP_APPROVED=0 From 514b1ebc5db45e12fb0fffc351f8a5dec3df4664 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 1 Nov 2023 05:11:25 +0200 Subject: [PATCH 03/59] fix event message --- .../default/activity/event/torrent/download/file/add.html.twig | 2 +- .../activity/event/torrent/download/magnet/add.html.twig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/default/activity/event/torrent/download/file/add.html.twig b/templates/default/activity/event/torrent/download/file/add.html.twig index f71609a..1e0e5e3 100644 --- a/templates/default/activity/event/torrent/download/file/add.html.twig +++ b/templates/default/activity/event/torrent/download/file/add.html.twig @@ -11,7 +11,7 @@ {{ torrent.name }} {% if torrent.approved == false %} - #{{ torrent.id }} ({{ 'waiting for approve' | trans }}) + ({{ 'waiting for approve' | trans }}) {% endif %} {% else %} {% if torrent.status == false %} diff --git a/templates/default/activity/event/torrent/download/magnet/add.html.twig b/templates/default/activity/event/torrent/download/magnet/add.html.twig index 1545e69..edfc68c 100644 --- a/templates/default/activity/event/torrent/download/magnet/add.html.twig +++ b/templates/default/activity/event/torrent/download/magnet/add.html.twig @@ -11,7 +11,7 @@ {{ torrent.name }} {% if torrent.approved == false %} - #{{ torrent.id }} ({{ 'waiting for approve' | trans }}) + ({{ 'waiting for approve' | trans }}) {% endif %} {% else %} {% if torrent.status == false %} From 986f6678f8ce7ea38cbfe8d7b6f25b1a1dddec9b Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 1 Nov 2023 23:23:43 +0200 Subject: [PATCH 04/59] add new locale --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 92541c2..0cfd47b 100644 --- a/.env +++ b/.env @@ -57,7 +57,7 @@ APP_NAME=YGGtracker APP_LOCALE=en # Supported locales for interface and content filters -APP_LOCALES=en|cs|nl|eo|fr|ka|de|he|it|lv|pl|pt|ru|es|uk +APP_LOCALES=en|cs|nl|eo|fr|ja|ka|de|he|it|lv|pl|pt|ru|es|uk # Items per page on pagination APP_PAGINATION=10 From e788744a0f244177a842954e9b00159eac4a06b1 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 2 Nov 2023 01:38:55 +0200 Subject: [PATCH 05/59] add configuration tip for upload_max_filesize --- .env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env b/.env index 0cfd47b..dfa68bc 100644 --- a/.env +++ b/.env @@ -86,10 +86,10 @@ APP_TRACKERS=http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce|http: # List of crawlers where ignored in actions and activity features APP_CRAWLERS=201:23b4:991a:634d:8359:4521:5576:15b7|30a:5fad::e -# Max torrent filesize for uploads +# Max torrent filesize for uploads (check upload_max_filesize in the php.ini) APP_TORRENT_FILE_SIZE_MAX=1024000 -# Max torrent poster filesize for uploads +# Max torrent poster filesize for uploads (check upload_max_filesize in the php.ini) APP_TORRENT_POSTER_FILE_SIZE_MAX=10240000 # Store wanted torrent files in /app/var/ftp by /app/crontab/torrent/scrape/{key} From 4f2879fdef7f249ef744dccf19736e45ffb8f70d Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 2 Nov 2023 19:15:01 +0200 Subject: [PATCH 06/59] set users approved by default --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index dfa68bc..b7750ba 100644 --- a/.env +++ b/.env @@ -72,7 +72,7 @@ APP_THEMES=default APP_SENSITIVE=1 # Default approved status for new users -APP_APPROVED=0 +APP_APPROVED=1 # Default Yggdrasil filters status for new users APP_YGGDRASIL=1 From 258d206f2ee701ac968849b548476ce1100478a4 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 3 Nov 2023 13:44:49 +0200 Subject: [PATCH 07/59] unify torrent filenames to prevent encoding issues on FTP connection --- src/Controller/TorrentController.php | 47 +++++++++++----------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 7511ff8..2fdbe6b 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -2538,11 +2538,8 @@ class TorrentController extends AbstractController $response->headers->set( 'Content-Disposition', sprintf( - 'attachment; filename="wanted#%s.%s.torrent";', - $torrent->getId(), - mb_strtolower( - $file->getName() - ) + 'attachment; filename="wanted#%s.torrent";', + $torrent->getId() ) ); @@ -2784,10 +2781,9 @@ class TorrentController extends AbstractController $torrentService->copyToFtpStorage( $torrent->getId(), sprintf( - '%s/torrents/wanted/all/wanted#%s.%s.torrent', + '%s/torrents/wanted/all/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); @@ -2797,10 +2793,9 @@ class TorrentController extends AbstractController $torrentService->copyToFtpStorage( $torrent->getId(), sprintf( - '%s/torrents/wanted/sensitive/yes/wanted#%s.%s.torrent', + '%s/torrents/wanted/sensitive/yes/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); } @@ -2810,10 +2805,9 @@ class TorrentController extends AbstractController $torrentService->copyToFtpStorage( $torrent->getId(), sprintf( - '%s/torrents/wanted/sensitive/no/wanted#%s.%s.torrent', + '%s/torrents/wanted/sensitive/no/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); } @@ -2824,11 +2818,10 @@ class TorrentController extends AbstractController $torrentService->copyToFtpStorage( $torrent->getId(), sprintf( - '%s/torrents/wanted/locale/%s/wanted#%s.%s.torrent', + '%s/torrents/wanted/locale/%s/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), $locale, - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); } @@ -2841,29 +2834,26 @@ class TorrentController extends AbstractController /// All $torrentService->removeFromFtpStorage( sprintf( - '%s/torrents/wanted/all/wanted#%s.%s.torrent', + '%s/torrents/wanted/all/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); /// Sensitive $torrentService->removeFromFtpStorage( sprintf( - '%s/torrents/wanted/sensitive/yes/wanted#%s.%s.torrent', + '%s/torrents/wanted/sensitive/yes/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); $torrentService->removeFromFtpStorage( sprintf( - '%s/torrents/wanted/sensitive/no/wanted#%s.%s.torrent', + '%s/torrents/wanted/sensitive/no/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); @@ -2872,11 +2862,10 @@ class TorrentController extends AbstractController { $torrentService->removeFromFtpStorage( sprintf( - '%s/torrents/wanted/locale/%s/wanted#%s.%s.torrent', + '%s/torrents/wanted/locale/%s/wanted#%s.torrent', $this->getParameter('app.torrent.wanted.ftp.folder'), $locale, - $torrent->getId(), - $file->getName() + $torrent->getId() ) ); } From 2e4129927d1465e162bb1fa28cc363c643925346 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 3 Nov 2023 13:59:50 +0200 Subject: [PATCH 08/59] set app IDs in the filename postfix, remove lowercase --- src/Controller/TorrentController.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 2fdbe6b..5bc0b04 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -2416,14 +2416,10 @@ class TorrentController extends AbstractController $response->headers->set( 'Content-Disposition', sprintf( - 'attachment; filename="%s#%s.%s.torrent";', - mb_strtolower( - $this->getParameter('app.name') - ), - $torrent->getId(), - mb_strtolower( - $file->getName() - ) + 'attachment; filename="%s [%s#%s].torrent";', + $file->getName(), + $this->getParameter('app.name'), + $torrent->getId() ) ); From 7796aba342f2b7b87b50be1d0d5e17b6da158f97 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 3 Nov 2023 14:06:15 +0200 Subject: [PATCH 09/59] append torrent filename to the manual wanted downloads --- src/Controller/TorrentController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 5bc0b04..9b22608 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -2534,7 +2534,8 @@ class TorrentController extends AbstractController $response->headers->set( 'Content-Disposition', sprintf( - 'attachment; filename="wanted#%s.torrent";', + 'attachment; filename="%s [wanted#%s].torrent";', + $file->getName(), $torrent->getId() ) ); From ad5b075878a4843b9670a09867528c013d3bf1f4 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 3 Nov 2023 14:54:12 +0200 Subject: [PATCH 10/59] add poster settings to the user profile page --- src/Controller/UserController.php | 1 + templates/default/user/info.html.twig | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index d6dea1f..a408a11 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -222,6 +222,7 @@ class UserController extends AbstractController 'moderator' => $userTarget->isModerator(), 'approved' => $userTarget->isApproved(), 'status' => $userTarget->isStatus(), + 'posters' => $userTarget->isPosters(), 'sensitive' => $userTarget->isSensitive(), 'yggdrasil' => $userTarget->isYggdrasil(), 'locale' => $userTarget->getLocale(), diff --git a/templates/default/user/info.html.twig b/templates/default/user/info.html.twig index a3632ab..8d660d2 100644 --- a/templates/default/user/info.html.twig +++ b/templates/default/user/info.html.twig @@ -175,6 +175,18 @@ {% for i, locale in user.locales %}{% if i > 0 %},{% endif %} {{ locale|locale_name(locale)|u.title }}{% endfor %} + + + {{ 'Posters' | trans }} + + + {% if user.posters %} + {{ 'Yes' | trans }} + {% else %} + {{ 'No' | trans }} + {% endif %} + + {{ 'Sensitive' | trans }} From 6dcbd6de401732501c612433f5b71a861da2c6c9 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 3 Nov 2023 15:35:46 +0200 Subject: [PATCH 11/59] make description links clickable #30 --- composer.json | 4 +++- src/Twig/AppExtension.php | 18 ++++++++++++++++++ templates/default/torrent/info.html.twig | 4 ++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index a91504c..0126d61 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,7 @@ "doctrine/doctrine-migrations-bundle": "^3.2", "doctrine/orm": "^2.16", "jdenticon/jdenticon": "^1.0", + "league/commonmark": "^2.4", "phpdocumentor/reflection-docblock": "^5.3", "phpstan/phpdoc-parser": "^1.24", "rhilip/bencode": "^2.3", @@ -45,8 +46,9 @@ "symfony/validator": "6.3.*", "symfony/web-link": "6.3.*", "symfony/yaml": "6.3.*", - "twig/extra-bundle": "^2.12|^3.0", + "twig/extra-bundle": "^3.7", "twig/intl-extra": "^3.7", + "twig/markdown-extra": "^3.7", "twig/string-extra": "^3.7", "twig/twig": "^2.12|^3.0", "yggverse/scrapeer": "^0.5.4" diff --git a/src/Twig/AppExtension.php b/src/Twig/AppExtension.php index 6cf5813..6d4e987 100644 --- a/src/Twig/AppExtension.php +++ b/src/Twig/AppExtension.php @@ -39,6 +39,13 @@ class AppExtension extends AbstractExtension 'formatAgo' ] ), + new TwigFilter( + 'url_to_markdown', + [ + $this, + 'urlToMarkdown' + ] + ), ]; } @@ -135,6 +142,17 @@ class AppExtension extends AbstractExtension } } + public function urlToMarkdown( + string $text + ) : string + { + return preg_replace( + '~(https?://(?:www\.)?[^\s]+)~i', + '[$1]($1)', + $text + ); + } + private function plural(int $number, array $texts) { $cases = [2, 0, 1, 1, 1, 2]; diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index 3488f23..5aebc08 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -226,7 +226,7 @@ {{ 'Source' | trans }} - {{ file.source }} + {{ file.source | url_to_markdown | markdown_to_html }} {% endif %} @@ -246,7 +246,7 @@ {{ 'Comment' | trans }} - {{ file.comment | nl2br }} + {{ file.comment | url_to_markdown | markdown_to_html }} {% endif %} From 261031dc50715daddf5ebc1a69667b4200633067 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 3 Nov 2023 15:36:24 +0200 Subject: [PATCH 12/59] unify syntax style --- src/Twig/AppExtension.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Twig/AppExtension.php b/src/Twig/AppExtension.php index 6d4e987..c0bbcf4 100644 --- a/src/Twig/AppExtension.php +++ b/src/Twig/AppExtension.php @@ -52,7 +52,7 @@ class AppExtension extends AbstractExtension public function formatBytes( int $bytes, int $precision = 2 - ) : string + ): string { $size = [ $this->translator->trans('B'), @@ -73,7 +73,7 @@ class AppExtension extends AbstractExtension public function formatAgo( int $time, - ) : string + ): string { $diff = time() - $time; @@ -144,7 +144,7 @@ class AppExtension extends AbstractExtension public function urlToMarkdown( string $text - ) : string + ): string { return preg_replace( '~(https?://(?:www\.)?[^\s]+)~i', From f8e0890966e7cff25e741bbc87091bf61eb7f9cf Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 3 Nov 2023 15:36:35 +0200 Subject: [PATCH 13/59] update composer --- composer.lock | 823 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 652 insertions(+), 171 deletions(-) diff --git a/composer.lock b/composer.lock index babbb48..605e0af 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": "4d930a43cf9a80e1622029c4a4048a6b", + "content-hash": "99ad25219a6bff24126d6f83ebd1756a", "packages": [ { "name": "ashtokalo/php-translit", @@ -49,6 +49,81 @@ }, "time": "2022-09-26T09:05:24+00:00" }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, { "name": "doctrine/annotations", "version": "2.0.1", @@ -397,16 +472,16 @@ }, { "name": "doctrine/dbal", - "version": "3.7.0", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf" + "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/00d03067f07482f025d41ab55e4ba0db5eca2cdf", - "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", + "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", "shasum": "" }, "require": { @@ -490,7 +565,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.0" + "source": "https://github.com/doctrine/dbal/tree/3.7.1" }, "funding": [ { @@ -506,7 +581,7 @@ "type": "tidelift" } ], - "time": "2023-09-26T20:56:55+00:00" + "time": "2023-10-06T05:06:20+00:00" }, { "name": "doctrine/deprecations", @@ -1556,17 +1631,205 @@ "time": "2022-10-30T17:15:02+00:00" }, { - "name": "monolog/monolog", - "version": "3.4.0", + "name": "league/commonmark", + "version": "2.4.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d" + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2023-08-30T16:55:00+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", "shasum": "" }, "require": { @@ -1642,7 +1905,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.4.0" + "source": "https://github.com/Seldaek/monolog/tree/3.5.0" }, "funding": [ { @@ -1654,7 +1917,155 @@ "type": "tidelift" } ], - "time": "2023-06-21T08:46:11+00:00" + "time": "2023-10-27T15:32:31+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": "7.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.5" + }, + "time": "2023-10-05T20:37:59+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.3", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015", + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.3" + }, + "time": "2023-10-29T21:02:13+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2299,16 +2710,16 @@ }, { "name": "symfony/cache", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "6c1a3ea078c4d88ee892530945df63a87981b2da" + "reference": "84aff8d948d6292d2b5a01ac622760be44dddc72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/6c1a3ea078c4d88ee892530945df63a87981b2da", - "reference": "6c1a3ea078c4d88ee892530945df63a87981b2da", + "url": "https://api.github.com/repos/symfony/cache/zipball/84aff8d948d6292d2b5a01ac622760be44dddc72", + "reference": "84aff8d948d6292d2b5a01ac622760be44dddc72", "shasum": "" }, "require": { @@ -2317,7 +2728,7 @@ "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.2.10" + "symfony/var-exporter": "^6.3.6" }, "conflict": { "doctrine/dbal": "<2.13.1", @@ -2332,7 +2743,7 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "symfony/config": "^5.4|^6.0", @@ -2375,7 +2786,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.3.5" + "source": "https://github.com/symfony/cache/tree/v6.3.6" }, "funding": [ { @@ -2391,7 +2802,7 @@ "type": "tidelift" } ], - "time": "2023-09-26T15:48:55+00:00" + "time": "2023-10-17T14:44:58+00:00" }, { "name": "symfony/cache-contracts", @@ -2930,16 +3341,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "9977eb1adf999ceded213e88c1ac6dff7a1a0306" + "reference": "c8af292f733cc28149485639177c5f2b67dff200" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/9977eb1adf999ceded213e88c1ac6dff7a1a0306", - "reference": "9977eb1adf999ceded213e88c1ac6dff7a1a0306", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/c8af292f733cc28149485639177c5f2b67dff200", + "reference": "c8af292f733cc28149485639177c5f2b67dff200", "shasum": "" }, "require": { @@ -2972,8 +3383,8 @@ "doctrine/annotations": "^1.13.1|^2", "doctrine/collections": "^1.0|^2.0", "doctrine/data-fixtures": "^1.1", - "doctrine/dbal": "^2.13.1|^3.0", - "doctrine/orm": "^2.12", + "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/orm": "^2.12|^3", "psr/log": "^1|^2|^3", "symfony/cache": "^5.4|^6.0", "symfony/config": "^5.4|^6.0", @@ -3020,7 +3431,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.3.5" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.3.7" }, "funding": [ { @@ -3036,24 +3447,24 @@ "type": "tidelift" } ], - "time": "2023-09-29T16:16:03+00:00" + "time": "2023-10-28T23:11:45+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v6.3.1", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "f1c253e24ae6d2bc4939b1439e074e6d2e73ecdb" + "reference": "b8dab85f66ffd5e4275eaf7558f9db8f4586dd41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/f1c253e24ae6d2bc4939b1439e074e6d2e73ecdb", - "reference": "f1c253e24ae6d2bc4939b1439e074e6d2e73ecdb", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/b8dab85f66ffd5e4275eaf7558f9db8f4586dd41", + "reference": "b8dab85f66ffd5e4275eaf7558f9db8f4586dd41", "shasum": "" }, "require": { - "doctrine/dbal": "^2.13|^3.0", + "doctrine/dbal": "^2.13|^3|^4", "php": ">=8.1", "symfony/messenger": "^5.4|^6.0", "symfony/service-contracts": "^2.5|^3" @@ -3092,7 +3503,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v6.3.1" + "source": "https://github.com/symfony/doctrine-messenger/tree/v6.3.7" }, "funding": [ { @@ -3108,20 +3519,20 @@ "type": "tidelift" } ], - "time": "2023-06-24T11:51:27+00:00" + "time": "2023-10-26T18:15:14+00:00" }, { "name": "symfony/dotenv", - "version": "v6.3.0", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e" + "reference": "7dfbe2976f3c1b7cfa8fac2212a050bfa9bd7d9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/ceadb434fe2a6763a03d2d110441745834f3dd1e", - "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/7dfbe2976f3c1b7cfa8fac2212a050bfa9bd7d9e", + "reference": "7dfbe2976f3c1b7cfa8fac2212a050bfa9bd7d9e", "shasum": "" }, "require": { @@ -3166,7 +3577,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.3.0" + "source": "https://github.com/symfony/dotenv/tree/v6.3.7" }, "funding": [ { @@ -3182,7 +3593,7 @@ "type": "tidelift" } ], - "time": "2023-04-21T14:41:17+00:00" + "time": "2023-10-26T18:15:14+00:00" }, { "name": "symfony/error-handler", @@ -3607,16 +4018,16 @@ }, { "name": "symfony/flex", - "version": "v2.3.3", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "9c402af768c6c9f8126a9ffa192ecf7c16581e35" + "reference": "ae6dea68771c5fca9d172e0c0910bdd06199f6f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/9c402af768c6c9f8126a9ffa192ecf7c16581e35", - "reference": "9c402af768c6c9f8126a9ffa192ecf7c16581e35", + "url": "https://api.github.com/repos/symfony/flex/zipball/ae6dea68771c5fca9d172e0c0910bdd06199f6f4", + "reference": "ae6dea68771c5fca9d172e0c0910bdd06199f6f4", "shasum": "" }, "require": { @@ -3652,7 +4063,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.3.3" + "source": "https://github.com/symfony/flex/tree/v2.4.1" }, "funding": [ { @@ -3668,20 +4079,20 @@ "type": "tidelift" } ], - "time": "2023-08-04T09:02:35+00:00" + "time": "2023-10-30T18:35:17+00:00" }, { "name": "symfony/form", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "0f9ad8600c1021983d096512066ee54332aa3139" + "reference": "e6743d188f168643cb247f65cbad09ddb1dfcfe5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/0f9ad8600c1021983d096512066ee54332aa3139", - "reference": "0f9ad8600c1021983d096512066ee54332aa3139", + "url": "https://api.github.com/repos/symfony/form/zipball/e6743d188f168643cb247f65cbad09ddb1dfcfe5", + "reference": "e6743d188f168643cb247f65cbad09ddb1dfcfe5", "shasum": "" }, "require": { @@ -3749,7 +4160,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.3.5" + "source": "https://github.com/symfony/form/tree/v6.3.7" }, "funding": [ { @@ -3765,20 +4176,20 @@ "type": "tidelift" } ], - "time": "2023-09-10T17:47:23+00:00" + "time": "2023-10-28T23:11:45+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "567cafcfc08e3076b47290a7558b0ca17a98b0ce" + "reference": "dba20792c726c30d455626eddfb2db008f64085f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/567cafcfc08e3076b47290a7558b0ca17a98b0ce", - "reference": "567cafcfc08e3076b47290a7558b0ca17a98b0ce", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/dba20792c726c30d455626eddfb2db008f64085f", + "reference": "dba20792c726c30d455626eddfb2db008f64085f", "shasum": "" }, "require": { @@ -3893,7 +4304,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.3.5" + "source": "https://github.com/symfony/framework-bundle/tree/v6.3.7" }, "funding": [ { @@ -3909,20 +4320,20 @@ "type": "tidelift" } ], - "time": "2023-09-29T10:45:15+00:00" + "time": "2023-10-26T18:15:14+00:00" }, { "name": "symfony/http-client", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d" + "reference": "cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/213e564da4cbf61acc9728d97e666bcdb868c10d", - "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d", + "url": "https://api.github.com/repos/symfony/http-client/zipball/cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d", + "reference": "cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d", "shasum": "" }, "require": { @@ -3985,7 +4396,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.3.5" + "source": "https://github.com/symfony/http-client/tree/v6.3.7" }, "funding": [ { @@ -4001,7 +4412,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T15:57:12+00:00" + "time": "2023-10-29T12:41:36+00:00" }, { "name": "symfony/http-client-contracts", @@ -4083,16 +4494,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957" + "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b50f5e281d722cb0f4c296f908bacc3e2b721957", - "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/59d1837d5d992d16c2628cd0d6b76acf8d69b33e", + "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e", "shasum": "" }, "require": { @@ -4102,12 +4513,12 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.2" + "symfony/cache": "<6.3" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^5.4|^6.0", + "symfony/cache": "^6.3", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", @@ -4140,7 +4551,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.5" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.7" }, "funding": [ { @@ -4156,20 +4567,20 @@ "type": "tidelift" } ], - "time": "2023-09-04T21:33:54+00:00" + "time": "2023-10-28T23:55:27+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc" + "reference": "6d4098095f93279d9536a0e9124439560cc764d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f991a964368bee8d883e8d57ced4fe9fff04dfc", - "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6d4098095f93279d9536a0e9124439560cc764d0", + "reference": "6d4098095f93279d9536a0e9124439560cc764d0", "shasum": "" }, "require": { @@ -4253,7 +4664,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.5" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.7" }, "funding": [ { @@ -4269,20 +4680,20 @@ "type": "tidelift" } ], - "time": "2023-09-30T06:37:04+00:00" + "time": "2023-10-29T14:31:45+00:00" }, { "name": "symfony/intl", - "version": "v6.3.2", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "1f8cb145c869ed089a8531c51a6a4b31ed0b3c69" + "reference": "4cc98c05f2c55150a6aa5b3e20667f7a6d06cca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/1f8cb145c869ed089a8531c51a6a4b31ed0b3c69", - "reference": "1f8cb145c869ed089a8531c51a6a4b31ed0b3c69", + "url": "https://api.github.com/repos/symfony/intl/zipball/4cc98c05f2c55150a6aa5b3e20667f7a6d06cca9", + "reference": "4cc98c05f2c55150a6aa5b3e20667f7a6d06cca9", "shasum": "" }, "require": { @@ -4335,7 +4746,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.3.2" + "source": "https://github.com/symfony/intl/tree/v6.3.7" }, "funding": [ { @@ -4351,7 +4762,7 @@ "type": "tidelift" } ], - "time": "2023-07-20T07:43:09+00:00" + "time": "2023-10-28T23:11:45+00:00" }, { "name": "symfony/mailer", @@ -4435,22 +4846,23 @@ }, { "name": "symfony/messenger", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "fb29632c2abdc52f4f10f9402f8f93ebb8938234" + "reference": "a0a8860ca625116c474c9c1f5570bd7ec752c599" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/fb29632c2abdc52f4f10f9402f8f93ebb8938234", - "reference": "fb29632c2abdc52f4f10f9402f8f93ebb8938234", + "url": "https://api.github.com/repos/symfony/messenger/zipball/a0a8860ca625116c474c9c1f5570bd7ec752c599", + "reference": "a0a8860ca625116c474c9c1f5570bd7ec752c599", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/clock": "^6.3" + "symfony/clock": "^6.3", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "symfony/console": "<6.3", @@ -4464,7 +4876,6 @@ "psr/cache": "^1.0|^2.0|^3.0", "symfony/console": "^6.3", "symfony/dependency-injection": "^5.4|^6.0", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/http-kernel": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", @@ -4502,7 +4913,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.3.5" + "source": "https://github.com/symfony/messenger/tree/v6.3.7" }, "funding": [ { @@ -4518,7 +4929,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T16:11:24+00:00" + "time": "2023-10-26T18:15:14+00:00" }, { "name": "symfony/mime", @@ -4765,16 +5176,16 @@ }, { "name": "symfony/notifier", - "version": "v6.3.0", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", - "reference": "a30aee1bf767835d7948138c1629e310cee26a8b" + "reference": "2e39d4a9a96e25d127ffe30171127f6ef73934df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/a30aee1bf767835d7948138c1629e310cee26a8b", - "reference": "a30aee1bf767835d7948138c1629e310cee26a8b", + "url": "https://api.github.com/repos/symfony/notifier/zipball/2e39d4a9a96e25d127ffe30171127f6ef73934df", + "reference": "2e39d4a9a96e25d127ffe30171127f6ef73934df", "shasum": "" }, "require": { @@ -4823,7 +5234,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/notifier/tree/v6.3.0" + "source": "https://github.com/symfony/notifier/tree/v6.3.6" }, "funding": [ { @@ -4839,7 +5250,7 @@ "type": "tidelift" } ], - "time": "2023-05-12T10:17:15+00:00" + "time": "2023-10-07T07:32:05+00:00" }, { "name": "symfony/options-resolver", @@ -5867,16 +6278,16 @@ }, { "name": "symfony/security-bundle", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "2df460eacceb11b9287cfafddda4d27023dd9001" + "reference": "8ece4fd6e242acbabad4461feae7c52fe1982c48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/2df460eacceb11b9287cfafddda4d27023dd9001", - "reference": "2df460eacceb11b9287cfafddda4d27023dd9001", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/8ece4fd6e242acbabad4461feae7c52fe1982c48", + "reference": "8ece4fd6e242acbabad4461feae7c52fe1982c48", "shasum": "" }, "require": { @@ -5893,7 +6304,8 @@ "symfony/password-hasher": "^5.4|^6.0", "symfony/security-core": "^6.2", "symfony/security-csrf": "^5.4|^6.0", - "symfony/security-http": "^6.3.4" + "symfony/security-http": "^6.3.6", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/browser-kit": "<5.4", @@ -5957,7 +6369,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.3.5" + "source": "https://github.com/symfony/security-bundle/tree/v6.3.7" }, "funding": [ { @@ -5973,20 +6385,20 @@ "type": "tidelift" } ], - "time": "2023-09-25T17:05:55+00:00" + "time": "2023-10-26T18:15:14+00:00" }, { "name": "symfony/security-core", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "ec8f24dc1195f46483510892271d01a5202bba70" + "reference": "7ceb30fed93f5ea40ccde3173d1f7712527c0d62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/ec8f24dc1195f46483510892271d01a5202bba70", - "reference": "ec8f24dc1195f46483510892271d01a5202bba70", + "url": "https://api.github.com/repos/symfony/security-core/zipball/7ceb30fed93f5ea40ccde3173d1f7712527c0d62", + "reference": "7ceb30fed93f5ea40ccde3173d1f7712527c0d62", "shasum": "" }, "require": { @@ -6042,7 +6454,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.3.5" + "source": "https://github.com/symfony/security-core/tree/v6.3.7" }, "funding": [ { @@ -6058,7 +6470,7 @@ "type": "tidelift" } ], - "time": "2023-09-10T17:47:23+00:00" + "time": "2023-10-28T23:11:45+00:00" }, { "name": "symfony/security-csrf", @@ -6130,16 +6542,16 @@ }, { "name": "symfony/security-http", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "47058ea557a4c64ba86e9249651222842bd52e2a" + "reference": "573ef96ab62d509ac953362fa61f9d1bd283f3a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/47058ea557a4c64ba86e9249651222842bd52e2a", - "reference": "47058ea557a4c64ba86e9249651222842bd52e2a", + "url": "https://api.github.com/repos/symfony/security-http/zipball/573ef96ab62d509ac953362fa61f9d1bd283f3a7", + "reference": "573ef96ab62d509ac953362fa61f9d1bd283f3a7", "shasum": "" }, "require": { @@ -6149,7 +6561,8 @@ "symfony/http-kernel": "^6.3", "symfony/polyfill-mbstring": "~1.0", "symfony/property-access": "^5.4|^6.0", - "symfony/security-core": "^6.3" + "symfony/security-core": "^6.3", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/clock": "<6.3", @@ -6197,7 +6610,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.3.5" + "source": "https://github.com/symfony/security-http/tree/v6.3.6" }, "funding": [ { @@ -6213,20 +6626,20 @@ "type": "tidelift" } ], - "time": "2023-08-30T06:30:46+00:00" + "time": "2023-10-13T10:26:24+00:00" }, { "name": "symfony/serializer", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "855fc058c8bdbb69f53834f2fdb3876c9bc0ab7c" + "reference": "641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/855fc058c8bdbb69f53834f2fdb3876c9bc0ab7c", - "reference": "855fc058c8bdbb69f53834f2fdb3876c9bc0ab7c", + "url": "https://api.github.com/repos/symfony/serializer/zipball/641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9", + "reference": "641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9", "shasum": "" }, "require": { @@ -6291,7 +6704,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.3.5" + "source": "https://github.com/symfony/serializer/tree/v6.3.7" }, "funding": [ { @@ -6307,7 +6720,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T16:18:53+00:00" + "time": "2023-10-26T18:15:14+00:00" }, { "name": "symfony/service-contracts", @@ -6541,16 +6954,16 @@ }, { "name": "symfony/translation", - "version": "v6.3.3", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" + "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "url": "https://api.github.com/repos/symfony/translation/zipball/30212e7c87dcb79c83f6362b00bde0e0b1213499", + "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499", "shasum": "" }, "require": { @@ -6616,7 +7029,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.3" + "source": "https://github.com/symfony/translation/tree/v6.3.7" }, "funding": [ { @@ -6632,7 +7045,7 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-10-28T23:11:45+00:00" }, { "name": "symfony/translation-contracts", @@ -6907,16 +7320,16 @@ }, { "name": "symfony/validator", - "version": "v6.3.5", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "48e815ba3b5eb72e632588dbf7ea2dc4e608ee47" + "reference": "9cc736663fa5839b9710ac2c303bb0b951014fc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/48e815ba3b5eb72e632588dbf7ea2dc4e608ee47", - "reference": "48e815ba3b5eb72e632588dbf7ea2dc4e608ee47", + "url": "https://api.github.com/repos/symfony/validator/zipball/9cc736663fa5839b9710ac2c303bb0b951014fc1", + "reference": "9cc736663fa5839b9710ac2c303bb0b951014fc1", "shasum": "" }, "require": { @@ -6983,7 +7396,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.3.5" + "source": "https://github.com/symfony/validator/tree/v6.3.7" }, "funding": [ { @@ -6999,20 +7412,20 @@ "type": "tidelift" } ], - "time": "2023-09-29T07:41:15+00:00" + "time": "2023-10-28T23:11:45+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.5", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5" + "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3d9999376be5fea8de47752837a3e1d1c5f69ef5", - "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/999ede244507c32b8e43aebaa10e9fce20de7c97", + "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97", "shasum": "" }, "require": { @@ -7067,7 +7480,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.5" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.6" }, "funding": [ { @@ -7083,20 +7496,20 @@ "type": "tidelift" } ], - "time": "2023-09-12T10:11:35+00:00" + "time": "2023-10-12T18:45:56+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.3.4", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691" + "reference": "374d289c13cb989027274c86206ddc63b16a2441" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df1f8aac5751871b83d30bf3e2c355770f8f0691", - "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/374d289c13cb989027274c86206ddc63b16a2441", + "reference": "374d289c13cb989027274c86206ddc63b16a2441", "shasum": "" }, "require": { @@ -7141,7 +7554,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.4" + "source": "https://github.com/symfony/var-exporter/tree/v6.3.6" }, "funding": [ { @@ -7157,7 +7570,7 @@ "type": "tidelift" } ], - "time": "2023-08-16T18:14:47+00:00" + "time": "2023-10-13T09:16:49+00:00" }, { "name": "symfony/web-link", @@ -7244,16 +7657,16 @@ }, { "name": "symfony/yaml", - "version": "v6.3.3", + "version": "v6.3.7", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" + "reference": "9758b6c69d179936435d0ffb577c3708d57e38a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", + "url": "https://api.github.com/repos/symfony/yaml/zipball/9758b6c69d179936435d0ffb577c3708d57e38a8", + "reference": "9758b6c69d179936435d0ffb577c3708d57e38a8", "shasum": "" }, "require": { @@ -7296,7 +7709,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.3" + "source": "https://github.com/symfony/yaml/tree/v6.3.7" }, "funding": [ { @@ -7312,7 +7725,7 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-10-28T23:31:00+00:00" }, { "name": "twig/extra-bundle", @@ -7452,6 +7865,74 @@ ], "time": "2023-07-29T15:34:56+00:00" }, + { + "name": "twig/markdown-extra", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/markdown-extra.git", + "reference": "83dfa86a0379f784ea30bdb9c15a356b8aabf780" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/83dfa86a0379f784ea30bdb9c15a356b8aabf780", + "reference": "83dfa86a0379f784ea30bdb9c15a356b8aabf780", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "erusev/parsedown": "^1.7", + "league/commonmark": "^1.0|^2.0", + "league/html-to-markdown": "^4.8|^5.0", + "michelf/php-markdown": "^1.8|^2.0", + "symfony/phpunit-bridge": "^5.4|^6.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twig\\Extra\\Markdown\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for Markdown", + "homepage": "https://twig.symfony.com", + "keywords": [ + "html", + "markdown", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/markdown-extra/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-07-29T15:34:56+00:00" + }, { "name": "twig/string-extra", "version": "v3.7.1", @@ -9738,16 +10219,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v6.3.2", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d" + "reference": "c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e020e1efbd1b42cb670fcd7d19a25abbddba035d", - "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d", + "reference": "c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d", "shasum": "" }, "require": { @@ -9799,7 +10280,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.2" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.6" }, "funding": [ { @@ -9815,20 +10296,20 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2023-10-12T15:02:41+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.3.2", + "version": "v6.3.6", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "6101b5ab7857c373d237e121f9060c68b32e1373" + "reference": "249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6101b5ab7857c373d237e121f9060c68b32e1373", - "reference": "6101b5ab7857c373d237e121f9060c68b32e1373", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd", + "reference": "249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd", "shasum": "" }, "require": { @@ -9880,7 +10361,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.3.2" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.3.6" }, "funding": [ { @@ -9896,7 +10377,7 @@ "type": "tidelift" } ], - "time": "2023-07-19T20:17:28+00:00" + "time": "2023-10-11T18:18:20+00:00" }, { "name": "theseer/tokenizer", From 35babed517bde61c09a24b48b6508744fe50e3f5 Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 4 Nov 2023 03:30:32 +0200 Subject: [PATCH 14/59] add missed locale --- config/packages/translation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml index 525e63b..210ba05 100644 --- a/config/packages/translation.yaml +++ b/config/packages/translation.yaml @@ -8,7 +8,7 @@ framework: crowdin: dsn: '%env(CROWDIN_DSN)%' domains: ['messages'] - locales: ['en','cs','nl','eo','fr','ka','de','he','it','lv','pl','pt','ru','es','uk'] + locales: ['en','cs','nl','eo','fr', 'ja', 'ka','de','he','it','lv','pl','pt','ru','es','uk'] # loco: # dsn: '%env(LOCO_DSN)%' # lokalise: From 701b448cd6757c5d470ec6a99e4355ea591afe32 Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 4 Nov 2023 06:26:01 +0200 Subject: [PATCH 15/59] init torrent categories feature #26 --- .env | 3 + config/services.yaml | 1 + migrations/Version20231103235504.php | 37 ++ src/Controller/TorrentController.php | 463 ++++++++++++++++-- src/Controller/UserController.php | 77 ++- src/Entity/Torrent.php | 15 + src/Entity/TorrentCategories.php | 103 ++++ src/Entity/User.php | 15 + .../TorrentCategoriesRepository.php | 23 + src/Repository/TorrentRepository.php | 41 +- src/Service/TorrentService.php | 175 ++++++- .../default/torrent/edit/categories.html.twig | 109 +++++ .../default/torrent/edit/locales.html.twig | 2 +- templates/default/torrent/info.html.twig | 20 +- templates/default/torrent/submit.html.twig | 37 +- templates/default/user/info.html.twig | 10 +- templates/default/user/settings.html.twig | 27 +- translations/messages+intl-icu.en.xlf | 32 ++ 18 files changed, 1113 insertions(+), 77 deletions(-) create mode 100644 migrations/Version20231103235504.php create mode 100644 src/Entity/TorrentCategories.php create mode 100644 src/Repository/TorrentCategoriesRepository.php create mode 100644 templates/default/torrent/edit/categories.html.twig diff --git a/.env b/.env index b7750ba..52307ec 100644 --- a/.env +++ b/.env @@ -59,6 +59,9 @@ APP_LOCALE=en # Supported locales for interface and content filters APP_LOCALES=en|cs|nl|eo|fr|ja|ka|de|he|it|lv|pl|pt|ru|es|uk +# Content categories, lowercase, enabled by default for new users +APP_CATEGORIES=movie|series|tv|animation|music|game|audiobook|podcast|book|archive|picture|software|other + # Items per page on pagination APP_PAGINATION=10 diff --git a/config/services.yaml b/config/services.yaml index 110b2a6..b515a42 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -11,6 +11,7 @@ parameters: app.trackers: '%env(APP_TRACKERS)%' app.crawlers: '%env(APP_CRAWLERS)%' app.locales: '%env(APP_LOCALES)%' + app.categories: '%env(APP_CATEGORIES)%' app.themes: '%env(APP_THEMES)%' app.locale: '%env(APP_LOCALE)%' app.theme: '%env(APP_THEME)%' diff --git a/migrations/Version20231103235504.php b/migrations/Version20231103235504.php new file mode 100644 index 0000000..1ec3213 --- /dev/null +++ b/migrations/Version20231103235504.php @@ -0,0 +1,37 @@ +addSql('CREATE TABLE torrent_categories (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, torrent_id INTEGER NOT NULL, user_id INTEGER NOT NULL, added INTEGER NOT NULL, value CLOB NOT NULL --(DC2Type:simple_array) + , approved BOOLEAN NOT NULL)'); + $this->addSql('ALTER TABLE user ADD COLUMN categories CLOB DEFAULT "other"'); + $this->addSql('ALTER TABLE torrent ADD COLUMN categories CLOB DEFAULT "other"'); + $this->addSql('UPDATE user SET categories = "movie,series,tv,animation,music,game,audiobook,podcast,book,archive,picture,software,other"'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('DROP TABLE torrent_categories'); + $this->addSql('ALTER TABLE user DROP COLUMN categories'); + $this->addSql('ALTER TABLE torrent DROP COLUMN categories'); + } +} diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 9b22608..0179ebd 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -150,12 +150,13 @@ class TorrentController extends AbstractController 'peers' => (int) $torrent->getPeers(), 'leechers' => (int) $torrent->getLeechers(), ], - 'keywords' => $torrent->getKeywords(), - 'locales' => $torrent->getLocales(), - 'sensitive' => $torrent->isSensitive(), - 'approved' => $torrent->isApproved(), - 'status' => $torrent->isStatus(), - 'download' => + 'keywords' => $torrent->getKeywords(), + 'locales' => $torrent->getLocales(), + 'categories' => $torrent->getCategories(), + 'sensitive' => $torrent->isSensitive(), + 'approved' => $torrent->isApproved(), + 'status' => $torrent->isStatus(), + 'download' => [ 'file' => [ @@ -262,7 +263,8 @@ class TorrentController extends AbstractController $user->getId(), $query, $user->getLocales(), - !$user->isModerator() && $user->isSensitive() ? false : null, + $user->getCategories(), + $user->isSensitive() ? false : null, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ); @@ -272,7 +274,8 @@ class TorrentController extends AbstractController $user->getId(), $query, $user->getLocales(), - !$user->isModerator() && $user->isSensitive() ? false : null, + $user->getCategories(), + $user->isSensitive() ? false : null, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, $this->getParameter('app.pagination'), @@ -448,7 +451,8 @@ class TorrentController extends AbstractController $user->getId(), [], $user->getLocales(), - !$user->isModerator() && $user->isSensitive() ? false : null, + $user->getCategories(), + $user->isSensitive() ? false : null, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ); @@ -459,7 +463,8 @@ class TorrentController extends AbstractController $user->getId(), [], $user->getLocales(), - !$user->isModerator() && $user->isSensitive() ? false : null, + $user->getCategories(), + $user->isSensitive() ? false : null, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, $this->getParameter('app.pagination'), @@ -625,7 +630,8 @@ class TorrentController extends AbstractController $user->getId(), $query, $user->getLocales(), - !$user->isModerator() && $user->isSensitive() ? false : null, + $user->getCategories(), + $user->isSensitive() ? false : null, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ); @@ -636,7 +642,8 @@ class TorrentController extends AbstractController $user->getId(), $query, $user->getLocales(), - !$user->isModerator() && $user->isSensitive() ? false : null, + $user->getCategories(), + $user->isSensitive() ? false : null, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, $this->getParameter('app.pagination'), @@ -700,13 +707,14 @@ class TorrentController extends AbstractController ); // Init request - $query = $request->get('query') ? explode(' ', urldecode($request->get('query'))) : []; - $page = $request->get('page') ? (int) $request->get('page') : 1; + $query = $request->get('query') ? explode(' ', urldecode($request->get('query'))) : []; + $page = $request->get('page') ? (int) $request->get('page') : 1; - $locales = $request->get('locales') ? explode('|', $request->get('locales')) : explode('|', $this->getParameter('app.locales')); - $sensitive = $request->get('sensitive') ? (bool) $request->get('sensitive') : null; + $locales = $request->get('locales') ? explode('|', $request->get('locales')) : explode('|', $this->getParameter('app.locales')); + $categories = $request->get('categories') ? explode('|', $request->get('categories')) : explode('|', $this->getParameter('app.categories')); + $sensitive = $request->get('sensitive') ? (bool) $request->get('sensitive') : null; - $yggdrasil = $request->get('yggdrasil') ? (bool) $request->get('yggdrasil') : false; + $yggdrasil = $request->get('yggdrasil') ? (bool) $request->get('yggdrasil') : false; // Init trackers $trackers = explode('|', $this->getParameter('app.trackers')); @@ -716,7 +724,8 @@ class TorrentController extends AbstractController $user->getId(), $query, $locales, - !$user->isModerator() ? $sensitive : null, + $categories, + $sensitive, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ); @@ -727,7 +736,8 @@ class TorrentController extends AbstractController $user->getId(), $query, $locales, - !$user->isModerator() ? $sensitive : null, + $categories, + $sensitive, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, $this->getParameter('app.pagination'), @@ -873,6 +883,14 @@ class TorrentController extends AbstractController 'value' => $request->get('locales') ? $request->get('locales') : [$request->get('_locale')], ] ], + 'categories' => + [ + 'error' => [], + 'attribute' => + [ + 'value' => $request->get('categories') ? $request->get('categories') : [], + ] + ], 'torrent' => [ 'error' => [], @@ -909,6 +927,25 @@ class TorrentController extends AbstractController $form['locales']['error'][] = $translator->trans('At least one locale required'); } + /// Categories + $categories = []; + if ($request->get('categories')) + { + foreach ((array) $request->get('categories') as $locale) + { + if (in_array($locale, explode('|', $this->getParameter('app.categories')))) + { + $categories[] = $locale; + } + } + } + + //// At least one valid locale required + if (!$categories) + { + $form['categories']['error'][] = $translator->trans('At least one category required'); + } + /// Torrent if ($file = $request->files->get('torrent')) { @@ -937,7 +974,7 @@ class TorrentController extends AbstractController } // Request is valid - if (empty($form['torrent']['error']) && empty($form['locales']['error'])) + if (empty($form['torrent']['error']) && empty($form['locales']['error']) && empty($form['categories']['error'])) { // Save data $torrent = $torrentService->add( @@ -956,6 +993,7 @@ class TorrentController extends AbstractController $user->getId(), time(), (array) $locales, + (array) $categories, (bool) $request->get('sensitive'), $user->isApproved(), $user->isStatus() @@ -983,8 +1021,9 @@ class TorrentController extends AbstractController return $this->render( 'default/torrent/submit.html.twig', [ - 'locales' => explode('|', $this->getParameter('app.locales')), - 'form' => $form, + 'locales' => explode('|', $this->getParameter('app.locales')), + 'categories' => explode('|', $this->getParameter('app.categories')), + 'form' => $form, ] ); } @@ -1504,6 +1543,369 @@ class TorrentController extends AbstractController ); } + // Torrent categories + #[Route( + '/{_locale}/torrent/{torrentId}/edit/categories/{torrentCategoriesId}', + name: 'torrent_categories_edit', + requirements: + [ + '_locale' => '%app.locales%', + 'torrentId' => '\d+', + 'torrentCategoriesId' => '\d+', + ], + defaults: + [ + 'torrentCategoriesId' => null, + ], + methods: + [ + 'GET', + 'POST' + ] + )] + public function editCategories( + Request $request, + TranslatorInterface $translator, + UserService $userService, + TorrentService $torrentService, + ActivityService $activityService + ): Response + { + // Init user + $user = $this->initUser( + $request, + $userService, + $activityService + ); + + if (!$user->isStatus()) + { + // @TODO + throw new \Exception( + $translator->trans('Access denied') + ); + } + + // Init torrent + if (!$torrent = $torrentService->getTorrent($request->get('torrentId'))) + { + throw $this->createNotFoundException(); + } + + // Init torrent categories + $torrentCategoriesCurrent = [ + 'userId' => null, + 'value' => [] + ]; + + // Get from edition version requested + if ($request->get('torrentCategoriesId')) + { + if ($torrentCategories = $torrentService->getTorrentCategories($request->get('torrentCategoriesId'))) + { + $torrentCategoriesCurrent['userId'] = $torrentCategories->getUserId(); + + foreach ($torrentCategories->getValue() as $value) + { + $torrentCategoriesCurrent['value'][] = $value; + } + } + + else + { + throw $this->createNotFoundException(); + } + } + + // Otherwise, get latest available + else + { + if ($torrentCategories = $torrentService->findLastTorrentCategoriesByTorrentId($torrent->getId())) + { + $torrentCategoriesCurrent['userId'] = $torrentCategories->getUserId(); + + foreach ($torrentCategories->getValue() as $value) + { + $torrentCategoriesCurrent['value'][] = $value; + } + + // Update active categories + $request->attributes->set('torrentCategoriesId', $torrentCategories->getId()); + } + } + + // Init edition history + $editions = []; + foreach ($torrentService->findTorrentCategoriesByTorrentId($torrent->getId()) as $torrentCategoriesEdition) + { + $editions[] = + [ + 'id' => $torrentCategoriesEdition->getId(), + 'added' => $torrentCategoriesEdition->getAdded(), + 'approved' => $torrentCategoriesEdition->isApproved(), + 'active' => $torrentCategoriesEdition->getId() == $request->get('torrentCategoriesId'), + 'user' => + [ + 'id' => $torrentCategoriesEdition->getUserId(), + 'identicon' => $userService->identicon( + $userService->getUser( + $torrentCategoriesEdition->getUserId() + )->getAddress() + ), + ] + ]; + } + + // Init form + $form = + [ + 'categories' => + [ + 'error' => [], + 'attribute' => + [ + 'value' => $request->get('categories') ? $request->get('categories') : $torrentCategoriesCurrent['value'], + ] + ] + ]; + + // Process request + if ($request->isMethod('post')) + { + /// Categories + $categories = []; + if ($request->get('categories')) + { + foreach ((array) $request->get('categories') as $category) + { + if (in_array($category, explode('|', $this->getParameter('app.categories')))) + { + $categories[] = $category; + } + } + } + + //// At least one valid category required + if (!$categories) + { + $form['categories']['error'][] = $translator->trans('At least one category required'); + } + + // Request is valid + if (empty($form['categories']['error'])) + { + // Save data + $torrentCategories = $torrentService->addTorrentCategories( + $torrent->getId(), + $user->getId(), + time(), + $categories, + $user->isApproved() + ); + + // Register activity event + /* @TODO + $activityService->addEventTorrentCategoriesAdd( + $user->getId(), + $torrent->getId(), + time(), + $torrentCategories->getId() + ); + */ + + // Redirect to info page + return $this->redirectToRoute( + 'torrent_info', + [ + '_locale' => $request->get('_locale'), + 'torrentId' => $torrent->getId() + ] + ); + } + } + + // Render form template + return $this->render( + 'default/torrent/edit/categories.html.twig', + [ + 'torrentId' => $torrent->getId(), + 'categories' => explode('|', $this->getParameter('app.categories')), + 'editions' => $editions, + 'form' => $form, + 'session' => + [ + 'moderator' => $user->isModerator(), + 'owner' => $torrentCategoriesCurrent['userId'] === $user->getId(), + ] + ] + ); + } + + #[Route( + '/{_locale}/torrent/{torrentId}/approve/categories/{torrentCategoriesId}', + name: 'torrent_categories_approve', + requirements: + [ + '_locale' => '%app.locales%', + 'torrentId' => '\d+', + 'torrentCategoriesId' => '\d+', + ], + methods: + [ + 'GET' + ] + )] + public function approveCategories( + Request $request, + TranslatorInterface $translator, + UserService $userService, + TorrentService $torrentService, + ActivityService $activityService + ): Response + { + // Init user + $user = $this->initUser( + $request, + $userService, + $activityService + ); + + // Init torrent + if (!$torrent = $torrentService->getTorrent($request->get('torrentId'))) + { + throw $this->createNotFoundException(); + } + + // Init torrent categories + if (!$torrentCategories = $torrentService->getTorrentCategories($request->get('torrentCategoriesId'))) + { + throw $this->createNotFoundException(); + } + + // Check permissions + if (!$user->isModerator()) + { + // @TODO + throw new \Exception( + $translator->trans('Access denied') + ); + } + + // Register activity event + /* @TODO + if (!$torrentCategories->isApproved()) + { + $activityService->addEventTorrentCategoriesApproveAdd( + $user->getId(), + $torrent->getId(), + time(), + $torrentCategories->getId() + ); + } + + else + { + $activityService->addEventTorrentCategoriesApproveDelete( + $user->getId(), + $torrent->getId(), + time(), + $torrentCategories->getId() + ); + } + */ + + // Update approved + $torrentService->toggleTorrentCategoriesApproved( + $torrentCategories->getId() + ); + + // Redirect back to form + return $this->redirectToRoute( + 'torrent_categories_edit', + [ + '_locale' => $request->get('_locale'), + 'torrentId' => $torrent->getId(), + 'torrentCategoriesId' => $torrentCategories->getId(), + ] + ); + } + + #[Route( + '/{_locale}/torrent/{torrentId}/delete/categories/{torrentCategoriesId}', + name: 'torrent_categories_delete', + requirements: + [ + '_locale' => '%app.locales%', + 'torrentId' => '\d+', + 'torrentCategoriesId' => '\d+', + ], + methods: + [ + 'GET' + ] + )] + public function deleteCategories( + Request $request, + TranslatorInterface $translator, + UserService $userService, + TorrentService $torrentService, + ActivityService $activityService + ): Response + { + // Init user + $user = $this->initUser( + $request, + $userService, + $activityService + ); + + // Init torrent + if (!$torrent = $torrentService->getTorrent($request->get('torrentId'))) + { + throw $this->createNotFoundException(); + } + + // Init torrent categories + if (!$torrentCategories = $torrentService->getTorrentCategories($request->get('torrentCategoriesId'))) + { + throw $this->createNotFoundException(); + } + + // Check permissions + if (!($user->isModerator() || $user->getId() === $torrentCategories->getUserId())) + { + // @TODO + throw new \Exception( + $translator->trans('Access denied') + ); + } + + // Add activity event + /* @TODO + $activityService->addEventTorrentCategoriesDelete( + $user->getId(), + $torrent->getId(), + time(), + $torrentCategories->getId() + ); + */ + + // Update approved + $torrentService->deleteTorrentCategories( + $torrentCategories->getId() + ); + + // Redirect back to form + return $this->redirectToRoute( + 'torrent_categories_edit', + [ + '_locale' => $request->get('_locale'), + 'torrentId' => $torrent->getId(), + 'torrentCategoriesId' => $torrentCategories->getId(), + ] + ); + } + // Torrent sensitive #[Route( '/{_locale}/torrent/{torrentId}/edit/sensitive/{torrentSensitiveId}', @@ -2926,14 +3328,15 @@ class TorrentController extends AbstractController 'locale' => $locale, 'locales' => $locales, 'torrents' => $torrentService->findTorrents( - 0, // no user session init, pass 0 - [], // without keywords filter - $locales, // all system locales - null, // all sensitive levels - true, // approved only - true, // enabled only - 1000, // @TODO limit - 0 // offset + 0, // no user session init, pass 0 + [], // without keywords filter + $locales, // all system locales + $categories, // all system locales + null, // all sensitive levels + true, // approved only + true, // enabled only + 1000, // @TODO limit + 0 // offset ) ], $response diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index a408a11..ae31028 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -85,6 +85,23 @@ class UserController extends AbstractController ); } + // Update categories + if ($request->get('categories')) + { + $categories = []; + foreach ((array) $request->get('categories') as $category) + { + if (in_array($category, explode('|', $this->getParameter('app.categories')))) + { + $categories[] = $category; + } + } + + $user->setCategories( + $categories + ); + } + // Update theme if (in_array($request->get('theme'), explode('|', $this->getParameter('app.themes')))) { @@ -139,19 +156,21 @@ class UserController extends AbstractController 'default/user/settings.html.twig', [ 'user' => [ - 'id' => $user->getId(), - 'sensitive' => $user->isSensitive(), - 'yggdrasil' => $user->isYggdrasil(), - 'posters' => $user->isPosters(), - 'locale' => $user->getLocale(), - 'locales' => $user->getLocales(), - 'events' => $user->getEvents(), - 'theme' => $user->getTheme(), - 'added' => $user->getAdded() + 'id' => $user->getId(), + 'sensitive' => $user->isSensitive(), + 'yggdrasil' => $user->isYggdrasil(), + 'posters' => $user->isPosters(), + 'locale' => $user->getLocale(), + 'locales' => $user->getLocales(), + 'categories' => $user->getCategories(), + 'events' => $user->getEvents(), + 'theme' => $user->getTheme(), + 'added' => $user->getAdded() ], - 'locales' => explode('|', $this->getParameter('app.locales')), - 'themes' => explode('|', $this->getParameter('app.themes')), - 'events' => $activityService->getEventsTree() + 'locales' => explode('|', $this->getParameter('app.locales')), + 'categories' => explode('|', $this->getParameter('app.categories')), + 'themes' => explode('|', $this->getParameter('app.themes')), + 'events' => $activityService->getEventsTree() ] ); } @@ -217,20 +236,21 @@ class UserController extends AbstractController 'moderator' => $user->isModerator() ], 'user' => [ - 'id' => $userTarget->getId(), - 'address' => $userTarget->getAddress(), - 'moderator' => $userTarget->isModerator(), - 'approved' => $userTarget->isApproved(), - 'status' => $userTarget->isStatus(), - 'posters' => $userTarget->isPosters(), - 'sensitive' => $userTarget->isSensitive(), - 'yggdrasil' => $userTarget->isYggdrasil(), - 'locale' => $userTarget->getLocale(), - 'locales' => $userTarget->getLocales(), - 'events' => $userTarget->getEvents(), - 'theme' => $userTarget->getTheme(), - 'added' => $userTarget->getAdded(), - 'identicon' => $userService->identicon( + 'id' => $userTarget->getId(), + 'address' => $userTarget->getAddress(), + 'moderator' => $userTarget->isModerator(), + 'approved' => $userTarget->isApproved(), + 'status' => $userTarget->isStatus(), + 'posters' => $userTarget->isPosters(), + 'sensitive' => $userTarget->isSensitive(), + 'yggdrasil' => $userTarget->isYggdrasil(), + 'locale' => $userTarget->getLocale(), + 'locales' => $userTarget->getLocales(), + 'categories' => $user->getCategories(), + 'events' => $userTarget->getEvents(), + 'theme' => $userTarget->getTheme(), + 'added' => $userTarget->getAdded(), + 'identicon' => $userService->identicon( $userTarget->getAddress(), 48 ), @@ -545,6 +565,11 @@ class UserController extends AbstractController true ); + $torrentService->setTorrentCategoriesApprovedByUserId( + $userTarget->getId(), + true + ); + $torrentService->setTorrentSensitivesApprovedByUserId( $userTarget->getId(), true diff --git a/src/Entity/Torrent.php b/src/Entity/Torrent.php index e29c448..515a62e 100644 --- a/src/Entity/Torrent.php +++ b/src/Entity/Torrent.php @@ -54,6 +54,9 @@ class Torrent #[ORM\Column(nullable: true)] private ?int $torrentPosterId = null; + #[ORM\Column(type: Types::SIMPLE_ARRAY)] + private ?array $categories = null; + public function getId(): ?int { return $this->id; @@ -221,4 +224,16 @@ class Torrent return $this; } + + public function getCategories(): ?array + { + return $this->categories; + } + + public function setCategories(?array $categories): static + { + $this->categories = $categories; + + return $this; + } } diff --git a/src/Entity/TorrentCategories.php b/src/Entity/TorrentCategories.php new file mode 100644 index 0000000..9d73809 --- /dev/null +++ b/src/Entity/TorrentCategories.php @@ -0,0 +1,103 @@ +id; + } + + public function setId(string $id): static + { + $this->id = $id; + + return $this; + } + + public function getTorrentId(): ?int + { + return $this->torrentId; + } + + public function setTorrentId(int $torrentId): static + { + $this->torrentId = $torrentId; + + return $this; + } + + public function getUserId(): ?int + { + return $this->userId; + } + + public function setUserId(int $userId): static + { + $this->userId = $userId; + + return $this; + } + + public function getAdded(): ?int + { + return $this->added; + } + + public function setAdded(int $added): static + { + $this->added = $added; + + return $this; + } + + public function getValue(): array + { + return $this->value; + } + + public function setValue(array $value): static + { + $this->value = $value; + + return $this; + } + + public function isApproved(): ?bool + { + return $this->approved; + } + + public function setApproved(bool $approved): static + { + $this->approved = $approved; + + return $this; + } +} diff --git a/src/Entity/User.php b/src/Entity/User.php index 9f346a7..330a97a 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -50,6 +50,9 @@ class User #[ORM\Column] private ?bool $posters = null; + #[ORM\Column(type: Types::SIMPLE_ARRAY)] + private ?array $categories = null; + public function getId(): ?int { return $this->id; @@ -205,4 +208,16 @@ class User return $this; } + + public function getCategories(): ?array + { + return $this->categories; + } + + public function setCategories(?array $categories): static + { + $this->categories = $categories; + + return $this; + } } diff --git a/src/Repository/TorrentCategoriesRepository.php b/src/Repository/TorrentCategoriesRepository.php new file mode 100644 index 0000000..030f69c --- /dev/null +++ b/src/Repository/TorrentCategoriesRepository.php @@ -0,0 +1,23 @@ + + * + * @method TorrentCategories|null find($id, $lockMode = null, $lockVersion = null) + * @method TorrentCategories|null findOneBy(array $criteria, array $orderBy = null) + * @method TorrentCategories[] findAll() + * @method TorrentCategories[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class TorrentCategoriesRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, TorrentCategories::class); + } +} diff --git a/src/Repository/TorrentRepository.php b/src/Repository/TorrentRepository.php index 1ccd425..536a72f 100644 --- a/src/Repository/TorrentRepository.php +++ b/src/Repository/TorrentRepository.php @@ -24,7 +24,8 @@ class TorrentRepository extends ServiceEntityRepository public function findTorrentsTotal( int $userId, array $keywords, - array $locales, + ?array $locales, + ?array $categories, ?bool $sensitive = null, ?bool $approved = null, ?bool $status = null, @@ -36,6 +37,7 @@ class TorrentRepository extends ServiceEntityRepository $userId, $keywords, $locales, + $categories, $sensitive, $approved, $status, @@ -47,7 +49,8 @@ class TorrentRepository extends ServiceEntityRepository public function findTorrents( int $userId, array $keywords, - array $locales, + ?array $locales, + ?array $categories, ?bool $sensitive = null, ?bool $approved = null, ?bool $status = null, @@ -59,6 +62,7 @@ class TorrentRepository extends ServiceEntityRepository $userId, $keywords, $locales, + $categories, $sensitive, $approved, $status, @@ -70,17 +74,18 @@ class TorrentRepository extends ServiceEntityRepository } private function getTorrentsQueryByFilter( - int $userId, - array $keywords, - array $locales, - ?bool $sensitive = null, - ?bool $approved = null, - ?bool $status = null + int $userId, + ?array $keywords, + ?array $locales, + ?array $categories, + ?bool $sensitive = null, + ?bool $approved = null, + ?bool $status = null ): \Doctrine\ORM\QueryBuilder { $query = $this->createQueryBuilder('t'); - if ($keywords) + if (is_array($keywords)) { foreach ($keywords as $i => $keyword) { @@ -105,7 +110,7 @@ class TorrentRepository extends ServiceEntityRepository } } - if ($locales) + if (is_array($locales)) { $orLocales = $query->expr()->orX(); @@ -121,6 +126,22 @@ class TorrentRepository extends ServiceEntityRepository $query->andWhere($orLocales); } + if (is_array($categories)) + { + $orCategories = $query->expr()->orX(); + + foreach ($categories as $i => $category) + { + $orCategories->add("t.categories LIKE :category{$i}"); + $orCategories->add("t.userId = :userId"); + + $query->setParameter(":category{$i}", "%{$category}%"); + $query->setParameter('userId', $userId); + } + + $query->andWhere($orCategories); + } + if (is_bool($sensitive)) { $orSensitive = $query->expr()->orX(); diff --git a/src/Service/TorrentService.php b/src/Service/TorrentService.php index 0a5b3bf..abb902e 100644 --- a/src/Service/TorrentService.php +++ b/src/Service/TorrentService.php @@ -4,6 +4,7 @@ namespace App\Service; use App\Entity\Torrent; use App\Entity\TorrentLocales; +use App\Entity\TorrentCategories; use App\Entity\TorrentSensitive; use App\Entity\TorrentPoster; use App\Entity\TorrentStar; @@ -12,6 +13,7 @@ use App\Entity\TorrentDownloadMagnet; use App\Repository\TorrentRepository; use App\Repository\TorrentLocalesRepository; +use App\Repository\TorrentCategoriesRepository; use App\Repository\TorrentSensitiveRepository; use App\Repository\TorrentPosterRepository; use App\Repository\TorrentStarRepository; @@ -381,6 +383,7 @@ class TorrentService int $userId, int $added, array $locales, + array $categories, bool $sensitive, bool $approved, bool $status @@ -403,6 +406,7 @@ class TorrentService $wordLengthMax ), $locales, + $categories, $sensitive, $approved, $status @@ -424,6 +428,14 @@ class TorrentService $approved ); + $this->addTorrentCategories( + $torrent->getId(), + $userId, + $added, + $categories, + $approved + ); + $this->addTorrentSensitive( $torrent->getId(), $userId, @@ -449,6 +461,7 @@ class TorrentService string $md5file, array $keywords, array $locales, + array $categories, bool $sensitive, bool $approved, bool $status @@ -461,6 +474,7 @@ class TorrentService $torrent->setMd5File($md5file); $torrent->setKeywords($keywords); $torrent->setLocales($locales); + $torrent->setCategories($categories); $torrent->setSensitive($sensitive); $torrent->setApproved($approved); $torrent->setStatus($status); @@ -534,7 +548,8 @@ class TorrentService public function findTorrents( int $userId, array $keywords, - array $locales, + ?array $locales, + ?array $categories, ?bool $sensitive, ?bool $approved, ?bool $status, @@ -548,6 +563,7 @@ class TorrentService $userId, $keywords, $locales, + $categories, $sensitive, $approved, $status, @@ -559,7 +575,8 @@ class TorrentService public function findTorrentsTotal( int $userId, array $keywords, - array $locales, + ?array $locales, + ?array $categories, ?bool $sensitive, ?bool $approved, ?bool $status @@ -571,6 +588,7 @@ class TorrentService $userId, $keywords, $locales, + $categories, $sensitive, $approved, $status @@ -642,6 +660,32 @@ class TorrentService } } + public function updateTorrentCategories( + int $torrentId + ): void + { + if ($torrent = $this->getTorrent($torrentId)) + { + if ($torrentCategories = $this->entityManagerInterface + ->getRepository(TorrentCategories::class) + ->findOneBy( + [ + 'torrentId' => $torrentId, + 'approved' => true, + ], + [ + 'id' => 'DESC' + ] + )) + { + $torrent->setCategories($torrentCategories->getValue()); + + $this->entityManagerInterface->persist($torrent); + $this->entityManagerInterface->flush(); + } + } + } + public function updateTorrentScraped( int $torrentId, int $time @@ -886,6 +930,133 @@ class TorrentService } } + // Torrent category + public function getTorrentCategories( + int $torrentCategoryId + ): ?TorrentCategories + { + return $this->entityManagerInterface + ->getRepository(TorrentCategories::class) + ->find($torrentCategoryId); + } + + public function findLastTorrentCategoriesByTorrentId( + int $torrentId + ): ?TorrentCategories + { + return $this->entityManagerInterface + ->getRepository(TorrentCategories::class) + ->findOneBy( + [ + 'torrentId' => $torrentId + ], + [ + 'id' => 'DESC' + ] + ); + } + + public function findTorrentCategoriesByTorrentId(int $torrentId): array + { + return $this->entityManagerInterface + ->getRepository(TorrentCategories::class) + ->findBy( + [ + 'torrentId' => $torrentId, + ], + [ + 'id' => 'DESC' + ] + ); + } + + public function toggleTorrentCategoriesApproved( + int $torrentCategoriesId + ): ?TorrentCategories + { + $torrentCategories = $this->getTorrentCategories($torrentCategoriesId); + + $torrentCategories->setApproved( + !$torrentCategories->isApproved() // toggle current value + ); + + $this->entityManagerInterface->persist($torrentCategories); + $this->entityManagerInterface->flush(); + + $this->updateTorrentCategories( + $torrentCategories->getTorrentId() + ); + + return $torrentCategories; + } + + public function deleteTorrentCategories( + int $torrentCategoriesId + ): ?TorrentCategories + { + $torrentCategories = $this->getTorrentCategories($torrentCategoriesId); + + $this->entityManagerInterface->remove($torrentCategories); + $this->entityManagerInterface->flush(); + + $this->updateTorrentCategories( + $torrentCategories->getTorrentId() + ); + + return $torrentCategories; + } + + public function addTorrentCategories( + int $torrentId, + int $userId, + int $added, + array $value, + bool $approved + ): ?TorrentCategories + { + $torrentCategories = new TorrentCategories(); + + $torrentCategories->setTorrentId($torrentId); + $torrentCategories->setUserId($userId); + $torrentCategories->setAdded($added); + $torrentCategories->setValue($value); + $torrentCategories->setApproved($approved); + + $this->entityManagerInterface->persist($torrentCategories); + $this->entityManagerInterface->flush(); + + $this->updateTorrentCategories( + $torrentId + ); + + return $torrentCategories; + } + + public function setTorrentCategoriesApprovedByUserId( + int $userId, + bool $value + ): void + { + foreach ($this->entityManagerInterface + ->getRepository(TorrentCategories::class) + ->findBy( + [ + 'userId' => $userId + ]) as $torrentCategories) + { + $torrentCategories->setApproved( + $value + ); + + $this->entityManagerInterface->persist($torrentCategories); + $this->entityManagerInterface->flush(); + + $this->updateTorrentCategories( + $torrentCategories->getTorrentId(), + ); + } + } + // Torrent sensitive public function getTorrentSensitive( int $torrentSensitiveId diff --git a/templates/default/torrent/edit/categories.html.twig b/templates/default/torrent/edit/categories.html.twig new file mode 100644 index 0000000..c094952 --- /dev/null +++ b/templates/default/torrent/edit/categories.html.twig @@ -0,0 +1,109 @@ +{% extends 'default/layout.html.twig' %} +{% block title %}{{'Edit categories'|trans }} - {{'Torrent'|trans }} #{{ torrentId }} - {{ name }}{% endblock %} +{% block main_content %} +
+
+

+ {{'Edit categories for torrent' | trans }} + #{{ torrentId }} +

+
+
+
+ + + + + + + {% for error in form.categories.error %} +
+ {{ error }} +
+ {% endfor %} +
+ {% for category in categories | sort %} +
+ {% if category in form.categories.attribute.value %} + + {% else %} + + {% endif %} + +
+ {% endfor %} + {# + + #} +
+
+
+ +
+
+ {% for edition in editions %} +
+ {% if edition.active %} + {{ edition.added | format_ago }} + {% else %} + + {{ edition.added | format_ago }} + + {% endif %} + {{ 'by'|trans }} + + {{'identicon'|trans }} + +
+ {% if session.moderator or session.owner %} + + + + + + + {% endif %} + {% if edition.approved %} + {% if session.moderator %} + + + + + + {% else %} + + + + + + {% endif %} + {% else %} + {% if session.moderator %} + + + + + + {% else %} + + + + + + {% endif %} + {% endif %} +
+
+ {% endfor %} +{% endblock %} diff --git a/templates/default/torrent/edit/locales.html.twig b/templates/default/torrent/edit/locales.html.twig index 1245721..dcab8db 100644 --- a/templates/default/torrent/edit/locales.html.twig +++ b/templates/default/torrent/edit/locales.html.twig @@ -24,7 +24,7 @@ {% endfor %}
- {% for locale in locales %} + {% for locale in locales | sort %}
{% if locale in form.locales.attribute.value %} diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index 5aebc08..9560e68 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -339,12 +339,28 @@ - {{ 'Locales' | trans }} + {{ 'Locale' | trans }}
{% if torrent.locales %}
- {% for i, locale in torrent.locales %}{% if i > 0 %},{% endif %} {{ locale|locale_name(locale)|u.title }}{% endfor %} + {% for i, locale in torrent.locales | sort %}{% if i > 0 %},{% endif %} {{ locale | locale_name(locale) | u.title }}{% endfor %} +
+ {% endif %} +
+
+
+ + + + + + {{ 'Category' | trans }} +
+
+ {% if torrent.categories %} +
+ {% for i, category in torrent.categories | sort %}{% if i > 0 %},{% endif %} {{ category | u.title }}{% endfor %}
{% endif %}
diff --git a/templates/default/torrent/submit.html.twig b/templates/default/torrent/submit.html.twig index 27f6a14..4d3283b 100644 --- a/templates/default/torrent/submit.html.twig +++ b/templates/default/torrent/submit.html.twig @@ -31,7 +31,7 @@
{% endfor %}
- {% for locale in locales %} + {% for locale in locales | sort %}
{% if locale in form.locales.attribute.value %} @@ -48,9 +48,42 @@ #}
+
+
+ + + + + + + {% for error in form.categories.error %} +
+ {{ error }} +
+ {% endfor %} +
+ {% for category in categories | sort %} +
+ {% if category in form.categories.attribute.value %} + + {% else %} + + {% endif %} + +
+ {% endfor %} + {# + {{'Other...'|trans }} + #} +
+
-
{% endfor %} diff --git a/templates/default/user/info.html.twig b/templates/default/user/info.html.twig index dcc72cf..a22da9e 100644 --- a/templates/default/user/info.html.twig +++ b/templates/default/user/info.html.twig @@ -182,7 +182,7 @@ {% set i = 0 %} - {% for category in user.categories | sort %}{% if i > 0 %},{% endif %} {{ category | u.title }}{% set i = i + 1 %}{% endfor %} + {% for category in user.categories | sort %}{% if i > 0 %},{% endif %} {{ category | trans_category | u.title }}{% set i = i + 1 %}{% endfor %} diff --git a/templates/default/user/settings.html.twig b/templates/default/user/settings.html.twig index dc084f3..b7312e6 100644 --- a/templates/default/user/settings.html.twig +++ b/templates/default/user/settings.html.twig @@ -116,7 +116,7 @@ {% endif %} {% endfor %} diff --git a/translations/messages+intl-icu.cs.xlf b/translations/messages+intl-icu.cs.xlf index 1115d0c..b34a837 100644 --- a/translations/messages+intl-icu.cs.xlf +++ b/translations/messages+intl-icu.cs.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.de.xlf b/translations/messages+intl-icu.de.xlf index cfbeb98..2137691 100644 --- a/translations/messages+intl-icu.de.xlf +++ b/translations/messages+intl-icu.de.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.en.xlf b/translations/messages+intl-icu.en.xlf index d26ce5e..e4658e8 100644 --- a/translations/messages+intl-icu.en.xlf +++ b/translations/messages+intl-icu.en.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.eo.xlf b/translations/messages+intl-icu.eo.xlf index a253a32..a9ea8be 100644 --- a/translations/messages+intl-icu.eo.xlf +++ b/translations/messages+intl-icu.eo.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.es.xlf b/translations/messages+intl-icu.es.xlf index e24ce1d..a5f441d 100644 --- a/translations/messages+intl-icu.es.xlf +++ b/translations/messages+intl-icu.es.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.fr.xlf b/translations/messages+intl-icu.fr.xlf index 6bc5976..55a2fc0 100644 --- a/translations/messages+intl-icu.fr.xlf +++ b/translations/messages+intl-icu.fr.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.he.xlf b/translations/messages+intl-icu.he.xlf index 9fa5a88..bb9127f 100644 --- a/translations/messages+intl-icu.he.xlf +++ b/translations/messages+intl-icu.he.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.it.xlf b/translations/messages+intl-icu.it.xlf index b4cffab..4a27c88 100644 --- a/translations/messages+intl-icu.it.xlf +++ b/translations/messages+intl-icu.it.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.ja.xlf b/translations/messages+intl-icu.ja.xlf index 45b196f..d94fbba 100644 --- a/translations/messages+intl-icu.ja.xlf +++ b/translations/messages+intl-icu.ja.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.ka.xlf b/translations/messages+intl-icu.ka.xlf index ffa30a5..dfaece0 100644 --- a/translations/messages+intl-icu.ka.xlf +++ b/translations/messages+intl-icu.ka.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.lv.xlf b/translations/messages+intl-icu.lv.xlf index 963f4df..b2f07df 100644 --- a/translations/messages+intl-icu.lv.xlf +++ b/translations/messages+intl-icu.lv.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.nl.xlf b/translations/messages+intl-icu.nl.xlf index b3640ec..85f3f3f 100644 --- a/translations/messages+intl-icu.nl.xlf +++ b/translations/messages+intl-icu.nl.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.pl.xlf b/translations/messages+intl-icu.pl.xlf index bd71936..80f6e6a 100644 --- a/translations/messages+intl-icu.pl.xlf +++ b/translations/messages+intl-icu.pl.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.pt.xlf b/translations/messages+intl-icu.pt.xlf index d8f40a7..f046b79 100644 --- a/translations/messages+intl-icu.pt.xlf +++ b/translations/messages+intl-icu.pt.xlf @@ -849,6 +849,58 @@ have added categories edition have added categories edition + + movie + movie + + + series + series + + + tv + tv + + + animation + animation + + + music + music + + + game + game + + + audiobook + audiobook + + + podcast + podcast + + + book + book + + + archive + archive + + + picture + picture + + + software + software + + + other + other + diff --git a/translations/messages+intl-icu.ru.xlf b/translations/messages+intl-icu.ru.xlf index e96055f..81d2f09 100644 --- a/translations/messages+intl-icu.ru.xlf +++ b/translations/messages+intl-icu.ru.xlf @@ -799,55 +799,107 @@ Categories - Categories + Категории At least one category required - At least one category required + Необходимо указать минимум одну категорию Content category - Content category + Категория содержимого This torrent have selected categories - This torrent have selected categories + Этот торрент содержит выбранные категории Edit categories - Edit categories + Редактировать категории Edit categories for torrent - Edit categories for torrent + Редактировать категории для торрента Locale - Locale + Локаль Category - Category + Категория Torrent categories - Torrent categories + Категории торрента have deleted categories edition - have deleted categories edition + удалил редакцию категорий have disapproved categories edition - have disapproved categories edition + отклонил редакцию категорий have approved categories edition - have approved categories edition + утвердил редакцию категорий have added categories edition - have added categories edition + добавил редакцию категорий + + + movie + фильм + + + series + сериал + + + tv + ТВ шоу + + + animation + анимация + + + music + музыка + + + game + игра + + + audiobook + аудиокнига + + + podcast + подкаст + + + book + книга + + + archive + архив + + + picture + изображение + + + software + программа + + + other + другое diff --git a/translations/messages+intl-icu.uk.xlf b/translations/messages+intl-icu.uk.xlf index 7b48cf8..8322f03 100644 --- a/translations/messages+intl-icu.uk.xlf +++ b/translations/messages+intl-icu.uk.xlf @@ -799,55 +799,107 @@ Categories - Categories + Категорії At least one category required - At least one category required + Потрібно вказати щонайменше одну категорію Content category - Content category + Категорія вмісту This torrent have selected categories - This torrent have selected categories + Цей торрент має виділені категорії Edit categories - Edit categories + Змінити категорії Edit categories for torrent - Edit categories for torrent + Редагувати категорії для торенту Locale - Locale + Локаль Category - Category + Категорія Torrent categories - Torrent categories + Категорії торенту have deleted categories edition - have deleted categories edition + видалив редакцію категорій have disapproved categories edition - have disapproved categories edition + відхилив редакцію категорій have approved categories edition - have approved categories edition + затвердив редакцію категорій have added categories edition - have added categories edition + додав редакцію категорій + + + movie + кіно + + + series + серіал + + + tv + ТБ шоу + + + animation + анімація + + + music + музика + + + game + гра + + + audiobook + аудіокнига + + + podcast + подкаст + + + book + книга + + + archive + архів + + + picture + зображення + + + software + програма + + + other + інше From b96ed08694e1f89a7606fa610bd0b7da87e1e38a Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 4 Nov 2023 15:02:38 +0200 Subject: [PATCH 23/59] apply Bencode library update --- src/Controller/TorrentController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index e577e4a..4b49411 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -204,7 +204,9 @@ class TorrentController extends AbstractController 'private' => $file->isPrivate(), 'source' => $file->getSource(), 'comment' => $file->getComment(), - 'tree' => $file->getFileTree(), + 'tree' => $file->getFileTree( + \Rhilip\Bencode\TorrentFile::FILETREE_SORT_NATURAL // #34 @TODO cyrillic + ), //'trackers' => $file->getAnnounceList(), 'hash' => [ From 77616c3c8a865b35c338f3229c70c066c48dd907 Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 11 Nov 2023 04:17:57 +0200 Subject: [PATCH 24/59] fix sensitive access condition and disable on direct request #37 --- src/Controller/TorrentController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 4b49411..31b7c10 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -57,10 +57,13 @@ class TorrentController extends AbstractController } // Sensitive filter - if (!$user->isModerator() && $user->isSensitive()) + // @TODO add blur effect or sensitive notice instead of 404 on direct request #37 + /* + if (!$user->isModerator() && $user->isSensitive() && $torrent->isSensitive()) { throw $this->createNotFoundException(); } + */ // Access filter if (!$user->isModerator() && $user->getId() != $torrent->getUserId() && From 7a1fa122714c413906156976745ba55d4a2d125e Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 08:24:12 +0200 Subject: [PATCH 25/59] fix locales sort order --- templates/default/user/settings.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/default/user/settings.html.twig b/templates/default/user/settings.html.twig index b7312e6..49fcbed 100644 --- a/templates/default/user/settings.html.twig +++ b/templates/default/user/settings.html.twig @@ -87,9 +87,9 @@ - {% for locale in locales %} + {% for locale in locales | sort %}
- {% if locale in user.locales | sort %} + {% if locale in user.locales %} {% else %} From 5a0342a99884ab2f70242abef83b45ab2ebcb7f8 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 09:35:04 +0200 Subject: [PATCH 26/59] init extended search feature #35 --- src/Controller/SearchController.php | 102 +++++++++++++++++++++- src/Controller/TorrentController.php | 16 ++-- templates/default/layout.html.twig | 3 +- templates/default/search/module.html.twig | 58 ++++++++++++ 4 files changed, 166 insertions(+), 13 deletions(-) diff --git a/src/Controller/SearchController.php b/src/Controller/SearchController.php index e515162..fbb029f 100644 --- a/src/Controller/SearchController.php +++ b/src/Controller/SearchController.php @@ -14,15 +14,111 @@ use App\Service\ActivityService; class SearchController extends AbstractController { public function module( - ?string $query, - ?string $type + Request $request, + UserService $userService, + ActivityService $activityService ): Response { + // Defaults + $locales = []; + $categories = []; + + // Extended search + if ($request->get('filter')) + { + // Init user + $user = $this->initUser( + $request, + $userService, + $activityService + ); + + // Locales + foreach (explode('|', $this->getParameter('app.locales')) as $locale) + { + if ($request->get('locales')) + { + $locales[] = + [ + 'value' => $locale, + 'checked' => in_array($locale, (array) $request->get('locales')) ? true : false, + ]; + } + + else + { + $locales[] = + [ + 'value' => $locale, + 'checked' => in_array($locale, $user->getLocales()) ? true : false, + ]; + } + } + + // Categories + foreach (explode('|', $this->getParameter('app.categories')) as $category) + { + if ($request->get('categories')) + { + $categories[] = + [ + 'value' => $category, + 'checked' => in_array($category, (array) $request->get('categories')) ? true : false, + ]; + } + + else + { + $categories[] = + [ + 'value' => $category, + 'checked' => in_array($category, $user->getCategories()) ? true : false, + ]; + } + } + } + return $this->render( 'default/search/module.html.twig', [ - 'query' => $query ? urldecode($query) : '', + 'query' => $request->get('query') ? urldecode($request->get('query')) : '', + 'filter' => $request->get('filter'), + 'sensitive' => $request->get('sensitive'), + 'locales' => $locales, + 'categories' => $categories, ] ); } + + private function initUser( + Request $request, + UserService $userService, + ActivityService $activityService + ): ?\App\Entity\User + { + // Init user + if (!$user = $userService->findUserByAddress($request->getClientIp())) + { + $user = $userService->addUser( + $request->getClientIp(), + time(), + $this->getParameter('app.locale'), + explode('|', $this->getParameter('app.locales')), + $activityService->getEventCodes(), + $this->getParameter('app.theme'), + $this->getParameter('app.sensitive'), + $this->getParameter('app.yggdrasil'), + $this->getParameter('app.posters'), + $this->getParameter('app.approved') + ); + + // Add user join event + $activityService->addEventUserAdd( + $user->getId(), + time() + ); + } + + return $user; + } } \ No newline at end of file diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 31b7c10..0da8c26 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -265,22 +265,22 @@ class TorrentController extends AbstractController // Get total torrents $total = $torrentService->findTorrentsTotal( - $user->getId(), + $request->get('filter') ? 0 : $user->getId(), $query, - $user->getLocales(), - $user->getCategories(), - $user->isSensitive() ? false : null, + $request->get('filter') ? (array) $request->get('locales') : $user->getLocales(), + $request->get('filter') ? (array) $request->get('categories') : $user->getCategories(), + $request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null), !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ); $torrents = []; foreach ($torrentService->findTorrents( - $user->getId(), + $request->get('filter') ? 0 : $user->getId(), $query, - $user->getLocales(), - $user->getCategories(), - $user->isSensitive() ? false : null, + $request->get('filter') ? (array) $request->get('locales') : $user->getLocales(), + $request->get('filter') ? (array) $request->get('categories') : $user->getCategories(), + $request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null), !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, $this->getParameter('app.pagination'), diff --git a/templates/default/layout.html.twig b/templates/default/layout.html.twig index 2e25d05..b4c9100 100644 --- a/templates/default/layout.html.twig +++ b/templates/default/layout.html.twig @@ -26,8 +26,7 @@ {{ render(controller( 'App\\Controller\\SearchController::module', { - query : app.request.get('query'), - type : app.request.get('type') + request: app.request } )) }} {% endblock %} diff --git a/templates/default/search/module.html.twig b/templates/default/search/module.html.twig index 6677ce5..6653baf 100644 --- a/templates/default/search/module.html.twig +++ b/templates/default/search/module.html.twig @@ -1,4 +1,62 @@
+ {% if filter %} + +
+
+

+ {{ 'Locales' | trans }} +

+
+
+ {% for locale in locales | sort %} +
+ {% if locale.checked %} + + {% else %} + + {% endif %} + +
+ {% endfor %} +
+
+

+ {{ 'Categories' | trans }} +

+
+
+ {% for category in categories | sort %} +
+ {% if category.checked %} + + {% else %} + + {% endif %} + +
+ {% endfor %} +
+
+

+ {{ 'other' | trans | u.title }} +

+
+
+ {% if sensitive %} + + {% else %} + + {% endif %} + +
+
+ {% endif %}
\ No newline at end of file From 1ae5d324c2d4f8a3e73b8911d50a174fe07bf0cd Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 09:39:10 +0200 Subject: [PATCH 27/59] remove h2 tag from filter headers #35 --- templates/default/search/module.html.twig | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/templates/default/search/module.html.twig b/templates/default/search/module.html.twig index 6653baf..e968a6f 100644 --- a/templates/default/search/module.html.twig +++ b/templates/default/search/module.html.twig @@ -4,10 +4,8 @@ {% if filter %}
-
-

- {{ 'Locales' | trans }} -

+
+ {{ 'Locales' | trans }}
{% for locale in locales | sort %} @@ -23,10 +21,8 @@
{% endfor %}
-
-

- {{ 'Categories' | trans }} -

+
+ {{ 'Categories' | trans }}
{% for category in categories | sort %} @@ -42,10 +38,8 @@
{% endfor %}
-
-

- {{ 'other' | trans | u.title }} -

+
+ {{ 'other' | trans | u.title }}
{% if sensitive %} From deb35d5013b8777a1bb97dd5827f5dec19a2748c Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 10:11:48 +0200 Subject: [PATCH 28/59] add filter attributes support for pagination and tag links #35 --- templates/default/torrent/list.html.twig | 25 ++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/templates/default/torrent/list.html.twig b/templates/default/torrent/list.html.twig index a84e6a8..52e66ae 100644 --- a/templates/default/torrent/list.html.twig +++ b/templates/default/torrent/list.html.twig @@ -80,7 +80,11 @@ {% if torrent.keywords %}
{% for keyword, quantity in torrent.keywords %} - + #{{ keyword }} {% endfor %} @@ -169,17 +173,30 @@ {% if query %} {% if pagination.page > 1 %} {% if pagination.page == 2 %} - + {{ 'Back' | trans | lower }} {% else %} - + {{ 'Back' | trans | lower }} {% endif %} {% endif %} {% if pagination.page < pagination.pages %} - + {{ 'Next' | trans | lower }} {% endif %} From 002a41da878ced0aab37c4fb01b0a10d5875182b Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 10:37:16 +0200 Subject: [PATCH 29/59] add filter link #35 --- templates/default/torrent/list.html.twig | 13 +++++++++++++ translations/messages+intl-icu.cs.xlf | 8 ++++++++ translations/messages+intl-icu.de.xlf | 8 ++++++++ translations/messages+intl-icu.en.xlf | 8 ++++++++ translations/messages+intl-icu.eo.xlf | 8 ++++++++ translations/messages+intl-icu.es.xlf | 8 ++++++++ translations/messages+intl-icu.fr.xlf | 8 ++++++++ translations/messages+intl-icu.he.xlf | 8 ++++++++ translations/messages+intl-icu.it.xlf | 8 ++++++++ translations/messages+intl-icu.ja.xlf | 8 ++++++++ translations/messages+intl-icu.ka.xlf | 8 ++++++++ translations/messages+intl-icu.lv.xlf | 8 ++++++++ translations/messages+intl-icu.nl.xlf | 8 ++++++++ translations/messages+intl-icu.pl.xlf | 8 ++++++++ translations/messages+intl-icu.pt.xlf | 8 ++++++++ translations/messages+intl-icu.ru.xlf | 8 ++++++++ translations/messages+intl-icu.uk.xlf | 8 ++++++++ 17 files changed, 141 insertions(+) diff --git a/templates/default/torrent/list.html.twig b/templates/default/torrent/list.html.twig index 52e66ae..9ea36aa 100644 --- a/templates/default/torrent/list.html.twig +++ b/templates/default/torrent/list.html.twig @@ -5,6 +5,19 @@ {% if query %}

{{ 'Search results' | trans }}

+ {% if app.request.get('filter') %} + + + + + + {% else %} + + + + + + {% endif %} diff --git a/translations/messages+intl-icu.cs.xlf b/translations/messages+intl-icu.cs.xlf index b34a837..e40a671 100644 --- a/translations/messages+intl-icu.cs.xlf +++ b/translations/messages+intl-icu.cs.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.de.xlf b/translations/messages+intl-icu.de.xlf index 2137691..812f8a6 100644 --- a/translations/messages+intl-icu.de.xlf +++ b/translations/messages+intl-icu.de.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.en.xlf b/translations/messages+intl-icu.en.xlf index e4658e8..0a0423b 100644 --- a/translations/messages+intl-icu.en.xlf +++ b/translations/messages+intl-icu.en.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.eo.xlf b/translations/messages+intl-icu.eo.xlf index a9ea8be..e0cdbef 100644 --- a/translations/messages+intl-icu.eo.xlf +++ b/translations/messages+intl-icu.eo.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.es.xlf b/translations/messages+intl-icu.es.xlf index a5f441d..9e1edee 100644 --- a/translations/messages+intl-icu.es.xlf +++ b/translations/messages+intl-icu.es.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.fr.xlf b/translations/messages+intl-icu.fr.xlf index 55a2fc0..82dd5c3 100644 --- a/translations/messages+intl-icu.fr.xlf +++ b/translations/messages+intl-icu.fr.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.he.xlf b/translations/messages+intl-icu.he.xlf index bb9127f..faad62a 100644 --- a/translations/messages+intl-icu.he.xlf +++ b/translations/messages+intl-icu.he.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.it.xlf b/translations/messages+intl-icu.it.xlf index 4a27c88..6411b4c 100644 --- a/translations/messages+intl-icu.it.xlf +++ b/translations/messages+intl-icu.it.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.ja.xlf b/translations/messages+intl-icu.ja.xlf index d94fbba..ccacd9a 100644 --- a/translations/messages+intl-icu.ja.xlf +++ b/translations/messages+intl-icu.ja.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.ka.xlf b/translations/messages+intl-icu.ka.xlf index dfaece0..a13adb1 100644 --- a/translations/messages+intl-icu.ka.xlf +++ b/translations/messages+intl-icu.ka.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.lv.xlf b/translations/messages+intl-icu.lv.xlf index b2f07df..23be2cd 100644 --- a/translations/messages+intl-icu.lv.xlf +++ b/translations/messages+intl-icu.lv.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.nl.xlf b/translations/messages+intl-icu.nl.xlf index 85f3f3f..da9f1cb 100644 --- a/translations/messages+intl-icu.nl.xlf +++ b/translations/messages+intl-icu.nl.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.pl.xlf b/translations/messages+intl-icu.pl.xlf index 80f6e6a..b44a926 100644 --- a/translations/messages+intl-icu.pl.xlf +++ b/translations/messages+intl-icu.pl.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.pt.xlf b/translations/messages+intl-icu.pt.xlf index f046b79..abc2faf 100644 --- a/translations/messages+intl-icu.pt.xlf +++ b/translations/messages+intl-icu.pt.xlf @@ -901,6 +901,14 @@ other other + + Hide filter + Hide filter + + + Show filter + Show filter + diff --git a/translations/messages+intl-icu.ru.xlf b/translations/messages+intl-icu.ru.xlf index 81d2f09..7f4c64b 100644 --- a/translations/messages+intl-icu.ru.xlf +++ b/translations/messages+intl-icu.ru.xlf @@ -901,6 +901,14 @@ other другое + + Hide filter + Скрыть фильтр + + + Show filter + Показать фильтр + diff --git a/translations/messages+intl-icu.uk.xlf b/translations/messages+intl-icu.uk.xlf index 8322f03..49159d2 100644 --- a/translations/messages+intl-icu.uk.xlf +++ b/translations/messages+intl-icu.uk.xlf @@ -901,6 +901,14 @@ other інше + + Hide filter + Приховати фільтр + + + Show filter + Показати фільтр + From e3503bc4bdba530f98adf3d5fffdf9f9a48a5275 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 10:50:41 +0200 Subject: [PATCH 30/59] add rel/nofollow to the filter link #35 --- templates/default/torrent/list.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/default/torrent/list.html.twig b/templates/default/torrent/list.html.twig index 9ea36aa..941b1c9 100644 --- a/templates/default/torrent/list.html.twig +++ b/templates/default/torrent/list.html.twig @@ -6,13 +6,13 @@

{{ 'Search results' | trans }}

{% if app.request.get('filter') %} -
+ {% else %} - + From 55230343079a330987fcb60d2a1d856360146030 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 11:23:37 +0200 Subject: [PATCH 31/59] add search filters counter #35 --- src/Controller/SearchController.php | 87 ++++++++++++++++------- templates/default/search/module.html.twig | 55 ++++++++------ 2 files changed, 97 insertions(+), 45 deletions(-) diff --git a/src/Controller/SearchController.php b/src/Controller/SearchController.php index fbb029f..caa3848 100644 --- a/src/Controller/SearchController.php +++ b/src/Controller/SearchController.php @@ -9,6 +9,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Request; use App\Service\UserService; +use App\Service\TorrentService; use App\Service\ActivityService; class SearchController extends AbstractController @@ -16,6 +17,7 @@ class SearchController extends AbstractController public function module( Request $request, UserService $userService, + TorrentService $torrentService, ActivityService $activityService ): Response { @@ -23,8 +25,12 @@ class SearchController extends AbstractController $locales = []; $categories = []; + // Request + $query = $request->get('query') ? urldecode($request->get('query')) : ''; + $filter = $request->get('filter') ? true : false; + // Extended search - if ($request->get('filter')) + if ($filter) { // Init user $user = $this->initUser( @@ -33,26 +39,37 @@ class SearchController extends AbstractController $activityService ); + // Keywords + $keywords = explode(' ', $query); + // Locales foreach (explode('|', $this->getParameter('app.locales')) as $locale) { + if ($request->get('locales')) { - $locales[] = - [ - 'value' => $locale, - 'checked' => in_array($locale, (array) $request->get('locales')) ? true : false, - ]; + $checked = in_array($locale, (array) $request->get('locales')); } else { - $locales[] = - [ - 'value' => $locale, - 'checked' => in_array($locale, $user->getLocales()) ? true : false, - ]; + $checked = in_array($locale, $user->getLocales()); } + + $locales[] = + [ + 'value' => $locale, + 'checked' => $checked, + 'total' => $torrentService->findTorrentsTotal( + 0, + $keywords, + [$locale], + $request->get('categories') ? $request->get('categories') : $user->getCategories(), + $sensitive, + !$user->isModerator() ? true : null, + !$user->isModerator() ? true : null, + ) + ]; } // Categories @@ -60,30 +77,52 @@ class SearchController extends AbstractController { if ($request->get('categories')) { - $categories[] = - [ - 'value' => $category, - 'checked' => in_array($category, (array) $request->get('categories')) ? true : false, - ]; + $checked = in_array($category, (array) $request->get('categories')); } else { - $categories[] = - [ - 'value' => $category, - 'checked' => in_array($category, $user->getCategories()) ? true : false, - ]; + $checked = in_array($category, $user->getCategories()); } + + $categories[] = + [ + 'value' => $category, + 'checked' => $checked, + 'total' => $torrentService->findTorrentsTotal( + 0, + $keywords, + $request->get('locales') ? $request->get('locales') : $user->getLocales(), + [$category], + $sensitive, + !$user->isModerator() ? true : null, + !$user->isModerator() ? true : null, + ) + ]; } + + // Sensitive + $sensitive = + [ + 'checked' => $request->get('sensitive'), + 'total' => $torrentService->findTorrentsTotal( + 0, + $keywords, + $request->get('locales') ? $request->get('locales') : $user->getLocales(), + $request->get('categories') ? $request->get('categories') : $user->getCategories(), + true, + !$user->isModerator() ? true : null, + !$user->isModerator() ? true : null, + ) + ]; } return $this->render( 'default/search/module.html.twig', [ - 'query' => $request->get('query') ? urldecode($request->get('query')) : '', - 'filter' => $request->get('filter'), - 'sensitive' => $request->get('sensitive'), + 'query' => $query, + 'filter' => $filter, + 'sensitive' => $sensitive, 'locales' => $locales, 'categories' => $categories, ] diff --git a/templates/default/search/module.html.twig b/templates/default/search/module.html.twig index e968a6f..8b1b99b 100644 --- a/templates/default/search/module.html.twig +++ b/templates/default/search/module.html.twig @@ -9,16 +9,21 @@
{% for locale in locales | sort %} -
- {% if locale.checked %} - - {% else %} - - {% endif %} - -
+ {#{% if locale.total %}#} +
+ {% if locale.checked %} + + {% else %} + + {% endif %} + +
+ {#{% endif %}#} {% endfor %}
@@ -26,29 +31,37 @@
{% for category in categories | sort %} -
- {% if category.checked %} - - {% else %} - - {% endif %} - -
+ {#{% if category.total %}#} +
+ {% if category.checked %} + + {% else %} + + {% endif %} + +
+ {#{% endif %}#} {% endfor %}
{{ 'other' | trans | u.title }}
- {% if sensitive %} + {% if sensitive.checked %} {% else %} {% endif %}
From 3ce3dfe77b909ffc6f4efebed8990c92040e2211 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 13 Nov 2023 19:38:05 +0200 Subject: [PATCH 32/59] fix contributors list by integrate new features --- src/Service/TorrentService.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Service/TorrentService.php b/src/Service/TorrentService.php index abb902e..c0c3d52 100644 --- a/src/Service/TorrentService.php +++ b/src/Service/TorrentService.php @@ -323,6 +323,11 @@ class TorrentService { $contributors = []; + foreach ($this->findTorrentCategoriesByTorrentId($torrent->getId()) as $torrentCategory) + { + $contributors[] = $torrentCategory->getUserId(); + } + foreach ($this->findTorrentLocalesByTorrentId($torrent->getId()) as $torrentLocale) { $contributors[] = $torrentLocale->getUserId(); @@ -333,6 +338,11 @@ class TorrentService $contributors[] = $torrentSensitive->getUserId(); } + foreach ($this->findTorrentPosterByTorrentId($torrent->getId()) as $torrentPoster) + { + $contributors[] = $torrentPoster->getUserId(); + } + $contributors[] = $torrent->getUserId(); return array_unique($contributors); From 7177cdb4fe3f811392518fb10557bdbeedc1c7c7 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 15 Nov 2023 09:52:49 +0200 Subject: [PATCH 33/59] add torrent private info --- templates/default/torrent/info.html.twig | 12 ++++++++++++ translations/messages+intl-icu.cs.xlf | 4 ++++ translations/messages+intl-icu.de.xlf | 4 ++++ translations/messages+intl-icu.en.xlf | 4 ++++ translations/messages+intl-icu.eo.xlf | 4 ++++ translations/messages+intl-icu.es.xlf | 4 ++++ translations/messages+intl-icu.fr.xlf | 4 ++++ translations/messages+intl-icu.he.xlf | 4 ++++ translations/messages+intl-icu.it.xlf | 4 ++++ translations/messages+intl-icu.ja.xlf | 4 ++++ translations/messages+intl-icu.ka.xlf | 4 ++++ translations/messages+intl-icu.lv.xlf | 4 ++++ translations/messages+intl-icu.nl.xlf | 4 ++++ translations/messages+intl-icu.pl.xlf | 4 ++++ translations/messages+intl-icu.pt.xlf | 4 ++++ translations/messages+intl-icu.ru.xlf | 4 ++++ translations/messages+intl-icu.uk.xlf | 4 ++++ 17 files changed, 76 insertions(+) diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index 4d530ab..5a1bdf5 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -220,6 +220,18 @@ {% endif %} + + + {{ 'Private' | trans }} + + + {% if file.private %} + {{ 'Yes' | trans }} + {% else %} + {{ 'No' | trans }} + {% endif %} + + {% if file.source %} diff --git a/translations/messages+intl-icu.cs.xlf b/translations/messages+intl-icu.cs.xlf index e40a671..e661df7 100644 --- a/translations/messages+intl-icu.cs.xlf +++ b/translations/messages+intl-icu.cs.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.de.xlf b/translations/messages+intl-icu.de.xlf index 812f8a6..754006d 100644 --- a/translations/messages+intl-icu.de.xlf +++ b/translations/messages+intl-icu.de.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.en.xlf b/translations/messages+intl-icu.en.xlf index 0a0423b..cbd0dc2 100644 --- a/translations/messages+intl-icu.en.xlf +++ b/translations/messages+intl-icu.en.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.eo.xlf b/translations/messages+intl-icu.eo.xlf index e0cdbef..5e611d1 100644 --- a/translations/messages+intl-icu.eo.xlf +++ b/translations/messages+intl-icu.eo.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.es.xlf b/translations/messages+intl-icu.es.xlf index 9e1edee..9638ae5 100644 --- a/translations/messages+intl-icu.es.xlf +++ b/translations/messages+intl-icu.es.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.fr.xlf b/translations/messages+intl-icu.fr.xlf index 82dd5c3..daae954 100644 --- a/translations/messages+intl-icu.fr.xlf +++ b/translations/messages+intl-icu.fr.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.he.xlf b/translations/messages+intl-icu.he.xlf index faad62a..a324b84 100644 --- a/translations/messages+intl-icu.he.xlf +++ b/translations/messages+intl-icu.he.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.it.xlf b/translations/messages+intl-icu.it.xlf index 6411b4c..e31236c 100644 --- a/translations/messages+intl-icu.it.xlf +++ b/translations/messages+intl-icu.it.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.ja.xlf b/translations/messages+intl-icu.ja.xlf index ccacd9a..56c715b 100644 --- a/translations/messages+intl-icu.ja.xlf +++ b/translations/messages+intl-icu.ja.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.ka.xlf b/translations/messages+intl-icu.ka.xlf index a13adb1..944c10a 100644 --- a/translations/messages+intl-icu.ka.xlf +++ b/translations/messages+intl-icu.ka.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.lv.xlf b/translations/messages+intl-icu.lv.xlf index 23be2cd..814cec1 100644 --- a/translations/messages+intl-icu.lv.xlf +++ b/translations/messages+intl-icu.lv.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.nl.xlf b/translations/messages+intl-icu.nl.xlf index da9f1cb..cb827de 100644 --- a/translations/messages+intl-icu.nl.xlf +++ b/translations/messages+intl-icu.nl.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.pl.xlf b/translations/messages+intl-icu.pl.xlf index b44a926..b9debc7 100644 --- a/translations/messages+intl-icu.pl.xlf +++ b/translations/messages+intl-icu.pl.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.pt.xlf b/translations/messages+intl-icu.pt.xlf index abc2faf..bc8dc0f 100644 --- a/translations/messages+intl-icu.pt.xlf +++ b/translations/messages+intl-icu.pt.xlf @@ -909,6 +909,10 @@ Show filter Show filter + + Private + Private + diff --git a/translations/messages+intl-icu.ru.xlf b/translations/messages+intl-icu.ru.xlf index 7f4c64b..a452819 100644 --- a/translations/messages+intl-icu.ru.xlf +++ b/translations/messages+intl-icu.ru.xlf @@ -909,6 +909,10 @@ Show filter Показать фильтр + + Private + Приватный + diff --git a/translations/messages+intl-icu.uk.xlf b/translations/messages+intl-icu.uk.xlf index 49159d2..ffea2ef 100644 --- a/translations/messages+intl-icu.uk.xlf +++ b/translations/messages+intl-icu.uk.xlf @@ -909,6 +909,10 @@ Show filter Показати фільтр + + Private + Приватний + From 8aff756e30ef544a660d0106c262d4797b57c6fe Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 18 Nov 2023 09:27:33 +0200 Subject: [PATCH 34/59] apply search filter for RSS #35 --- src/Controller/TorrentController.php | 16 ++++++++-------- templates/default/torrent/list.html.twig | 24 +++++++++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 0da8c26..38205db 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -632,11 +632,11 @@ class TorrentController extends AbstractController // Get total torrents $total = $torrentService->findTorrentsTotal( - $user->getId(), + $request->get('filter') ? 0 : $user->getId(), $query, - $user->getLocales(), - $user->getCategories(), - $user->isSensitive() ? false : null, + $request->get('filter') ? (array) $request->get('locales') : $user->getLocales(), + $request->get('filter') ? (array) $request->get('categories') : $user->getCategories(), + $request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null), !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ); @@ -644,11 +644,11 @@ class TorrentController extends AbstractController // Create torrents list $torrents = []; foreach ($torrentService->findTorrents( - $user->getId(), + $request->get('filter') ? 0 : $user->getId(), $query, - $user->getLocales(), - $user->getCategories(), - $user->isSensitive() ? false : null, + $request->get('filter') ? (array) $request->get('locales') : $user->getLocales(), + $request->get('filter') ? (array) $request->get('categories') : $user->getCategories(), + $request->get('filter') ? ($request->get('sensitive') ? null : false) : ($user->isSensitive() ? false : null), !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, $this->getParameter('app.pagination'), diff --git a/templates/default/torrent/list.html.twig b/templates/default/torrent/list.html.twig index 941b1c9..10187cb 100644 --- a/templates/default/torrent/list.html.twig +++ b/templates/default/torrent/list.html.twig @@ -11,18 +11,27 @@ + + + + + {% else %} + + + + + {% endif %} - - - - - {% else %}

{{ 'Recent uploads' | trans }}

@@ -186,7 +195,7 @@ {% if query %} {% if pagination.page > 1 %} {% if pagination.page == 2 %} - {% if torrent.status %} {{ 'Yes' | trans }} - + {% else %} {{ 'No' | trans }} - + @@ -119,14 +119,14 @@ {% if torrent.approved %} {{ 'Yes' | trans }} - + {% else %} {{ 'No' | trans }} - + @@ -346,7 +346,7 @@ {% endfor %}
- + From 9081acebb31b75f98ed8b21b0ea8572fd1fce780 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 1 Dec 2023 15:57:00 +0200 Subject: [PATCH 38/59] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5dd91cf..5246d41 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ Engine uses IPv6 `0200::/7` addresses to identify users without registration. #### Instances -* `http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/` - + `ftp://[201:23b4:991a:634d:8359:4521:5576:15b7]:21/yggtracker/` +* `http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/` | [tracker.ygg](http://tracker.ygg) + + `ftp://[201:23b4:991a:634d:8359:4521:5576:15b7]:21/yggtracker/` - wanted torrents #### Installation From f5d4c19eb91ce65a1400450c99dc0ae0f3424745 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 3 Dec 2023 02:11:08 +0200 Subject: [PATCH 39/59] add new crawler --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 9dac3a8..0ee2aaf 100644 --- a/.env +++ b/.env @@ -88,7 +88,7 @@ APP_POSTERS=1 APP_TRACKERS=http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce|http://[200:1e2f:e608:eb3a:2bf:1e62:87ba:e2f7]/announce|http://[316:c51a:62a3:8b9::5]/announce # List of crawlers where ignored in actions and activity features -APP_CRAWLERS=201:23b4:991a:634d:8359:4521:5576:15b7|30a:5fad::e +APP_CRAWLERS=201:23b4:991a:634d:8359:4521:5576:15b7|30a:5fad::e|202:f2bc:f800:7cc4:c109:7857:5cae:6630 # Max torrent filesize for uploads (check upload_max_filesize in the php.ini) APP_TORRENT_FILE_SIZE_MAX=1024000 From 27e598fdedd5ccbf40d89211cec5d4fbf70884f3 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 3 Dec 2023 02:22:53 +0200 Subject: [PATCH 40/59] add rel/nofollow for wanted links --- templates/default/torrent/list.html.twig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/default/torrent/list.html.twig b/templates/default/torrent/list.html.twig index 10187cb..93e27d1 100644 --- a/templates/default/torrent/list.html.twig +++ b/templates/default/torrent/list.html.twig @@ -58,7 +58,8 @@ {% if torrent.scrape.leechers > 0 and torrent.scrape.seeders == 0 %} + title="{{ 'Active leechers waiting for seeders' | trans }}" + rel="nofollow"> {{ 'wanted' | trans }} {% endif %} From 9814a56135c510c50efe14a15b7811c5a9a6fc11 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 7 Dec 2023 02:30:15 +0200 Subject: [PATCH 41/59] composer update --- composer.lock | 785 +++++++++++++++++++++++++------------------------- 1 file changed, 398 insertions(+), 387 deletions(-) diff --git a/composer.lock b/composer.lock index 605e0af..efca9a6 100644 --- a/composer.lock +++ b/composer.lock @@ -472,16 +472,16 @@ }, { "name": "doctrine/dbal", - "version": "3.7.1", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", "shasum": "" }, "require": { @@ -497,7 +497,7 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.35", + "phpstan/phpstan": "1.10.42", "phpstan/phpstan-strict-rules": "^1.5", "phpunit/phpunit": "9.6.13", "psalm/plugin-phpunit": "0.18.4", @@ -565,7 +565,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.1" + "source": "https://github.com/doctrine/dbal/tree/3.7.2" }, "funding": [ { @@ -581,7 +581,7 @@ "type": "tidelift" } ], - "time": "2023-10-06T05:06:20+00:00" + "time": "2023-11-19T08:06:58+00:00" }, { "name": "doctrine/deprecations", @@ -632,56 +632,59 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.10.2", + "version": "2.11.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "f28b1f78de3a2938ff05cfe751233097624cc756" + "reference": "4089f1424b724786c062aea50aae5f773449b94b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f28b1f78de3a2938ff05cfe751233097624cc756", - "reference": "f28b1f78de3a2938ff05cfe751233097624cc756", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/4089f1424b724786c062aea50aae5f773449b94b", + "reference": "4089f1424b724786c062aea50aae5f773449b94b", "shasum": "" }, "require": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^3.6.0", + "doctrine/dbal": "^3.7.0 || ^4.0", "doctrine/persistence": "^2.2 || ^3", "doctrine/sql-formatter": "^1.0.1", "php": "^7.4 || ^8.0", - "symfony/cache": "^5.4 || ^6.0", - "symfony/config": "^5.4 || ^6.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/dependency-injection": "^5.4 || ^6.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7", - "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" }, "conflict": { "doctrine/annotations": ">=3.0", - "doctrine/orm": "<2.11 || >=3.0", + "doctrine/orm": "<2.14 || >=4.0", "twig/twig": "<1.34 || >=2.0 <2.4" }, "require-dev": { "doctrine/annotations": "^1 || ^2", - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^12", "doctrine/deprecations": "^1.0", - "doctrine/orm": "^2.11 || ^3.0", + "doctrine/orm": "^2.14 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", "phpunit/phpunit": "^9.5.26 || ^10.0", "psalm/plugin-phpunit": "^0.18.4", "psalm/plugin-symfony": "^4", "psr/log": "^1.1.4 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^6.1", - "symfony/property-info": "^5.4 || ^6.0", - "symfony/proxy-manager-bridge": "^5.4 || ^6.0", - "symfony/security-bundle": "^5.4 || ^6.0", - "symfony/twig-bridge": "^5.4 || ^6.0", - "symfony/validator": "^5.4 || ^6.0", - "symfony/web-profiler-bundle": "^5.4 || ^6.0", - "symfony/yaml": "^5.4 || ^6.0", + "symfony/phpunit-bridge": "^6.1 || ^7.0", + "symfony/property-info": "^5.4 || ^6.0 || ^7.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/string": "^5.4 || ^6.0 || ^7.0", + "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/validator": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", + "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0", "twig/twig": "^1.34 || ^2.12 || ^3.0", "vimeo/psalm": "^4.30" }, @@ -728,7 +731,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.10.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.11.1" }, "funding": [ { @@ -744,38 +747,44 @@ "type": "tidelift" } ], - "time": "2023-08-06T09:31:40+00:00" + "time": "2023-11-15T20:01:50+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.2.4", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "94e6b0fe1a50901d52f59dbb9b4b0737718b2c1e" + "reference": "1dd42906a5fb9c5960723e2ebb45c68006493835" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/94e6b0fe1a50901d52f59dbb9b4b0737718b2c1e", - "reference": "94e6b0fe1a50901d52f59dbb9b4b0737718b2c1e", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1dd42906a5fb9c5960723e2ebb45c68006493835", + "reference": "1dd42906a5fb9c5960723e2ebb45c68006493835", "shasum": "" }, "require": { - "doctrine/doctrine-bundle": "~1.0|~2.0", + "doctrine/doctrine-bundle": "^2.4", "doctrine/migrations": "^3.2", "php": "^7.2|^8.0", - "symfony/framework-bundle": "~3.4|~4.0|~5.0|~6.0" + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "doctrine/orm": "^2.6", - "doctrine/persistence": "^1.3||^2.0", + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.6 || ^3", + "doctrine/persistence": "^2.0 || ^3 ", "phpstan/phpstan": "^1.4", "phpstan/phpstan-deprecation-rules": "^1", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan-symfony": "^1.3", "phpunit/phpunit": "^8.5|^9.5", - "vimeo/psalm": "^4.22" + "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-symfony": "^3 || ^5", + "symfony/phpunit-bridge": "^6.3 || ^7", + "symfony/var-exporter": "^5.4 || ^6 || ^7", + "vimeo/psalm": "^4.30 || ^5.15" }, "type": "symfony-bundle", "autoload": { @@ -813,7 +822,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.4" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.3.0" }, "funding": [ { @@ -829,7 +838,7 @@ "type": "tidelift" } ], - "time": "2023-06-02T08:19:26+00:00" + "time": "2023-11-13T19:44:41+00:00" }, { "name": "doctrine/event-manager", @@ -1163,47 +1172,47 @@ }, { "name": "doctrine/migrations", - "version": "3.6.0", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059" + "reference": "47af29eef49f29ebee545947e8b2a4b3be318c8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/e542ad8bcd606d7a18d0875babb8a6d963c9c059", - "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/47af29eef49f29ebee545947e8b2a4b3be318c8a", + "reference": "47af29eef49f29ebee545947e8b2a4b3be318c8a", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/dbal": "^3.5.1", + "doctrine/dbal": "^3.5.1 || ^4", "doctrine/deprecations": "^0.5.3 || ^1", "doctrine/event-manager": "^1.2 || ^2.0", "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^4.4.16 || ^5.4 || ^6.0", - "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0", - "symfony/var-exporter": "^6.2" + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.2 || ^7.0" }, "conflict": { - "doctrine/orm": "<2.12" + "doctrine/orm": "<2.12 || >=4" }, "require-dev": { - "doctrine/coding-standard": "^9", - "doctrine/orm": "^2.13", + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.13 || ^3", "doctrine/persistence": "^2 || ^3", "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.1", - "phpstan/phpstan-symfony": "^1.1", - "phpunit/phpunit": "^9.5.24", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "symfony/process": "^4.4 || ^5.4 || ^6.0", - "symfony/yaml": "^4.4 || ^5.4 || ^6.0" + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.4", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^10.3", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", @@ -1245,7 +1254,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.6.0" + "source": "https://github.com/doctrine/migrations/tree/3.7.2" }, "funding": [ { @@ -1261,20 +1270,20 @@ "type": "tidelift" } ], - "time": "2023-02-15T18:49:46+00:00" + "time": "2023-12-05T11:35:05+00:00" }, { "name": "doctrine/orm", - "version": "2.16.2", + "version": "2.17.1", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0" + "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/17500f56eaa930f5cd14d765bc2cd851c7d37cc0", - "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0", + "url": "https://api.github.com/repos/doctrine/orm/zipball/1a4fe6e0bb67762370937a7e6cee3da40a9122d1", + "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1", "shasum": "" }, "require": { @@ -1292,7 +1301,7 @@ "ext-ctype": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^4.2 || ^5.0 || ^6.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", "symfony/polyfill-php72": "^1.23", "symfony/polyfill-php80": "^1.16" }, @@ -1303,14 +1312,14 @@ "doctrine/annotations": "^1.13 || ^2", "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.10.28", + "phpstan/phpstan": "~1.4.10 || 1.10.35", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.0", "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.14.1" + "vimeo/psalm": "4.30.0 || 5.15.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1360,9 +1369,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.16.2" + "source": "https://github.com/doctrine/orm/tree/2.17.1" }, - "time": "2023-08-27T18:21:56+00:00" + "time": "2023-11-17T06:25:40+00:00" }, { "name": "doctrine/persistence", @@ -2237,16 +2246,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.2", + "version": "1.24.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bcad8d995980440892759db0c32acae7c8e79442" + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", - "reference": "bcad8d995980440892759db0c32acae7c8e79442", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", "shasum": "" }, "require": { @@ -2278,9 +2287,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.24.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" }, - "time": "2023-09-26T12:28:12+00:00" + "time": "2023-11-26T18:29:22+00:00" }, { "name": "psr/cache", @@ -2590,22 +2599,23 @@ }, { "name": "rhilip/bencode", - "version": "v2.3.3", + "version": "v2.4.2", "source": { "type": "git", "url": "https://github.com/Rhilip/Bencode.git", - "reference": "fd37d13bb745352d40879dbbfa6da85af91e49f1" + "reference": "d5b51d02f73017834c53aa76aff2403fb753ac97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Rhilip/Bencode/zipball/fd37d13bb745352d40879dbbfa6da85af91e49f1", - "reference": "fd37d13bb745352d40879dbbfa6da85af91e49f1", + "url": "https://api.github.com/repos/Rhilip/Bencode/zipball/d5b51d02f73017834c53aa76aff2403fb753ac97", + "reference": "d5b51d02f73017834c53aa76aff2403fb753ac97", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { + "ext-json": "*", "phpunit/phpunit": "^9.0" }, "suggest": { @@ -2635,22 +2645,22 @@ ], "support": { "issues": "https://github.com/Rhilip/Bencode/issues", - "source": "https://github.com/Rhilip/Bencode/tree/v2.3.3" + "source": "https://github.com/Rhilip/Bencode/tree/v2.4.2" }, - "time": "2023-05-27T01:47:00+00:00" + "time": "2023-11-05T11:24:41+00:00" }, { "name": "symfony/asset", - "version": "v6.3.0", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "b77a4cc8e266b7e0db688de740f9ee7253aa411c" + "reference": "b2382a403f2111836301623d89e9af3d84989525" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/b77a4cc8e266b7e0db688de740f9ee7253aa411c", - "reference": "b77a4cc8e266b7e0db688de740f9ee7253aa411c", + "url": "https://api.github.com/repos/symfony/asset/zipball/b2382a403f2111836301623d89e9af3d84989525", + "reference": "b2382a403f2111836301623d89e9af3d84989525", "shasum": "" }, "require": { @@ -2690,7 +2700,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v6.3.0" + "source": "https://github.com/symfony/asset/tree/v6.3.8" }, "funding": [ { @@ -2706,20 +2716,20 @@ "type": "tidelift" } ], - "time": "2023-04-21T14:41:17+00:00" + "time": "2023-10-31T08:07:48+00:00" }, { "name": "symfony/cache", - "version": "v6.3.6", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "84aff8d948d6292d2b5a01ac622760be44dddc72" + "reference": "8c6e84272e4febbb1fed3c5b9f3c722537c2bd55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/84aff8d948d6292d2b5a01ac622760be44dddc72", - "reference": "84aff8d948d6292d2b5a01ac622760be44dddc72", + "url": "https://api.github.com/repos/symfony/cache/zipball/8c6e84272e4febbb1fed3c5b9f3c722537c2bd55", + "reference": "8c6e84272e4febbb1fed3c5b9f3c722537c2bd55", "shasum": "" }, "require": { @@ -2786,7 +2796,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.3.6" + "source": "https://github.com/symfony/cache/tree/v6.3.9" }, "funding": [ { @@ -2802,20 +2812,20 @@ "type": "tidelift" } ], - "time": "2023-10-17T14:44:58+00:00" + "time": "2023-11-24T13:24:35+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b" + "reference": "1d74b127da04ffa87aa940abe15446fa89653778" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ad945640ccc0ae6e208bcea7d7de4b39b569896b", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", + "reference": "1d74b127da04ffa87aa940abe15446fa89653778", "shasum": "" }, "require": { @@ -2862,7 +2872,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" }, "funding": [ { @@ -2878,7 +2888,7 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-09-25T12:52:38+00:00" }, { "name": "symfony/clock", @@ -2955,16 +2965,16 @@ }, { "name": "symfony/config", - "version": "v6.3.2", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467" + "reference": "b7a63887960359e5b59b15826fa9f9be10acbe88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", - "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", + "url": "https://api.github.com/repos/symfony/config/zipball/b7a63887960359e5b59b15826fa9f9be10acbe88", + "reference": "b7a63887960359e5b59b15826fa9f9be10acbe88", "shasum": "" }, "require": { @@ -3010,7 +3020,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.3.2" + "source": "https://github.com/symfony/config/tree/v6.3.8" }, "funding": [ { @@ -3026,20 +3036,20 @@ "type": "tidelift" } ], - "time": "2023-07-19T20:22:16+00:00" + "time": "2023-11-09T08:28:21+00:00" }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "0566dbd051f8648d980592c7849f5d90d2c7c60c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/0566dbd051f8648d980592c7849f5d90d2c7c60c", + "reference": "0566dbd051f8648d980592c7849f5d90d2c7c60c", "shasum": "" }, "require": { @@ -3100,7 +3110,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v6.3.9" }, "funding": [ { @@ -3116,7 +3126,7 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2023-11-20T16:36:29+00:00" }, { "name": "symfony/crowdin-translation-provider", @@ -3193,16 +3203,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v6.3.5", + "version": "v6.3.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "2ed62b3bf98346e1f45529a7b6be2196739bb993" + "reference": "51383a1d9d7e93d5c3c76ddc32672de1b3e82c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2ed62b3bf98346e1f45529a7b6be2196739bb993", - "reference": "2ed62b3bf98346e1f45529a7b6be2196739bb993", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51383a1d9d7e93d5c3c76ddc32672de1b3e82c77", + "reference": "51383a1d9d7e93d5c3c76ddc32672de1b3e82c77", "shasum": "" }, "require": { @@ -3254,7 +3264,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.3.5" + "source": "https://github.com/symfony/dependency-injection/tree/v6.3.10" }, "funding": [ { @@ -3270,11 +3280,11 @@ "type": "tidelift" } ], - "time": "2023-09-25T16:46:40+00:00" + "time": "2023-12-01T14:25:58+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -3321,7 +3331,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.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -3341,16 +3351,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.3.7", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "c8af292f733cc28149485639177c5f2b67dff200" + "reference": "8842d289d41320a0f725e996b4e58d84af398a9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/c8af292f733cc28149485639177c5f2b67dff200", - "reference": "c8af292f733cc28149485639177c5f2b67dff200", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/8842d289d41320a0f725e996b4e58d84af398a9e", + "reference": "8842d289d41320a0f725e996b4e58d84af398a9e", "shasum": "" }, "require": { @@ -3431,7 +3441,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.3.7" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.3.8" }, "funding": [ { @@ -3447,20 +3457,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:11:45+00:00" + "time": "2023-10-31T08:07:48+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v6.3.7", + "version": "v6.3.10", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "b8dab85f66ffd5e4275eaf7558f9db8f4586dd41" + "reference": "b225f860450a34291bc5983f87d57fb7b9ef18b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/b8dab85f66ffd5e4275eaf7558f9db8f4586dd41", - "reference": "b8dab85f66ffd5e4275eaf7558f9db8f4586dd41", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/b225f860450a34291bc5983f87d57fb7b9ef18b8", + "reference": "b225f860450a34291bc5983f87d57fb7b9ef18b8", "shasum": "" }, "require": { @@ -3503,7 +3513,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v6.3.7" + "source": "https://github.com/symfony/doctrine-messenger/tree/v6.3.10" }, "funding": [ { @@ -3519,7 +3529,7 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:15:14+00:00" + "time": "2023-12-01T09:24:52+00:00" }, { "name": "symfony/dotenv", @@ -3751,7 +3761,7 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -3807,7 +3817,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -4018,16 +4028,16 @@ }, { "name": "symfony/flex", - "version": "v2.4.1", + "version": "v2.4.2", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "ae6dea68771c5fca9d172e0c0910bdd06199f6f4" + "reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/ae6dea68771c5fca9d172e0c0910bdd06199f6f4", - "reference": "ae6dea68771c5fca9d172e0c0910bdd06199f6f4", + "url": "https://api.github.com/repos/symfony/flex/zipball/67ee785f1aedada76461de7a7ec10cd7f8ff8d36", + "reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36", "shasum": "" }, "require": { @@ -4063,7 +4073,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.1" + "source": "https://github.com/symfony/flex/tree/v2.4.2" }, "funding": [ { @@ -4079,20 +4089,20 @@ "type": "tidelift" } ], - "time": "2023-10-30T18:35:17+00:00" + "time": "2023-12-05T14:09:35+00:00" }, { "name": "symfony/form", - "version": "v6.3.7", + "version": "v6.3.10", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "e6743d188f168643cb247f65cbad09ddb1dfcfe5" + "reference": "5afc7334b9d60dd0799612faf3d103b25bc60ae4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/e6743d188f168643cb247f65cbad09ddb1dfcfe5", - "reference": "e6743d188f168643cb247f65cbad09ddb1dfcfe5", + "url": "https://api.github.com/repos/symfony/form/zipball/5afc7334b9d60dd0799612faf3d103b25bc60ae4", + "reference": "5afc7334b9d60dd0799612faf3d103b25bc60ae4", "shasum": "" }, "require": { @@ -4160,7 +4170,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.3.7" + "source": "https://github.com/symfony/form/tree/v6.3.10" }, "funding": [ { @@ -4176,20 +4186,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:11:45+00:00" + "time": "2023-11-30T11:08:22+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.3.7", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "dba20792c726c30d455626eddfb2db008f64085f" + "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/dba20792c726c30d455626eddfb2db008f64085f", - "reference": "dba20792c726c30d455626eddfb2db008f64085f", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f83d20092e98c3ae8b5874b8f0787546c5c61cda", + "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda", "shasum": "" }, "require": { @@ -4304,7 +4314,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.3.7" + "source": "https://github.com/symfony/framework-bundle/tree/v6.3.9" }, "funding": [ { @@ -4320,20 +4330,20 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:15:14+00:00" + "time": "2023-11-24T10:25:33+00:00" }, { "name": "symfony/http-client", - "version": "v6.3.7", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d" + "reference": "0314e2d49939a9831929d6fc81c01c6df137fd0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d", - "reference": "cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d", + "url": "https://api.github.com/repos/symfony/http-client/zipball/0314e2d49939a9831929d6fc81c01c6df137fd0a", + "reference": "0314e2d49939a9831929d6fc81c01c6df137fd0a", "shasum": "" }, "require": { @@ -4396,7 +4406,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.3.7" + "source": "https://github.com/symfony/http-client/tree/v6.3.8" }, "funding": [ { @@ -4412,20 +4422,20 @@ "type": "tidelift" } ], - "time": "2023-10-29T12:41:36+00:00" + "time": "2023-11-06T18:31:59+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb" + "reference": "1ee70e699b41909c209a0c930f11034b93578654" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3b66325d0176b4ec826bffab57c9037d759c31fb", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654", + "reference": "1ee70e699b41909c209a0c930f11034b93578654", "shasum": "" }, "require": { @@ -4474,7 +4484,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0" }, "funding": [ { @@ -4490,20 +4500,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.7", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e" + "reference": "49a04fd3a21edc9ce503ab78e9f342805fefe780" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/59d1837d5d992d16c2628cd0d6b76acf8d69b33e", - "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49a04fd3a21edc9ce503ab78e9f342805fefe780", + "reference": "49a04fd3a21edc9ce503ab78e9f342805fefe780", "shasum": "" }, "require": { @@ -4551,7 +4561,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.7" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.9" }, "funding": [ { @@ -4567,20 +4577,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:55:27+00:00" + "time": "2023-11-20T16:36:29+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.7", + "version": "v6.3.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6d4098095f93279d9536a0e9124439560cc764d0" + "reference": "8d8e7aa60593fd0a2e3c1cea08cc687314841b61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6d4098095f93279d9536a0e9124439560cc764d0", - "reference": "6d4098095f93279d9536a0e9124439560cc764d0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8d8e7aa60593fd0a2e3c1cea08cc687314841b61", + "reference": "8d8e7aa60593fd0a2e3c1cea08cc687314841b61", "shasum": "" }, "require": { @@ -4664,7 +4674,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.7" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.10" }, "funding": [ { @@ -4680,7 +4690,7 @@ "type": "tidelift" } ], - "time": "2023-10-29T14:31:45+00:00" + "time": "2023-12-01T16:57:27+00:00" }, { "name": "symfony/intl", @@ -4846,16 +4856,16 @@ }, { "name": "symfony/messenger", - "version": "v6.3.7", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "a0a8860ca625116c474c9c1f5570bd7ec752c599" + "reference": "096b151f955d5ac56cc61a3ca0e16b38ff093805" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/a0a8860ca625116c474c9c1f5570bd7ec752c599", - "reference": "a0a8860ca625116c474c9c1f5570bd7ec752c599", + "url": "https://api.github.com/repos/symfony/messenger/zipball/096b151f955d5ac56cc61a3ca0e16b38ff093805", + "reference": "096b151f955d5ac56cc61a3ca0e16b38ff093805", "shasum": "" }, "require": { @@ -4913,7 +4923,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.3.7" + "source": "https://github.com/symfony/messenger/tree/v6.3.9" }, "funding": [ { @@ -4929,7 +4939,7 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:15:14+00:00" + "time": "2023-11-22T19:13:10+00:00" }, { "name": "symfony/mime", @@ -5017,16 +5027,16 @@ }, { "name": "symfony/monolog-bridge", - "version": "v6.3.1", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "04b04b8e465e0fa84940e5609b6796a8b4e51bf1" + "reference": "2bbfc8bd9d6f966b69eda20c66762580a0410c78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/04b04b8e465e0fa84940e5609b6796a8b4e51bf1", - "reference": "04b04b8e465e0fa84940e5609b6796a8b4e51bf1", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/2bbfc8bd9d6f966b69eda20c66762580a0410c78", + "reference": "2bbfc8bd9d6f966b69eda20c66762580a0410c78", "shasum": "" }, "require": { @@ -5075,7 +5085,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.3.1" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.3.8" }, "funding": [ { @@ -5091,34 +5101,34 @@ "type": "tidelift" } ], - "time": "2023-06-08T11:13:32+00:00" + "time": "2023-10-31T08:07:48+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v3.8.0", + "version": "v3.10.0", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d" + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", - "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", "shasum": "" }, "require": { - "monolog/monolog": "^1.22 || ^2.0 || ^3.0", - "php": ">=7.1.3", - "symfony/config": "~4.4 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "~4.4 || ^5.0 || ^6.0", - "symfony/monolog-bridge": "~4.4 || ^5.0 || ^6.0" + "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", + "php": ">=7.2.5", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "symfony/console": "~4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.2 || ^6.0", - "symfony/yaml": "~4.4 || ^5.0 || ^6.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^6.3 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "type": "symfony-bundle", "extra": { @@ -5156,7 +5166,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.8.0" + "source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0" }, "funding": [ { @@ -5172,7 +5182,7 @@ "type": "tidelift" } ], - "time": "2022-05-10T14:24:36+00:00" + "time": "2023-11-06T17:08:13+00:00" }, { "name": "symfony/notifier", @@ -5321,16 +5331,16 @@ }, { "name": "symfony/password-hasher", - "version": "v6.3.5", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "278d3a49715073879f75e372ad80b8cfeca949d3" + "reference": "82161c4bebf77900372083ec6e484b5f055b0cba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/278d3a49715073879f75e372ad80b8cfeca949d3", - "reference": "278d3a49715073879f75e372ad80b8cfeca949d3", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/82161c4bebf77900372083ec6e484b5f055b0cba", + "reference": "82161c4bebf77900372083ec6e484b5f055b0cba", "shasum": "" }, "require": { @@ -5373,7 +5383,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v6.3.5" + "source": "https://github.com/symfony/password-hasher/tree/v6.3.8" }, "funding": [ { @@ -5389,7 +5399,7 @@ "type": "tidelift" } ], - "time": "2023-09-25T17:05:16+00:00" + "time": "2023-11-06T10:58:05+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -6033,16 +6043,16 @@ }, { "name": "symfony/property-info", - "version": "v6.3.0", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd" + "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/7f3a03716112269741fe2a809f8f791a371d1fcd", - "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd", + "url": "https://api.github.com/repos/symfony/property-info/zipball/664ae7ad443d7cc591ff3e15496b954e4cefe729", + "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729", "shasum": "" }, "require": { @@ -6096,7 +6106,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.3.0" + "source": "https://github.com/symfony/property-info/tree/v6.3.9" }, "funding": [ { @@ -6112,20 +6122,20 @@ "type": "tidelift" } ], - "time": "2023-05-19T08:06:44+00:00" + "time": "2023-11-24T11:57:32+00:00" }, { "name": "symfony/routing", - "version": "v6.3.5", + "version": "v6.3.10", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31" + "reference": "cb7404232d49dd11cc971b832fcbd49e7c22b049" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/82616e59acd3e3d9c916bba798326cb7796d7d31", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31", + "url": "https://api.github.com/repos/symfony/routing/zipball/cb7404232d49dd11cc971b832fcbd49e7c22b049", + "reference": "cb7404232d49dd11cc971b832fcbd49e7c22b049", "shasum": "" }, "require": { @@ -6179,7 +6189,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.5" + "source": "https://github.com/symfony/routing/tree/v6.3.10" }, "funding": [ { @@ -6195,7 +6205,7 @@ "type": "tidelift" } ], - "time": "2023-09-20T16:05:51+00:00" + "time": "2023-12-01T14:25:58+00:00" }, { "name": "symfony/runtime", @@ -6278,16 +6288,16 @@ }, { "name": "symfony/security-bundle", - "version": "v6.3.7", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "8ece4fd6e242acbabad4461feae7c52fe1982c48" + "reference": "57889ebb1ac3403d550c787c4fde127261abacb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/8ece4fd6e242acbabad4461feae7c52fe1982c48", - "reference": "8ece4fd6e242acbabad4461feae7c52fe1982c48", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/57889ebb1ac3403d550c787c4fde127261abacb6", + "reference": "57889ebb1ac3403d550c787c4fde127261abacb6", "shasum": "" }, "require": { @@ -6369,7 +6379,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.3.7" + "source": "https://github.com/symfony/security-bundle/tree/v6.3.8" }, "funding": [ { @@ -6385,7 +6395,7 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:15:14+00:00" + "time": "2023-11-09T09:33:10+00:00" }, { "name": "symfony/security-core", @@ -6542,16 +6552,16 @@ }, { "name": "symfony/security-http", - "version": "v6.3.6", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "573ef96ab62d509ac953362fa61f9d1bd283f3a7" + "reference": "19f7b5f5d20879a976d6d376e359bc975dfc6002" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/573ef96ab62d509ac953362fa61f9d1bd283f3a7", - "reference": "573ef96ab62d509ac953362fa61f9d1bd283f3a7", + "url": "https://api.github.com/repos/symfony/security-http/zipball/19f7b5f5d20879a976d6d376e359bc975dfc6002", + "reference": "19f7b5f5d20879a976d6d376e359bc975dfc6002", "shasum": "" }, "require": { @@ -6610,7 +6620,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.3.6" + "source": "https://github.com/symfony/security-http/tree/v6.3.8" }, "funding": [ { @@ -6626,20 +6636,20 @@ "type": "tidelift" } ], - "time": "2023-10-13T10:26:24+00:00" + "time": "2023-11-09T21:20:12+00:00" }, { "name": "symfony/serializer", - "version": "v6.3.7", + "version": "v6.3.10", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9" + "reference": "6eee0fd95f5caa1e77cab29552620ebf8e5b1a5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9", - "reference": "641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9", + "url": "https://api.github.com/repos/symfony/serializer/zipball/6eee0fd95f5caa1e77cab29552620ebf8e5b1a5f", + "reference": "6eee0fd95f5caa1e77cab29552620ebf8e5b1a5f", "shasum": "" }, "require": { @@ -6704,7 +6714,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.3.7" + "source": "https://github.com/symfony/serializer/tree/v6.3.10" }, "funding": [ { @@ -6720,20 +6730,20 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:15:14+00:00" + "time": "2023-12-01T14:25:58+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", "shasum": "" }, "require": { @@ -6786,7 +6796,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" }, "funding": [ { @@ -6802,7 +6812,7 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/stopwatch", @@ -6868,16 +6878,16 @@ }, { "name": "symfony/string", - "version": "v6.3.5", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" + "reference": "56427887aeaf540e9bbd121ad6c43f14ad3ce136" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", + "url": "https://api.github.com/repos/symfony/string/zipball/56427887aeaf540e9bbd121ad6c43f14ad3ce136", + "reference": "56427887aeaf540e9bbd121ad6c43f14ad3ce136", "shasum": "" }, "require": { @@ -6934,7 +6944,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.5" + "source": "https://github.com/symfony/string/tree/v6.3.9" }, "funding": [ { @@ -6950,7 +6960,7 @@ "type": "tidelift" } ], - "time": "2023-09-18T10:38:32+00:00" + "time": "2023-11-28T20:40:29+00:00" }, { "name": "symfony/translation", @@ -7049,16 +7059,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", "shasum": "" }, "require": { @@ -7107,7 +7117,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" }, "funding": [ { @@ -7123,20 +7133,20 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-07-25T15:08:44+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.3.5", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "18f2cbe1d46ad43c4d3bd45e5e6279172068e064" + "reference": "c51407623959a626784ff302419026f56dc4e1ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/18f2cbe1d46ad43c4d3bd45e5e6279172068e064", - "reference": "18f2cbe1d46ad43c4d3bd45e5e6279172068e064", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c51407623959a626784ff302419026f56dc4e1ba", + "reference": "c51407623959a626784ff302419026f56dc4e1ba", "shasum": "" }, "require": { @@ -7215,7 +7225,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.3.5" + "source": "https://github.com/symfony/twig-bridge/tree/v6.3.8" }, "funding": [ { @@ -7231,20 +7241,20 @@ "type": "tidelift" } ], - "time": "2023-09-12T06:57:20+00:00" + "time": "2023-11-09T21:20:12+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.3.0", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea" + "reference": "82429320fe931dd50825ec08140c54b3a315bf79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea", - "reference": "d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/82429320fe931dd50825ec08140c54b3a315bf79", + "reference": "82429320fe931dd50825ec08140c54b3a315bf79", "shasum": "" }, "require": { @@ -7300,7 +7310,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.3.0" + "source": "https://github.com/symfony/twig-bundle/tree/v6.3.8" }, "funding": [ { @@ -7316,20 +7326,20 @@ "type": "tidelift" } ], - "time": "2023-05-06T09:53:41+00:00" + "time": "2023-10-31T08:07:48+00:00" }, { "name": "symfony/validator", - "version": "v6.3.7", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "9cc736663fa5839b9710ac2c303bb0b951014fc1" + "reference": "c118889931856af47b0732b609f3ac2ddccd1da6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/9cc736663fa5839b9710ac2c303bb0b951014fc1", - "reference": "9cc736663fa5839b9710ac2c303bb0b951014fc1", + "url": "https://api.github.com/repos/symfony/validator/zipball/c118889931856af47b0732b609f3ac2ddccd1da6", + "reference": "c118889931856af47b0732b609f3ac2ddccd1da6", "shasum": "" }, "require": { @@ -7396,7 +7406,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.3.7" + "source": "https://github.com/symfony/validator/tree/v6.3.9" }, "funding": [ { @@ -7412,20 +7422,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:11:45+00:00" + "time": "2023-11-29T07:44:47+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.6", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97" + "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/999ede244507c32b8e43aebaa10e9fce20de7c97", - "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/81acabba9046550e89634876ca64bfcd3c06aa0a", + "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a", "shasum": "" }, "require": { @@ -7480,7 +7490,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.6" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.8" }, "funding": [ { @@ -7496,20 +7506,20 @@ "type": "tidelift" } ], - "time": "2023-10-12T18:45:56+00:00" + "time": "2023-11-08T10:42:36+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.3.6", + "version": "v6.3.10", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "374d289c13cb989027274c86206ddc63b16a2441" + "reference": "7bfcf232a9c7e4acad00e96774e340eb86d10bf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/374d289c13cb989027274c86206ddc63b16a2441", - "reference": "374d289c13cb989027274c86206ddc63b16a2441", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/7bfcf232a9c7e4acad00e96774e340eb86d10bf0", + "reference": "7bfcf232a9c7e4acad00e96774e340eb86d10bf0", "shasum": "" }, "require": { @@ -7554,7 +7564,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.6" + "source": "https://github.com/symfony/var-exporter/tree/v6.3.10" }, "funding": [ { @@ -7570,7 +7580,7 @@ "type": "tidelift" } ], - "time": "2023-10-13T09:16:49+00:00" + "time": "2023-11-29T16:00:50+00:00" }, { "name": "symfony/web-link", @@ -7657,16 +7667,16 @@ }, { "name": "symfony/yaml", - "version": "v6.3.7", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "9758b6c69d179936435d0ffb577c3708d57e38a8" + "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/9758b6c69d179936435d0ffb577c3708d57e38a8", - "reference": "9758b6c69d179936435d0ffb577c3708d57e38a8", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3493af8a8dad7fa91c77fa473ba23ecd95334a92", + "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92", "shasum": "" }, "require": { @@ -7709,7 +7719,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.7" + "source": "https://github.com/symfony/yaml/tree/v6.3.8" }, "funding": [ { @@ -7725,31 +7735,31 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:31:00+00:00" + "time": "2023-11-06T10:58:05+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "f10baafe6eb0ecd615d52d5cbfb713a39f68e8f3" + "reference": "32807183753de0388c8e59f7ac2d13bb47311140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/f10baafe6eb0ecd615d52d5cbfb713a39f68e8f3", - "reference": "f10baafe6eb0ecd615d52d5cbfb713a39f68e8f3", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/32807183753de0388c8e59f7ac2d13bb47311140", + "reference": "32807183753de0388c8e59f7ac2d13bb47311140", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/framework-bundle": "^5.4|^6.0", - "symfony/twig-bundle": "^5.4|^6.0", - "twig/twig": "^2.7|^3.0" + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "twig/twig": "^3.0" }, "require-dev": { "league/commonmark": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4|^6.3", + "symfony/phpunit-bridge": "^6.4|^7.0", "twig/cache-extra": "^3.0", "twig/cssinliner-extra": "^2.12|^3.0", "twig/html-extra": "^2.12|^3.0", @@ -7787,7 +7797,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.7.1" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.8.0" }, "funding": [ { @@ -7799,29 +7809,29 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T14:02:01+00:00" }, { "name": "twig/intl-extra", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "4f4fe572f635534649cc069e1dafe4a8ad63774d" + "reference": "7b3db67c700735f473a265a97e1adaeba3e6ca0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/4f4fe572f635534649cc069e1dafe4a8ad63774d", - "reference": "4f4fe572f635534649cc069e1dafe4a8ad63774d", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/7b3db67c700735f473a265a97e1adaeba3e6ca0c", + "reference": "7b3db67c700735f473a265a97e1adaeba3e6ca0c", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/intl": "^5.4|^6.0", - "twig/twig": "^2.7|^3.0" + "php": ">=7.2.5", + "symfony/intl": "^5.4|^6.0|^7.0", + "twig/twig": "^3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4|^6.3" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7851,7 +7861,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.7.1" + "source": "https://github.com/twigphp/intl-extra/tree/v3.8.0" }, "funding": [ { @@ -7863,32 +7873,32 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T17:27:48+00:00" }, { "name": "twig/markdown-extra", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/markdown-extra.git", - "reference": "83dfa86a0379f784ea30bdb9c15a356b8aabf780" + "reference": "b6e4954ab60030233df5d293886b5404558daac8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/83dfa86a0379f784ea30bdb9c15a356b8aabf780", - "reference": "83dfa86a0379f784ea30bdb9c15a356b8aabf780", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/b6e4954ab60030233df5d293886b5404558daac8", + "reference": "b6e4954ab60030233df5d293886b5404558daac8", "shasum": "" }, "require": { - "php": ">=7.1.3", - "twig/twig": "^2.7|^3.0" + "php": ">=7.2.5", + "twig/twig": "^3.0" }, "require-dev": { "erusev/parsedown": "^1.7", "league/commonmark": "^1.0|^2.0", "league/html-to-markdown": "^4.8|^5.0", "michelf/php-markdown": "^1.8|^2.0", - "symfony/phpunit-bridge": "^5.4|^6.3" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7919,7 +7929,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/markdown-extra/tree/v3.7.1" + "source": "https://github.com/twigphp/markdown-extra/tree/v3.8.0" }, "funding": [ { @@ -7931,30 +7941,30 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T14:02:01+00:00" }, { "name": "twig/string-extra", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", - "reference": "7230d630a25e91cd91a2bd8e2f0e872962507eab" + "reference": "b0c9037d96baff79abe368dc092a59b726517548" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/string-extra/zipball/7230d630a25e91cd91a2bd8e2f0e872962507eab", - "reference": "7230d630a25e91cd91a2bd8e2f0e872962507eab", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/b0c9037d96baff79abe368dc092a59b726517548", + "reference": "b0c9037d96baff79abe368dc092a59b726517548", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/string": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^1.1|^2|^3", - "twig/twig": "^2.7|^3.0" + "twig/twig": "^3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4|^6.3" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7986,7 +7996,7 @@ "unicode" ], "support": { - "source": "https://github.com/twigphp/string-extra/tree/v3.7.1" + "source": "https://github.com/twigphp/string-extra/tree/v3.8.0" }, "funding": [ { @@ -7998,30 +8008,31 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T14:02:01+00:00" }, { "name": "twig/twig", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554" + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.22" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3" + "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" }, "type": "library", "autoload": { @@ -8057,7 +8068,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.7.1" + "source": "https://github.com/twigphp/Twig/tree/v3.8.0" }, "funding": [ { @@ -8069,7 +8080,7 @@ "type": "tidelift" } ], - "time": "2023-08-28T11:09:02+00:00" + "time": "2023-11-21T18:54:41+00:00" }, { "name": "webmozart/assert", @@ -8786,16 +8797,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.13", + "version": "9.6.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", "shasum": "" }, "require": { @@ -8869,7 +8880,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.13" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" }, "funding": [ { @@ -8885,7 +8896,7 @@ "type": "tidelift" } ], - "time": "2023-09-19T05:39:22+00:00" + "time": "2023-12-01T16:55:19+00:00" }, { "name": "sebastian/cli-parser", @@ -9853,16 +9864,16 @@ }, { "name": "symfony/browser-kit", - "version": "v6.3.2", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d" + "reference": "e270297dbee59168274c2b535ab1bccd593e6ffe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ca4a988488f61ac18f8f845445eabdd36f89aa8d", - "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e270297dbee59168274c2b535ab1bccd593e6ffe", + "reference": "e270297dbee59168274c2b535ab1bccd593e6ffe", "shasum": "" }, "require": { @@ -9901,7 +9912,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.3.2" + "source": "https://github.com/symfony/browser-kit/tree/v6.3.8" }, "funding": [ { @@ -9917,7 +9928,7 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2023-10-31T08:07:48+00:00" }, { "name": "symfony/css-selector", @@ -10060,16 +10071,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v6.3.4", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" + "reference": "b7065c123ae977a008568a3d016a17a110df7a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b7065c123ae977a008568a3d016a17a110df7a8e", + "reference": "b7065c123ae977a008568a3d016a17a110df7a8e", "shasum": "" }, "require": { @@ -10107,7 +10118,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" + "source": "https://github.com/symfony/dom-crawler/tree/v6.3.9" }, "funding": [ { @@ -10123,20 +10134,20 @@ "type": "tidelift" } ], - "time": "2023-08-01T07:43:40+00:00" + "time": "2023-11-20T16:36:29+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.51.1", + "version": "v1.52.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "0890fd3cf1e2a5221f9b3c6ee1769c537aef683d" + "reference": "112f9466c94a46ca33dc441eee59a12cd1790757" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/0890fd3cf1e2a5221f9b3c6ee1769c537aef683d", - "reference": "0890fd3cf1e2a5221f9b3c6ee1769c537aef683d", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/112f9466c94a46ca33dc441eee59a12cd1790757", + "reference": "112f9466c94a46ca33dc441eee59a12cd1790757", "shasum": "" }, "require": { @@ -10199,7 +10210,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.51.1" + "source": "https://github.com/symfony/maker-bundle/tree/v1.52.0" }, "funding": [ { @@ -10215,20 +10226,20 @@ "type": "tidelift" } ], - "time": "2023-09-18T18:17:31+00:00" + "time": "2023-10-31T18:23:49+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.3.6", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d" + "reference": "cca5373a41d45edbeaf38b7b67f376da2205ff95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d", - "reference": "c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cca5373a41d45edbeaf38b7b67f376da2205ff95", + "reference": "cca5373a41d45edbeaf38b7b67f376da2205ff95", "shasum": "" }, "require": { @@ -10239,7 +10250,7 @@ }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/error-handler": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", "symfony/polyfill-php81": "^1.27" }, "bin": [ @@ -10280,7 +10291,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.6" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.1" }, "funding": [ { @@ -10296,26 +10307,26 @@ "type": "tidelift" } ], - "time": "2023-10-12T15:02:41+00:00" + "time": "2023-12-01T09:25:07+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.3.6", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd" + "reference": "4167c20cbdbb1152007fa731718c8c0362f28617" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd", - "reference": "249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4167c20cbdbb1152007fa731718c8c0362f28617", + "reference": "4167c20cbdbb1152007fa731718c8c0362f28617", "shasum": "" }, "require": { "php": ">=8.1", "symfony/config": "^5.4|^6.0", - "symfony/framework-bundle": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0,<6.4", "symfony/http-kernel": "^6.3", "symfony/routing": "^5.4|^6.0", "symfony/twig-bundle": "^5.4|^6.0", @@ -10361,7 +10372,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.3.6" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.3.8" }, "funding": [ { @@ -10377,20 +10388,20 @@ "type": "tidelift" } ], - "time": "2023-10-11T18:18:20+00:00" + "time": "2023-10-31T14:41:59+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -10419,7 +10430,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -10427,7 +10438,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" } ], "aliases": [], From fe608cff8f47e57223d561547ac5a34417a6d7f2 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 8 Dec 2023 02:19:01 +0200 Subject: [PATCH 42/59] update version --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 0ee2aaf..ee85b83 100644 --- a/.env +++ b/.env @@ -48,7 +48,7 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 # YGGtracker # Application version, used for API and media cache -APP_VERSION='2.5.0' +APP_VERSION=2.6.0 # Application name APP_NAME=YGGtracker From 6603790abaa6cf6d3c4826997e6c768c416c0da5 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 8 Dec 2023 04:09:38 +0200 Subject: [PATCH 43/59] disable markdown as unsafe for remote content without additional filters implementation --- templates/default/torrent/info.html.twig | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index c674b7f..a7aadd9 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -238,7 +238,9 @@ {{ 'Source' | trans }} - {{ file.source | url_to_markdown | markdown_to_html }} + {# disable markdown as unsafe for unfiltered content #} + {#{{ file.source | url_to_markdown | markdown_to_html }}#} + {{ file.source }} {% endif %} @@ -248,7 +250,9 @@ {{ 'Software' | trans }} - {{ file.software | url_to_markdown | markdown_to_html }} + {# disable markdown as unsafe for unfiltered content #} + {#{{ file.software | url_to_markdown | markdown_to_html }}#} + {{ file.software }} {% endif %} @@ -258,7 +262,9 @@ {{ 'Comment' | trans }} - {{ file.comment | url_to_markdown | markdown_to_html }} + {# disable markdown as unsafe for unfiltered content #} + {#{{ file.comment | url_to_markdown | markdown_to_html }}#} + {{ file.comment }} {% endif %} From 9d596de6104fbb8293d69f04a8e4949252108c34 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 8 Dec 2023 04:10:51 +0200 Subject: [PATCH 44/59] update version --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index ee85b83..b9936ac 100644 --- a/.env +++ b/.env @@ -48,7 +48,7 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 # YGGtracker # Application version, used for API and media cache -APP_VERSION=2.6.0 +APP_VERSION=2.6.1 # Application name APP_NAME=YGGtracker From 3c6b1d6ab76f05fad7fccd86df4fd403c44599a6 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 8 Dec 2023 20:06:47 +0200 Subject: [PATCH 45/59] allow markdown from whitelist only --- templates/default/torrent/info.html.twig | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index a7aadd9..2877ae7 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -238,9 +238,8 @@ {{ 'Source' | trans }} - {# disable markdown as unsafe for unfiltered content #} - {#{{ file.source | url_to_markdown | markdown_to_html }}#} - {{ file.source }} + {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} + {{ file.source | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} {% endif %} @@ -250,9 +249,8 @@ {{ 'Software' | trans }} - {# disable markdown as unsafe for unfiltered content #} - {#{{ file.software | url_to_markdown | markdown_to_html }}#} - {{ file.software }} + {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} + {{ file.software | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} {% endif %} @@ -262,9 +260,8 @@ {{ 'Comment' | trans }} - {# disable markdown as unsafe for unfiltered content #} - {#{{ file.comment | url_to_markdown | markdown_to_html }}#} - {{ file.comment }} + {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} + {{ file.comment | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} {% endif %} From 2f4dbff90df52bacc5696fdafa7e8c6cbca1602a Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 8 Dec 2023 20:18:28 +0200 Subject: [PATCH 46/59] add trim filters --- templates/default/torrent/info.html.twig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index 2877ae7..87dcdb1 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -239,7 +239,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.source | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} + {{ file.source | trim | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} {% endif %} @@ -250,7 +250,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.software | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} + {{ file.software | trim | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} {% endif %} @@ -261,7 +261,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.comment | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} + {{ file.comment | trim | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} {% endif %} From 7eb02d06cce937e216c757d68e6be7079ce0d9b3 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 8 Dec 2023 20:18:53 +0200 Subject: [PATCH 47/59] update version --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index b9936ac..a580afb 100644 --- a/.env +++ b/.env @@ -48,7 +48,7 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 # YGGtracker # Application version, used for API and media cache -APP_VERSION=2.6.1 +APP_VERSION=2.6.2 # Application name APP_NAME=YGGtracker From 10181a04f1a77c50473d6fb71e431950175fbd68 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 10 Dec 2023 01:55:49 +0200 Subject: [PATCH 48/59] hide header description #32 --- templates/default/layout.html.twig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/templates/default/layout.html.twig b/templates/default/layout.html.twig index b4c9100..99c0eeb 100644 --- a/templates/default/layout.html.twig +++ b/templates/default/layout.html.twig @@ -16,12 +16,14 @@
- + {#32
{{ 'Upload any torrent - download with Yggdrasil' | trans | format(path('torrent_submit')) | raw }}
+ #} {% block header_search %} {{ render(controller( 'App\\Controller\\SearchController::module', From bff196207195b4416e4c33dc3c829699d1cfacbb Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 10 Dec 2023 22:15:59 +0200 Subject: [PATCH 49/59] undefined variable --- src/Controller/SearchController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Controller/SearchController.php b/src/Controller/SearchController.php index caa3848..8cb63bc 100644 --- a/src/Controller/SearchController.php +++ b/src/Controller/SearchController.php @@ -24,6 +24,7 @@ class SearchController extends AbstractController // Defaults $locales = []; $categories = []; + $sensitive = []; // Request $query = $request->get('query') ? urldecode($request->get('query')) : ''; @@ -65,7 +66,7 @@ class SearchController extends AbstractController $keywords, [$locale], $request->get('categories') ? $request->get('categories') : $user->getCategories(), - $sensitive, + $request->get('sensitive') ? null : false, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ) @@ -94,7 +95,7 @@ class SearchController extends AbstractController $keywords, $request->get('locales') ? $request->get('locales') : $user->getLocales(), [$category], - $sensitive, + $request->get('sensitive') ? null : false, !$user->isModerator() ? true : null, !$user->isModerator() ? true : null, ) From 6c775f822cb0a733df642e220af53c8ab72f840b Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 23 Dec 2023 07:56:54 +0200 Subject: [PATCH 50/59] fix torrent description filters --- templates/default/torrent/info.html.twig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index 87dcdb1..e915211 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -239,7 +239,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.source | trim | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} + {{ file.comment | trim | striptags | url_to_markdown | markdown_to_html | nl2br }} {% endif %} @@ -250,7 +250,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.software | trim | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} + {{ file.comment | trim | striptags | url_to_markdown | markdown_to_html | nl2br }} {% endif %} @@ -261,7 +261,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.comment | trim | striptags | markdown_to_html | striptags | url_to_markdown | markdown_to_html }} + {{ file.comment | trim | striptags | url_to_markdown | markdown_to_html | nl2br }} {% endif %} From e780c5b4b584e0e9c010cc1e72f293f5715a3efb Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 23 Dec 2023 08:18:25 +0200 Subject: [PATCH 51/59] fix description variables --- templates/default/torrent/info.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/default/torrent/info.html.twig b/templates/default/torrent/info.html.twig index e915211..dda2a72 100644 --- a/templates/default/torrent/info.html.twig +++ b/templates/default/torrent/info.html.twig @@ -239,7 +239,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.comment | trim | striptags | url_to_markdown | markdown_to_html | nl2br }} + {{ file.source | trim | striptags | url_to_markdown | markdown_to_html | nl2br }} {% endif %} @@ -250,7 +250,7 @@ {# strip all tags then apply whitelist markdown filters to prevent ping from remote #} - {{ file.comment | trim | striptags | url_to_markdown | markdown_to_html | nl2br }} + {{ file.software | trim | striptags | url_to_markdown | markdown_to_html | nl2br }} {% endif %} From 95addf0c48502041c822c192a6c0d19e0344bc74 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 1 Feb 2024 16:59:14 +0200 Subject: [PATCH 52/59] add crawler --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index a580afb..a59ee2e 100644 --- a/.env +++ b/.env @@ -88,7 +88,7 @@ APP_POSTERS=1 APP_TRACKERS=http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce|http://[200:1e2f:e608:eb3a:2bf:1e62:87ba:e2f7]/announce|http://[316:c51a:62a3:8b9::5]/announce # List of crawlers where ignored in actions and activity features -APP_CRAWLERS=201:23b4:991a:634d:8359:4521:5576:15b7|30a:5fad::e|202:f2bc:f800:7cc4:c109:7857:5cae:6630 +APP_CRAWLERS=201:23b4:991a:634d:8359:4521:5576:15b7|30a:5fad::e|202:f2bc:f800:7cc4:c109:7857:5cae:6630|200:1554:e730:4030:605b:47be:6fb6:7b11 # Max torrent filesize for uploads (check upload_max_filesize in the php.ini) APP_TORRENT_FILE_SIZE_MAX=1024000 From 1281acea22225c5468bc2bfcd3811e7084af8b8f Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 5 Aug 2025 21:27:26 +0300 Subject: [PATCH 53/59] remove deprecated info --- README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/README.md b/README.md index 5246d41..1e46e6d 100644 --- a/README.md +++ b/README.md @@ -85,15 +85,6 @@ git checkout main git checkout -b my-pr-branch-name ``` -#### Donate to contributors - -* @d47081: - - + ![wakatime](https://wakatime.com/badge/user/0b7fe6c1-b091-4c98-b930-75cfee17c7a5/project/059ec567-2c65-4c65-a48e-51dcc366f1a0.svg) - + [BTC](https://www.blockchain.com/explorer/addresses/btc/bc1qngdf2kwty6djjqpk0ynkpq9wmlrmtm7e0c534y) | [LTC](https://live.blockcypher.com/ltc/address/LUSiqzKsfB1vBLvpu515DZktG9ioKqLyj7) | [XMR](835gSR1Uvka19gnWPkU2pyRozZugRZSPHDuFL6YajaAqjEtMwSPr4jafM8idRuBWo7AWD3pwFQSYRMRW9XezqrK4BEXBgXE) | [ZEPH](ZEPHsADHXqnhfWhXrRcXnyBQMucE3NM7Ng5ZVB99XwA38PTnbjLKpCwcQVgoie8EJuWozKgBiTmDFW4iY7fNEgSEWyAy4dotqtX) - + Support our server by order [Linux VPS](https://www.yourserver.se/portal/aff.php?aff=610) - + Inspiration by [SomaFM Deep Space One](https://somafm.com/deepspaceone/) - #### License * Engine sources [MIT License](https://github.com/YGGverse/YGGtracker/blob/main/LICENSE) From 09811cd801207de20e935a0d0045ad7d1a4066c3 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 5 Aug 2025 21:30:28 +0300 Subject: [PATCH 54/59] add reference to btracker project --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 1e46e6d..c56d795 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,9 @@ YGGtracker is catalog, open tracker and social network with many features that a Engine uses IPv6 `0200::/7` addresses to identify users without registration. +> [!INFO] +> Take a look at [βtracker](https://github.com/yggverse/btracker) - the modern BitTorrent aggregation catalog written in Rust! + #### [Showcase](https://github.com/YGGverse/YGGtracker/wiki/Showcase) ![Pasted image 1](https://github.com/YGGverse/YGGtracker/assets/108541346/962f7850-01e1-4add-9dbe-c11b80108a75) From ee9b7be6ac14036a9e0f06649c18da45e2c60b47 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 5 Aug 2025 21:30:58 +0300 Subject: [PATCH 55/59] fix github markdown --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c56d795..349a917 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ YGGtracker is catalog, open tracker and social network with many features that a Engine uses IPv6 `0200::/7` addresses to identify users without registration. -> [!INFO] +> [!TIP] > Take a look at [βtracker](https://github.com/yggverse/btracker) - the modern BitTorrent aggregation catalog written in Rust! #### [Showcase](https://github.com/YGGverse/YGGtracker/wiki/Showcase) From 5a1ada42e70ace77f116e8462fe0d9f79f3aa3e5 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 5 Aug 2025 21:42:17 +0300 Subject: [PATCH 56/59] update readme --- README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 349a917..4bed054 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,14 @@ # YGGtracker -[![Crowdin](https://badges.crowdin.net/yggtracker/localized.svg)](https://crowdin.com/project/yggtracker) +> [!NOTE] +> Take a look at [βtracker](https://github.com/yggverse/btracker) - the modern aggregation alternative written in Rust! -BitTorrent Network for Yggdrasil +Social-oriented BitTorrent catalog for the [Yggdrasil network](https://github.com/yggdrasil-network) -YGGtracker is catalog, open tracker and social network with many features that allow to convert, filter and download any torrent in [Yggdrasil network](https://github.com/yggdrasil-network) by community. +YGGtracker is a manually operated catalog and social network that allows users to share their torrents in the local network. Engine uses IPv6 `0200::/7` addresses to identify users without registration. -> [!TIP] -> Take a look at [βtracker](https://github.com/yggverse/btracker) - the modern BitTorrent aggregation catalog written in Rust! - #### [Showcase](https://github.com/YGGverse/YGGtracker/wiki/Showcase) ![Pasted image 1](https://github.com/YGGverse/YGGtracker/assets/108541346/962f7850-01e1-4add-9dbe-c11b80108a75) @@ -73,7 +71,7 @@ Custom settings could be provided in the `/.env.local` file by overwriting defau #### Localization -Join community translations by [Crowdin](https://crowdin.com/project/yggtracker) +[![Crowdin](https://badges.crowdin.net/yggtracker/localized.svg)](https://crowdin.com/project/yggtracker) #### API From 7bcc52fcaec613f9c9200c5d8a72ccdeb6d25014 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 5 Aug 2025 21:44:31 +0300 Subject: [PATCH 57/59] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4bed054..375ea37 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ > [!NOTE] > Take a look at [βtracker](https://github.com/yggverse/btracker) - the modern aggregation alternative written in Rust! -Social-oriented BitTorrent catalog for the [Yggdrasil network](https://github.com/yggdrasil-network) +A social-oriented BitTorrent catalog for the [Yggdrasil](https://github.com/yggdrasil-network) network, written in the Symfony framework. YGGtracker is a manually operated catalog and social network that allows users to share their torrents in the local network. From 085e6174d91abd5cd8c32457a98b46f89166c0c2 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 5 Aug 2025 21:45:08 +0300 Subject: [PATCH 58/59] update readme --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 375ea37..544c7ba 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,7 @@ A social-oriented BitTorrent catalog for the [Yggdrasil](https://github.com/yggdrasil-network) network, written in the Symfony framework. -YGGtracker is a manually operated catalog and social network that allows users to share their torrents in the local network. - -Engine uses IPv6 `0200::/7` addresses to identify users without registration. +YGGtracker is a manually operated catalog and social network that allows users to share their torrents in the local network. Engine uses IPv6 `0200::/7` addresses to identify users without registration. #### [Showcase](https://github.com/YGGverse/YGGtracker/wiki/Showcase) From d72bda1e71266e3f7f1f83ba51aec1f11365709b Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 5 Aug 2025 21:46:49 +0300 Subject: [PATCH 59/59] remove deprecated info --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 544c7ba..6ab362a 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,6 @@ YGGtracker is a manually operated catalog and social network that allows users t ![Pasted image 1](https://github.com/YGGverse/YGGtracker/assets/108541346/962f7850-01e1-4add-9dbe-c11b80108a75) -#### Instances - -* `http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/` | [tracker.ygg](http://tracker.ygg) - + `ftp://[201:23b4:991a:634d:8359:4521:5576:15b7]:21/yggtracker/` - wanted torrents - #### Installation ```