From 4737b352a6a2667adf12adcb5c1df36e52890892 Mon Sep 17 00:00:00 2001 From: Elorfin Date: Mon, 13 Oct 2025 08:32:10 +0200 Subject: [PATCH] [Evaluation] enhances parameters --- .../Component/Resource/BBBResource.php | 24 +- .../Controller/BBBController.php | 10 + .../Manager/EvaluationManager.php | 6 + .../Resources/config/components/resource.yml | 2 - .../Resources/config/services/controller.yml | 2 + .../Component/Resource/VideoResource.php | 26 +- .../peertube/Manager/EvaluationManager.php | 6 +- .../Resources/config/components/resource.yml | 3 - .../Component/Resource/VideoResource.php | 26 +- .../youtube/Manager/EvaluationManager.php | 6 +- .../Resources/config/components/resource.yml | 3 - src/main/app/Event/Crud/CrudEvent.php | 4 +- .../content/form/components/content.jsx | 2 + .../content/form/components/sections.jsx | 18 +- .../editor/components/permissions.jsx | 1 - .../user/editor/components/permissions.jsx | 1 - .../Resource/ResourceNodeSerializer.php | 9 - .../core/Controller/ResourceController.php | 1 + .../core/Event/Resource/LoadResourceEvent.php | 5 + .../Resource/Types/DirectoryListener.php | 10 - .../Listener/Resource/Types/FileListener.php | 11 - src/main/core/Manager/ResourceManager.php | 5 +- .../Resources/config/services/listener.yml | 2 - .../modules/resource/components/page.jsx | 4 +- .../resource/editor/components/evaluation.jsx | 267 +++--------- .../resource/editor/components/main.jsx | 5 +- .../resource/editor/components/overview.jsx | 3 +- .../editor/components/permissions.jsx | 40 +- .../editor/containers/permissions.jsx | 30 -- .../modules/resource/editor/index.js | 2 +- .../modules/resource/store/reducer.js | 7 + .../modules/resource/store/selectors.js | 24 +- .../tool/editor/components/permissions.jsx | 1 - .../Resources/translations/resource.fr.json | 3 +- .../Component/Tool/ProgressionTool.php | 66 ++- .../SequenceCertificateController.php | 2 +- .../WorkspaceCertificateController.php | 2 +- .../ResourceEvaluationController.php | 8 +- .../SequenceEvaluationController.php | 7 +- .../WorkspaceEvaluationController.php | 17 +- src/main/evaluation/Entity/Certified.php | 2 +- .../AbstractEvaluationParameters.php | 16 - .../Entity/Parameters/ResourceParameters.php | 5 +- .../Entity/Parameters/SequenceParameters.php | 3 + .../Entity/Parameters/WorkspaceParameters.php | 3 + .../evaluation/Entity/Sequence/Sequence.php | 6 + .../UserEvaluation/AbstractUserEvaluation.php | 23 -- .../Migrations/Version20251009112436.php | 138 +++++++ .../Migrations/Version20251014074212.php | 53 +++ .../Library/EvaluationAggregator.php | 10 +- .../SequenceCertificateManager.php | 2 +- .../WorkspaceCertificateManager.php | 2 +- src/main/evaluation/Manager/ExportManager.php | 4 +- .../Manager/ResourceEvaluationManager.php | 38 +- .../Manager/SequenceEvaluationManager.php | 47 +-- .../Manager/SequenceRequirementManager.php | 49 +++ .../Manager/WorkspaceEvaluationManager.php | 24 +- .../Resources/config/components/tool.yml | 1 + .../Resources/config/services/controller.yml | 4 +- .../Resources/config/services/manager.yml | 8 +- .../Resources/config/services/serializer.yml | 24 +- .../Resources/config/services/subscriber.yml | 19 +- .../actions/resource_evaluation/open.js | 4 +- .../actions/sequence_evaluation/open.js | 6 +- .../actions/workspace_evaluation/open.js | 4 +- .../Resources/modules/components/form.jsx | 389 ++++++++++++++++++ .../modules/components/list-item.jsx | 4 +- .../modules/components/progression.jsx | 2 +- .../user-progression/components/modal.jsx | 2 +- .../resource/modals/user-attempt/constants.js | 6 + .../resource/modals/user-attempt/index.js | 3 +- .../user-progression/components/archives.jsx | 4 +- .../modals/user-progression/constants.js | 6 + .../resource/modals/user-progression/index.js | 7 +- .../modules/sequence/components/overview.jsx | 1 - .../modules/sequence/components/page.jsx | 4 +- .../sequence/editor/components/evaluation.jsx | 332 +++------------ .../sequence/editor/components/overview.jsx | 8 + .../editor/components/permissions.jsx | 1 - .../user-progression/components/archives.jsx | 4 +- .../user-progression/components/overview.jsx | 4 +- .../modals/user-progression/constants.js | 6 + .../sequence/modals/user-progression/index.js | 7 +- .../Resources/modules/sequence/prop-types.js | 7 +- .../modules/sequence/store/selectors.js | 20 +- .../evaluation/editor/components/main.jsx | 10 +- .../evaluation/editor/components/overview.jsx | 145 ++----- .../modules/tools/evaluation/store/reducer.js | 8 + .../tools/evaluation/store/selectors.js | 14 +- .../user-progression/components/archives.jsx | 4 +- .../user-progression/components/overview.jsx | 4 +- .../modals/user-progression/constants.js | 6 + .../modals/user-progression/index.js | 7 +- .../Resources/translations/evaluation.fr.json | 18 +- .../Resources/translations/workspace.en.json | 1 - .../Resources/translations/workspace.fr.json | 1 - .../Resources/translations/workspace.nl.json | 1 - .../Voter/SequenceEvaluationVoter.php | 4 +- ...AbstractEvaluationParametersSerializer.php | 35 ++ .../ResourceParametersSerializer.php | 55 +++ .../SequenceParametersSerializer.php | 69 ++++ .../WorkspaceParametersSerializer.php | 69 ++++ .../Sequence/SequenceSerializer.php | 7 +- .../ResourceAttemptSerializer.php | 2 +- .../ResourceEvaluationSerializer.php | 2 +- .../SequenceCertificateSubscriber.php | 2 +- .../WorkspaceCertificateSubscriber.php | 2 +- .../Subscriber/Crud/ResourceSubscriber.php | 134 ++++++ .../Subscriber/Crud/SequenceSubscriber.php | 41 +- .../Subscriber/Crud/WorkspaceSubscriber.php | 89 ++++ .../SequenceEvaluationSubscriber.php | 12 + .../WorkspaceEvaluationSubscriber.php | 4 +- .../Component/Resource/AudioResource.php | 2 +- .../Manager/EvaluationManager.php | 6 +- .../Component/Resource/ClacoFormResource.php | 2 - .../Component/Resource/DropzoneResource.php | 10 - .../drop-zone/Manager/DropzoneManager.php | 1 - .../Resources/config/components/resource.yml | 1 - .../dropzone/editor/components/parameters.jsx | 1 - .../Component/Resource/ExerciseResource.php | 11 - .../Resources/config/components/resource.yml | 1 - .../quiz/editor/components/attempts.jsx | 1 - .../Resource/FlashcardDeckResource.php | 17 +- .../flashcard/Manager/EvaluationManager.php | 6 +- .../Resources/config/components/resource.yml | 1 - .../Component/Resource/ForumResource.php | 8 - .../Component/Resource/ImageResource.php | 10 +- .../Component/Resource/ShortcutResource.php | 18 - .../Resources/config/components/resource.yml | 1 - .../Component/Resource/PdfResource.php | 24 +- .../pdf-player/Manager/EvaluationManager.php | 6 +- .../Resources/config/components.yml | 3 - .../Component/Resource/ScormResource.php | 9 - .../scorm/editor/components/evaluation.jsx | 1 - .../scorm/editor/components/main.jsx | 2 +- .../url/Component/Resource/UrlResource.php | 24 -- .../Resources/config/components/resource.yml | 2 - .../Component/Resource/VideoResource.php | 24 +- .../Manager/EvaluationManager.php | 6 +- .../Resources/config/components/resource.yml | 2 - 140 files changed, 1755 insertions(+), 1174 deletions(-) delete mode 100644 src/main/core/Resources/modules/resource/editor/containers/permissions.jsx create mode 100644 src/main/evaluation/Installation/Migrations/Version20251009112436.php create mode 100644 src/main/evaluation/Installation/Migrations/Version20251014074212.php rename src/main/evaluation/Manager/{ => Certificate}/SequenceCertificateManager.php (99%) rename src/main/evaluation/Manager/{ => Certificate}/WorkspaceCertificateManager.php (99%) create mode 100644 src/main/evaluation/Manager/SequenceRequirementManager.php create mode 100644 src/main/evaluation/Resources/modules/components/form.jsx create mode 100644 src/main/evaluation/Resources/modules/resource/modals/user-attempt/constants.js create mode 100644 src/main/evaluation/Resources/modules/resource/modals/user-progression/constants.js create mode 100644 src/main/evaluation/Resources/modules/sequence/modals/user-progression/constants.js create mode 100644 src/main/evaluation/Resources/modules/workspace/modals/user-progression/constants.js create mode 100644 src/main/evaluation/Serializer/Parameters/AbstractEvaluationParametersSerializer.php create mode 100644 src/main/evaluation/Serializer/Parameters/ResourceParametersSerializer.php create mode 100644 src/main/evaluation/Serializer/Parameters/SequenceParametersSerializer.php create mode 100644 src/main/evaluation/Serializer/Parameters/WorkspaceParametersSerializer.php create mode 100644 src/main/evaluation/Subscriber/Crud/ResourceSubscriber.php create mode 100644 src/main/evaluation/Subscriber/Crud/WorkspaceSubscriber.php diff --git a/src/integration/big-blue-button/Component/Resource/BBBResource.php b/src/integration/big-blue-button/Component/Resource/BBBResource.php index 3ecbc16c7a1..7e7bcfc7d9c 100644 --- a/src/integration/big-blue-button/Component/Resource/BBBResource.php +++ b/src/integration/big-blue-button/Component/Resource/BBBResource.php @@ -11,27 +11,21 @@ namespace Claroline\BigBlueButtonBundle\Component\Resource; -use Claroline\AppBundle\API\Serializer\SerializerInterface; use Claroline\AppBundle\API\SerializerProvider; use Claroline\AppBundle\API\Utils\FileBag; use Claroline\BigBlueButtonBundle\Entity\BBB; use Claroline\BigBlueButtonBundle\Manager\BBBManager; -use Claroline\BigBlueButtonBundle\Manager\EvaluationManager; use Claroline\CoreBundle\Component\Resource\ResourceComponent; use Claroline\CoreBundle\Entity\Resource\AbstractResource; -use Claroline\CoreBundle\Entity\User; use Claroline\CoreBundle\Library\Configuration\PlatformConfigurationHandler; use Claroline\EvaluationBundle\Component\Resource\EvaluatedResourceInterface; -use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; final class BBBResource extends ResourceComponent implements EvaluatedResourceInterface { public function __construct( - private readonly TokenStorageInterface $tokenStorage, private readonly PlatformConfigurationHandler $config, private readonly SerializerProvider $serializer, - private readonly BBBManager $bbbManager, - private readonly EvaluationManager $evaluationManager + private readonly BBBManager $bbbManager ) { } @@ -71,15 +65,7 @@ public function open(AbstractResource $resource, bool $embedded = false): ?array } } - $userEvaluation = null; - if ($this->tokenStorage->getToken()?->getUser() instanceof User) { - $attempt = $this->evaluationManager->update($resource->getResourceNode(), $this->tokenStorage->getToken()?->getUser()); - $userEvaluation = $attempt->getResourceUserEvaluation(); - } - return [ - 'resource' => $this->serializer->serialize($resource), - 'userEvaluation' => $this->serializer->serialize($userEvaluation, [SerializerInterface::SERIALIZE_MINIMAL]), 'servers' => $this->bbbManager->getServers(), 'allowRecords' => $allowRecords, 'canStart' => $canStart, @@ -88,14 +74,6 @@ public function open(AbstractResource $resource, bool $embedded = false): ?array ]; } - /** @param BBB $resource */ - public function update(AbstractResource $resource, array $data, array $previousData): ?array - { - return [ - 'resource' => $this->serializer->serialize($resource), - ]; - } - /** @param BBB $resource */ public function delete(AbstractResource $resource, FileBag $fileBag, bool $softDelete = true): bool { diff --git a/src/integration/big-blue-button/Controller/BBBController.php b/src/integration/big-blue-button/Controller/BBBController.php index ac1beb4fe64..052a471c2ed 100644 --- a/src/integration/big-blue-button/Controller/BBBController.php +++ b/src/integration/big-blue-button/Controller/BBBController.php @@ -19,6 +19,8 @@ use Claroline\BigBlueButtonBundle\Entity\BBB; use Claroline\BigBlueButtonBundle\Entity\Recording; use Claroline\BigBlueButtonBundle\Manager\BBBManager; +use Claroline\BigBlueButtonBundle\Manager\EvaluationManager; +use Claroline\CoreBundle\Entity\User; use Claroline\CoreBundle\Library\RoutingHelper; use Claroline\CoreBundle\Security\PermissionCheckerTrait; use Symfony\Bridge\Doctrine\Attribute\MapEntity; @@ -29,6 +31,7 @@ use Symfony\Component\HttpKernel\Attribute\MapQueryString; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; #[Route(path: '/bbb/{id}')] @@ -39,9 +42,11 @@ class BBBController public function __construct( AuthorizationCheckerInterface $authorization, + private readonly TokenStorageInterface $tokenStorage, private readonly ObjectManager $om, private readonly Crud $crud, private readonly BBBManager $bbbManager, + private readonly EvaluationManager $evaluationManager, private readonly UrlGeneratorInterface $router, private readonly RoutingHelper $routingHelper ) { @@ -74,6 +79,11 @@ public function joinMeetingAction(#[MapEntity(mapping: ['id' => 'uuid'])] BBB $b if (empty($errors)) { $url = $this->bbbManager->getMeetingUrl($bbb, $moderator, $username); if ($url) { + $user = $this->tokenStorage->getToken()?->getUser(); + if ($user instanceof User) { + $this->evaluationManager->update($bbb->getResourceNode(), $user); + } + return new RedirectResponse($url); } } diff --git a/src/integration/big-blue-button/Manager/EvaluationManager.php b/src/integration/big-blue-button/Manager/EvaluationManager.php index 60083bbc54b..9c47e2185ab 100644 --- a/src/integration/big-blue-button/Manager/EvaluationManager.php +++ b/src/integration/big-blue-button/Manager/EvaluationManager.php @@ -6,6 +6,7 @@ use Claroline\CoreBundle\Entity\Resource\ResourceNode; use Claroline\CoreBundle\Entity\User; use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceAttempt; +use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceEvaluation; use Claroline\EvaluationBundle\Library\EvaluationStatus; use Claroline\EvaluationBundle\Manager\ResourceEvaluationManager; use Claroline\EvaluationBundle\Repository\UserEvaluation\ResourceAttemptRepository; @@ -21,6 +22,11 @@ public function __construct( $this->attemptRepository = $om->getRepository(ResourceAttempt::class); } + public function getResourceUserEvaluation(ResourceNode $node, User $user): ?ResourceEvaluation + { + return $this->resourceEvalManager->getUserEvaluation($node, $user); + } + /** * Marks the BBB evaluation as participated. * Called when a user opens a BBB. diff --git a/src/integration/big-blue-button/Resources/config/components/resource.yml b/src/integration/big-blue-button/Resources/config/components/resource.yml index 921e593be49..632d2da61e4 100644 --- a/src/integration/big-blue-button/Resources/config/components/resource.yml +++ b/src/integration/big-blue-button/Resources/config/components/resource.yml @@ -2,8 +2,6 @@ services: Claroline\BigBlueButtonBundle\Component\Resource\BBBResource: tags: ['claroline.component.resource', 'kernel.event_subscriber'] arguments: - - '@security.token_storage' - '@Claroline\CoreBundle\Library\Configuration\PlatformConfigurationHandler' - '@Claroline\AppBundle\API\SerializerProvider' - '@Claroline\BigBlueButtonBundle\Manager\BBBManager' - - '@Claroline\BigBlueButtonBundle\Manager\EvaluationManager' diff --git a/src/integration/big-blue-button/Resources/config/services/controller.yml b/src/integration/big-blue-button/Resources/config/services/controller.yml index 860ed46ab07..b7cbe771c17 100644 --- a/src/integration/big-blue-button/Resources/config/services/controller.yml +++ b/src/integration/big-blue-button/Resources/config/services/controller.yml @@ -14,8 +14,10 @@ services: Claroline\BigBlueButtonBundle\Controller\BBBController: arguments: - '@security.authorization_checker' + - '@security.token_storage' - '@Claroline\AppBundle\Persistence\ObjectManager' - '@Claroline\AppBundle\API\Crud' - '@Claroline\BigBlueButtonBundle\Manager\BBBManager' + - '@Claroline\BigBlueButtonBundle\Manager\EvaluationManager' - '@router' - '@Claroline\CoreBundle\Library\RoutingHelper' diff --git a/src/integration/peertube/Component/Resource/VideoResource.php b/src/integration/peertube/Component/Resource/VideoResource.php index 8ed76911ed6..9f0225b0cdc 100644 --- a/src/integration/peertube/Component/Resource/VideoResource.php +++ b/src/integration/peertube/Component/Resource/VideoResource.php @@ -2,27 +2,19 @@ namespace Claroline\PeerTubeBundle\Component\Resource; -use Claroline\AppBundle\API\Serializer\SerializerInterface; -use Claroline\AppBundle\API\SerializerProvider; use Claroline\CoreBundle\Component\Resource\ResourceComponent; use Claroline\CoreBundle\Component\Resource\UrlAdapterInterface; use Claroline\CoreBundle\Entity\Resource\AbstractResource; -use Claroline\CoreBundle\Entity\User; use Claroline\CoreBundle\Event\Resource\EmbedResourceEvent; use Claroline\EvaluationBundle\Component\Resource\EvaluatedResourceInterface; use Claroline\PeerTubeBundle\Entity\Video; -use Claroline\PeerTubeBundle\Manager\EvaluationManager; use Claroline\PeerTubeBundle\Manager\PeerTubeManager; -use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Twig\Environment; final class VideoResource extends ResourceComponent implements UrlAdapterInterface, EvaluatedResourceInterface { public function __construct( - private readonly TokenStorageInterface $tokenStorage, private readonly Environment $templating, - private readonly SerializerProvider $serializer, - private readonly EvaluationManager $evaluationManager, private readonly PeerTubeManager $peerTubeManager ) { } @@ -49,20 +41,6 @@ public static function getSubscribedEvents(): array ]); } - /** @param Video $resource */ - public function open(AbstractResource $resource, bool $embedded = false): ?array - { - $user = $this->tokenStorage->getToken()?->getUser(); - - return [ - 'resource' => $this->serializer->serialize($resource), - 'userEvaluation' => $user instanceof User ? $this->serializer->serialize( - $this->evaluationManager->getResourceUserEvaluation($resource->getResourceNode(), $user), - [SerializerInterface::SERIALIZE_MINIMAL] - ) : null, - ]; - } - /** @param Video $resource */ public function create(AbstractResource $resource, array $data): void { @@ -74,9 +52,7 @@ public function update(AbstractResource $resource, array $data, array $previousD { $this->peerTubeManager->handleThumbnailForVideo($resource); - return [ - 'resource' => $this->serializer->serialize($resource), - ]; + return []; } public function onEmbed(EmbedResourceEvent $event): void diff --git a/src/integration/peertube/Manager/EvaluationManager.php b/src/integration/peertube/Manager/EvaluationManager.php index 80fa03b99dc..7c8d0b081c6 100644 --- a/src/integration/peertube/Manager/EvaluationManager.php +++ b/src/integration/peertube/Manager/EvaluationManager.php @@ -3,10 +3,10 @@ namespace Claroline\PeerTubeBundle\Manager; use Claroline\AppBundle\Persistence\ObjectManager; -use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceAttempt; use Claroline\CoreBundle\Entity\Resource\ResourceNode; -use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceEvaluation; use Claroline\CoreBundle\Entity\User; +use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceAttempt; +use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceEvaluation; use Claroline\EvaluationBundle\Library\EvaluationStatus; use Claroline\EvaluationBundle\Manager\ResourceEvaluationManager; use Claroline\EvaluationBundle\Repository\UserEvaluation\ResourceAttemptRepository; @@ -27,7 +27,7 @@ public function __construct( /** * Fetch or create resource user evaluation. */ - public function getResourceUserEvaluation(ResourceNode $node, User $user): ResourceEvaluation + public function getResourceUserEvaluation(ResourceNode $node, User $user): ?ResourceEvaluation { return $this->resourceEvalManager->getUserEvaluation($node, $user); } diff --git a/src/integration/peertube/Resources/config/components/resource.yml b/src/integration/peertube/Resources/config/components/resource.yml index e2197215497..3a21c0c46a9 100644 --- a/src/integration/peertube/Resources/config/components/resource.yml +++ b/src/integration/peertube/Resources/config/components/resource.yml @@ -2,8 +2,5 @@ services: Claroline\PeerTubeBundle\Component\Resource\VideoResource: tags: ['claroline.component.resource', 'kernel.event_subscriber'] arguments: - - '@security.token_storage' - '@twig' - - '@Claroline\AppBundle\API\SerializerProvider' - - '@Claroline\PeerTubeBundle\Manager\EvaluationManager' - '@Claroline\PeerTubeBundle\Manager\PeerTubeManager' diff --git a/src/integration/youtube/Component/Resource/VideoResource.php b/src/integration/youtube/Component/Resource/VideoResource.php index e35039db93c..890435272ba 100644 --- a/src/integration/youtube/Component/Resource/VideoResource.php +++ b/src/integration/youtube/Component/Resource/VideoResource.php @@ -2,24 +2,16 @@ namespace Claroline\YouTubeBundle\Component\Resource; -use Claroline\AppBundle\API\Serializer\SerializerInterface; -use Claroline\AppBundle\API\SerializerProvider; use Claroline\CoreBundle\Component\Resource\ResourceComponent; use Claroline\CoreBundle\Component\Resource\UrlAdapterInterface; use Claroline\CoreBundle\Entity\Resource\AbstractResource; -use Claroline\CoreBundle\Entity\User; use Claroline\EvaluationBundle\Component\Resource\EvaluatedResourceInterface; use Claroline\YouTubeBundle\Entity\Video; -use Claroline\YouTubeBundle\Manager\EvaluationManager; use Claroline\YouTubeBundle\Manager\YouTubeManager; -use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; final class VideoResource extends ResourceComponent implements EvaluatedResourceInterface, UrlAdapterInterface { public function __construct( - private readonly TokenStorageInterface $tokenStorage, - private readonly SerializerProvider $serializer, - private readonly EvaluationManager $evaluationManager, private readonly YouTubeManager $youtubeManager ) { } @@ -60,20 +52,6 @@ public function fromUrl(string $url): ?array ]; } - /** @param Video $resource */ - public function open(AbstractResource $resource, bool $embedded = false): ?array - { - $user = $this->tokenStorage->getToken()?->getUser(); - - return [ - 'resource' => $this->serializer->serialize($resource), - 'userEvaluation' => $user instanceof User ? $this->serializer->serialize( - $this->evaluationManager->getResourceUserEvaluation($resource->getResourceNode(), $user), - [SerializerInterface::SERIALIZE_MINIMAL] - ) : null, - ]; - } - /** @param Video $resource */ public function create(AbstractResource $resource, array $data): void { @@ -85,9 +63,7 @@ public function update(AbstractResource $resource, array $data, array $previousD { $this->youtubeManager->handleThumbnailForVideo($resource); - return [ - 'resource' => $this->serializer->serialize($resource), - ]; + return []; } public function requireAdapter(): bool diff --git a/src/integration/youtube/Manager/EvaluationManager.php b/src/integration/youtube/Manager/EvaluationManager.php index e16fc59872e..0deacb30d1d 100644 --- a/src/integration/youtube/Manager/EvaluationManager.php +++ b/src/integration/youtube/Manager/EvaluationManager.php @@ -3,10 +3,10 @@ namespace Claroline\YouTubeBundle\Manager; use Claroline\AppBundle\Persistence\ObjectManager; -use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceAttempt; use Claroline\CoreBundle\Entity\Resource\ResourceNode; -use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceEvaluation; use Claroline\CoreBundle\Entity\User; +use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceAttempt; +use Claroline\EvaluationBundle\Entity\UserEvaluation\ResourceEvaluation; use Claroline\EvaluationBundle\Library\EvaluationStatus; use Claroline\EvaluationBundle\Manager\ResourceEvaluationManager; use Claroline\EvaluationBundle\Repository\UserEvaluation\ResourceAttemptRepository; @@ -25,7 +25,7 @@ public function __construct( $this->resourceEvalRepo = $om->getRepository(ResourceAttempt::class); } - public function getResourceUserEvaluation(ResourceNode $node, User $user): ResourceEvaluation + public function getResourceUserEvaluation(ResourceNode $node, User $user): ?ResourceEvaluation { return $this->resourceEvalManager->getUserEvaluation($node, $user); } diff --git a/src/integration/youtube/Resources/config/components/resource.yml b/src/integration/youtube/Resources/config/components/resource.yml index 3f9d827793c..842fb1d17fc 100644 --- a/src/integration/youtube/Resources/config/components/resource.yml +++ b/src/integration/youtube/Resources/config/components/resource.yml @@ -2,7 +2,4 @@ services: Claroline\YouTubeBundle\Component\Resource\VideoResource: tags: ['claroline.component.resource', 'kernel.event_subscriber'] arguments: - - '@security.token_storage' - - '@Claroline\AppBundle\API\SerializerProvider' - - '@Claroline\YouTubeBundle\Manager\EvaluationManager' - '@Claroline\YouTubeBundle\Manager\YouTubeManager' diff --git a/src/main/app/Event/Crud/CrudEvent.php b/src/main/app/Event/Crud/CrudEvent.php index 59f9034c797..5e9181ee7cb 100644 --- a/src/main/app/Event/Crud/CrudEvent.php +++ b/src/main/app/Event/Crud/CrudEvent.php @@ -22,7 +22,7 @@ class CrudEvent extends Event private bool $block = false; public function __construct( - private readonly mixed $object, + private readonly object $object, private readonly array $options = [] ) { } @@ -34,7 +34,7 @@ public function getClass(): string get_class($this->object); } - public function getObject(): mixed + public function getObject(): object { return $this->object; } diff --git a/src/main/app/Resources/modules/content/form/components/content.jsx b/src/main/app/Resources/modules/content/form/components/content.jsx index f1f980e04c0..c5d35741c28 100644 --- a/src/main/app/Resources/modules/content/form/components/content.jsx +++ b/src/main/app/Resources/modules/content/form/components/content.jsx @@ -40,6 +40,7 @@ const FormContent = (props) => { level={props.level} displayLevel={props.displayLevel} className={primarySection.className} + icon={primarySection.icon} title={primarySection.title} hideTitle={(0 === index && undefined === primarySection.hideTitle) || primarySection.hideTitle} description={primarySection.description} @@ -65,6 +66,7 @@ const FormContent = (props) => { level={props.level} displayLevel={props.displayLevel} className={primarySection.className} + icon={primarySection.icon} title={primarySection.title} description={primarySection.description} actions={primarySection.actions} diff --git a/src/main/app/Resources/modules/content/form/components/sections.jsx b/src/main/app/Resources/modules/content/form/components/sections.jsx index 1014282c7e9..262696ee918 100644 --- a/src/main/app/Resources/modules/content/form/components/sections.jsx +++ b/src/main/app/Resources/modules/content/form/components/sections.jsx @@ -16,6 +16,7 @@ const FormPrimarySection = ({ title, description, children, + icon = null, level = 2, displayLevel = 5, hideTitle = false, @@ -32,7 +33,6 @@ const FormPrimarySection = ({ > {title &&
+ {icon && + + } + {title} @@ -67,7 +71,8 @@ const FormPrimarySection = ({ FormPrimarySection.propTypes = { className: T.string, level: T.number, // level for section heading - displayLevel: T.number, // modifier for headings level (used when some headings levels are hidden in the page) + displayLevel: T.number, // modifier for heading level (used when some heading levels are hidden in the page) + icon: T.string, title: T.string, hideTitle: T.bool, description: T.string, @@ -86,13 +91,17 @@ const FormToggleSection = (props) => { aria-labelledby={titleId} aria-describedby={props.description ? descriptionId : undefined} > -
+
+ {props.icon && + + } +