diff --git a/psalm.xml b/psalm.xml index b276e17a9f..86182f9ddb 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,6 +1,5 @@ getConnection(); -$sm = $connection->getSchemaManager(); +$sm = $connection->createSchemaManager(); $fromSchema = $sm->createSchema(); $tool = new \Doctrine\ORM\Tools\SchemaTool(Database::getManager()); $metadatas = $em->getMetadataFactory()->getAllMetadata(); $toSchema = $tool->getSchemaFromMetadata($metadatas); $comparator = new \Doctrine\DBAL\Schema\Comparator(); -$schemaDiff = $comparator->compare($fromSchema, $toSchema); +$schemaDiff = $comparator->compareSchemas($fromSchema, $toSchema); $sqlList = $schemaDiff->toSaveSql($connection->getDatabasePlatform()); $content = ''; diff --git a/public/main/admin/user_edit.php b/public/main/admin/user_edit.php index 2f4b53f201..9afb859616 100644 --- a/public/main/admin/user_edit.php +++ b/public/main/admin/user_edit.php @@ -321,7 +321,7 @@ if (!empty($studentBossList)) { $studentBossList = array_column($studentBossList, 'boss_id'); } -$user_data['student_boss'] = array_values($studentBossList); +$user_data['student_boss'] = $studentBossList; $form->addMultiSelect('student_boss', get_lang('Superior (n+1)'), $studentBossToSelect); // EXTRA FIELDS diff --git a/public/main/exercise/exercise.class.php b/public/main/exercise/exercise.class.php index fba61edf2b..3601249931 100644 --- a/public/main/exercise/exercise.class.php +++ b/public/main/exercise/exercise.class.php @@ -609,7 +609,7 @@ class Exercise /** * @param int $start * @param int $limit - * @param int $sidx + * @param string $sidx * @param string $sord * @param array $whereCondition * @param array $extraFields diff --git a/public/main/gradebook/lib/be/category.class.php b/public/main/gradebook/lib/be/category.class.php index eafee074bf..cd582ecd45 100644 --- a/public/main/gradebook/lib/be/category.class.php +++ b/public/main/gradebook/lib/be/category.class.php @@ -833,7 +833,7 @@ class Category implements GradebookItem * @param string $course_code * @param int $session_id * - * @return array (score sum, weight sum) or null if no scores available + * @return array|null (score sum, weight sum) or null if no scores available */ public function calc_score( $studentId = null, @@ -846,9 +846,9 @@ class Category implements GradebookItem $cacheAvailable = api_get_configuration_value('apc') && $useCache; if ($cacheAvailable) { - $cacheDriver = new \Doctrine\Common\Cache\ApcuCache(); - if ($cacheDriver->contains($key)) { - return $cacheDriver->fetch($key); + $cache = new \Symfony\Component\Cache\Adapter\ApcuAdapter(); + if ($cache->hasItem($key)) { + return $cache->getItem($key)->get(); } } // Classic @@ -1092,14 +1092,20 @@ class Category implements GradebookItem case 'average': if (empty($ressum)) { if ($cacheAvailable) { - $cacheDriver->save($key, null); + $cacheItem = $cache->getItem($key); + $cacheItem->set(null); + + $cache->save($cacheItem); } return null; } if ($cacheAvailable) { - $cacheDriver->save($key, [$ressum, $weightsum]); + $cacheItem = $cache->getItem($key); + $cacheItem->set([$ressum, $weightsum]); + + $cache->save($cacheItem); } return [$ressum, $weightsum]; @@ -1113,11 +1119,13 @@ class Category implements GradebookItem break; default: if ($cacheAvailable) { - $cacheDriver->save($key, [$ressum, $weightsum]); + $cacheItem = $cache->getItem($key); + $cacheItem->set([$ressum, $weightsum]); + + $cache->save($cacheItem); } return [$ressum, $weightsum]; - break; } } diff --git a/public/main/gradebook/lib/be/exerciselink.class.php b/public/main/gradebook/lib/be/exerciselink.class.php index e7140c18de..dc6b12059f 100644 --- a/public/main/gradebook/lib/be/exerciselink.class.php +++ b/public/main/gradebook/lib/be/exerciselink.class.php @@ -198,9 +198,9 @@ class ExerciseLink extends AbstractLink $cacheAvailable = api_get_configuration_value('apc') && $useCache; $cacheDriver = null; if ($cacheAvailable) { - $cacheDriver = new \Doctrine\Common\Cache\ApcuCache(); - if ($cacheDriver->contains($key)) { - return $cacheDriver->fetch($key); + $cache = new \Symfony\Component\Cache\Adapter\ApcuAdapter(); + if ($cache->hasItem($key)) { + return $cache->getItem($key)->get(); } } @@ -287,7 +287,9 @@ class ExerciseLink extends AbstractLink } $result = [$data['score'], $data['max_score'], $data['exe_date'], $counter]; if ($cacheAvailable) { - $cacheDriver->save($key, $result); + $cacheItem = $cache->getItem($key); + $cacheItem->set($result); + $cache->save($cacheItem); } return $result; diff --git a/public/main/inc/lib/TicketManager.php b/public/main/inc/lib/TicketManager.php index e9d3a8563b..7a4622209b 100644 --- a/public/main/inc/lib/TicketManager.php +++ b/public/main/inc/lib/TicketManager.php @@ -2355,7 +2355,7 @@ class TicketManager public static function deleteUserFromTicketSystem($userId) { $userId = (int) $userId; - $schema = Database::getManager()->getConnection()->getSchemaManager(); + $schema = Database::getManager()->getConnection()->createSchemaManager(); if ($schema->tablesExist('ticket_assigned_log')) { $sql = "UPDATE ticket_assigned_log SET user_id = NULL WHERE user_id = $userId"; diff --git a/public/main/inc/lib/urlmanager.lib.php b/public/main/inc/lib/urlmanager.lib.php index 9091452b36..63ee60bb13 100644 --- a/public/main/inc/lib/urlmanager.lib.php +++ b/public/main/inc/lib/urlmanager.lib.php @@ -124,7 +124,7 @@ class UrlManager WHERE url = '".Database::escape_string($url)."' "; $res = Database::query($sql); - return (int) Database::num_rows($res); + return Database::num_rows($res); } /** @@ -298,7 +298,7 @@ class UrlManager WHERE c_id = '$courseId'"; $res = Database::query($sql); - return (int) Database::num_rows($res); + return Database::num_rows($res); } /** diff --git a/public/main/inc/lib/usermanager.lib.php b/public/main/inc/lib/usermanager.lib.php index b55a582bbb..192cf21763 100644 --- a/public/main/inc/lib/usermanager.lib.php +++ b/public/main/inc/lib/usermanager.lib.php @@ -805,7 +805,8 @@ class UserManager } $connection = Database::getManager()->getConnection(); - $tableExists = $connection->getSchemaManager()->tablesExist(['plugin_bbb_room']); + $schemaManager = $connection->createSchemaManager(); + $tableExists = $schemaManager->tablesExist(['plugin_bbb_room']); if ($tableExists) { // Delete user from database $sql = "DELETE FROM plugin_bbb_room WHERE participant_id = $user_id"; @@ -813,12 +814,12 @@ class UserManager } // Delete user/ticket relationships :( - $tableExists = $connection->getSchemaManager()->tablesExist(['ticket_ticket']); + $tableExists = $schemaManager->tablesExist(['ticket_ticket']); if ($tableExists) { TicketManager::deleteUserFromTicketSystem($user_id); } - $tableExists = $connection->getSchemaManager()->tablesExist(['c_lp_category_user']); + $tableExists = $schemaManager->tablesExist(['c_lp_category_user']); if ($tableExists) { $sql = "DELETE FROM c_lp_category_user WHERE user_id = $user_id"; Database::query($sql); diff --git a/public/main/social/map.php b/public/main/social/map.php index 1eb09fad9b..1995a02701 100644 --- a/public/main/social/map.php +++ b/public/main/social/map.php @@ -59,7 +59,7 @@ $sql = "SELECT u.id, firstname, lastname, ev.value ville, ev2.value stage (ev.value LIKE '%::%' OR ev2.value LIKE '%::%') "; -$cacheDriver = new \Doctrine\Common\Cache\ApcuCache(); +$cache = new \Symfony\Component\Cache\Adapter\ApcuAdapter(); $keyDate = 'map_cache_date'; $keyData = 'map_cache_data'; @@ -70,8 +70,8 @@ $now = time(); $tomorrow = strtotime('+5 minute', $now); $loadFromDatabase = true; -if ($cacheDriver->contains($keyData) && $cacheDriver->contains($keyDate)) { - $savedDate = $cacheDriver->fetch($keyDate); +if ($cache->hasItem($keyData) && $cache->hasItem($keyDate)) { + $savedDate = $cache->getItem($keyDate)->get(); $loadFromDatabase = false; if ($savedDate < $now) { $loadFromDatabase = true; @@ -83,10 +83,15 @@ if ($loadFromDatabase) { $result = Database::query($sql); $data = Database::store_result($result, 'ASSOC'); - $cacheDriver->save($keyData, $data); - $cacheDriver->save($keyDate, $tomorrow); + $cacheItem = $cache->getItem($keyData); + $cacheItem->set($data); + $cache->save($cacheItem); + + $cacheItem = $cache->getItem($keyDate); + $cacheItem->set($tomorrow); + $cache->save($cacheItem); } else { - $data = $cacheDriver->fetch($keyData); + $data = $cache->getItem($keyData)->get(); } foreach ($data as &$result) { diff --git a/src/CoreBundle/Controller/Api/AbstractFeedbackSocialPostController.php b/src/CoreBundle/Controller/Api/AbstractFeedbackSocialPostController.php index 2c276b4a02..5798307d6f 100644 --- a/src/CoreBundle/Controller/Api/AbstractFeedbackSocialPostController.php +++ b/src/CoreBundle/Controller/Api/AbstractFeedbackSocialPostController.php @@ -15,7 +15,6 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpKernel\Attribute\AsController; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Core\Security; -use Symfony\Component\Security\Core\User\UserInterface; #[AsController] abstract class AbstractFeedbackSocialPostController extends AbstractController diff --git a/src/CoreBundle/Controller/CourseController.php b/src/CoreBundle/Controller/CourseController.php index 9407376af8..8ed7206769 100644 --- a/src/CoreBundle/Controller/CourseController.php +++ b/src/CoreBundle/Controller/CourseController.php @@ -39,6 +39,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Validator\Exception\ValidatorException; use UserManager; @@ -48,6 +49,10 @@ use UserManager; #[Route('/course')] class CourseController extends ToolBaseController { + public function __construct(private SerializerInterface $serializer) + { + } + #[Route('/{cid}/checkLegal.json', name: 'chamilo_core_course_check_legal_json')] public function checkTermsAndConditionJson(Request $request, LegalRepository $legalTermsRepo, LanguageRepository $languageRepository): Response { @@ -119,7 +124,7 @@ class CourseController extends ToolBaseController } } - $json = $this->get('serializer')->serialize( + $json = $this->serializer->serialize( $responseData, 'json', [ @@ -288,7 +293,7 @@ class CourseController extends ToolBaseController 'tools' => $tools, ]; - $json = $this->get('serializer')->serialize( + $json = $this->serializer->serialize( $responseData, 'json', [ diff --git a/src/CoreBundle/Controller/ResetPasswordController.php b/src/CoreBundle/Controller/ResetPasswordController.php index 7248691850..834b64612c 100644 --- a/src/CoreBundle/Controller/ResetPasswordController.php +++ b/src/CoreBundle/Controller/ResetPasswordController.php @@ -7,6 +7,8 @@ namespace Chamilo\CoreBundle\Controller; use Chamilo\CoreBundle\Entity\User; use Chamilo\CoreBundle\Form\ChangePasswordFormType; use Chamilo\CoreBundle\Form\ResetPasswordRequestFormType; +use Chamilo\CoreBundle\Repository\Node\UserRepository; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bridge\Twig\Mime\TemplatedEmail; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -27,8 +29,11 @@ class ResetPasswordController extends AbstractController private ResetPasswordHelperInterface $resetPasswordHelper; - public function __construct(ResetPasswordHelperInterface $resetPasswordHelper) - { + public function __construct( + ResetPasswordHelperInterface $resetPasswordHelper, + private EntityManagerInterface $entityManager, + private UserRepository $userRepository + ) { $this->resetPasswordHelper = $resetPasswordHelper; } @@ -115,7 +120,7 @@ class ResetPasswordController extends AbstractController ); $user->setPassword($encodedPassword); - $this->getDoctrine()->getManager()->flush(); + $this->entityManager->flush(); // The session is cleaned up after the password has been changed. $this->cleanSessionAfterReset(); @@ -130,7 +135,7 @@ class ResetPasswordController extends AbstractController private function processSendingPasswordResetEmail(string $emailFormData, MailerInterface $mailer): RedirectResponse { - $user = $this->getDoctrine()->getRepository(User::class)->findOneBy([ + $user = $this->userRepository->findOneBy([ 'email' => $emailFormData, ]); diff --git a/src/CoreBundle/Controller/SessionController.php b/src/CoreBundle/Controller/SessionController.php index d84cfb4e05..ed3a02678b 100644 --- a/src/CoreBundle/Controller/SessionController.php +++ b/src/CoreBundle/Controller/SessionController.php @@ -20,6 +20,7 @@ use Chamilo\CoreBundle\Repository\SequenceRepository; use Chamilo\CoreBundle\Repository\TagRepository; use Chamilo\CourseBundle\Entity\CCourseDescription; use CourseDescription; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; use Essence\Essence; use ExtraFieldValue; @@ -39,11 +40,15 @@ class SessionController extends AbstractController * * @Entity("session", expr="repository.find(sid)") */ - public function aboutAction(Request $request, Session $session, IllustrationRepository $illustrationRepo, UserRepository $userRepo): Response - { + public function aboutAction( + Request $request, + Session $session, + IllustrationRepository $illustrationRepo, + UserRepository $userRepo, + EntityManagerInterface $em + ): Response { $requestSession = $request->getSession(); $htmlHeadXtra[] = api_get_asset('readmore-js/readmore.js'); - $em = $this->getDoctrine()->getManager(); $sessionId = $session->getId(); $courses = [];