Minor: Format code

pull/5031/head
Angel Fernando Quiroz Campos 2 years ago
parent f197e33a7f
commit 61d458379b
  1. 4
      src/CoreBundle/ChamiloCoreBundle.php
  2. 11
      src/CoreBundle/Command/UpdateVueTranslations.php
  3. 1
      src/CoreBundle/Component/Editor/CkEditor/Toolbar/TestFreeAnswerStrict.php
  4. 4
      src/CoreBundle/Component/Editor/CkEditor/Toolbar/ToolbarStartExpanded.php
  5. 11
      src/CoreBundle/Component/Editor/Editor.php
  6. 9
      src/CoreBundle/Component/Utils/ChamiloApi.php
  7. 4
      src/CoreBundle/Component/Utils/GlideAsset.php
  8. 4
      src/CoreBundle/Controller/AbstractResourceController.php
  9. 2
      src/CoreBundle/Controller/Admin/IndexBlocksController.php
  10. 5
      src/CoreBundle/Controller/Api/BaseResourceFileAction.php
  11. 6
      src/CoreBundle/Controller/Api/ExportCGlossaryAction.php
  12. 1
      src/CoreBundle/Controller/Api/ExportGlossaryToDocumentsAction.php
  13. 1
      src/CoreBundle/Controller/Api/GetLinksCollectionController.php
  14. 2
      src/CoreBundle/Controller/Api/ImportCGlossaryAction.php
  15. 6
      src/CoreBundle/Controller/BaseController.php
  16. 6
      src/CoreBundle/Controller/ChatController.php
  17. 46
      src/CoreBundle/Controller/CourseController.php
  18. 2
      src/CoreBundle/Controller/EditorController.php
  19. 7
      src/CoreBundle/Controller/IndexController.php
  20. 3
      src/CoreBundle/Controller/ResourceController.php
  21. 9
      src/CoreBundle/Controller/SecurityController.php
  22. 10
      src/CoreBundle/Controller/SessionController.php
  23. 1
      src/CoreBundle/Controller/ToolController.php
  24. 1
      src/CoreBundle/DataFixtures/AccessUserUrlFixtures.php
  25. 3
      src/CoreBundle/DataProvider/Extension/CCalendarEventExtension.php
  26. 3
      src/CoreBundle/DataProvider/Extension/CDocumentExtension.php
  27. 3
      src/CoreBundle/DataProvider/Extension/CStudentPublicationExtension.php
  28. 3
      src/CoreBundle/DataProvider/Extension/CToolIntroExtension.php
  29. 3
      src/CoreBundle/DataProvider/Extension/CourseExtension.php
  30. 7
      src/CoreBundle/DataProvider/Extension/CourseLinkExtensionTrait.php
  31. 3
      src/CoreBundle/DataProvider/Extension/CourseRelUserExtension.php
  32. 3
      src/CoreBundle/DataProvider/Extension/MessageExtension.php
  33. 3
      src/CoreBundle/DataProvider/Extension/MessageRelUserExtension.php
  34. 3
      src/CoreBundle/DataProvider/Extension/MessageTagExtension.php
  35. 3
      src/CoreBundle/DataProvider/Extension/PageExtension.php
  36. 3
      src/CoreBundle/DataProvider/Extension/PersonalFileExtension.php
  37. 3
      src/CoreBundle/DataProvider/Extension/SessionRelUserExtension.php
  38. 3
      src/CoreBundle/DataProvider/Extension/SocialPostExtension.php
  39. 3
      src/CoreBundle/DataProvider/Extension/TrackEExerciseExtension.php
  40. 3
      src/CoreBundle/DataProvider/UserItemDataProvider.php
  41. 8
      src/CoreBundle/Entity/AbstractResource.php
  42. 4
      src/CoreBundle/Entity/AgendaEventSubscriber.php
  43. 4
      src/CoreBundle/Entity/Course.php
  44. 3
      src/CoreBundle/Entity/CourseCategory.php
  45. 4
      src/CoreBundle/Entity/CourseRelUserCatalogue.php
  46. 10
      src/CoreBundle/Entity/ExtraField.php
  47. 2
      src/CoreBundle/Entity/ExtraFieldValues.php
  48. 2
      src/CoreBundle/Entity/GradebookCategory.php
  49. 2
      src/CoreBundle/Entity/GradebookComment.php
  50. 3
      src/CoreBundle/Entity/Listener/CourseListener.php
  51. 3
      src/CoreBundle/Entity/Listener/MessageListener.php
  52. 12
      src/CoreBundle/Entity/Listener/ResourceListener.php
  53. 3
      src/CoreBundle/Entity/Listener/ResourceNodeListener.php
  54. 7
      src/CoreBundle/Entity/Listener/SessionListener.php
  55. 3
      src/CoreBundle/Entity/Listener/SkillRelUserListener.php
  56. 3
      src/CoreBundle/Entity/Listener/UserListener.php
  57. 3
      src/CoreBundle/Entity/Listener/UserRelUserListener.php
  58. 3
      src/CoreBundle/Entity/Message.php
  59. 19
      src/CoreBundle/Entity/PageCategory.php
  60. 4
      src/CoreBundle/Entity/PersonalFile.php
  61. 4
      src/CoreBundle/Entity/ResourceComment.php
  62. 6
      src/CoreBundle/Entity/ResourceFile.php
  63. 9
      src/CoreBundle/Entity/ResourceNode.php
  64. 4
      src/CoreBundle/Entity/ResourceShowCourseResourcesInSessionInterface.php
  65. 4
      src/CoreBundle/Entity/ResourceToRootInterface.php
  66. 4
      src/CoreBundle/Entity/ScheduledAnnouncement.php
  67. 6
      src/CoreBundle/Entity/Session.php
  68. 3
      src/CoreBundle/Entity/SessionCategory.php
  69. 23
      src/CoreBundle/Entity/Skill.php
  70. 10
      src/CoreBundle/Entity/SkillRelItem.php
  71. 4
      src/CoreBundle/Entity/SkillRelItemRelUser.php
  72. 7
      src/CoreBundle/Entity/User.php
  73. 2
      src/CoreBundle/Entity/UserRelUser.php
  74. 59
      src/CoreBundle/Entity/Usergroup.php
  75. 15
      src/CoreBundle/EventListener/CourseListener.php
  76. 4
      src/CoreBundle/EventListener/HTTPExceptionListener.php
  77. 11
      src/CoreBundle/EventListener/LegacyListener.php
  78. 3
      src/CoreBundle/EventListener/LoginSuccessHandler.php
  79. 4
      src/CoreBundle/EventListener/SettingListener.php
  80. 1
      src/CoreBundle/EventSubscriber/AnonymousUserSubscriber.php
  81. 4
      src/CoreBundle/EventSubscriber/LoginFailureSubscriber.php
  82. 1
      src/CoreBundle/Filter/UserExtraFieldFilter.php
  83. 9
      src/CoreBundle/Form/ContactType.php
  84. 2
      src/CoreBundle/Form/DataTransformer/ResourceToIdentifierTransformer.php
  85. 14
      src/CoreBundle/Form/ExtraFieldType.php
  86. 4
      src/CoreBundle/Form/Type/IllustrationType.php
  87. 6
      src/CoreBundle/Framework/Container.php
  88. 8
      src/CoreBundle/Framework/Exporter.php
  89. 3
      src/CoreBundle/MessageHandler/MessageHandler.php
  90. 5
      src/CoreBundle/Migrations/AbstractMigrationChamilo.php
  91. 4
      src/CoreBundle/Migrations/Schema/V200/Version20.php
  92. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170525122900.php
  93. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170525123900.php
  94. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170625122900.php
  95. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170625123000.php
  96. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170625143000.php
  97. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170625144000.php
  98. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170625145000.php
  99. 4
      src/CoreBundle/Migrations/Schema/V200/Version20170626122900.php
  100. 6
      src/CoreBundle/Migrations/Schema/V200/Version20170627122900.php
  101. Some files were not shown because too many files have changed in this diff Show More

@ -8,6 +8,4 @@ namespace Chamilo\CoreBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\HttpKernel\Bundle\Bundle;
class ChamiloCoreBundle extends Bundle class ChamiloCoreBundle extends Bundle {}
{
}

@ -14,6 +14,8 @@ use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
use const JSON_PRETTY_PRINT;
class UpdateVueTranslations extends Command class UpdateVueTranslations extends Command
{ {
/** /**
@ -88,12 +90,13 @@ class UpdateVueTranslations extends Command
/** /**
* Gets the translation for a given variable with fallbacks to parent language and base language. * Gets the translation for a given variable with fallbacks to parent language and base language.
* *
* @param string $variable The variable to be translated. * @param string $variable the variable to be translated
* @param Language $language The Language entity for the current language. * @param Language $language the Language entity for the current language
* *
* @return string The translated string. * @return string the translated string
*/ */
private function getTranslationWithFallback(string $variable, Language $language): string { private function getTranslationWithFallback(string $variable, Language $language): string
{
// Get the ISO code of the current language // Get the ISO code of the current language
$iso = $language->getIsocode(); $iso = $language->getIsocode();
// Try to translate the variable in the current language // Try to translate the variable in the current language

@ -39,6 +39,7 @@ class TestFreeAnswerStrict extends Basic
]; ];
$config['removePlugins'] = 'elementspath'; $config['removePlugins'] = 'elementspath';
// $config['height'] = '200'; // $config['height'] = '200';
return $config; return $config;
} }

@ -6,6 +6,4 @@ declare(strict_types=1);
namespace Chamilo\CoreBundle\Component\Editor\CkEditor\Toolbar; namespace Chamilo\CoreBundle\Component\Editor\CkEditor\Toolbar;
class ToolbarStartExpanded extends Basic class ToolbarStartExpanded extends Basic {}
{
}

@ -87,6 +87,7 @@ class Editor
/** /**
* @param string $key * @param string $key
* @param mixed $value
*/ */
public function setConfigAttribute($key, $value): void public function setConfigAttribute($key, $value): void
{ {
@ -113,25 +114,30 @@ class Editor
$this->toolbarSet = $value; $this->toolbarSet = $value;
break; break;
case 'Config': case 'Config':
$this->processConfig($value); $this->processConfig($value);
break; break;
case 'width': case 'width':
case 'Width': case 'Width':
$this->setConfigAttribute('width', $value); $this->setConfigAttribute('width', $value);
break; break;
case 'height': case 'height':
case 'Height': case 'Height':
$this->setConfigAttribute('height', $value); $this->setConfigAttribute('height', $value);
break; break;
case 'FullPage': case 'FullPage':
case 'fullPage': case 'fullPage':
$this->setConfigAttribute('fullPage', $value); $this->setConfigAttribute('fullPage', $value);
break; break;
default: default:
$this->setConfigAttribute($key, $value); $this->setConfigAttribute($key, $value);
@ -158,9 +164,11 @@ class Editor
switch (\gettype($var)) { switch (\gettype($var)) {
case 'boolean': case 'boolean':
return $var ? 'true' : 'false'; // Lowercase necessary! return $var ? 'true' : 'false'; // Lowercase necessary!
case 'integer': case 'integer':
case 'double': case 'double':
return (string) $var; return (string) $var;
case 'resource': case 'resource':
case 'string': case 'string':
return '"'.str_replace( return '"'.str_replace(
@ -170,6 +178,7 @@ class Editor
).'"'; ).'"';
break; break;
case 'array': case 'array':
// Arrays in JSON can't be associative. If the array is empty or if it // Arrays in JSON can't be associative. If the array is empty or if it
// has sequential whole number keys starting with 0, it's not associative // has sequential whole number keys starting with 0, it's not associative
@ -182,6 +191,7 @@ class Editor
return '[ '.implode(', ', $output).' ]'; return '[ '.implode(', ', $output).' ]';
} }
// no break // no break
case 'object': case 'object':
// Otherwise, fall through to convert the array as an object. // Otherwise, fall through to convert the array as an object.
@ -193,6 +203,7 @@ class Editor
return '{ '.implode(', '."\n", $output).' } '."\n"; return '{ '.implode(', '."\n", $output).' } '."\n";
break; break;
default: default:
return 'null'; return 'null';
} }

