Use entities, fix setters/getters, update doc, fix type hint

pull/3844/head
Julio Montoya 5 years ago
parent d2acd03ca3
commit 72d6934739
  1. 7
      src/CoreBundle/Controller/ChatController.php
  2. 41
      src/CoreBundle/Controller/CourseHomeController.php
  3. 41
      src/CoreBundle/Controller/ResourceController.php
  4. 4
      src/CoreBundle/Controller/ResourceUploadController.php
  5. 17
      src/CoreBundle/Controller/SessionController.php
  6. 3
      src/CoreBundle/Entity/AbstractResource.php
  7. 2
      src/CoreBundle/Entity/Course.php
  8. 2
      src/CoreBundle/Entity/ResourceNode.php
  9. 47
      src/CoreBundle/Repository/ResourceRepository.php
  10. 2
      src/CoreBundle/Repository/ResourceWithLinkInterface.php
  11. 26
      src/CoreBundle/Settings/SettingsResolver.php
  12. 3
      src/CoreBundle/Twig/SettingsHelper.php
  13. 27
      src/CourseBundle/Repository/CThematicAdvanceRepository.php
  14. 27
      src/CourseBundle/Repository/CThematicPlanRepository.php

@ -10,7 +10,6 @@ use Chamilo\CoreBundle\Traits\CourseControllerTrait;
use Chamilo\CoreBundle\Traits\ResourceControllerTrait;
use Chamilo\CourseBundle\Controller\CourseControllerInterface;
use Chamilo\CourseBundle\Repository\CChatConversationRepository;
use Event;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@ -30,14 +29,14 @@ class ChatController extends AbstractResourceController implements CourseControl
*/
public function indexAction(Request $request): Response
{
Event::event_access_tool(TOOL_CHAT);
\Event::event_access_tool(TOOL_CHAT);
$logInfo = [
'tool' => TOOL_CHAT,
'action' => 'start',
'action_details' => 'start-chat',
];
Event::registerLog($logInfo);
\Event::registerLog($logInfo);
return $this->render(
'@ChamiloCore/Chat/chat.html.twig',
@ -85,7 +84,7 @@ class ChatController extends AbstractResourceController implements CourseControl
'action' => 'exit',
'action_details' => 'exit-chat',
];
Event::registerLog($logInfo);
\Event::registerLog($logInfo);
break;
case 'track':

@ -17,7 +17,6 @@ use Chamilo\CourseBundle\Repository\CToolRepository;
use CourseManager;
use Database;
use Display;
use Event;
use ExtraFieldValue;
use Fhaculty\Graph\Graph;
use Security;
@ -105,7 +104,7 @@ class CourseHomeController extends ToolBaseController
'tool' => 'course-main',
'action' => $action,
];
Event::registerLog($logInfo);
\Event::registerLog($logInfo);
/* Introduction section (editable by course admins) */
/*$introduction = Display::return_introduction_section(
@ -286,9 +285,6 @@ class CourseHomeController extends ToolBaseController
);
}
/**
* @return array
*/
private function autoLaunch()
{
/* Auto launch code */
@ -342,7 +338,8 @@ class CourseHomeController extends ToolBaseController
$session_key = 'lp_autolaunch_'.$session_id.'_'.api_get_course_int_id().'_'.api_get_user_id();
if (!isset($_SESSION[$session_key])) {
// Redirecting to the LP
$url = api_get_path(WEB_CODE_PATH).'lp/lp_controller.php?'.api_get_cidreq().'&action=view&lp_id='.$lp_data['iid'];
$url = api_get_path(WEB_CODE_PATH).
'lp/lp_controller.php?'.api_get_cidreq().'&action=view&lp_id='.$lp_data['iid'];
$_SESSION[$session_key] = true;
header("Location: $url");
@ -355,14 +352,18 @@ class CourseHomeController extends ToolBaseController
}
if ($showAutoLaunchLpWarning) {
$autoLaunchWarning = get_lang('The learning path auto-launch setting is ON. When learners enter this course, they will be automatically redirected to the learning path marked as auto-launch.');
$autoLaunchWarning = get_lang(
'The learning path auto-launch setting is ON. When learners enter this course, they will be automatically redirected to the learning path marked as auto-launch.'
);
}
$forumAutoLaunch = api_get_course_setting('enable_forum_auto_launch');
if (1 == $forumAutoLaunch) {
$forumAutoLaunch = (int) api_get_course_setting('enable_forum_auto_launch');
if (1 === $forumAutoLaunch) {
if ($allowAutoLaunchForCourseAdmins) {
if (empty($autoLaunchWarning)) {
$autoLaunchWarning = get_lang('The forum\'s auto-launch setting is on. Students will be redirected to the forum tool when entering this course.');
$autoLaunchWarning = get_lang(
'The forum\'s auto-launch setting is on. Students will be redirected to the forum tool when entering this course.'
);
}
} else {
$url = api_get_path(WEB_CODE_PATH).'forum/index.php?'.api_get_cidreq();
@ -373,7 +374,7 @@ class CourseHomeController extends ToolBaseController
if (api_get_configuration_value('allow_exercise_auto_launch')) {
$exerciseAutoLaunch = (int) api_get_course_setting('enable_exercise_auto_launch');
if (2 == $exerciseAutoLaunch) {
if (2 === $exerciseAutoLaunch) {
if ($allowAutoLaunchForCourseAdmins) {
if (empty($autoLaunchWarning)) {
$autoLaunchWarning = get_lang(
@ -386,7 +387,7 @@ class CourseHomeController extends ToolBaseController
header("Location: $url");
exit;
}
} elseif (1 == $exerciseAutoLaunch) {
} elseif (1 === $exerciseAutoLaunch) {
if ($allowAutoLaunchForCourseAdmins) {
if (empty($autoLaunchWarning)) {
$autoLaunchWarning = get_lang(
@ -400,8 +401,8 @@ class CourseHomeController extends ToolBaseController
if (!empty($session_id)) {
$condition = api_get_session_condition($session_id);
$sql = "SELECT iid FROM $table
WHERE c_id = $course_id AND autolaunch = 1 $condition
LIMIT 1";
WHERE c_id = $course_id AND autolaunch = 1 $condition
LIMIT 1";
$result = Database::query($sql);
// If we found nothing in the session we just called the session_id = 0 autolaunch
if (0 == Database::num_rows($result)) {
@ -410,8 +411,8 @@ class CourseHomeController extends ToolBaseController
}
$sql = "SELECT iid FROM $table
WHERE c_id = $course_id AND autolaunch = 1 $condition
LIMIT 1";
WHERE c_id = $course_id AND autolaunch = 1 $condition
LIMIT 1";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result, 'ASSOC');
@ -425,11 +426,13 @@ class CourseHomeController extends ToolBaseController
}
}
$documentAutoLaunch = api_get_course_setting('enable_document_auto_launch');
if (1 == $documentAutoLaunch) {
$documentAutoLaunch = (int) api_get_course_setting('enable_document_auto_launch');
if (1 === $documentAutoLaunch) {
if ($allowAutoLaunchForCourseAdmins) {
if (empty($autoLaunchWarning)) {
$autoLaunchWarning = get_lang('The document auto-launch feature configuration is enabled. Learners will be automatically redirected to document tool.');
$autoLaunchWarning = get_lang(
'The document auto-launch feature configuration is enabled. Learners will be automatically redirected to document tool.'
);
}
} else {
// Redirecting to the document

@ -18,7 +18,6 @@ use Chamilo\CoreBundle\Traits\ResourceControllerTrait;
use Chamilo\CourseBundle\Controller\CourseControllerInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\QueryBuilder;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Filesystem\Exception\FileNotFoundException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
@ -89,14 +88,14 @@ class ResourceController extends AbstractResourceController implements CourseCon
*
* If node has children show it
*/
public function listAction(Request $request): Response
public function listAction(Request $request)
{
$tool = $request->get('tool');
/*$tool = $request->get('tool');
$type = $request->get('type');
$resourceNodeId = $request->get('id');
$repository = $this->getRepositoryFromRequest($request);
$settings = $repository->getResourceSettings();
$settings = $repository->getResourceSettings();*/
/*$grid = $this->getGrid($request, $repository, $grid, $resourceNodeId, 'chamilo_core_resource_list');
$parentResourceNode = $this->getParentResourceNode($request);
@ -184,7 +183,7 @@ class ResourceController extends AbstractResourceController implements CourseCon
$data[] = $size;
}
$groups = $course->getGroups();
/*$groups = $course->getGroups();
foreach ($groups as $group) {
$labels[] = $course->getTitle().' - '.$group->getName();
$size = $repository->getResourceNodeRepository()->getSize(
@ -195,7 +194,7 @@ class ResourceController extends AbstractResourceController implements CourseCon
$group
);
$data[] = $size;
}
}*/
$used = array_sum($data);
$labels[] = $this->trans('Free');
@ -392,7 +391,6 @@ class ResourceController extends AbstractResourceController implements CourseCon
$this->trans('Unauthorised access to resource')
);
/** @var ResourceLink $link */
if ($this->hasCourse()) {
$link = $resource->getFirstResourceLinkFromCourseSession($this->getCourse(), $this->getSession());
} else {
@ -552,7 +550,6 @@ class ResourceController extends AbstractResourceController implements CourseCon
public function linkAction(Request $request, RouterInterface $router): Response
{
$id = $request->get('id');
$em = $this->getDoctrine();
/** @var ResourceNode $resourceNode */
$resourceNode = $this->getResourceNodeRepository()->find($id);
@ -611,10 +608,9 @@ class ResourceController extends AbstractResourceController implements CourseCon
->andWhere(Criteria::expr()->eq('resourceType', $type)) // only download same type
;
/** @var ArrayCollection|ResourceNode[] $children */
/** @var QueryBuilder $children */
$qb = $resourceNodeRepo->getChildrenQueryBuilder($resourceNode);
$qb->addCriteria($criteria);
/** @var ArrayCollection|ResourceNode[] $children */
$children = $qb->getQuery()->getResult();
$count = count($children);
if (0 === $count) {
@ -804,8 +800,8 @@ class ResourceController extends AbstractResourceController implements CourseCon
$course = $this->getDoctrine()->getRepository(Course::class)->find($course);
$session = $this->getSession();
/** @var AbstractResource $newResource */
$newResource = $repository->setResourceProperties($form, $course, $session, $fileType);
// @var AbstractResource $newResource
/*$newResource = $repository->setResourceProperties($form, $course, $session, $fileType);
$file = null;
if ('file' === $fileType && $settings->isAllowToSaveEditorToResourceFile()) {
@ -818,10 +814,6 @@ class ResourceController extends AbstractResourceController implements CourseCon
$meta = stream_get_meta_data($handle);
$file = new UploadedFile($meta['uri'], $fileName, 'text/html', null, true);
}
//$parent = $repository->getResourceNodeRepository()->getResourceByNode($parentNode);
// @todo fix correct parent
$newResource->setParent($parent);
$newResource->addCourseLink(
$course,
$session
@ -830,7 +822,7 @@ class ResourceController extends AbstractResourceController implements CourseCon
$em->flush();
$repository->addFile($newResource, $file);
$em->flush();
$em->flush();*/
// Loops all sharing options
/*foreach ($shareList as $share) {
@ -897,6 +889,7 @@ class ResourceController extends AbstractResourceController implements CourseCon
);
}
$template = null;
switch ($fileType) {
case 'folder':
$template = $repository->getTemplates()->getFromAction('newFolderAction');
@ -908,11 +901,15 @@ class ResourceController extends AbstractResourceController implements CourseCon
break;
}
$routeParams = $this->getResourceParams($request);
$routeParams['form'] = $form->createView();
$routeParams['parent'] = $resourceNodeParentId;
$routeParams['file_type'] = $fileType;
if ($template) {
$routeParams = $this->getResourceParams($request);
$routeParams['form'] = $form->createView();
$routeParams['parent'] = $resourceNodeParentId;
$routeParams['file_type'] = $fileType;
return $this->render($template, $routeParams);
}
return $this->render($template, $routeParams);
throw $this->createAccessDeniedException();
}
}

@ -82,8 +82,8 @@ class ResourceUploadController extends BlueimpController
$this->validate($file, $request, $response);
$this->dispatchPreUploadEvent($file, $response, $request);
$resource = $repo->saveUpload($file, $course, $session);
$resource = $repo->saveUpload($file);
//$resource = $repo->saveUpload($file, $course, $session);
// @todo fix correct $parent
$resource->setParent($parent);

@ -11,6 +11,7 @@ use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\SessionRelCourse;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CoreBundle\Repository\ExtraFieldRelTagRepository;
use Chamilo\CoreBundle\Repository\Node\IllustrationRepository;
use Chamilo\CoreBundle\Repository\Node\UserRepository;
use Chamilo\CoreBundle\Repository\SequenceRepository;
@ -49,7 +50,7 @@ class SessionController extends AbstractController
/** @var EntityRepository $fieldsRepo */
$fieldsRepo = $em->getRepository(ExtraField::class);
/** @var EntityRepository $fieldTagsRepo */
/** @var ExtraFieldRelTagRepository $fieldTagsRepo */
$fieldTagsRepo = $em->getRepository(ExtraFieldRelTag::class);
/** @var SequenceRepository $sequenceResourceRepo */
@ -179,7 +180,7 @@ class SessionController extends AbstractController
true
);
$sessionRequirements = $sequenceResourceRepo->getRequirements(
/*$sessionRequirements = $sequenceResourceRepo->getRequirements(
$session->getId(),
SequenceResource::SESSION_TYPE
);
@ -191,7 +192,7 @@ class SessionController extends AbstractController
break;
}
}
}*/
$plugin = \BuyCoursesPlugin::create();
$checker = $plugin->isEnabled();
@ -212,7 +213,7 @@ class SessionController extends AbstractController
$coursesInThisSession = \SessionManager::get_course_list_by_session_id($sessionId);
$coursesCount = count($coursesInThisSession);
$redirectToSession = 1 == $coursesCount && $redirectToSession
$redirectToSession = 1 === $coursesCount && $redirectToSession
? ($redirectToSession.'&cr='.array_values($coursesInThisSession)[0]['directory'])
: $redirectToSession;
@ -224,8 +225,8 @@ class SessionController extends AbstractController
'courses' => $courses,
'essence' => $essence,
'session_extra_fields' => $sessionValues->getAllValuesForAnItem($session->getId(), null, true),
'has_requirements' => $hasRequirements,
'sequences' => $sessionRequirements,
//'has_requirements' => $hasRequirements,
//'sequences' => $sessionRequirements,
'is_premium' => $sessionIsPremium,
'show_tutor' => 'true' === api_get_setting('show_session_coach') ? true : false,
'page_url' => api_get_path(WEB_PATH)."sessions/{$session->getId()}/about/",
@ -234,13 +235,13 @@ class SessionController extends AbstractController
$session->getId(),
api_get_user_id()
),
'subscribe_button' => \CoursesAndSessionsCatalog::getRegisteredInSessionButton(
/*'subscribe_button' => \CoursesAndSessionsCatalog::getRegisteredInSessionButton(
$session->getId(),
$session->getName(),
$hasRequirements,
true,
true
),
),*/
'user_session_time' => SessionManager::getDayLeftInSession(
['id' => $session->getId(), 'duration' => $session->getDuration()],
api_get_user_id()

@ -10,6 +10,7 @@ use Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter;
use Chamilo\CourseBundle\Entity\CGroup;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
@ -94,6 +95,8 @@ abstract class AbstractResource
abstract public function setResourceName(string $name);
//abstract public function setResourceProperties(FormInterface $form, $course, $session, $fileType);
public function getResourceLinkEntityList()
{
return $this->resourceLinkEntityList;

@ -565,7 +565,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
return $this->getTeachers()->matching($criteria)->count() > 0;
}
public function hasGroup(CGroup $group): bool
public function hasGroup(CGroup $group)
{
/*$criteria = Criteria::create()->where(
Criteria::expr()->eq('groups', $group)

@ -390,7 +390,7 @@ class ResourceNode
*/
//var_dump($this->getTitle(), $path);
$pathForDisplay = preg_replace(
'/-\d+'.self::PATH_SEPARATOR.'/',
'/-\d+\\'.self::PATH_SEPARATOR.'/',
'/',
$path
);

@ -40,28 +40,15 @@ use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
*/
abstract class ResourceRepository extends ServiceEntityRepository
{
/**
* @var EntityRepository
*/
/** @var EntityRepository */
protected $repository;
/**
* @var FilesystemInterface
*/
/** @var FilesystemInterface */
protected $fs;
/**
* @var EntityManager
*/
/** @var EntityManager */
protected $entityManager;
/**
* The entity class FQN.
*
* @var string
*/
protected $className;
/** @var RouterInterface */
protected $router;
@ -76,6 +63,14 @@ abstract class ResourceRepository extends ServiceEntityRepository
/** @var ToolChain */
protected $toolChain;
/**
* The entity class FQN.
*
* @var string
*/
protected $className;
protected $settings;
protected $templates;
protected $resourceType;
@ -926,6 +921,16 @@ abstract class ResourceRepository extends ServiceEntityRepository
return true;
}
public function saveUpload(UploadedFile $file)
{
throw new \Exception('Implement saveUpload');
}
public function getResourceFormType()
{
throw new \Exception('Implement getResourceFormType');
}
private function setLinkVisibility(AbstractResource $resource, int $visibility, bool $recursive = true): bool
{
$resourceNode = $resource->getResourceNode();
@ -979,14 +984,4 @@ abstract class ResourceRepository extends ServiceEntityRepository
return true;
}
public function saveUpload(UploadedFile $file)
{
throw new \Exception('Implement saveUpload');
}
public function getResourceFormType()
{
throw new \Exception('Implement getResourceFormType');
}
}

@ -13,5 +13,5 @@ use Symfony\Component\Routing\RouterInterface;
*/
interface ResourceWithLinkInterface
{
public function getLink(ResourceInterface $resource, RouterInterface $router): string;
public function getLink(ResourceInterface $resource, RouterInterface $router, $extraParams = []): string;
}

@ -4,14 +4,28 @@
namespace Chamilo\CoreBundle\Settings;
//use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\NonUniqueResultException;
use Sylius\Bundle\SettingsBundle\Resolver\SettingsResolverInterface;
use Sylius\Bundle\SettingsBundle\Resource\RepositoryInterface;
class SettingsResolver implements SettingsResolverInterface
{
/**
* @var RepositoryInterface
*/
private $settingsRepository;
/**
* @param RepositoryInterface $settingsRepository
*/
public function __construct(RepositoryInterface $settingsRepository)
{
$this->settingsRepository = $settingsRepository;
}
public function resolve($schemaAlias, $namespace = null)
{
/*try {
try {
$criteria = [];
if (null !== $namespace) {
$criteria['category'] = $namespace;
@ -19,7 +33,11 @@ class SettingsResolver implements SettingsResolverInterface
return $this->settingsRepository->findBy($criteria);
} catch (NonUniqueResultException $e) {
throw new \LogicException(sprintf('Multiple schemas found for "%s". You should probably define a custom settings resolver for this schema.', $schemaAlias));
}*/
$message = sprintf(
'Multiple schemas found for "%s". You should probably define a custom settings resolver for this schema.',
$schemaAlias
);
throw new \LogicException($message);
}
}
}

@ -5,6 +5,7 @@
namespace Chamilo\CoreBundle\Twig;
use Sylius\Bundle\SettingsBundle\Manager\SettingsManagerInterface;
use Sylius\Bundle\SettingsBundle\Model\Settings;
use Sylius\Bundle\SettingsBundle\Templating\Helper\SettingsHelperInterface;
use Symfony\Component\Templating\Helper\Helper;
@ -31,7 +32,7 @@ class SettingsHelper extends Helper implements SettingsHelperInterface
/**
* @param string $schemaAlias Example: admin, agenda, etc
*
* @return \Sylius\Bundle\SettingsBundle\Model\Settings
* @return Settings
*/
public function getSettings($schemaAlias)
{

@ -9,12 +9,39 @@ use Chamilo\CoreBundle\ToolChain;
use Chamilo\CourseBundle\Entity\CThematicAdvance;
use Cocur\Slugify\SlugifyInterface;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use League\Flysystem\FilesystemInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
final class CThematicAdvanceRepository extends ServiceEntityRepository
{
/** @var EntityRepository */
protected $repository;
/** @var FilesystemInterface */
protected $fs;
/** @var EntityManager */
protected $entityManager;
/** @var RouterInterface */
protected $router;
/** @var ResourceNodeRepository */
protected $resourceNodeRepository;
/** @var AuthorizationCheckerInterface */
protected $authorizationChecker;
/** @var SlugifyInterface */
protected $slugify;
/** @var ToolChain */
protected $toolChain;
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, CThematicAdvance::class);

@ -14,13 +14,40 @@ use Chamilo\CourseBundle\Entity\CGroup;
use Chamilo\CourseBundle\Entity\CThematicPlan;
use Cocur\Slugify\SlugifyInterface;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
use League\Flysystem\FilesystemInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
final class CThematicPlanRepository extends ServiceEntityRepository
{
/** @var EntityRepository */
protected $repository;
/** @var FilesystemInterface */
protected $fs;
/** @var EntityManager */
protected $entityManager;
/** @var RouterInterface */
protected $router;
/** @var ResourceNodeRepository */
protected $resourceNodeRepository;
/** @var AuthorizationCheckerInterface */
protected $authorizationChecker;
/** @var SlugifyInterface */
protected $slugify;
/** @var ToolChain */
protected $toolChain;
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, CThematicPlan::class);

Loading…
Cancel
Save