From 89c1378fb637c63420d9a9ff49fcf8716b49cb88 Mon Sep 17 00:00:00 2001 From: Charly Date: Mon, 15 Jul 2024 12:36:33 +0200 Subject: [PATCH 1/9] sf6 --- README.md | 2 +- Resources/config/services.yml | 3 --- Tests/Scenario/AdminController.php | 5 ----- Tests/Scenario/HttpResponseTest.php | 7 ------- Tests/Scenario/ThreadTest.php | 1 - Tests/config/config.yaml | 16 ---------------- 6 files changed, 1 insertion(+), 33 deletions(-) diff --git a/README.md b/README.md index b4ab71f..4912faa 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ WorkingForumBundle ENGLISH ================= -A forum bundle for Symfony 5/6, easy to use with a lot of features +A forum bundle for Symfony 5/6/7, easy to use with a lot of features This bundle work with your user bundle with no extra configuration (which can extend FOSUserBundle) The bundle was made to be customizable and overridable to fit your application diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 905f8fb..181805f 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -17,9 +17,6 @@ services: Yosimitso\WorkingForumBundle\: resource: '../../{Event,Form,ParamConverter,Repository,Security,Service,Twig,Util}' - #exclude: '../../Entity/UserTest.php' -# exclude: '../../{DependencyInjection,Entity,Migrations,Tests,Kernel.php,vendor}' - Yosimitso\WorkingForumBundle\Controller\: resource: '../../Controller/**' diff --git a/Tests/Scenario/AdminController.php b/Tests/Scenario/AdminController.php index 5b39e66..1193991 100644 --- a/Tests/Scenario/AdminController.php +++ b/Tests/Scenario/AdminController.php @@ -4,11 +4,6 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -/** - * Class ThreadControllerTest - * - * @package Yosimitso\WorkingForumBundle\Tests\Controller - */ class AdminController extends WebTestCase { private $client; diff --git a/Tests/Scenario/HttpResponseTest.php b/Tests/Scenario/HttpResponseTest.php index 15f1e53..e2a3ebe 100644 --- a/Tests/Scenario/HttpResponseTest.php +++ b/Tests/Scenario/HttpResponseTest.php @@ -19,15 +19,8 @@ public function setUp() : void { $client = static::createClient(); $container = static::$kernel->getContainer(); -// $session = $container->get('request_stack')->getSession(); $person = self::$kernel->getContainer()->get('doctrine')->getRepository(UserTest::class)->findAll()[2]; $client->loginUser($person); -// $token = new UsernamePasswordToken($person, null, 'main', $person->getRoles()); -// $session->set('_security_main', serialize($token)); -// $session->save(); -// -// $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId())); - $this->client = $client; } /** diff --git a/Tests/Scenario/ThreadTest.php b/Tests/Scenario/ThreadTest.php index e85f922..628d657 100644 --- a/Tests/Scenario/ThreadTest.php +++ b/Tests/Scenario/ThreadTest.php @@ -14,7 +14,6 @@ class ThreadTest extends WebTestCase use ReloadDatabaseTrait; private $client; - private function getModeratorUserClient() { $client = static::createClient(); diff --git a/Tests/config/config.yaml b/Tests/config/config.yaml index 6c4ffc6..af083f1 100644 --- a/Tests/config/config.yaml +++ b/Tests/config/config.yaml @@ -85,20 +85,4 @@ security: pattern: ^/ provider: main http_basic: ~ -# form_login: -# login_path: login -# check_path: login_check -# csrf_token_generator: security.csrf.token_manager -# default_target_path: / -# logout: -# path: logout -# target: / -#sensio_framework_extra: -# router: { annotations: true } -# security: { annotations: true } - - -# Yosimitso\WorkingForumBundle\: -# resource: '../{Controller,Entity,Event,Form,ParamConverter,Repository,Security,Service,Twig,Util}' -# exclude: '../Entity/UserTest.php' From 96dc0c8a63209732bcdc7b463bd99ec1ec69156d Mon Sep 17 00:00:00 2001 From: Charly Date: Mon, 15 Jul 2024 12:46:59 +0200 Subject: [PATCH 2/9] composer.json for sf7 --- composer.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/composer.json b/composer.json index ad8aa32..7dc5ced 100644 --- a/composer.json +++ b/composer.json @@ -7,28 +7,28 @@ "ext-mbstring": "*", "knplabs/knp-paginator-bundle": "^5.0", "knplabs/knp-markdown-bundle": "^1.9.0", - "symfony/framework-bundle": ">=5.0|>=6.2", - "symfony/translation": ">=5.0|>=6.2", - "symfony/security-bundle": ">=5.0|>=6.2", - "symfony/templating": ">=5.0|>=6.2", - "symfony/asset": ">=5.0|>=6.2", - "symfony/dependency-injection": ">=5.0|>=6.2", - "symfony/form": ">=5.0|>=6.2", + "symfony/framework-bundle": ">=5.0|>=6.2|>=7.0", + "symfony/translation": ">=5.0|>=6.2|>=7.0", + "symfony/security-bundle": ">=5.0|>=6.2|>=7.0", + "symfony/templating": ">=5.0|>=6.2|>=7.0", + "symfony/asset": ">=5.0|>=6.2|>=7.0", + "symfony/dependency-injection": ">=5.0|>=6.2|>=7.0", + "symfony/form": ">=5.0|>=6.2|>=7.0", "doctrine/common": "^3.0", "doctrine/orm": "^2.8", "twig/twig": "^2.0|^3.0", - "symfony/twig-bridge": ">= 5.4|>=6.2", + "symfony/twig-bridge": ">= 5.4|>=6.2|>=7.0", "twig/extra-bundle": ">= 3.3", "doctrine/doctrine-bundle": ">=2.6", - "symfony/validator": ">=5.0|>=6.2", + "symfony/validator": ">=5.0|>=6.2|>=7.0", "doctrine/annotations": "^1.12", - "symfony/mime": ">=5.0|>=6.2", + "symfony/mime": ">=5.0|>=6.2|>=7.0", "knplabs/knp-time-bundle": "^1.20", "symfony/messenger": ">=5.2", - "symfony/mailer": ">=5.4|>=6.2", - "symfony/security-core": ">=5.4|>=6.2", + "symfony/mailer": ">=5.4|>=6.2|>=7.0", + "symfony/security-core": ">=5.4|>=6.2|>=7.0", "egulias/email-validator": "^3.1", - "symfony/expression-language": "^6.3", + "symfony/expression-language": "^6.3|>=7.0", "sensio/framework-extra-bundle": "^6.2" }, "license": "MIT", @@ -49,10 +49,10 @@ "phpunit/phpunit": "^9.6", "yosimitso/mockdoctrinemanager": "dev-master", "phpstan/phpstan-symfony": "^1.3.2", - "symfony/browser-kit": ">=5.0|>=6.2", + "symfony/browser-kit": ">=5.0|>=6.2|>=7.0", "symfony/panther": "^2.1", "hautelook/alice-bundle": "^2.13", - "symfony/css-selector": ">=5.0|>=6.2", + "symfony/css-selector": ">=5.0|>=6.2|>=7.0", "phpstan/phpstan-doctrine": "^1.3.2" } } From f442650d624293b7e5be89980dd8210605619724 Mon Sep 17 00:00:00 2001 From: Charly Date: Mon, 15 Jul 2024 13:00:09 +0200 Subject: [PATCH 3/9] composer.json for sf7 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 7dc5ced..1906544 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "require": { "php": ">=8.2.0", "ext-mbstring": "*", - "knplabs/knp-paginator-bundle": "^5.0", + "knplabs/knp-paginator-bundle": "^6.0", "knplabs/knp-markdown-bundle": "^1.9.0", "symfony/framework-bundle": ">=5.0|>=6.2|>=7.0", "symfony/translation": ">=5.0|>=6.2|>=7.0", From 4e67f82e264593ff7aabea2d65b5508c1cffb806 Mon Sep 17 00:00:00 2001 From: Charly Date: Mon, 15 Jul 2024 13:06:36 +0200 Subject: [PATCH 4/9] composer.json for sf7 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 1906544..93a3d96 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "php": ">=8.2.0", "ext-mbstring": "*", "knplabs/knp-paginator-bundle": "^6.0", - "knplabs/knp-markdown-bundle": "^1.9.0", + "twig/markdown-extra": "^3.10", "symfony/framework-bundle": ">=5.0|>=6.2|>=7.0", "symfony/translation": ">=5.0|>=6.2|>=7.0", "symfony/security-bundle": ">=5.0|>=6.2|>=7.0", From c2f5438ab9d10deff11e292c1096d619f7a7b03a Mon Sep 17 00:00:00 2001 From: Charly Date: Mon, 15 Jul 2024 14:50:01 +0200 Subject: [PATCH 5/9] composer.json for sf7 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 93a3d96..794b16a 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "symfony/validator": ">=5.0|>=6.2|>=7.0", "doctrine/annotations": "^1.12", "symfony/mime": ">=5.0|>=6.2|>=7.0", - "knplabs/knp-time-bundle": "^1.20", + "knplabs/knp-time-bundle": "^2.4", "symfony/messenger": ">=5.2", "symfony/mailer": ">=5.4|>=6.2|>=7.0", "symfony/security-core": ">=5.4|>=6.2|>=7.0", From b7cfab46afa760304418c9f3de0c441de42af856 Mon Sep 17 00:00:00 2001 From: Charly Date: Mon, 15 Jul 2024 14:52:20 +0200 Subject: [PATCH 6/9] composer.json for sf7 --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 794b16a..f77a266 100644 --- a/composer.json +++ b/composer.json @@ -28,8 +28,7 @@ "symfony/mailer": ">=5.4|>=6.2|>=7.0", "symfony/security-core": ">=5.4|>=6.2|>=7.0", "egulias/email-validator": "^3.1", - "symfony/expression-language": "^6.3|>=7.0", - "sensio/framework-extra-bundle": "^6.2" + "symfony/expression-language": "^6.3|>=7.0" }, "license": "MIT", "authors": [ From dcd12177b420bd3a27a45b4e44e855d469294fa3 Mon Sep 17 00:00:00 2001 From: Charly Date: Tue, 16 Jul 2024 00:01:28 +0200 Subject: [PATCH 7/9] sf7 wip --- .../GenericArgumentResolver.php | 26 +++++++++------- Controller/Admin/AdminController.php | 5 +-- Controller/ForumController.php | 1 - DependencyInjection/Configuration.php | 2 +- Resources/config/routing.yml | 2 +- Resources/config/services.yml | 31 ++++++++++--------- Resources/views/Post/post.html.twig | 2 +- .../GenericParamConverterTest.php | 21 ++++++------- Tests/config/services.yaml | 30 +++++++++--------- composer.json | 3 +- phpunit.xml | 2 +- 11 files changed, 65 insertions(+), 60 deletions(-) rename ParamConverter/GenericParamConverter.php => ArgumentResolver/GenericArgumentResolver.php (65%) diff --git a/ParamConverter/GenericParamConverter.php b/ArgumentResolver/GenericArgumentResolver.php similarity index 65% rename from ParamConverter/GenericParamConverter.php rename to ArgumentResolver/GenericArgumentResolver.php index 6f76b8d..be49df9 100644 --- a/ParamConverter/GenericParamConverter.php +++ b/ArgumentResolver/GenericArgumentResolver.php @@ -1,11 +1,9 @@ attributes->get($configuration->getName()); + if (!$this->supports($request, $argument)) { + return []; + } + $value = $request->attributes->get($argument->getName()); $param = (is_numeric($value)) ? 'id' : 'slug'; $entity = $this->em->getRepository($this->classname)->findOneBy([$param => $value]); if (is_null($entity)) { - throw new NotFoundHttpException($configuration->getName().' "'.$value.'" not found'); + throw new NotFoundHttpException($argument->getName().' "'.$value.'" not found'); } $subforumAuthorization = null; @@ -46,13 +50,13 @@ public function apply(Request $request, ParamConverter $configuration) throw new UnauthorizedHttpException('Forbidden'); } - $request->attributes->set($configuration->getName(), $entity); + $request->attributes->set($argument->getName(), $entity); - return true; + return [$entity]; } - function supports(ParamConverter $configuration) + function supports(Request $request, ArgumentMetadata $argument) { - return ($this->classname === $configuration->getClass()); + return ($this->classname === $argument->getType()); } } diff --git a/Controller/Admin/AdminController.php b/Controller/Admin/AdminController.php index e867f46..fdecac2 100644 --- a/Controller/Admin/AdminController.php +++ b/Controller/Admin/AdminController.php @@ -2,15 +2,16 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; +use Symfony\Component\Security\Http\Attribute\IsGranted; use Yosimitso\WorkingForumBundle\Controller\BaseController; +use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Routing\Attribute\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Component\HttpFoundation\Response; use Yosimitso\WorkingForumBundle\Entity\Forum; use Yosimitso\WorkingForumBundle\Entity\PostReport; #[Route('/admin')] -#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] +#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")'))] class AdminController extends BaseController { #[Route('', name: 'workingforum_admin')] diff --git a/Controller/ForumController.php b/Controller/ForumController.php index d812ae8..87b1938 100644 --- a/Controller/ForumController.php +++ b/Controller/ForumController.php @@ -10,7 +10,6 @@ use Yosimitso\WorkingForumBundle\Entity\Subforum; use Yosimitso\WorkingForumBundle\Entity\Thread; use Yosimitso\WorkingForumBundle\Form\RulesType; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; #[Route('/')] class ForumController extends BaseController diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index cee48d6..cde69a4 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -20,7 +20,7 @@ class Configuration implements ConfigurationInterface /** * {@inheritDoc} */ - public function getConfigTreeBuilder() + public function getConfigTreeBuilder(): TreeBuilder { $treeBuilder = new TreeBuilder('yosimitso_working_forum'); $treeBuilder diff --git a/Resources/config/routing.yml b/Resources/config/routing.yml index 76b6dd7..9c4b765 100644 --- a/Resources/config/routing.yml +++ b/Resources/config/routing.yml @@ -1,4 +1,4 @@ controller_routing: resource: "@YosimitsoWorkingForumBundle/Controller/**/*" - type: annotation + type: attribute diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 181805f..8360500 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -16,7 +16,7 @@ services: $themeColor: '%yosimitso_working_forum.theme_color%' Yosimitso\WorkingForumBundle\: - resource: '../../{Event,Form,ParamConverter,Repository,Security,Service,Twig,Util}' + resource: '../../{Event,Form,ArgumentResolver,Repository,Security,Service,Twig,Util}' Yosimitso\WorkingForumBundle\Controller\: resource: '../../Controller/**' @@ -61,43 +61,44 @@ services: arguments: - '@service_container' - Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter: + Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver: autowire: false autoconfigure: false - yosimitso_workingforum.param_converters.forum: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + yosimitso_workingforum.argument_resolver.forum: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Forum' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } - - yosimitso_workingforum.param_converters.subforum: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + + yosimitso_workingforum.argument_resolver.subforum: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Subforum' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } - yosimitso_workingforum.param_converters.thread: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + yosimitso_workingforum.argument_resolver.thread: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Thread' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } - yosimitso_workingforum.param_converters.post: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + yosimitso_workingforum.argument_resolver.post: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Post' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } + diff --git a/Resources/views/Post/post.html.twig b/Resources/views/Post/post.html.twig index e47a4b6..9965cdb 100644 --- a/Resources/views/Post/post.html.twig +++ b/Resources/views/Post/post.html.twig @@ -50,7 +50,7 @@ {# POST CONTENT #}
{% if post.moderateReason is empty %} - {{ post.content | quote | markdown | replace({'\n':'
'})| smiley | raw }} + {{ post.content | quote | markdown_to_html | replace({'\n':'
'})| smiley | raw }} {% else %}

{{ 'forum.post_moderated' | trans }} {{ post.moderateReason }}

{% endif %} diff --git a/Tests/ParamConverter/GenericParamConverterTest.php b/Tests/ParamConverter/GenericParamConverterTest.php index 63e6bd4..366c1dd 100644 --- a/Tests/ParamConverter/GenericParamConverterTest.php +++ b/Tests/ParamConverter/GenericParamConverterTest.php @@ -1,21 +1,20 @@ getTestedClass(Forum::class); - $configuration = new ParamConverter([]); + $configuration = new ArgumentResolver([]); $configuration->setClass(Forum::class); $this->assertTrue($testedClass->supports($configuration)); @@ -48,7 +47,7 @@ public function testSupportForum() public function testSupportSubForum() { $testedClass = $this->getTestedClass(Subforum::class); - $configuration = new ParamConverter([]); + $configuration = new ArgumentResolver([]); $configuration->setClass(Subforum::class); $this->assertTrue($testedClass->supports($configuration)); @@ -57,7 +56,7 @@ public function testSupportSubForum() public function testSupportThread() { $testedClass = $this->getTestedClass(Thread::class); - $configuration = new ParamConverter([]); + $configuration = new ArgumentResolver([]); $configuration->setClass(Thread::class); $this->assertTrue($testedClass->supports($configuration)); @@ -66,7 +65,7 @@ public function testSupportThread() public function testSupportPost() { $testedClass = $this->getTestedClass(Post::class); - $configuration = new ParamConverter([]); + $configuration = new ArgumentResolver([]); $configuration->setClass(Post::class); $this->assertTrue($testedClass->supports($configuration)); @@ -75,9 +74,9 @@ public function testSupportPost() public function testNotSupportFile() { $testedClass = $this->getTestedClass(Forum::class); - $configuration = new ParamConverter([]); + $configuration = new ArgumentResolver([]); $configuration->setClass(File::class); $this->assertFalse($testedClass->supports($configuration)); } -} \ No newline at end of file +} diff --git a/Tests/config/services.yaml b/Tests/config/services.yaml index 7a767af..621fbc9 100644 --- a/Tests/config/services.yaml +++ b/Tests/config/services.yaml @@ -16,13 +16,13 @@ services: $themeColor: '%yosimitso_working_forum.theme_color%' Yosimitso\WorkingForumBundle\: - resource: '../../{Event,Form,ParamConverter,Repository,Security,Service,Twig,Util}' + resource: '../../{Event,Form,ArgumentResolver,Repository,Security,Service,Twig,Util}' # App\: # resource: '../{Entity}' Yosimitso\WorkingForumBundle\Tests\: - resource: '../../Tests/{ParamConverter}' + resource: '../../Tests/{ArgumentResolver}' #exclude: '../../Entity/UserTest' Yosimitso\WorkingForumBundle\Controller\: @@ -68,44 +68,44 @@ services: arguments: - '@service_container' - Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter: + Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver: autowire: false autoconfigure: false - yosimitso_workingforum.param_converters.forum: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + yosimitso_workingforum.argument_resolver.forum: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Forum' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } - yosimitso_workingforum.param_converters.subforum: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + yosimitso_workingforum.argument_resolver.subforum: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Subforum' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } - yosimitso_workingforum.param_converters.thread: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + yosimitso_workingforum.argument_resolver.thread: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Thread' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } - yosimitso_workingforum.param_converters.post: - class: Yosimitso\WorkingForumBundle\ParamConverter\GenericParamConverter + yosimitso_workingforum.argument_resolver.post: + class: Yosimitso\WorkingForumBundle\ArgumentResolver\GenericArgumentResolver arguments: - '@doctrine.orm.entity_manager' - '@Yosimitso\WorkingForumBundle\Security\AuthorizationGuard' - 'Yosimitso\WorkingForumBundle\Entity\Post' tags: - - { name: request.param_converter, priority: 20 } + - { name: controller.argument_value_resolver, priority: 150 } diff --git a/composer.json b/composer.json index f77a266..1586510 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,8 @@ "symfony/mailer": ">=5.4|>=6.2|>=7.0", "symfony/security-core": ">=5.4|>=6.2|>=7.0", "egulias/email-validator": "^3.1", - "symfony/expression-language": "^6.3|>=7.0" + "symfony/expression-language": "^6.3|>=7.0", + "league/commonmark": "^2.4" }, "license": "MIT", "authors": [ diff --git a/phpunit.xml b/phpunit.xml index 6bf1304..ded2db1 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -5,7 +5,7 @@ ./Tests/Service - ./Tests/ParamConverter + ./Tests/ArgumentResolver ./Tests/Scenario From f235a7418e6974f3c2edca69a7a9d27f6344f594 Mon Sep 17 00:00:00 2001 From: Charly Date: Wed, 17 Jul 2024 21:15:12 +0200 Subject: [PATCH 8/9] new bundle to display markdown + is_granted attributes --- Controller/Admin/AdminForumController.php | 9 +++++---- Controller/Admin/AdminReportController.php | 5 +++-- Controller/Admin/AdminRulesController.php | 7 +++---- Controller/Admin/AdminUsersController.php | 5 +++-- Resources/views/Admin/Report/report_content.html.twig | 4 ++-- .../views/Email/notification_new_message_en.html.twig | 4 ++-- Resources/views/Forum/rules.html.twig | 2 +- Resources/views/Post/post.html.twig | 2 +- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/Controller/Admin/AdminForumController.php b/Controller/Admin/AdminForumController.php index 0272075..2a727c1 100644 --- a/Controller/Admin/AdminForumController.php +++ b/Controller/Admin/AdminForumController.php @@ -2,6 +2,7 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; +use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Routing\Attribute\Route; use Yosimitso\WorkingForumBundle\Controller\BaseController; @@ -9,11 +10,11 @@ use Yosimitso\WorkingForumBundle\Entity\Subforum; use Yosimitso\WorkingForumBundle\Form\AdminForumType; use Symfony\Component\HttpFoundation\Request; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; +use Symfony\Component\Security\Http\Attribute\IsGranted; use Symfony\Component\HttpFoundation\Response; #[Route('/admin/forum')] -#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] +#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")'))] class AdminForumController extends BaseController { #[Route('/edit/{id}', name: 'workingforum_admin_forum_edit', requirements: ['id' => '\d+'])] @@ -61,7 +62,7 @@ public function editAction(Request $request, $id): Response|RedirectResponse } #[Route('/add', name: 'workingforum_admin_forum_add')] - #[Security('is_granted("ROLE_ADMIN")')] + #[IsGranted(new Expression('is_granted("ROLE_ADMIN")'))] public function addAction(Request $request): Response|RedirectResponse { $forum = new Forum; @@ -97,7 +98,7 @@ public function addAction(Request $request): Response|RedirectResponse } #[Route('/delete/{forumId}', name: 'workingforum_admin_delete_forum', requirements: ['id' => '\d+'])] - #[Security('is_granted("ROLE_ADMIN")')] + #[IsGranted(new Expression('is_granted("ROLE_ADMIN")'))] public function deleteForumAction($forumId): Response { $forum = $this->em->getRepository(Forum::class)->findOneById($forumId); diff --git a/Controller/Admin/AdminReportController.php b/Controller/Admin/AdminReportController.php index 138d433..b77e560 100644 --- a/Controller/Admin/AdminReportController.php +++ b/Controller/Admin/AdminReportController.php @@ -2,16 +2,17 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; +use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Routing\Attribute\Route; use Yosimitso\WorkingForumBundle\Controller\BaseController; use Symfony\Component\HttpFoundation\Request; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; +use Symfony\Component\Security\Http\Attribute\IsGranted; use Symfony\Component\HttpFoundation\Response; use Yosimitso\WorkingForumBundle\Entity\Post; use Yosimitso\WorkingForumBundle\Entity\PostReport; use Yosimitso\WorkingForumBundle\Entity\UserInterface; -#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] +#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")'))] class AdminReportController extends BaseController { #[Route('/admin/report', name: 'workingforum_admin_report')] diff --git a/Controller/Admin/AdminRulesController.php b/Controller/Admin/AdminRulesController.php index b776e38..b5eca35 100644 --- a/Controller/Admin/AdminRulesController.php +++ b/Controller/Admin/AdminRulesController.php @@ -2,16 +2,17 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; +use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Routing\Attribute\Route; use Yosimitso\WorkingForumBundle\Controller\BaseController; use Yosimitso\WorkingForumBundle\Entity\Rules; use Symfony\Component\HttpFoundation\Request; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; +use Symfony\Component\Security\Http\Attribute\IsGranted; use Yosimitso\WorkingForumBundle\Form\RulesType; use Yosimitso\WorkingForumBundle\Form\RulesEditType; use Yosimitso\WorkingForumBundle\Twig\Extension\SmileyTwigExtension; -#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] +#[IsGranted(new Expression('is_granted("ROLE_ADMIN")'))] class AdminRulesController extends BaseController { private SmileyTwigExtension $smileyTwigExtension; @@ -35,7 +36,6 @@ public function rulesAction() } #[Route('/admin/rules/edit/{lang}', name: 'workingforum_admin_edit_forum_rules')] - #[Security('is_granted("ROLE_ADMIN")')] public function rulesEditAction(Request $request, $lang) { $listSmiley = $this->smileyTwigExtension->getListSmiley(); // Smileys available for markdown @@ -75,7 +75,6 @@ public function rulesEditAction(Request $request, $lang) } #[Route('/admin/rules/new/{lang}', name: 'workingforum_admin_new_forum_rules')] - #[Security('is_granted("ROLE_ADMIN")')] public function rulesNewAction(Request $request, $lang) { $listSmiley = $this->smileyTwigExtension->getListSmiley(); // Smileys available for markdown diff --git a/Controller/Admin/AdminUsersController.php b/Controller/Admin/AdminUsersController.php index ae5d502..2b44191 100644 --- a/Controller/Admin/AdminUsersController.php +++ b/Controller/Admin/AdminUsersController.php @@ -2,13 +2,14 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; +use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Routing\Attribute\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; +use Symfony\Component\Security\Http\Attribute\IsGranted; use Symfony\Component\HttpFoundation\Response; use Yosimitso\WorkingForumBundle\Controller\BaseController; use Yosimitso\WorkingForumBundle\Entity\UserInterface; -#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] +#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")'))] class AdminUsersController extends BaseController { #[Route('/admin/users', name: 'workingforum_admin_user')] diff --git a/Resources/views/Admin/Report/report_content.html.twig b/Resources/views/Admin/Report/report_content.html.twig index c1028b6..8089368 100644 --- a/Resources/views/Admin/Report/report_content.html.twig +++ b/Resources/views/Admin/Report/report_content.html.twig @@ -16,7 +16,7 @@ {{ post.id }} {{ post.cdate | date(date_format) }} {{ post.post.user.username }} - {{ post.post.content | quote | markdown | replace({'\n':'
'}) | smiley | raw }} + {{ post.post.content | quote | markdown_to_html | replace({'\n':'
'}) | smiley | raw }} {{ post.user.username }} {% if not post.processed %} @@ -34,4 +34,4 @@ {% endfor %} - \ No newline at end of file + diff --git a/Resources/views/Email/notification_new_message_en.html.twig b/Resources/views/Email/notification_new_message_en.html.twig index 0ef07af..4db0aa4 100644 --- a/Resources/views/Email/notification_new_message_en.html.twig +++ b/Resources/views/Email/notification_new_message_en.html.twig @@ -8,11 +8,11 @@


- {{ post.content | quote | markdown | replace({'\n':'
'})| smiley | raw }} + {{ post.content | quote | markdown_to_html | replace({'\n':'
'})| smiley | raw }}

Click here to see the thread

-

\ No newline at end of file +

diff --git a/Resources/views/Forum/rules.html.twig b/Resources/views/Forum/rules.html.twig index b0f6377..ef56226 100644 --- a/Resources/views/Forum/rules.html.twig +++ b/Resources/views/Forum/rules.html.twig @@ -22,7 +22,7 @@ {% if rules is not null %}

{{ 'admin.rules.lang' | trans | capitalize }} : {{ rules.lang }}

{{ 'forum.switch_lang' | trans }} : {{ form_widget(form.langs) }}

-

{{ rules.content | markdown | smiley | raw }}

+

{{ rules.content | markdown_to_html | smiley | raw }}

{% else %}

{{ 'forum.no_rules_available' | trans }}

{% endif %} diff --git a/Resources/views/Post/post.html.twig b/Resources/views/Post/post.html.twig index 9965cdb..391c4fa 100644 --- a/Resources/views/Post/post.html.twig +++ b/Resources/views/Post/post.html.twig @@ -50,7 +50,7 @@ {# POST CONTENT #}
{% if post.moderateReason is empty %} - {{ post.content | quote | markdown_to_html | replace({'\n':'
'})| smiley | raw }} + {{ post.content | quote | markdown_to_html | replace({'\n':'
'})| smiley | raw }} {% else %}

{{ 'forum.post_moderated' | trans }} {{ post.moderateReason }}

{% endif %} From bdd6cb57415aca5cf761517ef049d02260b7c0ca Mon Sep 17 00:00:00 2001 From: Charly Date: Mon, 29 Jul 2024 15:06:53 +0200 Subject: [PATCH 9/9] security attributes --- Controller/Admin/AdminForumController.php | 9 ++++----- Controller/Admin/AdminReportController.php | 5 ++--- Controller/Admin/AdminRulesController.php | 7 ++++--- Controller/Admin/AdminUsersController.php | 5 ++--- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Controller/Admin/AdminForumController.php b/Controller/Admin/AdminForumController.php index 2a727c1..0272075 100644 --- a/Controller/Admin/AdminForumController.php +++ b/Controller/Admin/AdminForumController.php @@ -2,7 +2,6 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; -use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Routing\Attribute\Route; use Yosimitso\WorkingForumBundle\Controller\BaseController; @@ -10,11 +9,11 @@ use Yosimitso\WorkingForumBundle\Entity\Subforum; use Yosimitso\WorkingForumBundle\Form\AdminForumType; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Security\Http\Attribute\IsGranted; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Component\HttpFoundation\Response; #[Route('/admin/forum')] -#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")'))] +#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] class AdminForumController extends BaseController { #[Route('/edit/{id}', name: 'workingforum_admin_forum_edit', requirements: ['id' => '\d+'])] @@ -62,7 +61,7 @@ public function editAction(Request $request, $id): Response|RedirectResponse } #[Route('/add', name: 'workingforum_admin_forum_add')] - #[IsGranted(new Expression('is_granted("ROLE_ADMIN")'))] + #[Security('is_granted("ROLE_ADMIN")')] public function addAction(Request $request): Response|RedirectResponse { $forum = new Forum; @@ -98,7 +97,7 @@ public function addAction(Request $request): Response|RedirectResponse } #[Route('/delete/{forumId}', name: 'workingforum_admin_delete_forum', requirements: ['id' => '\d+'])] - #[IsGranted(new Expression('is_granted("ROLE_ADMIN")'))] + #[Security('is_granted("ROLE_ADMIN")')] public function deleteForumAction($forumId): Response { $forum = $this->em->getRepository(Forum::class)->findOneById($forumId); diff --git a/Controller/Admin/AdminReportController.php b/Controller/Admin/AdminReportController.php index b77e560..138d433 100644 --- a/Controller/Admin/AdminReportController.php +++ b/Controller/Admin/AdminReportController.php @@ -2,17 +2,16 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; -use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Routing\Attribute\Route; use Yosimitso\WorkingForumBundle\Controller\BaseController; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Security\Http\Attribute\IsGranted; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Component\HttpFoundation\Response; use Yosimitso\WorkingForumBundle\Entity\Post; use Yosimitso\WorkingForumBundle\Entity\PostReport; use Yosimitso\WorkingForumBundle\Entity\UserInterface; -#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")'))] +#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] class AdminReportController extends BaseController { #[Route('/admin/report', name: 'workingforum_admin_report')] diff --git a/Controller/Admin/AdminRulesController.php b/Controller/Admin/AdminRulesController.php index b5eca35..b776e38 100644 --- a/Controller/Admin/AdminRulesController.php +++ b/Controller/Admin/AdminRulesController.php @@ -2,17 +2,16 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; -use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Routing\Attribute\Route; use Yosimitso\WorkingForumBundle\Controller\BaseController; use Yosimitso\WorkingForumBundle\Entity\Rules; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Security\Http\Attribute\IsGranted; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Yosimitso\WorkingForumBundle\Form\RulesType; use Yosimitso\WorkingForumBundle\Form\RulesEditType; use Yosimitso\WorkingForumBundle\Twig\Extension\SmileyTwigExtension; -#[IsGranted(new Expression('is_granted("ROLE_ADMIN")'))] +#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] class AdminRulesController extends BaseController { private SmileyTwigExtension $smileyTwigExtension; @@ -36,6 +35,7 @@ public function rulesAction() } #[Route('/admin/rules/edit/{lang}', name: 'workingforum_admin_edit_forum_rules')] + #[Security('is_granted("ROLE_ADMIN")')] public function rulesEditAction(Request $request, $lang) { $listSmiley = $this->smileyTwigExtension->getListSmiley(); // Smileys available for markdown @@ -75,6 +75,7 @@ public function rulesEditAction(Request $request, $lang) } #[Route('/admin/rules/new/{lang}', name: 'workingforum_admin_new_forum_rules')] + #[Security('is_granted("ROLE_ADMIN")')] public function rulesNewAction(Request $request, $lang) { $listSmiley = $this->smileyTwigExtension->getListSmiley(); // Smileys available for markdown diff --git a/Controller/Admin/AdminUsersController.php b/Controller/Admin/AdminUsersController.php index 2b44191..ae5d502 100644 --- a/Controller/Admin/AdminUsersController.php +++ b/Controller/Admin/AdminUsersController.php @@ -2,14 +2,13 @@ namespace Yosimitso\WorkingForumBundle\Controller\Admin; -use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Routing\Attribute\Route; -use Symfony\Component\Security\Http\Attribute\IsGranted; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Component\HttpFoundation\Response; use Yosimitso\WorkingForumBundle\Controller\BaseController; use Yosimitso\WorkingForumBundle\Entity\UserInterface; -#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")'))] +#[Security('is_granted("ROLE_ADMIN") or is_granted("ROLE_MODERATOR")')] class AdminUsersController extends BaseController { #[Route('/admin/users', name: 'workingforum_admin_user')]