@ -13,9 +13,10 @@ use DateTime;
use DateTimeZone; use DateTimeZone;
use Display; use Display;
use Exception; use Exception;
use const PHP_SAPI;
use Template; use Template;
use const PHP_SAPI;
class ChamiloApi class ChamiloApi
{ {
public const COURSE_MANAGER = 1; public const COURSE_MANAGER = 1;
@ -245,7 +246,7 @@ class ChamiloApi
* *
* @throws Exception * @throws Exception
*/ */
public static function getCourseIdByDirectory(?string $directory = null): int public static function getCourseIdByDirectory(string $directory = null): int
{ {
if (!empty($directory)) { if (!empty($directory)) {
$directory = Database::escape_string($directory); $directory = Database::escape_string($directory);
@ -339,7 +340,7 @@ class ChamiloApi
public static function getColorPalette( public static function getColorPalette(
bool $decimalOpacity = false, bool $decimalOpacity = false,
bool $wrapInRGBA = false, bool $wrapInRGBA = false,
?int $fillUpTo = null int $fillUpTo = null
): array { ): array {
// Get the common colors from the palette used for pchart // Get the common colors from the palette used for pchart
$paletteFile = api_get_path(SYS_CODE_PATH).'palettes/pchart/default.color'; $paletteFile = api_get_path(SYS_CODE_PATH).'palettes/pchart/default.color';
@ -379,7 +380,7 @@ class ChamiloApi
* *
* @throws Exception * @throws Exception
*/ */
public static function getServerMidnightTime(?string $utcTime = null): DateTime public static function getServerMidnightTime(string $utcTime = null): DateTime
{ {
$localTime = api_get_local_time($utcTime); $localTime = api_get_local_time($utcTime);
$localTimeZone = api_get_timezone(); $localTimeZone = api_get_timezone();

@ -6,6 +6,4 @@ declare(strict_types=1);
namespace Chamilo\CoreBundle\Component\Utils; namespace Chamilo\CoreBundle\Component\Utils;
class GlideAsset extends Glide class GlideAsset extends Glide {}
{
}

@ -6,6 +6,4 @@ declare(strict_types=1);
namespace Chamilo\CoreBundle\Controller; namespace Chamilo\CoreBundle\Controller;
abstract class AbstractResourceController extends BaseController abstract class AbstractResourceController extends BaseController {}
{
}

@ -19,7 +19,7 @@ class IndexBlocksController extends BaseController
{ {
private bool $isAdmin = false; private bool $isAdmin = false;
private bool $isSessionAdmin = false; private bool $isSessionAdmin = false;
private $extAuthSource = []; private array $extAuthSource = [];
public function __construct( public function __construct(
private readonly TranslatorInterface $translator, private readonly TranslatorInterface $translator,

@ -150,7 +150,7 @@ class BaseResourceFileAction
$parentResourceNodeId = (int) $request->get('parentResourceNodeId'); $parentResourceNodeId = (int) $request->get('parentResourceNodeId');
$resourceLinkList = $request->get('resourceLinkList', []); $resourceLinkList = $request->get('resourceLinkList', []);
if (!empty($resourceLinkList)) { if (!empty($resourceLinkList)) {
$resourceLinkList = false === strpos($resourceLinkList, '[') ? json_decode('['.$resourceLinkList.']', true) : json_decode($resourceLinkList, true); $resourceLinkList = !str_contains($resourceLinkList, '[') ? json_decode('['.$resourceLinkList.']', true) : json_decode($resourceLinkList, true);
if (empty($resourceLinkList)) { if (empty($resourceLinkList)) {
$message = 'resourceLinkList is not a valid json. Use for example: [{"cid":1, "visibility":1}]'; $message = 'resourceLinkList is not a valid json. Use for example: [{"cid":1, "visibility":1}]';
@ -200,7 +200,7 @@ class BaseResourceFileAction
$fileType = $request->get('filetype'); $fileType = $request->get('filetype');
$resourceLinkList = $request->get('resourceLinkList', []); $resourceLinkList = $request->get('resourceLinkList', []);
if (!empty($resourceLinkList)) { if (!empty($resourceLinkList)) {
$resourceLinkList = false === strpos($resourceLinkList, '[') ? json_decode('['.$resourceLinkList.']', true) : json_decode($resourceLinkList, true); $resourceLinkList = !str_contains($resourceLinkList, '[') ? json_decode('['.$resourceLinkList.']', true) : json_decode($resourceLinkList, true);
if (empty($resourceLinkList)) { if (empty($resourceLinkList)) {
$message = 'resourceLinkList is not a valid json. Use for example: [{"cid":1, "visibility":1}]'; $message = 'resourceLinkList is not a valid json. Use for example: [{"cid":1, "visibility":1}]';
@ -251,6 +251,7 @@ class BaseResourceFileAction
} }
break; break;
case 'folder': case 'folder':
break; break;
} }

@ -62,10 +62,13 @@ class ExportCGlossaryAction
switch ($format) { switch ($format) {
case 'csv': case 'csv':
return $this->generateCsvFile($glossaryItems, $exportPath); return $this->generateCsvFile($glossaryItems, $exportPath);
case 'xls': case 'xls':
return $this->generateExcelFile($glossaryItems, $exportPath); return $this->generateExcelFile($glossaryItems, $exportPath);
case 'pdf': case 'pdf':
return $this->generatePdfFile($glossaryItems, $exportPath, $translator); return $this->generatePdfFile($glossaryItems, $exportPath, $translator);
default: default:
throw new NotSupported('Export format not supported'); throw new NotSupported('Export format not supported');
} }
@ -75,6 +78,7 @@ class ExportCGlossaryAction
{ {
$csvFilePath = $exportPath.'/glossary.csv'; $csvFilePath = $exportPath.'/glossary.csv';
$csvContent = ''; $csvContent = '';
/** @var CGlossary $item */ /** @var CGlossary $item */
foreach ($glossaryItems as $item) { foreach ($glossaryItems as $item) {
$csvContent .= $item->getName().','.$item->getDescription()."\n"; $csvContent .= $item->getName().','.$item->getDescription()."\n";
@ -89,6 +93,7 @@ class ExportCGlossaryAction
$excelFilePath = $exportPath.'/glossary.xlsx'; $excelFilePath = $exportPath.'/glossary.xlsx';
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet(); $sheet = $spreadsheet->getActiveSheet();
/** @var CGlossary $item */ /** @var CGlossary $item */
foreach ($glossaryItems as $index => $item) { foreach ($glossaryItems as $index => $item) {
$row = $index + 1; $row = $index + 1;
@ -111,6 +116,7 @@ class ExportCGlossaryAction
$html = '<h1>'.$translator->trans('Glossary').'</h1>'; $html = '<h1>'.$translator->trans('Glossary').'</h1>';
$html .= '<table>'; $html .= '<table>';
$html .= '<tr><th>'.$translator->trans('Term').'</th><th>'.$translator->trans('Definition').'</th></tr>'; $html .= '<tr><th>'.$translator->trans('Term').'</th><th>'.$translator->trans('Definition').'</th></tr>';
/** @var CGlossary $item */ /** @var CGlossary $item */
foreach ($glossaryItems as $item) { foreach ($glossaryItems as $item) {
$html .= '<tr>'; $html .= '<tr>';

@ -68,6 +68,7 @@ class ExportGlossaryToDocumentsAction
$html = '<h1>'.$translator->trans('Glossary').'</h1>'; $html = '<h1>'.$translator->trans('Glossary').'</h1>';
$html .= '<table>'; $html .= '<table>';
$html .= '<tr><th>'.$translator->trans('Term').'</th><th>'.$translator->trans('Definition').'</th></tr>'; $html .= '<tr><th>'.$translator->trans('Term').'</th><th>'.$translator->trans('Definition').'</th></tr>';
/** @var CGlossary $item */ /** @var CGlossary $item */
foreach ($glossaryItems as $item) { foreach ($glossaryItems as $item) {
$html .= '<tr>'; $html .= '<tr>';

@ -75,6 +75,7 @@ class GetLinksCollectionController extends BaseResourceFileAction
$dataResponse['categories'][$categoryId]['info'] = $categoryInfo; $dataResponse['categories'][$categoryId]['info'] = $categoryInfo;
if ($links) { if ($links) {
$items = []; $items = [];
/** @var CLink $link */ /** @var CLink $link */
foreach ($links as $link) { foreach ($links as $link) {
$items[] = [ $items[] = [

@ -107,6 +107,7 @@ class ImportCGlossaryAction
->andWhere('resource.name = :name') ->andWhere('resource.name = :name')
->setParameter('name', $termToUpdate) ->setParameter('name', $termToUpdate)
; ;
/** @var CGlossary $existingGlossaryTerm */ /** @var CGlossary $existingGlossaryTerm */
$existingGlossaryTerm = $qb->getQuery()->getOneOrNullResult(); $existingGlossaryTerm = $qb->getQuery()->getOneOrNullResult();
if (null !== $existingGlossaryTerm) { if (null !== $existingGlossaryTerm) {
@ -122,6 +123,7 @@ class ImportCGlossaryAction
->andWhere('resource.name = :name') ->andWhere('resource.name = :name')
->setParameter('name', $term) ->setParameter('name', $term)
; ;
/** @var CGlossary $existingNewGlossaryTerm */ /** @var CGlossary $existingNewGlossaryTerm */
$existingNewGlossaryTerm = $qb->getQuery()->getOneOrNullResult(); $existingNewGlossaryTerm = $qb->getQuery()->getOneOrNullResult();
if (!$existingNewGlossaryTerm) { if (!$existingNewGlossaryTerm) {

@ -10,9 +10,5 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/** /**
* Each entity controller must extend this class. * Each entity controller must extend this class.
*
* @abstract
*/ */
abstract class BaseController extends AbstractController abstract class BaseController extends AbstractController {}
{
}

@ -22,8 +22,8 @@ use Symfony\Component\Routing\Annotation\Route;
class ChatController extends AbstractResourceController implements CourseControllerInterface class ChatController extends AbstractResourceController implements CourseControllerInterface
{ {
use ControllerTrait; use ControllerTrait;
use ResourceControllerTrait;
use CourseControllerTrait; use CourseControllerTrait;
use ResourceControllerTrait;
/** /**
* @Route("/resources/chat/", name="chat_home", options={"expose"=true}) * @Route("/resources/chat/", name="chat_home", options={"expose"=true})
@ -90,6 +90,7 @@ class ChatController extends AbstractResourceController implements CourseControl
Event::registerLog($logInfo); Event::registerLog($logInfo);
break; break;
case 'track': case 'track':
$courseChatUtils->keepUserAsConnected(); $courseChatUtils->keepUserAsConnected();
$courseChatUtils->disconnectInactiveUsers(); $courseChatUtils->disconnectInactiveUsers();
@ -114,6 +115,7 @@ class ChatController extends AbstractResourceController implements CourseControl
]; ];
break; break;
case 'preview': case 'preview':
$json = [ $json = [
'status' => true, 'status' => true,
@ -123,6 +125,7 @@ class ChatController extends AbstractResourceController implements CourseControl
]; ];
break; break;
case 'reset': case 'reset':
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; $friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0;
@ -132,6 +135,7 @@ class ChatController extends AbstractResourceController implements CourseControl
]; ];
break; break;
case 'write': case 'write':
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; $friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0;
$status = $courseChatUtils->saveMessage($_REQUEST['message'], $friend); $status = $courseChatUtils->saveMessage($_REQUEST['message'], $friend);

@ -59,8 +59,7 @@ class CourseController extends ToolBaseController
{ {
public function __construct( public function __construct(
private readonly SerializerInterface $serializer private readonly SerializerInterface $serializer
) { ) {}
}
#[Route('/{cid}/checkLegal.json', name: 'chamilo_core_course_check_legal_json')] #[Route('/{cid}/checkLegal.json', name: 'chamilo_core_course_check_legal_json')]
public function checkTermsAndConditionJson( public function checkTermsAndConditionJson(
@ -78,9 +77,9 @@ class CourseController extends ToolBaseController
'url' => '#', 'url' => '#',
]; ];
if ($user && $user->hasRole('ROLE_STUDENT') && if ($user && $user->hasRole('ROLE_STUDENT')
'true' === $settingsManager->getSetting('allow_terms_conditions') && && 'true' === $settingsManager->getSetting('allow_terms_conditions')
'course' === $settingsManager->getSetting('load_term_conditions_section') && 'course' === $settingsManager->getSetting('load_term_conditions_section')
) { ) {
$termAndConditionStatus = false; $termAndConditionStatus = false;
$extraValue = $extraFieldValuesRepository->findLegalAcceptByItemId($user->getId()); $extraValue = $extraFieldValuesRepository->findLegalAcceptByItemId($user->getId());
@ -106,9 +105,9 @@ class CourseController extends ToolBaseController
->getSetting('course.allow_public_course_with_no_terms_conditions') ->getSetting('course.allow_public_course_with_no_terms_conditions')
; ;
if (true === $allow && if (true === $allow
null !== $course->getVisibility() && && null !== $course->getVisibility()
Course::OPEN_WORLD === $course->getVisibility() && Course::OPEN_WORLD === $course->getVisibility()
) { ) {
$redirect = false; $redirect = false;
} }
@ -179,6 +178,7 @@ class CourseController extends ToolBaseController
$session = $request->getSession(); $session = $request->getSession();
$userId = 0; $userId = 0;
/** @var ?User $user */ /** @var ?User $user */
$user = $this->getUser(); $user = $this->getUser();
if (null !== $user) { if (null !== $user) {
@ -206,8 +206,8 @@ class CourseController extends ToolBaseController
$isSpecialCourse = CourseManager::isSpecialCourse($courseId); $isSpecialCourse = CourseManager::isSpecialCourse($courseId);
if ($user && $isSpecialCourse && (isset($_GET['autoreg']) && 1 === (int) $_GET['autoreg']) && if ($user && $isSpecialCourse && (isset($_GET['autoreg']) && 1 === (int) $_GET['autoreg'])
CourseManager::subscribeUser($userId, $courseId, STUDENT) && CourseManager::subscribeUser($userId, $courseId, STUDENT)
) { ) {
$session->set('is_allowed_in_course', true); $session->set('is_allowed_in_course', true);
} }
@ -404,10 +404,12 @@ class CourseController extends ToolBaseController
EntityManagerInterface $em EntityManagerInterface $em
): Response { ): Response {
$courseId = $course->getId(); $courseId = $course->getId();
/** @var ?User $user */ /** @var ?User $user */
$user = $this->getUser(); $user = $this->getUser();
$fieldsRepo = $em->getRepository(ExtraField::class); $fieldsRepo = $em->getRepository(ExtraField::class);
/** @var TagRepository $tagRepo */ /** @var TagRepository $tagRepo */
$tagRepo = $em->getRepository(Tag::class); $tagRepo = $em->getRepository(Tag::class);
@ -430,6 +432,7 @@ class CourseController extends ToolBaseController
$teachersData[] = $userData; $teachersData[] = $userData;
} }
/** @var ExtraField $tagField */ /** @var ExtraField $tagField */
$tagField = $fieldsRepo->findOneBy([ $tagField = $fieldsRepo->findOneBy([
'itemType' => ExtraField::COURSE_FIELD_TYPE, 'itemType' => ExtraField::COURSE_FIELD_TYPE,
@ -450,30 +453,37 @@ class CourseController extends ToolBaseController
$courseDescription = $descriptionTool->getContent(); $courseDescription = $descriptionTool->getContent();
break; break;
case CCourseDescription::TYPE_OBJECTIVES: case CCourseDescription::TYPE_OBJECTIVES:
$courseObjectives = $descriptionTool; $courseObjectives = $descriptionTool;
break; break;
case CCourseDescription::TYPE_TOPICS: case CCourseDescription::TYPE_TOPICS:
$courseTopics = $descriptionTool; $courseTopics = $descriptionTool;
break; break;
case CCourseDescription::TYPE_METHODOLOGY: case CCourseDescription::TYPE_METHODOLOGY:
$courseMethodology = $descriptionTool; $courseMethodology = $descriptionTool;
break; break;
case CCourseDescription::TYPE_COURSE_MATERIAL: case CCourseDescription::TYPE_COURSE_MATERIAL:
$courseMaterial = $descriptionTool; $courseMaterial = $descriptionTool;
break; break;
case CCourseDescription::TYPE_RESOURCES: case CCourseDescription::TYPE_RESOURCES:
$courseResources = $descriptionTool; $courseResources = $descriptionTool;
break; break;
case CCourseDescription::TYPE_ASSESSMENT: case CCourseDescription::TYPE_ASSESSMENT:
$courseAssessment = $descriptionTool; $courseAssessment = $descriptionTool;
break; break;
case CCourseDescription::TYPE_CUSTOM: case CCourseDescription::TYPE_CUSTOM:
$courseCustom[] = $descriptionTool; $courseCustom[] = $descriptionTool;
@ -600,6 +610,7 @@ class CourseController extends ToolBaseController
if ($ctool) { if ($ctool) {
$ctoolintroRepo = $em->getRepository(CToolIntro::class); $ctoolintroRepo = $em->getRepository(CToolIntro::class);
/** @var CToolIntro $ctoolintro */ /** @var CToolIntro $ctoolintro */
$ctoolintro = $ctoolintroRepo->findOneBy(['courseTool' => $ctool]); $ctoolintro = $ctoolintroRepo->findOneBy(['courseTool' => $ctool]);
if ($ctoolintro) { if ($ctoolintro) {
@ -654,6 +665,7 @@ class CourseController extends ToolBaseController
$em->flush(); $em->flush();
if ($courseTool && !empty($ctoolintroId)) { if ($courseTool && !empty($ctoolintroId)) {
$ctoolintroRepo = Container::getToolIntroRepository(); $ctoolintroRepo = Container::getToolIntroRepository();
/** @var CToolIntro $ctoolintro */ /** @var CToolIntro $ctoolintro */
$ctoolintro = $ctoolintroRepo->find($ctoolintroId); $ctoolintro = $ctoolintroRepo->find($ctoolintroId);
$ctoolintro->setCourseTool($courseTool); $ctoolintro->setCourseTool($courseTool);
@ -705,9 +717,9 @@ class CourseController extends ToolBaseController
$lpAutoLaunch = api_get_course_setting('enable_lp_auto_launch'); $lpAutoLaunch = api_get_course_setting('enable_lp_auto_launch');
$session_id = api_get_session_id(); $session_id = api_get_session_id();
$allowAutoLaunchForCourseAdmins = $allowAutoLaunchForCourseAdmins =
api_is_platform_admin() || api_is_platform_admin()
api_is_allowed_to_edit(true, true) || || api_is_allowed_to_edit(true, true)
api_is_coach(); || api_is_coach();
if (!empty($lpAutoLaunch)) { if (!empty($lpAutoLaunch)) {
if (2 === $lpAutoLaunch) { if (2 === $lpAutoLaunch) {
@ -721,6 +733,7 @@ class CourseController extends ToolBaseController
$url = api_get_path(WEB_CODE_PATH).'lp/lp_controller.php?'.api_get_cidreq(); $url = api_get_path(WEB_CODE_PATH).'lp/lp_controller.php?'.api_get_cidreq();
$_SESSION[$session_key] = true; $_SESSION[$session_key] = true;
header(sprintf('Location: %s', $url)); header(sprintf('Location: %s', $url));
exit; exit;
} }
} }
@ -757,6 +770,7 @@ class CourseController extends ToolBaseController
$_SESSION[$session_key] = true; $_SESSION[$session_key] = true;
header(sprintf('Location: %s', $url)); header(sprintf('Location: %s', $url));
exit; exit;
} }
} }
@ -782,11 +796,12 @@ class CourseController extends ToolBaseController
} else { } else {
$url = api_get_path(WEB_CODE_PATH).'forum/index.php?'.api_get_cidreq(); $url = api_get_path(WEB_CODE_PATH).'forum/index.php?'.api_get_cidreq();
header(sprintf('Location: %s', $url)); header(sprintf('Location: %s', $url));
exit; exit;
} }
} }
if (('true' === api_get_setting('exercise.allow_exercise_auto_launch'))) { if ('true' === api_get_setting('exercise.allow_exercise_auto_launch')) {
$exerciseAutoLaunch = (int) api_get_course_setting('enable_exercise_auto_launch'); $exerciseAutoLaunch = (int) api_get_course_setting('enable_exercise_auto_launch');
if (2 === $exerciseAutoLaunch) { if (2 === $exerciseAutoLaunch) {
if ($allowAutoLaunchForCourseAdmins) { if ($allowAutoLaunchForCourseAdmins) {
@ -799,6 +814,7 @@ class CourseController extends ToolBaseController
// Redirecting to the document // Redirecting to the document
$url = api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'.api_get_cidreq(); $url = api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'.api_get_cidreq();
header(sprintf('Location: %s', $url)); header(sprintf('Location: %s', $url));
exit; exit;
} }
} elseif (1 === $exerciseAutoLaunch) { } elseif (1 === $exerciseAutoLaunch) {
@ -834,6 +850,7 @@ class CourseController extends ToolBaseController
$url = api_get_path(WEB_CODE_PATH). $url = api_get_path(WEB_CODE_PATH).
'exercise/overview.php?exerciseId='.$exerciseId.'&'.api_get_cidreq(); 'exercise/overview.php?exerciseId='.$exerciseId.'&'.api_get_cidreq();
header(sprintf('Location: %s', $url)); header(sprintf('Location: %s', $url));
exit; exit;
} }
} }
@ -852,6 +869,7 @@ class CourseController extends ToolBaseController
// Redirecting to the document // Redirecting to the document
$url = api_get_path(WEB_CODE_PATH).'document/document.php?'.api_get_cidreq(); $url = api_get_path(WEB_CODE_PATH).'document/document.php?'.api_get_cidreq();
header("Location: $url"); header("Location: $url");
exit; exit;
} }
} }

@ -19,8 +19,8 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class EditorController extends BaseController class EditorController extends BaseController
{ {
use ControllerTrait; use ControllerTrait;
use ResourceControllerTrait;
use CourseControllerTrait; use CourseControllerTrait;
use ResourceControllerTrait;
/** /**
* Get templates (left column when creating a document). * Get templates (left column when creating a document).

@ -20,16 +20,12 @@ class IndexController extends BaseController
* @Route("/login", name="login", methods={"GET", "POST"}, options={"expose"=true}) * @Route("/login", name="login", methods={"GET", "POST"}, options={"expose"=true})
* @Route("/faq", name="faq", methods={"GET", "POST"}, options={"expose"=true}) * @Route("/faq", name="faq", methods={"GET", "POST"}, options={"expose"=true})
* @Route("/demo", name="demo", methods={"GET", "POST"}, options={"expose"=true}) * @Route("/demo", name="demo", methods={"GET", "POST"}, options={"expose"=true})
*
* @Route("/course/{cid}/home", name="chamilo_core_course_home") * @Route("/course/{cid}/home", name="chamilo_core_course_home")
* @Route("/courses", name="courses", methods={"GET", "POST"}, options={"expose"=true}) * @Route("/courses", name="courses", methods={"GET", "POST"}, options={"expose"=true})
*
* @Route("/catalog/{slug}", name="catalog", methods={"GET", "POST"}, options={"expose"=true}) * @Route("/catalog/{slug}", name="catalog", methods={"GET", "POST"}, options={"expose"=true})
* @Route("/resources/document/{nodeId}/manager", methods={"GET"}, name="resources_filemanager") * @Route("/resources/document/{nodeId}/manager", methods={"GET"}, name="resources_filemanager")
* @Route("/account/home", name="account", options={"expose"=true}, name="chamilo_core_account_home") * @Route("/account/home", name="account", options={"expose"=true}, name="chamilo_core_account_home")
*
* @Route("/social", name="social", options={"expose"=true}, name="chamilo_core_socialnetwork") * @Route("/social", name="social", options={"expose"=true}, name="chamilo_core_socialnetwork")
*
* @Route("/admin", name="admin", options={"expose"=true}) * @Route("/admin", name="admin", options={"expose"=true})
*/ */
#[Route('/sessions', name: 'sessions')] #[Route('/sessions', name: 'sessions')]
@ -41,6 +37,8 @@ class IndexController extends BaseController
/** /**
* Use only in PHPUnit tests. * Use only in PHPUnit tests.
*
* @param mixed $name
*/ */
public function classic($name): Response public function classic($name): Response
{ {
@ -54,6 +52,7 @@ class IndexController extends BaseController
$fileToLoad = $mainPath.$name; $fileToLoad = $mainPath.$name;
ob_start(); ob_start();
require_once $fileToLoad; require_once $fileToLoad;
$content = ob_get_contents(); $content = ob_get_contents();
ob_end_clean(); ob_end_clean();

@ -42,9 +42,9 @@ use ZipStream\ZipStream;
#[Route('/r')] #[Route('/r')]
class ResourceController extends AbstractResourceController implements CourseControllerInterface class ResourceController extends AbstractResourceController implements CourseControllerInterface
{ {
use ControllerTrait;
use CourseControllerTrait; use CourseControllerTrait;
use ResourceControllerTrait; use ResourceControllerTrait;
use ControllerTrait;
/** /**
* @Route("/{tool}/{type}/{id}/disk_space", methods={"GET", "POST"}, name="chamilo_core_resource_disk_space") * @Route("/{tool}/{type}/{id}/disk_space", methods={"GET", "POST"}, name="chamilo_core_resource_disk_space")
@ -372,6 +372,7 @@ class ResourceController extends AbstractResourceController implements CourseCon
$forceDownload = true; $forceDownload = true;
break; break;
case 'show': case 'show':
default: default:
$forceDownload = false; $forceDownload = false;

@ -27,8 +27,7 @@ class SecurityController extends AbstractController
public function __construct( public function __construct(
private readonly SerializerInterface $serializer, private readonly SerializerInterface $serializer,
private readonly TrackELoginRecordRepository $trackELoginRecordRepository private readonly TrackELoginRecordRepository $trackELoginRecordRepository
) { ) {}
}
#[Route('/login_json', name: 'login_json', methods: ['POST'])] #[Route('/login_json', name: 'login_json', methods: ['POST'])]
public function loginJson(Request $request, EntityManager $entityManager, SettingsManager $settingsManager, TokenStorageInterface $tokenStorage): Response public function loginJson(Request $request, EntityManager $entityManager, SettingsManager $settingsManager, TokenStorageInterface $tokenStorage): Response
@ -46,9 +45,9 @@ class SecurityController extends AbstractController
$user = $this->getUser(); $user = $this->getUser();
$extraFieldValuesRepository = $entityManager->getRepository(ExtraFieldValues::class); $extraFieldValuesRepository = $entityManager->getRepository(ExtraFieldValues::class);
$legalTermsRepo = $entityManager->getRepository(Legal::class); $legalTermsRepo = $entityManager->getRepository(Legal::class);
if ($user->hasRole('ROLE_STUDENT') && if ($user->hasRole('ROLE_STUDENT')
'true' === $settingsManager->getSetting('allow_terms_conditions') && && 'true' === $settingsManager->getSetting('allow_terms_conditions')
'login' === $settingsManager->getSetting('load_term_conditions_section') && 'login' === $settingsManager->getSetting('load_term_conditions_section')
) { ) {
$termAndConditionStatus = false; $termAndConditionStatus = false;
$extraValue = $extraFieldValuesRepository->findLegalAcceptByItemId($user->getId()); $extraValue = $extraFieldValuesRepository->findLegalAcceptByItemId($user->getId());

@ -56,6 +56,7 @@ class SessionController extends AbstractController
/** @var EntityRepository $fieldsRepo */ /** @var EntityRepository $fieldsRepo */
$fieldsRepo = $em->getRepository(ExtraField::class); $fieldsRepo = $em->getRepository(ExtraField::class);
/** @var TagRepository $tagRepo */ /** @var TagRepository $tagRepo */
$tagRepo = $em->getRepository(Tag::class); $tagRepo = $em->getRepository(Tag::class);
@ -83,6 +84,7 @@ class SessionController extends AbstractController
$courseCoaches = $userRepo->getCoachesForSessionCourse($session, $sessionCourse); $courseCoaches = $userRepo->getCoachesForSessionCourse($session, $sessionCourse);
$coachesData = []; $coachesData = [];
/** @var User $courseCoach */ /** @var User $courseCoach */
foreach ($courseCoaches as $courseCoach) { foreach ($courseCoaches as $courseCoach) {
$coachData = [ $coachData = [
@ -117,35 +119,43 @@ class SessionController extends AbstractController
if (!empty($descriptionsData)) { if (!empty($descriptionsData)) {
foreach ($descriptionsData as $descriptionInfo) { foreach ($descriptionsData as $descriptionInfo) {
$type = $descriptionInfo->getDescriptionType(); $type = $descriptionInfo->getDescriptionType();
switch ($type) { switch ($type) {
case CCourseDescription::TYPE_DESCRIPTION: case CCourseDescription::TYPE_DESCRIPTION:
$courseDescription[] = $descriptionInfo; $courseDescription[] = $descriptionInfo;
break; break;
case CCourseDescription::TYPE_OBJECTIVES: case CCourseDescription::TYPE_OBJECTIVES:
$courseObjectives[] = $descriptionInfo; $courseObjectives[] = $descriptionInfo;
break; break;
case CCourseDescription::TYPE_TOPICS: case CCourseDescription::TYPE_TOPICS:
$courseTopics[] = $descriptionInfo; $courseTopics[] = $descriptionInfo;
break; break;
case CCourseDescription::TYPE_METHODOLOGY: case CCourseDescription::TYPE_METHODOLOGY:
$courseMethodology[] = $descriptionInfo; $courseMethodology[] = $descriptionInfo;
break; break;
case CCourseDescription::TYPE_COURSE_MATERIAL: case CCourseDescription::TYPE_COURSE_MATERIAL:
$courseMaterial[] = $descriptionInfo; $courseMaterial[] = $descriptionInfo;
break; break;
case CCourseDescription::TYPE_RESOURCES: case CCourseDescription::TYPE_RESOURCES:
$courseResources[] = $descriptionInfo; $courseResources[] = $descriptionInfo;
break; break;
case CCourseDescription::TYPE_ASSESSMENT: case CCourseDescription::TYPE_ASSESSMENT:
$courseAssessment[] = $descriptionInfo; $courseAssessment[] = $descriptionInfo;
break; break;
case CCourseDescription::TYPE_CUSTOM: case CCourseDescription::TYPE_CUSTOM:
$courseCustom[] = $descriptionInfo; $courseCustom[] = $descriptionInfo;

@ -19,6 +19,7 @@ class ToolController extends AbstractController
* Updates the table tool and resource_type with the content of tools.yml. * Updates the table tool and resource_type with the content of tools.yml.
* *
* @Security("is_granted('ROLE_ADMIN')") * @Security("is_granted('ROLE_ADMIN')")
*
* @Route("/update", methods={"GET"}) * @Route("/update", methods={"GET"})
*/ */
public function profileAction(ToolChain $toolChain): Response public function profileAction(ToolChain $toolChain): Response

@ -27,6 +27,7 @@ class AccessUserUrlFixtures extends Fixture implements ContainerAwareInterface
public function load(ObjectManager $manager): void public function load(ObjectManager $manager): void
{ {
$container = $this->container; $container = $this->container;
/** @var User $admin */ /** @var User $admin */
$admin = $this->getReference(AccessUserFixtures::ADMIN_USER_REFERENCE); $admin = $this->getReference(AccessUserFixtures::ADMIN_USER_REFERENCE);
$anon = $this->getReference(AccessUserFixtures::ANON_USER_REFERENCE); $anon = $this->getReference(AccessUserFixtures::ANON_USER_REFERENCE);

@ -24,8 +24,7 @@ final class CCalendarEventExtension implements QueryCollectionExtensionInterface
public function __construct( public function __construct(
private readonly Security $security, private readonly Security $security,
private readonly RequestStack $requestStack private readonly RequestStack $requestStack
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -26,8 +26,7 @@ final class CDocumentExtension implements QueryCollectionExtensionInterface //,
public function __construct( public function __construct(
private readonly Security $security, private readonly Security $security,
private readonly RequestStack $requestStack private readonly RequestStack $requestStack
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -22,8 +22,7 @@ class CStudentPublicationExtension implements QueryCollectionExtensionInterface
public function __construct( public function __construct(
private readonly Security $security, private readonly Security $security,
private readonly RequestStack $requestStack private readonly RequestStack $requestStack
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -24,8 +24,7 @@ final class CToolIntroExtension implements QueryCollectionExtensionInterface
public function __construct( public function __construct(
private readonly Security $security, private readonly Security $security,
private readonly RequestStack $requestStack private readonly RequestStack $requestStack
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -23,8 +23,7 @@ final class CourseExtension implements QueryCollectionExtensionInterface
{ {
public function __construct( public function __construct(
private readonly Security $security private readonly Security $security
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -12,8 +12,7 @@ trait CourseLinkExtensionTrait
{ {
public function __construct( public function __construct(
private readonly Security $security private readonly Security $security
) { ) {}
}
protected function addCourseLinkWithVisibilityConditions( protected function addCourseLinkWithVisibilityConditions(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,
@ -45,8 +44,8 @@ trait CourseLinkExtensionTrait
; ;
$allowDraft = $allowDraft =
$this->security->isGranted('ROLE_ADMIN') || $this->security->isGranted('ROLE_ADMIN')
$this->security->isGranted('ROLE_CURRENT_COURSE_TEACHER'); || $this->security->isGranted('ROLE_CURRENT_COURSE_TEACHER');
if (!$allowDraft) { if (!$allowDraft) {
$queryBuilder $queryBuilder

@ -21,8 +21,7 @@ final class CourseRelUserExtension implements QueryCollectionExtensionInterface
{ {
public function __construct( public function __construct(
private readonly Security $security private readonly Security $security
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -22,8 +22,7 @@ final class MessageExtension implements QueryCollectionExtensionInterface //, Qu
{ {
public function __construct( public function __construct(
private readonly Security $security private readonly Security $security
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -18,8 +18,7 @@ class MessageRelUserExtension implements QueryCollectionExtensionInterface
{ {
public function __construct( public function __construct(
private readonly Security $security private readonly Security $security
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -19,8 +19,7 @@ final class MessageTagExtension implements QueryCollectionExtensionInterface //,
{ {
public function __construct( public function __construct(
private readonly Security $security private readonly Security $security
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -22,8 +22,7 @@ final class PageExtension implements QueryCollectionExtensionInterface //, Query
public function __construct( public function __construct(
private readonly Security $security, private readonly Security $security,
private readonly RequestStack $requestStack private readonly RequestStack $requestStack
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -26,8 +26,7 @@ final class PersonalFileExtension implements QueryCollectionExtensionInterface /
public function __construct( public function __construct(
private readonly Security $security, private readonly Security $security,
private readonly RequestStack $requestStack private readonly RequestStack $requestStack
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -25,8 +25,7 @@ final class SessionRelUserExtension implements QueryCollectionExtensionInterface
public function __construct( public function __construct(
private readonly Security $security, private readonly Security $security,
private readonly RequestStack $requestStack private readonly RequestStack $requestStack
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -17,8 +17,7 @@ class SocialPostExtension implements QueryCollectionExtensionInterface
{ {
public function __construct( public function __construct(
private readonly SettingsManager $settingsManager private readonly SettingsManager $settingsManager
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -19,8 +19,7 @@ final class TrackEExerciseExtension implements QueryCollectionExtensionInterface
{ {
public function __construct( public function __construct(
private readonly Security $security private readonly Security $security
) { ) {}
}
public function applyToCollection( public function applyToCollection(
QueryBuilder $queryBuilder, QueryBuilder $queryBuilder,

@ -17,8 +17,7 @@ class UserItemDataProvider implements ItemDataProviderInterface, RestrictedDataP
public function __construct( public function __construct(
private readonly UserRepository $repository, private readonly UserRepository $repository,
private readonly NameConvention $nameConvention private readonly NameConvention $nameConvention
) { ) {}
}
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = []) public function getItem(string $resourceClass, $id, string $operationName = null, array $context = [])
{ {

@ -136,6 +136,7 @@ abstract class AbstractResource
$sendTo['groups'][] = (int) $id; $sendTo['groups'][] = (int) $id;
break; break;
case 'USER': case 'USER':
$sendTo['users'][] = (int) $id; $sendTo['users'][] = (int) $id;
@ -176,6 +177,7 @@ abstract class AbstractResource
; ;
$rights = []; $rights = [];
switch ($visibility) { switch ($visibility) {
case ResourceLink::VISIBILITY_PENDING: case ResourceLink::VISIBILITY_PENDING:
case ResourceLink::VISIBILITY_DRAFT: case ResourceLink::VISIBILITY_DRAFT:
@ -198,9 +200,9 @@ abstract class AbstractResource
if ($this->hasResourceNode()) { if ($this->hasResourceNode()) {
$resourceNode = $this->getResourceNode(); $resourceNode = $this->getResourceNode();
$exists = $resourceNode->getResourceLinks()->exists( $exists = $resourceNode->getResourceLinks()->exists(
fn ($key, $element) => $course === $element->getCourse() && fn ($key, $element) => $course === $element->getCourse()
$session === $element->getSession() && && $session === $element->getSession()
$group === $element->getGroup() && $group === $element->getGroup()
); );
if ($exists) { if ($exists) {

@ -9,6 +9,4 @@ namespace Chamilo\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity] #[ORM\Entity]
class AgendaEventSubscriber extends AgendaEventInvitee class AgendaEventSubscriber extends AgendaEventInvitee {}
{
}

@ -553,7 +553,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
$teacherSubscriptions = new ArrayCollection(); $teacherSubscriptions = new ArrayCollection();
foreach ($this->users as $subscription) { foreach ($this->users as $subscription) {
if ($subscription->getStatus() === CourseRelUser::TEACHER) { if (CourseRelUser::TEACHER === $subscription->getStatus()) {
$teacherSubscriptions->add($subscription); $teacherSubscriptions->add($subscription);
} }
} }
@ -923,6 +923,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
$this->currentSession = $session; $this->currentSession = $session;
}*/ }*/
$list = $this->getSessions(); $list = $this->getSessions();
/** @var SessionRelCourse $item */ /** @var SessionRelCourse $item */
foreach ($list as $item) { foreach ($list as $item) {
if ($item->getSession()->getId() === $session->getId()) { if ($item->getSession()->getId() === $session->getId()) {
@ -951,6 +952,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
public function setCurrentUrl(AccessUrl $url): self public function setCurrentUrl(AccessUrl $url): self
{ {
$urlList = $this->getUrls(); $urlList = $this->getUrls();
/** @var AccessUrlRelCourse $item */ /** @var AccessUrlRelCourse $item */
foreach ($urlList as $item) { foreach ($urlList as $item) {
if ($item->getUrl()->getId() === $url->getId()) { if ($item->getUrl()->getId() === $url->getId()) {

@ -63,6 +63,7 @@ class CourseCategory implements Stringable
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue] #[ORM\GeneratedValue]
protected ?int $id = null; protected ?int $id = null;
/** /**
* @var Collection|CourseCategory[] * @var Collection|CourseCategory[]
*/ */
@ -93,6 +94,7 @@ class CourseCategory implements Stringable
#[Groups(['course_category:read', 'course_category:write'])] #[Groups(['course_category:read', 'course_category:write'])]
#[ORM\Column(name: 'description', type: 'text', nullable: true)] #[ORM\Column(name: 'description', type: 'text', nullable: true)]
protected ?string $description = null; protected ?string $description = null;
/** /**
* @var Collection<int, AccessUrlRelCourseCategory> * @var Collection<int, AccessUrlRelCourseCategory>
*/ */
@ -103,6 +105,7 @@ class CourseCategory implements Stringable
orphanRemoval: true orphanRemoval: true
)] )]
protected Collection $urls; protected Collection $urls;
/** /**
* @var Collection<int, Course> * @var Collection<int, Course>
*/ */

@ -34,9 +34,7 @@ class CourseRelUserCatalogue implements Stringable
#[ORM\Column(name: 'visible', type: 'integer')] #[ORM\Column(name: 'visible', type: 'integer')]
protected int $visible; protected int $visible;
public function __construct() public function __construct() {}
{
}
public function __toString(): string public function __toString(): string
{ {

@ -87,12 +87,14 @@ class ExtraField
protected ?bool $changeable = null; protected ?bool $changeable = null;
#[ORM\Column(name: 'filter', type: 'boolean', nullable: true, unique: false)] #[ORM\Column(name: 'filter', type: 'boolean', nullable: true, unique: false)]
protected ?bool $filter = null; protected ?bool $filter = null;
/** /**
* @var Collection<int, ExtraFieldOptions> * @var Collection<int, ExtraFieldOptions>
*/ */
#[Groups(['extra_field:read'])] #[Groups(['extra_field:read'])]
#[ORM\OneToMany(targetEntity: ExtraFieldOptions::class, mappedBy: 'field')] #[ORM\OneToMany(targetEntity: ExtraFieldOptions::class, mappedBy: 'field')]
protected Collection $options; protected Collection $options;
/** /**
* @var Tag[]|Collection * @var Tag[]|Collection
*/ */
@ -111,6 +113,7 @@ class ExtraField
$this->changeable = false; $this->changeable = false;
$this->filter = false; $this->filter = false;
} }
/** /**
* Get id. * Get id.
* *
@ -140,6 +143,7 @@ class ExtraField
return $this; return $this;
} }
/** /**
* @return string * @return string
*/ */
@ -153,6 +157,7 @@ class ExtraField
return $this; return $this;
} }
/** /**
* @return string * @return string
*/ */
@ -166,6 +171,7 @@ class ExtraField
return $this; return $this;
} }
/** /**
* @return string * @return string
*/ */
@ -179,6 +185,7 @@ class ExtraField
return $this; return $this;
} }
/** /**
* @return int * @return int
*/ */
@ -192,6 +199,7 @@ class ExtraField
return $this; return $this;
} }
/** /**
* @return bool * @return bool
*/ */
@ -245,6 +253,7 @@ class ExtraField
return $this; return $this;
} }
/** /**
* @return Collection<int, ExtraFieldOptions> * @return Collection<int, ExtraFieldOptions>
*/ */
@ -258,6 +267,7 @@ class ExtraField
return $this; return $this;
} }
/** /**
* @return Tag[]|Collection * @return Tag[]|Collection
*/ */

@ -45,6 +45,7 @@ class ExtraFieldValues
#[ORM\ManyToOne(targetEntity: Asset::class)] #[ORM\ManyToOne(targetEntity: Asset::class)]
#[ORM\JoinColumn(name: 'asset_id', referencedColumnName: 'id', onDelete: 'CASCADE')] #[ORM\JoinColumn(name: 'asset_id', referencedColumnName: 'id', onDelete: 'CASCADE')]
protected ?Asset $asset = null; protected ?Asset $asset = null;
/** /**
* Item id can be: userId, courseId, sessionId, etc. * Item id can be: userId, courseId, sessionId, etc.
*/ */
@ -89,6 +90,7 @@ class ExtraFieldValues
{ {
return $this->comment; return $this->comment;
} }
/** /**
* Get id. * Get id.
* *

@ -17,8 +17,8 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ORM\Entity] #[ORM\Entity]
class GradebookCategory class GradebookCategory
{ {
use UserTrait;
use CourseTrait; use CourseTrait;
use UserTrait;
#[ORM\Column(name: 'id', type: 'integer')] #[ORM\Column(name: 'id', type: 'integer')]
#[ORM\Id] #[ORM\Id]

@ -14,8 +14,8 @@ use Gedmo\Timestampable\Traits\TimestampableEntity;
#[ORM\Entity] #[ORM\Entity]
class GradebookComment class GradebookComment
{ {
use UserTrait;
use TimestampableEntity; use TimestampableEntity;
use UserTrait;
#[ORM\Column(name: 'id', type: 'bigint')] #[ORM\Column(name: 'id', type: 'bigint')]
#[ORM\Id] #[ORM\Id]

@ -22,8 +22,7 @@ class CourseListener
public function __construct( public function __construct(
protected ToolChain $toolChain, protected ToolChain $toolChain,
protected SettingsManager $settingsManager protected SettingsManager $settingsManager
) { ) {}
}
public function prePersist(Course $course, PrePersistEventArgs $args): void public function prePersist(Course $course, PrePersistEventArgs $args): void
{ {

@ -14,8 +14,7 @@ class MessageListener
{ {
public function __construct( public function __construct(
private MessageBusInterface $bus private MessageBusInterface $bus
) { ) {}
}
public function postPersist(Message $message, PostPersistEventArgs $args): void public function postPersist(Message $message, PostPersistEventArgs $args): void
{ {

@ -31,6 +31,9 @@ use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Exception\UserNotFoundException; use Symfony\Component\Security\Core\Exception\UserNotFoundException;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use const JSON_THROW_ON_ERROR;
use const PATHINFO_EXTENSION;
class ResourceListener class ResourceListener
{ {
use AccessUrlListenerTrait; use AccessUrlListenerTrait;
@ -40,8 +43,7 @@ class ResourceListener
protected ToolChain $toolChain, protected ToolChain $toolChain,
protected RequestStack $request, protected RequestStack $request,
protected Security $security protected Security $security
) { ) {}
}
/** /**
* Only in creation. * Only in creation.
@ -132,7 +134,7 @@ class ResourceListener
} }
if (null === $parentUrl) { if (null === $parentUrl) {
throw new InvalidArgumentException(('The resource needs an AccessUrl: use $resource->addAccessUrl()')); throw new InvalidArgumentException('The resource needs an AccessUrl: use $resource->addAccessUrl()');
} }
$parentNode = $parentUrl; $parentNode = $parentUrl;
} }
@ -184,8 +186,8 @@ class ResourceListener
if (null === $currentUser) { if (null === $currentUser) {
$currentUser = $parentNode->getCreator(); $currentUser = $parentNode->getCreator();
} }
$valid = $parentNode->getCreator()->getUsername() === $currentUser->getUsername() || $valid = $parentNode->getCreator()->getUsername() === $currentUser->getUsername()
$parentNode->getId() === $currentUser->getResourceNode()->getId(); || $parentNode->getId() === $currentUser->getResourceNode()->getId();
if (!$valid) { if (!$valid) {
$msg = sprintf('User %s cannot add a file to another user', $currentUser->getUsername()); $msg = sprintf('User %s cannot add a file to another user', $currentUser->getUsername());

@ -24,8 +24,7 @@ class ResourceNodeListener
protected RequestStack $request, protected RequestStack $request,
protected Security $security, protected Security $security,
protected ResourceNodeRepository $resourceNodeRepository protected ResourceNodeRepository $resourceNodeRepository
) { ) {}
}
/*public function prePersist(ResourceNode $resourceNode, LifecycleEventArgs $event) /*public function prePersist(ResourceNode $resourceNode, LifecycleEventArgs $event)
{ {

@ -25,8 +25,7 @@ class SessionListener
public function __construct( public function __construct(
protected RequestStack $request, protected RequestStack $request,
protected Security $security protected Security $security
) { ) {}
}
/** /**
* This code is executed when a new session is created. * This code is executed when a new session is created.
@ -51,9 +50,7 @@ class SessionListener
/** /**
* This code is executed when a session is updated. * This code is executed when a session is updated.
*/ */
public function preUpdate(Session $session, PreUpdateEventArgs $args): void public function preUpdate(Session $session, PreUpdateEventArgs $args): void {}
{
}
/*protected function checkLimit(SessionRepository $repo, AccessUrl $url): void /*protected function checkLimit(SessionRepository $repo, AccessUrl $url): void
{ {

@ -23,8 +23,7 @@ class SkillRelUserListener
private readonly RouterInterface $router, private readonly RouterInterface $router,
private readonly TranslatorInterface $translator, private readonly TranslatorInterface $translator,
protected Security $security protected Security $security
) { ) {}
}
public function postPersist(SkillRelUser $skillRelUser, PostPersistEventArgs $event): void public function postPersist(SkillRelUser $skillRelUser, PostPersistEventArgs $event): void
{ {

@ -22,8 +22,7 @@ class UserListener
private UserRepository $userRepository, private UserRepository $userRepository,
private Security $security, private Security $security,
private readonly TranslatorInterface $translator private readonly TranslatorInterface $translator
) { ) {}
}
/** /**
* This code is executed when a new user is created. * This code is executed when a new user is created.

@ -15,8 +15,7 @@ use Exception;
class UserRelUserListener class UserRelUserListener
{ {
public function __construct( public function __construct(
) { ) {}
}
public function prePersist(UserRelUser $userRelUser, PrePersistEventArgs $args): void public function prePersist(UserRelUser $userRelUser, PrePersistEventArgs $args): void
{ {

@ -180,7 +180,8 @@ class Message
return $this->receivers return $this->receivers
->filter( ->filter(
fn (MessageRelUser $messageRelUser) => MessageRelUser::TYPE_TO === $messageRelUser->getReceiverType() fn (MessageRelUser $messageRelUser) => MessageRelUser::TYPE_TO === $messageRelUser->getReceiverType()
)->getValues(); )->getValues()
;
} }
#[Groups(['message:read'])] #[Groups(['message:read'])]

@ -21,11 +21,11 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource( #[ApiResource(
operations: [ operations: [
new Get(security: 'is_granted(\'ROLE_USER\')'), new Get(security: "is_granted('ROLE_USER')"),
new Put(security: 'is_granted(\'ROLE_ADMIN\')'), new Put(security: "is_granted('ROLE_ADMIN')"),
new Delete(security: 'is_granted(\'ROLE_ADMIN\')'), new Delete(security: "is_granted('ROLE_ADMIN')"),
new GetCollection(security: 'is_granted(\'ROLE_USER\')'), new GetCollection(security: "is_granted('ROLE_USER')"),
new Post(security: 'is_granted(\'ROLE_ADMIN\')'), new Post(security: "is_granted('ROLE_ADMIN')"),
], ],
normalizationContext: [ normalizationContext: [
'groups' => ['page_category:read'], 'groups' => ['page_category:read'],
@ -56,8 +56,9 @@ class PageCategory
#[Assert\NotBlank] #[Assert\NotBlank]
#[ORM\Column(name: 'type', type: 'string')] #[ORM\Column(name: 'type', type: 'string')]
protected string $type; protected string $type;
/** /**
* @var Collection|Page[] * @var Collection<int, Page>
*/ */
#[ORM\OneToMany(mappedBy: 'category', targetEntity: Page::class, cascade: ['persist'])] #[ORM\OneToMany(mappedBy: 'category', targetEntity: Page::class, cascade: ['persist'])]
protected Collection $pages; protected Collection $pages;
@ -99,7 +100,11 @@ class PageCategory
return $this; return $this;
} }
public function getPages()
/**
* @return ArrayCollection<int, Page>
*/
public function getPages(): ArrayCollection
{ {
return $this->pages; return $this->pages;
} }

@ -45,9 +45,7 @@ class PersonalFile extends AbstractResource implements ResourceInterface, String
#[Groups(['personal_file:read'])] #[Groups(['personal_file:read'])]
#[ORM\Column(name: 'title', type: 'string', length: 255, nullable: false)] #[ORM\Column(name: 'title', type: 'string', length: 255, nullable: false)]
protected string $title; protected string $title;
public function __construct() public function __construct() {}
{
}
public function __toString(): string public function __toString(): string
{ {
return $this->getTitle(); return $this->getTitle();

@ -30,9 +30,9 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ORM\Entity(repositoryClass: NestedTreeRepository::class)] #[ORM\Entity(repositoryClass: NestedTreeRepository::class)]
class ResourceComment class ResourceComment
{ {
use TimestampableTypedEntity;
use TimestampableAgoTrait;
use NestedSetEntity; use NestedSetEntity;
use TimestampableAgoTrait;
use TimestampableTypedEntity;
#[ORM\Id] #[ORM\Id]
#[ORM\Column(type: 'bigint')] #[ORM\Column(type: 'bigint')]

@ -102,6 +102,7 @@ class ResourceFile implements Stringable
#[Groups(['resource_file:read', 'resource_node:read', 'document:read', 'message:read'])] #[Groups(['resource_file:read', 'resource_node:read', 'document:read', 'message:read'])]
#[ORM\Column(type: 'integer')] #[ORM\Column(type: 'integer')]
protected ?int $size = 0; protected ?int $size = 0;
/** /**
* @Vich\UploadableField( * @Vich\UploadableField(
* mapping="resources", * mapping="resources",
@ -125,6 +126,7 @@ class ResourceFile implements Stringable
protected ?string $crop = null; protected ?string $crop = null;
#[ORM\OneToOne(mappedBy: 'resourceFile', targetEntity: ResourceNode::class)] #[ORM\OneToOne(mappedBy: 'resourceFile', targetEntity: ResourceNode::class)]
protected ResourceNode $resourceNode; protected ResourceNode $resourceNode;
/** /**
* @var string[] * @var string[]
*/ */
@ -140,6 +142,7 @@ class ResourceFile implements Stringable
protected ?bool $text = null; protected ?bool $text = null;
#[ORM\Column(name: 'description', type: 'text', nullable: true)] #[ORM\Column(name: 'description', type: 'text', nullable: true)]
protected ?string $description = null; protected ?string $description = null;
/** /**
* @var DateTime|DateTimeImmutable * @var DateTime|DateTimeImmutable
*/ */
@ -194,6 +197,7 @@ class ResourceFile implements Stringable
{ {
return $this->crop; return $this->crop;
} }
/** /**
* $crop example: 100,100,100,100 = width,height,x,y. * $crop example: 100,100,100,100 = width,height,x,y.
*/ */
@ -324,7 +328,7 @@ class ResourceFile implements Stringable
return $this->file; return $this->file;
} }
public function setFile(File|UploadedFile|null $file = null): self public function setFile(File|UploadedFile $file = null): self
{ {
$this->file = $file; $this->file = $file;
if (null !== $file) { if (null !== $file) {

@ -71,8 +71,8 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiFilter(filterClass: SearchFilter::class, properties: ['title' => 'partial'])] #[ApiFilter(filterClass: SearchFilter::class, properties: ['title' => 'partial'])]
class ResourceNode implements Stringable class ResourceNode implements Stringable
{ {
use TimestampableTypedEntity;
use TimestampableAgoTrait; use TimestampableAgoTrait;
use TimestampableTypedEntity;
public const PATH_SEPARATOR = '/'; public const PATH_SEPARATOR = '/';
@ -110,6 +110,7 @@ class ResourceNode implements Stringable
#[Groups(['ctool:read', 'c_tool_intro:read'])] #[Groups(['ctool:read', 'c_tool_intro:read'])]
#[ORM\OneToMany(mappedBy: 'resourceNode', targetEntity: ResourceLink::class, cascade: ['persist', 'remove'])] #[ORM\OneToMany(mappedBy: 'resourceNode', targetEntity: ResourceLink::class, cascade: ['persist', 'remove'])]
protected Collection $resourceLinks; protected Collection $resourceLinks;
/** /**
* ResourceFile available file for this node. * ResourceFile available file for this node.
*/ */
@ -290,7 +291,7 @@ class ResourceNode implements Stringable
/** /**
* @return Collection|ResourceComment[] * @return Collection|ResourceComment[]
*/ */
public function getComments(): Collection|array public function getComments(): array|Collection
{ {
return $this->comments; return $this->comments;
} }
@ -303,7 +304,7 @@ class ResourceNode implements Stringable
return $this; return $this;
} }
public function getPathForDisplayToArray(?int $baseRoot = null): array public function getPathForDisplayToArray(int $baseRoot = null): array
{ {
$parts = explode(self::PATH_SEPARATOR, $this->path); $parts = explode(self::PATH_SEPARATOR, $this->path);
$list = []; $list = [];
@ -440,7 +441,7 @@ class ResourceNode implements Stringable
return $this->resourceFile; return $this->resourceFile;
} }
public function setResourceFile(?ResourceFile $resourceFile = null): self public function setResourceFile(ResourceFile $resourceFile = null): self
{ {
$this->resourceFile = $resourceFile; $this->resourceFile = $resourceFile;

@ -9,6 +9,4 @@ namespace Chamilo\CoreBundle\Entity;
/** /**
* Show base course resources inside a session. * Show base course resources inside a session.
*/ */
interface ResourceShowCourseResourcesInSessionInterface interface ResourceShowCourseResourcesInSessionInterface {}
{
}

@ -9,6 +9,4 @@ namespace Chamilo\CoreBundle\Entity;
/** /**
* This will attach the resource to the main resource node root (For example a Course). * This will attach the resource to the main resource node root (For example a Course).
*/ */
interface ResourceToRootInterface interface ResourceToRootInterface {}
{
}

@ -39,9 +39,7 @@ class ScheduledAnnouncement
#[ORM\Column(name: 'c_id', type: 'integer', nullable: true)] #[ORM\Column(name: 'c_id', type: 'integer', nullable: true)]
protected ?int $cId = null; protected ?int $cId = null;
public function __construct() public function __construct() {}
{
}
public function getId(): int public function getId(): int
{ {

@ -578,7 +578,7 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
return false; return false;
} }
public function getSessionRelCourseByUser(User $user, ?int $status = null): Collection public function getSessionRelCourseByUser(User $user, int $status = null): Collection
{ {
$criteria = Criteria::create()->where(Criteria::expr()->eq('user', $user)); $criteria = Criteria::create()->where(Criteria::expr()->eq('user', $user));
if (null !== $status) { if (null !== $status) {
@ -1124,7 +1124,7 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
return $relation->count() > 0; return $relation->count() > 0;
} }
public function getUserInCourse(User $user, Course $course, ?int $status = null): Collection public function getUserInCourse(User $user, Course $course, int $status = null): Collection
{ {
$criteria = Criteria::create() $criteria = Criteria::create()
->where( ->where(
@ -1161,7 +1161,7 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
return $this->hasUserInCourse($user, $course, self::STUDENT); return $this->hasUserInCourse($user, $course, self::STUDENT);
} }
protected function compareDates(?DateTime $start, ?DateTime $end = null): bool protected function compareDates(?DateTime $start, DateTime $end = null): bool
{ {
$now = new Datetime('now'); $now = new Datetime('now');

@ -62,6 +62,7 @@ class SessionCategory implements Stringable
{ {
return $this->url; return $this->url;
} }
/** /**
* Get id. * Get id.
* *
@ -87,6 +88,7 @@ class SessionCategory implements Stringable
return $this; return $this;
} }
/** /**
* Get dateStart. * Get dateStart.
* *
@ -102,6 +104,7 @@ class SessionCategory implements Stringable
return $this; return $this;
} }
/** /**
* Get dateEnd. * Get dateEnd.
* *

@ -32,26 +32,31 @@ class Skill implements Stringable
#[ORM\ManyToOne(targetEntity: Profile::class, inversedBy: 'skills')] #[ORM\ManyToOne(targetEntity: Profile::class, inversedBy: 'skills')]
#[ORM\JoinColumn(name: 'profile_id', referencedColumnName: 'id')] #[ORM\JoinColumn(name: 'profile_id', referencedColumnName: 'id')]
protected ?Profile $profile = null; protected ?Profile $profile = null;
/** /**
* @var SkillRelUser[]|Collection * @var SkillRelUser[]|Collection
*/ */
#[ORM\OneToMany(targetEntity: SkillRelUser::class, mappedBy: 'skill', cascade: ['persist'])] #[ORM\OneToMany(targetEntity: SkillRelUser::class, mappedBy: 'skill', cascade: ['persist'])]
protected Collection $issuedSkills; protected Collection $issuedSkills;
/** /**
* @var Collection|SkillRelItem[] * @var Collection|SkillRelItem[]
*/ */
#[ORM\OneToMany(targetEntity: SkillRelItem::class, mappedBy: 'skill', cascade: ['persist'])] #[ORM\OneToMany(targetEntity: SkillRelItem::class, mappedBy: 'skill', cascade: ['persist'])]
protected Collection $items; protected Collection $items;
/** /**
* @var Collection|SkillRelSkill[] * @var Collection|SkillRelSkill[]
*/ */
#[ORM\OneToMany(targetEntity: SkillRelSkill::class, mappedBy: 'skill', cascade: ['persist'])] #[ORM\OneToMany(targetEntity: SkillRelSkill::class, mappedBy: 'skill', cascade: ['persist'])]
protected Collection $skills; protected Collection $skills;
/** /**
* @var Collection|SkillRelCourse[] * @var Collection|SkillRelCourse[]
*/ */
#[ORM\OneToMany(targetEntity: SkillRelCourse::class, mappedBy: 'skill', cascade: ['persist'])] #[ORM\OneToMany(targetEntity: SkillRelCourse::class, mappedBy: 'skill', cascade: ['persist'])]
protected Collection $courses; protected Collection $courses;
/** /**
* @var Collection|SkillRelGradebook[] * @var Collection|SkillRelGradebook[]
*/ */
@ -128,6 +133,7 @@ class Skill implements Stringable
{ {
return $this->description; return $this->description;
} }
/** /**
* Set accessUrlId. * Set accessUrlId.
* *
@ -139,6 +145,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* Get accessUrlId. * Get accessUrlId.
* *
@ -154,6 +161,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* Get icon. * Get icon.
* *
@ -169,6 +177,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* Get criteria. * Get criteria.
* *
@ -184,6 +193,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* Get status. * Get status.
* *
@ -193,6 +203,7 @@ class Skill implements Stringable
{ {
return $this->status; return $this->status;
} }
/** /**
* Set updatedAt. * Set updatedAt.
* *
@ -206,6 +217,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* Get updatedAt. * Get updatedAt.
* *
@ -215,6 +227,7 @@ class Skill implements Stringable
{ {
return $this->updatedAt; return $this->updatedAt;
} }
/** /**
* Get id. * Get id.
* *
@ -224,6 +237,7 @@ class Skill implements Stringable
{ {
return $this->id; return $this->id;
} }
/** /**
* @return Profile * @return Profile
*/ */
@ -237,6 +251,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* Get issuedSkills. * Get issuedSkills.
* *
@ -246,6 +261,7 @@ class Skill implements Stringable
{ {
return $this->issuedSkills; return $this->issuedSkills;
} }
/** /**
* @return Collection * @return Collection
*/ */
@ -263,6 +279,7 @@ class Skill implements Stringable
{ {
if (0 !== $this->getItems()->count()) { if (0 !== $this->getItems()->count()) {
$found = false; $found = false;
/** @var SkillRelItem $item */ /** @var SkillRelItem $item */
foreach ($this->getItems() as $item) { foreach ($this->getItems() as $item) {
if ($item->getItemId() === $itemId && $item->getItemType() === $typeId) { if ($item->getItemId() === $itemId && $item->getItemType() === $typeId) {
@ -282,6 +299,7 @@ class Skill implements Stringable
$skillRelItem->setSkill($this); $skillRelItem->setSkill($this);
$this->items[] = $skillRelItem; $this->items[] = $skillRelItem;
} }
/** /**
* @return Collection * @return Collection
*/ */
@ -295,6 +313,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* @return SkillRelSkill[]|Collection * @return SkillRelSkill[]|Collection
*/ */
@ -302,6 +321,7 @@ class Skill implements Stringable
{ {
return $this->skills; return $this->skills;
} }
/** /**
* @param SkillRelSkill[]|Collection $skills * @param SkillRelSkill[]|Collection $skills
*/ */
@ -311,6 +331,7 @@ class Skill implements Stringable
return $this; return $this;
} }
/** /**
* @return SkillRelGradebook[]|Collection * @return SkillRelGradebook[]|Collection
*/ */
@ -318,6 +339,7 @@ class Skill implements Stringable
{ {
return $this->gradeBookCategories; return $this->gradeBookCategories;
} }
/** /**
* @param SkillRelGradebook[]|Collection $gradeBookCategories * @param SkillRelGradebook[]|Collection $gradeBookCategories
*/ */
@ -345,6 +367,7 @@ class Skill implements Stringable
{ {
if (0 !== $this->getCourses()->count()) { if (0 !== $this->getCourses()->count()) {
$found = false; $found = false;
/** @var SkillRelCourse $item */ /** @var SkillRelCourse $item */
foreach ($this->getCourses() as $item) { foreach ($this->getCourses() as $item) {
$sessionPassFilter = false; $sessionPassFilter = false;

@ -268,24 +268,22 @@ class SkillRelItem
public function getItemResultUrl(string $cidReq): string public function getItemResultUrl(string $cidReq): string
{ {
$url = ''; $url = '';
$url = match ($this->getItemType()) {
return match ($this->getItemType()) {
ITEM_TYPE_EXERCISE => 'exercise/exercise_show.php?action=qualify&'.$cidReq, ITEM_TYPE_EXERCISE => 'exercise/exercise_show.php?action=qualify&'.$cidReq,
ITEM_TYPE_STUDENT_PUBLICATION => 'work/view.php?'.$cidReq, ITEM_TYPE_STUDENT_PUBLICATION => 'work/view.php?'.$cidReq,
default => $url, default => $url,
}; };
return $url;
} }
public function getItemResultList(string $cidReq): string public function getItemResultList(string $cidReq): string
{ {
$url = ''; $url = '';
$url = match ($this->getItemType()) {
return match ($this->getItemType()) {
ITEM_TYPE_EXERCISE => 'exercise/exercise_report.php?'.$cidReq.'&id='.$this->getItemId(), ITEM_TYPE_EXERCISE => 'exercise/exercise_report.php?'.$cidReq.'&id='.$this->getItemId(),
ITEM_TYPE_STUDENT_PUBLICATION => 'work/work_list_all.php?'.$cidReq.'&id='.$this->getItemId(), ITEM_TYPE_STUDENT_PUBLICATION => 'work/work_list_all.php?'.$cidReq.'&id='.$this->getItemId(),
default => $url, default => $url,
}; };
return $url;
} }
} }

@ -42,9 +42,7 @@ class SkillRelItemRelUser
#[ORM\Column(name: 'updated_by', type: 'integer', nullable: false)] #[ORM\Column(name: 'updated_by', type: 'integer', nullable: false)]
protected int $updatedBy; protected int $updatedBy;
public function __construct() public function __construct() {}
{
}
/** /**
* @return int * @return int

@ -950,6 +950,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
{ {
$classSubscription = $this->getClasses(); $classSubscription = $this->getClasses();
$classList = []; $classList = [];
/** @var UsergroupRelUser $subscription */ /** @var UsergroupRelUser $subscription */
foreach ($classSubscription as $subscription) { foreach ($classSubscription as $subscription) {
$class = $subscription->getUsergroup(); $class = $subscription->getUsergroup();
@ -2203,9 +2204,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
$this->setUsername($name); $this->setUsername($name);
} }
public function setParent(AbstractResource $parent): void public function setParent(AbstractResource $parent): void {}
{
}
public function getDefaultIllustration(int $size): string public function getDefaultIllustration(int $size): string
{ {
@ -2339,7 +2338,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
* Used to be implemented in global function \api_max_sort_value. * Used to be implemented in global function \api_max_sort_value.
* Reimplemented using the ORM cache. * Reimplemented using the ORM cache.
*/ */
public function getMaxSortValue(?UserCourseCategory $userCourseCategory = null): int public function getMaxSortValue(UserCourseCategory $userCourseCategory = null): int
{ {
$categoryCourses = $this->courses->matching( $categoryCourses = $this->courses->matching(
Criteria::create()->where(Criteria::expr()->neq('relationType', COURSE_RELATION_TYPE_RRHH))->andWhere( Criteria::create()->where(Criteria::expr()->neq('relationType', COURSE_RELATION_TYPE_RRHH))->andWhere(

@ -67,8 +67,8 @@ use Symfony\Component\Validator\Constraints as Assert;
)] )]
class UserRelUser class UserRelUser
{ {
use UserTrait;
use TimestampableTypedEntity; use TimestampableTypedEntity;
use UserTrait;
public const USER_UNKNOWN = 0; public const USER_UNKNOWN = 0;
// public const USER_RELATION_TYPE_UNKNOWN = 1; // public const USER_RELATION_TYPE_UNKNOWN = 1;

@ -8,6 +8,7 @@ namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get; use ApiPlatform\Metadata\Get;
use Chamilo\CoreBundle\Repository\Node\UsergroupRepository;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
@ -20,7 +21,7 @@ use Symfony\Component\Validator\Constraints as Assert;
*/ */
#[ApiResource(security: 'is_granted(\'ROLE_ADMIN\')', normalizationContext: ['groups' => ['usergroup:read']])] #[ApiResource(security: 'is_granted(\'ROLE_ADMIN\')', normalizationContext: ['groups' => ['usergroup:read']])]
#[ORM\Table(name: 'usergroup')] #[ORM\Table(name: 'usergroup')]
#[ORM\Entity(repositoryClass: \Chamilo\CoreBundle\Repository\Node\UsergroupRepository::class)] #[ORM\Entity(repositoryClass: UsergroupRepository::class)]
class Usergroup extends AbstractResource implements ResourceInterface, ResourceIllustrationInterface, ResourceWithAccessUrlInterface, Stringable class Usergroup extends AbstractResource implements ResourceInterface, ResourceIllustrationInterface, ResourceWithAccessUrlInterface, Stringable
{ {
use TimestampableEntity; use TimestampableEntity;
@ -50,30 +51,35 @@ class Usergroup extends AbstractResource implements ResourceInterface, ResourceI
#[Assert\NotBlank] #[Assert\NotBlank]
#[ORM\Column(name: 'allow_members_leave_group', type: 'integer')] #[ORM\Column(name: 'allow_members_leave_group', type: 'integer')]
protected int $allowMembersToLeaveGroup; protected int $allowMembersToLeaveGroup;
/** /**
* @var Collection|UsergroupRelUser[] * @var Collection<int, UsergroupRelUser>
*/ */
#[ORM\OneToMany(targetEntity: \Chamilo\CoreBundle\Entity\UsergroupRelUser::class, mappedBy: 'usergroup', cascade: ['persist'])] #[ORM\OneToMany(mappedBy: 'usergroup', targetEntity: UsergroupRelUser::class, cascade: ['persist'])]
protected Collection $users; protected Collection $users;
/** /**
* @var Collection|UsergroupRelCourse[] * @var Collection<int, UsergroupRelCourse>
*/ */
#[ORM\OneToMany(targetEntity: \Chamilo\CoreBundle\Entity\UsergroupRelCourse::class, mappedBy: 'usergroup', cascade: ['persist'])] #[ORM\OneToMany(mappedBy: 'usergroup', targetEntity: UsergroupRelCourse::class, cascade: ['persist'])]
protected Collection $courses; protected Collection $courses;
/** /**
* @var Collection|UsergroupRelSession[] * @var Collection<int, UsergroupRelSession>
*/ */
#[ORM\OneToMany(targetEntity: \Chamilo\CoreBundle\Entity\UsergroupRelSession::class, mappedBy: 'usergroup', cascade: ['persist'])] #[ORM\OneToMany(mappedBy: 'usergroup', targetEntity: UsergroupRelSession::class, cascade: ['persist'])]
protected Collection $sessions; protected Collection $sessions;
/** /**
* @var Collection|UsergroupRelQuestion[] * @var Collection<int, UsergroupRelQuestion>
*/ */
#[ORM\OneToMany(targetEntity: \Chamilo\CoreBundle\Entity\UsergroupRelQuestion::class, mappedBy: 'usergroup', cascade: ['persist'])] #[ORM\OneToMany(mappedBy: 'usergroup', targetEntity: UsergroupRelQuestion::class, cascade: ['persist'])]
protected Collection $questions; protected Collection $questions;
/** /**
* @var AccessUrlRelUserGroup[]|Collection * @var Collection<int, AccessUrlRelUserGroup>
*/ */
#[ORM\OneToMany(targetEntity: \Chamilo\CoreBundle\Entity\AccessUrlRelUserGroup::class, mappedBy: 'userGroup', cascade: ['persist', 'remove'], orphanRemoval: true)] #[ORM\OneToMany(mappedBy: 'userGroup', targetEntity: AccessUrlRelUserGroup::class, cascade: ['persist', 'remove'], orphanRemoval: true)]
protected Collection $urls; protected Collection $urls;
public function __construct() public function __construct()
{ {
@ -90,10 +96,11 @@ class Usergroup extends AbstractResource implements ResourceInterface, ResourceI
{ {
return $this->getName(); return $this->getName();
} }
/** /**
* @return UsergroupRelUser[]|Collection * @return ArrayCollection<int, UsergroupRelUser>
*/ */
public function getUsers(): array|Collection public function getUsers(): ArrayCollection
{ {
return $this->users; return $this->users;
} }
@ -139,12 +146,11 @@ class Usergroup extends AbstractResource implements ResourceInterface, ResourceI
} }
} }
} }
/** /**
* Get id. * Get id.
*
* @return int
*/ */
public function getId() public function getId(): ?int
{ {
return $this->id; return $this->id;
} }
@ -168,10 +174,8 @@ class Usergroup extends AbstractResource implements ResourceInterface, ResourceI
{ {
return $this->description; return $this->description;
} }
/**
* @return int public function getGroupType(): int
*/
public function getGroupType()
{ {
return $this->groupType; return $this->groupType;
} }
@ -221,10 +225,11 @@ class Usergroup extends AbstractResource implements ResourceInterface, ResourceI
return $this; return $this;
} }
/** /**
* @return UsergroupRelCourse[]|Collection * @return ArrayCollection<int, UsergroupRelCourse>
*/ */
public function getCourses(): array|Collection public function getCourses(): ArrayCollection
{ {
return $this->courses; return $this->courses;
} }
@ -234,10 +239,11 @@ class Usergroup extends AbstractResource implements ResourceInterface, ResourceI
return $this; return $this;
} }
/** /**
* @return UsergroupRelSession[]|Collection * @return ArrayCollection<int, UsergroupRelSession>
*/ */
public function getSessions(): array|Collection public function getSessions(): ArrayCollection
{ {
return $this->sessions; return $this->sessions;
} }
@ -247,10 +253,11 @@ class Usergroup extends AbstractResource implements ResourceInterface, ResourceI
return $this; return $this;
} }
/** /**
* @return UsergroupRelQuestion[]|Collection * @return ArrayCollection<int, UsergroupRelQuestion>
*/ */
public function getQuestions(): array|Collection public function getQuestions(): ArrayCollection
{ {
return $this->questions; return $this->questions;
} }

@ -41,8 +41,7 @@ class CourseListener
private readonly AuthorizationCheckerInterface $authorizationChecker, private readonly AuthorizationCheckerInterface $authorizationChecker,
private readonly TranslatorInterface $translator, private readonly TranslatorInterface $translator,
private readonly EntityManagerInterface $entityManager, private readonly EntityManagerInterface $entityManager,
) { ) {}
}
/** /**
* Get request from the URL cidReq, c_id or the "ABC" in the courses url (courses/ABC/index.php). * Get request from the URL cidReq, c_id or the "ABC" in the courses url (courses/ABC/index.php).
@ -193,9 +192,7 @@ class CourseListener
} }
} }
public function onKernelResponse(ResponseEvent $event): void public function onKernelResponse(ResponseEvent $event): void {}
{
}
/** /**
* Once the onKernelRequest was fired, we check if the course/session object were set and we inject them in the controller. * Once the onKernelRequest was fired, we check if the course/session object were set and we inject them in the controller.
@ -231,10 +228,10 @@ class CourseListener
// $cidReset = $sessionHandler->get('cid_reset', false); // $cidReset = $sessionHandler->get('cid_reset', false);
// This controller implements ToolInterface? Then set the course/session // This controller implements ToolInterface? Then set the course/session
if (\is_array($controllerList) && if (\is_array($controllerList)
( && (
$controllerList[0] instanceof CourseControllerInterface || $controllerList[0] instanceof CourseControllerInterface
$controllerList[0] instanceof EditorController || $controllerList[0] instanceof EditorController
// $controllerList[0] instanceof ResourceController // $controllerList[0] instanceof ResourceController
// || $controllerList[0] instanceof LegacyController // || $controllerList[0] instanceof LegacyController
) )

@ -15,8 +15,8 @@ final class HTTPExceptionListener
public function onKernelException(ExceptionEvent $event): void public function onKernelException(ExceptionEvent $event): void
{ {
$exception = $event->getThrowable(); $exception = $event->getThrowable();
if (!($exception instanceof HttpException) || if (!($exception instanceof HttpException)
false === strpos($event->getRequest()->getRequestUri(), '/api/') || !str_contains($event->getRequest()->getRequestUri(), '/api/')
) { ) {
return; return;
} }

@ -37,8 +37,7 @@ class LegacyListener
private readonly RouterInterface $router, private readonly RouterInterface $router,
private readonly ParameterBagInterface $parameterBag, private readonly ParameterBagInterface $parameterBag,
private readonly SettingsManager $settingsManager private readonly SettingsManager $settingsManager
) { ) {}
}
public function onKernelRequest(RequestEvent $event): void public function onKernelRequest(RequestEvent $event): void
{ {
@ -163,11 +162,7 @@ class LegacyListener
$session->set('access_url_id', $urlId); $session->set('access_url_id', $urlId);
} }
public function onKernelResponse(ResponseEvent $event): void public function onKernelResponse(ResponseEvent $event): void {}
{
}
public function onKernelController(ControllerEvent $event): void public function onKernelController(ControllerEvent $event): void {}
{
}
} }

@ -37,6 +37,7 @@ class LoginSuccessHandler
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{ {
$request = $event->getRequest(); $request = $event->getRequest();
/** @var User $user */ /** @var User $user */
$user = $event->getAuthenticationToken()->getUser(); $user = $event->getAuthenticationToken()->getUser();
$userId = $user->getId(); $userId = $user->getId();
@ -79,10 +80,12 @@ class LoginSuccessHandler
$url = $legacyIndex; $url = $legacyIndex;
break; break;
case 'user_portal.php': case 'user_portal.php':
$url = $legacyIndex.'user_portal.php'; $url = $legacyIndex.'user_portal.php';
break; break;
case 'main/auth/courses.php': case 'main/auth/courses.php':
$url = $legacyIndex.'/'.$pageAfterLogin; $url = $legacyIndex.'/'.$pageAfterLogin;

@ -11,9 +11,7 @@ use Symfony\Component\HttpFoundation\Request;
class SettingListener class SettingListener
{ {
public function __construct() public function __construct() {}
{
}
public function onSettingPreSave(SettingsEvent $event): void public function onSettingPreSave(SettingsEvent $event): void
{ {

@ -113,7 +113,6 @@ class AnonymousUserSubscriber implements EventSubscriberInterface
foreach ($anonymousUsers as $user) { foreach ($anonymousUsers as $user) {
$loginRecord = $trackLoginRepository->findOneBy(['userIp' => $userIp, 'user' => $user]); $loginRecord = $trackLoginRepository->findOneBy(['userIp' => $userIp, 'user' => $user]);
if ($loginRecord) { if ($loginRecord) {
return $user->getId(); return $user->getId();
} }
} }

@ -17,8 +17,7 @@ class LoginFailureSubscriber implements EventSubscriberInterface
{ {
public function __construct( public function __construct(
private readonly TrackELoginRecordRepository $trackELoginRecordingRepository private readonly TrackELoginRecordRepository $trackELoginRecordingRepository
) { ) {}
}
public static function getSubscribedEvents(): array public static function getSubscribedEvents(): array
{ {
@ -30,6 +29,7 @@ class LoginFailureSubscriber implements EventSubscriberInterface
public function onFailureEvent(LoginFailureEvent $event): void public function onFailureEvent(LoginFailureEvent $event): void
{ {
$passport = $event->getPassport(); $passport = $event->getPassport();
/** @var UserBadge $userBadge */ /** @var UserBadge $userBadge */
$userBadge = $passport->getBadge(UserBadge::class); $userBadge = $passport->getBadge(UserBadge::class);
$username = $userBadge->getUserIdentifier(); $username = $userBadge->getUserIdentifier();

@ -72,6 +72,7 @@ class UserExtraFieldFilter extends AbstractFilter
; ;
break; break;
case 'userExtraFieldValue': case 'userExtraFieldValue':
$queryBuilder->andWhere('efv.field_value = :value'); $queryBuilder->andWhere('efv.field_value = :value');

@ -24,12 +24,9 @@ use Symfony\Contracts\Translation\TranslatorInterface;
*/ */
class ContactType extends AbstractType class ContactType extends AbstractType
{ {
private $translator; public function __construct(
private readonly TranslatorInterface $translator
public function __construct(TranslatorInterface $translator) ) {}
{
$this->translator = $translator;
}
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {

@ -19,7 +19,7 @@ final class ResourceToIdentifierTransformer implements DataTransformerInterface
private string $identifier; private string $identifier;
public function __construct(ObjectRepository $repository, ?string $identifier = null) public function __construct(ObjectRepository $repository, string $identifier = null)
{ {
$this->repository = $repository; $this->repository = $repository;
$this->identifier = $identifier ?? 'id'; $this->identifier = $identifier ?? 'id';

@ -100,6 +100,7 @@ class ExtraFieldType extends AbstractType
case \ExtraField::FIELD_TYPE_TRIPLE_SELECT: case \ExtraField::FIELD_TYPE_TRIPLE_SELECT:
// @todo // @todo
break; break;
case \ExtraField::FIELD_TYPE_GEOLOCALIZATION_COORDINATES: case \ExtraField::FIELD_TYPE_GEOLOCALIZATION_COORDINATES:
case \ExtraField::FIELD_TYPE_GEOLOCALIZATION: case \ExtraField::FIELD_TYPE_GEOLOCALIZATION:
if (!$geolocalization) { if (!$geolocalization) {
@ -121,6 +122,7 @@ class ExtraFieldType extends AbstractType
$builder->add($variable, GoogleMapType::class, $defaultOptions); $builder->add($variable, GoogleMapType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_TAG: case \ExtraField::FIELD_TYPE_TAG:
$defaultOptions['expanded'] = false; $defaultOptions['expanded'] = false;
$defaultOptions['multiple'] = true; $defaultOptions['multiple'] = true;
@ -156,15 +158,18 @@ class ExtraFieldType extends AbstractType
$builder->add($variable, ChoiceType::class, $defaultOptions); $builder->add($variable, ChoiceType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_VIDEO_URL: case \ExtraField::FIELD_TYPE_VIDEO_URL:
case \ExtraField::FIELD_TYPE_SOCIAL_PROFILE: case \ExtraField::FIELD_TYPE_SOCIAL_PROFILE:
$builder->add($variable, UrlType::class, $defaultOptions); $builder->add($variable, UrlType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_MOBILE_PHONE_NUMBER: case \ExtraField::FIELD_TYPE_MOBILE_PHONE_NUMBER:
$builder->add($variable, TelType::class, $defaultOptions); $builder->add($variable, TelType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_DATE: case \ExtraField::FIELD_TYPE_DATE:
$defaultOptions['data'] = null; $defaultOptions['data'] = null;
if (!empty($value)) { if (!empty($value)) {
@ -174,6 +179,7 @@ class ExtraFieldType extends AbstractType
$builder->add($variable, DateType::class, $defaultOptions); $builder->add($variable, DateType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_DATETIME: case \ExtraField::FIELD_TYPE_DATETIME:
$defaultOptions['data'] = null; $defaultOptions['data'] = null;
if (!empty($value)) { if (!empty($value)) {
@ -183,30 +189,36 @@ class ExtraFieldType extends AbstractType
$builder->add($variable, DateTimeType::class, $defaultOptions); $builder->add($variable, DateTimeType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_TEXTAREA: case \ExtraField::FIELD_TYPE_TEXTAREA:
$builder->add($variable, TextareaType::class, $defaultOptions); $builder->add($variable, TextareaType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_FLOAT: case \ExtraField::FIELD_TYPE_FLOAT:
$builder->add($variable, NumberType::class, $defaultOptions); $builder->add($variable, NumberType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_INTEGER: case \ExtraField::FIELD_TYPE_INTEGER:
$builder->add($variable, IntegerType::class, $defaultOptions); $builder->add($variable, IntegerType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_LETTERS_ONLY: case \ExtraField::FIELD_TYPE_LETTERS_ONLY:
case \ExtraField::FIELD_TYPE_ALPHANUMERIC: case \ExtraField::FIELD_TYPE_ALPHANUMERIC:
case \ExtraField::FIELD_TYPE_TEXT: case \ExtraField::FIELD_TYPE_TEXT:
$builder->add($variable, TextType::class, $defaultOptions); $builder->add($variable, TextType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_CHECKBOX: case \ExtraField::FIELD_TYPE_CHECKBOX:
$defaultOptions['data'] = 1 === (int) $value; $defaultOptions['data'] = 1 === (int) $value;
$builder->add($variable, CheckboxType::class, $defaultOptions); $builder->add($variable, CheckboxType::class, $defaultOptions);
break; break;
case \ExtraField::FIELD_TYPE_RADIO: case \ExtraField::FIELD_TYPE_RADIO:
case \ExtraField::FIELD_TYPE_SELECT: case \ExtraField::FIELD_TYPE_SELECT:
case \ExtraField::FIELD_TYPE_SELECT_MULTIPLE: case \ExtraField::FIELD_TYPE_SELECT_MULTIPLE:
@ -268,6 +280,7 @@ class ExtraFieldType extends AbstractType
$this->extraFieldValuesRepository->updateItemData($extraField, $item, $newValue); $this->extraFieldValuesRepository->updateItemData($extraField, $item, $newValue);
break; break;
case \ExtraField::FIELD_TYPE_TAG: case \ExtraField::FIELD_TYPE_TAG:
$formItem = $event->getForm()->get($extraField->getVariable()); $formItem = $event->getForm()->get($extraField->getVariable());
$options = $formItem->getConfig()->getOptions(); $options = $formItem->getConfig()->getOptions();
@ -281,6 +294,7 @@ class ExtraFieldType extends AbstractType
} }
break; break;
default: default:
$this->extraFieldValuesRepository->updateItemData($extraField, $item, $newValue); $this->extraFieldValuesRepository->updateItemData($extraField, $item, $newValue);

@ -16,9 +16,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
*/ */
class IllustrationType extends AbstractType class IllustrationType extends AbstractType
{ {
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void {}
{
}
public function getParent(): string public function getParent(): string
{ {

@ -166,9 +166,6 @@ class Container
return self::$container->get('messenger.bus.default'); return self::$container->get('messenger.bus.default');
} }
/**
* @return Environment
*/
public static function getTwig() public static function getTwig()
{ {
return self::$twig; return self::$twig;
@ -203,7 +200,7 @@ class Container
self::$request = $request; self::$request = $request;
} }
public static function getSession(): Session|HttpSessionInterface|bool|null public static function getSession(): null|bool|HttpSessionInterface|Session
{ {
if (null !== self::$session) { if (null !== self::$session) {
return self::$session; return self::$session;
@ -640,6 +637,7 @@ class Container
{ {
$doctrine = $container->get('doctrine'); $doctrine = $container->get('doctrine');
Database::setConnection($doctrine->getConnection()); Database::setConnection($doctrine->getConnection());
/** @var EntityManager $em */ /** @var EntityManager $em */
$em = $doctrine->getManager(); $em = $doctrine->getManager();
Database::setManager($em); Database::setManager($em);

@ -18,9 +18,9 @@ use Symfony\Component\HttpFoundation\StreamedResponse;
class Exporter class Exporter
{ {
/** /**
* @throws RuntimeException
*
* @return StreamedResponse * @return StreamedResponse
*
* @throws RuntimeException
*/ */
public function getResponse(string $format, string $filename, SourceIteratorInterface $source) public function getResponse(string $format, string $filename, SourceIteratorInterface $source)
{ {
@ -30,21 +30,25 @@ class Exporter
$contentType = 'application/vnd.ms-excel'; $contentType = 'application/vnd.ms-excel';
break; break;
case 'xml': case 'xml':
$writer = new XmlWriter('php://output'); $writer = new XmlWriter('php://output');
$contentType = 'text/xml'; $contentType = 'text/xml';
break; break;
case 'json': case 'json':
$writer = new JsonWriter('php://output'); $writer = new JsonWriter('php://output');
$contentType = 'application/json'; $contentType = 'application/json';
break; break;
case 'csv': case 'csv':
$writer = new CsvWriter('php://output', ',', '"', '', true, true); $writer = new CsvWriter('php://output', ',', '"', '', true, true);
$contentType = 'text/csv'; $contentType = 'text/csv';
break; break;
default: default:
throw new RuntimeException('Invalid format'); throw new RuntimeException('Invalid format');
} }

@ -17,8 +17,7 @@ class MessageHandler implements MessageHandlerInterface
{ {
public function __construct( public function __construct(
private readonly Mailer $mailer private readonly Mailer $mailer
) { ) {}
}
public function __invoke(Message $message): void public function __invoke(Message $message): void
{ {

@ -199,7 +199,7 @@ abstract class AbstractMigrationChamilo extends AbstractMigration implements Con
$fileName = '', $fileName = '',
$description = '' $description = ''
): bool { ): bool {
$class = \get_class($resource); $class = $resource::class;
$documentPath = basename($filePath); $documentPath = basename($filePath);
if (is_dir($filePath) || (!is_dir($filePath) && !file_exists($filePath))) { if (is_dir($filePath) || (!is_dir($filePath) && !file_exists($filePath))) {
@ -262,16 +262,19 @@ abstract class AbstractMigrationChamilo extends AbstractMigration implements Con
$groupId = $item['to_group_id'] ?? 0; $groupId = $item['to_group_id'] ?? 0;
$newVisibility = ResourceLink::VISIBILITY_DRAFT; $newVisibility = ResourceLink::VISIBILITY_DRAFT;
// Old 1.11.x visibility (item property) is based in this switch: // Old 1.11.x visibility (item property) is based in this switch:
switch ($visibility) { switch ($visibility) {
case 0: case 0:
$newVisibility = ResourceLink::VISIBILITY_DRAFT; $newVisibility = ResourceLink::VISIBILITY_DRAFT;
break; break;
case 1: case 1:
$newVisibility = ResourceLink::VISIBILITY_PUBLISHED; $newVisibility = ResourceLink::VISIBILITY_PUBLISHED;
break; break;
case 2: case 2:
$newVisibility = ResourceLink::VISIBILITY_DELETED; $newVisibility = ResourceLink::VISIBILITY_DELETED;

@ -553,7 +553,5 @@ class Version20 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -179,7 +179,5 @@ class Version20170525122900 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -119,7 +119,5 @@ class Version20170525123900 extends AbstractMigrationChamilo
); );
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -93,7 +93,5 @@ class Version20170625122900 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -189,7 +189,5 @@ class Version20170625123000 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -179,7 +179,5 @@ class Version20170625143000 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -239,7 +239,5 @@ class Version20170625144000 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -123,7 +123,5 @@ class Version20170625145000 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -276,7 +276,5 @@ class Version20170626122900 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

@ -9,6 +9,8 @@ namespace Chamilo\CoreBundle\Migrations\Schema\V200;
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo; use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use const PHP_EOL;
class Version20170627122900 extends AbstractMigrationChamilo class Version20170627122900 extends AbstractMigrationChamilo
{ {
public function getDescription(): string public function getDescription(): string
@ -362,7 +364,5 @@ class Version20170627122900 extends AbstractMigrationChamilo
} }
} }
public function down(Schema $schema): void public function down(Schema $schema): void {}
{
}
} }

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save