Improve breadcrumb load time, add resource node title.

pull/3215/head
Julio Montoya 5 years ago
parent 25ed92d6c2
commit 0d9e7236b3
  1. 2
      public/main/inc/lib/usermanager.lib.php
  2. 1
      public/main/install/install.lib.php
  3. 36
      src/CoreBundle/Controller/ResourceController.php
  4. 8
      src/CoreBundle/Entity/Resource/AbstractResource.php
  5. 14
      src/CoreBundle/Entity/Resource/ResourceLink.php
  6. 107
      src/CoreBundle/Entity/Resource/ResourceNode.php
  7. 10
      src/CoreBundle/EventListener/LegacyListener.php
  8. 18
      src/CoreBundle/EventListener/LocaleListener.php
  9. 11
      src/CoreBundle/Framework/Container.php
  10. 2
      src/CoreBundle/Repository/GridInterface.php
  11. 2
      src/CoreBundle/Repository/IllustrationRepository.php
  12. 2
      src/CoreBundle/Repository/PersonalFileRepository.php
  13. 34
      src/CoreBundle/Repository/ResourceRepository.php
  14. 24
      src/CoreBundle/Traits/ResourceControllerTrait.php
  15. 9
      src/CourseBundle/EventListener/CourseListener.php
  16. 2
      src/CourseBundle/Repository/CCourseDescriptionRepository.php
  17. 2
      src/CourseBundle/Repository/CDocumentRepository.php
  18. 2
      src/CourseBundle/Repository/CGlossaryRepository.php
  19. 2
      src/CourseBundle/Repository/CLinkCategoryRepository.php
  20. 2
      src/CourseBundle/Repository/CLinkRepository.php
  21. 2
      src/CourseBundle/Repository/CShortcutRepository.php
  22. 13
      src/SettingsBundle/Manager/SettingsManager.php
  23. 2
      src/UserBundle/Repository/UserRepository.php

@ -348,7 +348,7 @@ class UserManager
if ($addUserToNode) { if ($addUserToNode) {
$resourceNode = new ResourceNode(); $resourceNode = new ResourceNode();
$resourceNode $resourceNode
->setSlug($loginName) ->setTitle($loginName)
->setCreator(api_get_user_entity($creatorId)) ->setCreator(api_get_user_entity($creatorId))
->setResourceType($repo->getResourceType()) ->setResourceType($repo->getResourceType())
// ->setParent($url->getResourceNode()) // ->setParent($url->getResourceNode())

@ -3321,7 +3321,6 @@ function finishInstallationWithContainer(
$branch = new BranchSync(); $branch = new BranchSync();
$branch->setBranchName('localhost'); $branch->setBranchName('localhost');
$branch->setUrl($accessUrl); $branch->setUrl($accessUrl);
$manager->persist($branch); $manager->persist($branch);
$admin = $userManager->find($adminId); $admin = $userManager->find($adminId);

@ -75,15 +75,21 @@ class ResourceController extends AbstractResourceController implements CourseCon
$repository = $this->getRepositoryFromRequest($request); $repository = $this->getRepositoryFromRequest($request);
$settings = $repository->getResourceSettings(); $settings = $repository->getResourceSettings();
$grid = $this->getGrid($request, $repository, $grid, $parentResourceNode->getId(), 'chamilo_core_resource_index'); $grid = $this->getGrid(
$request,
$repository,
$grid,
$parentResourceNode->getId(),
'chamilo_core_resource_index'
);
$breadcrumb = $this->getBreadCrumb(); /*$breadcrumb = $this->getBreadCrumb();
$breadcrumb->addChild( $breadcrumb->addChild(
$this->trans($tool), $this->trans($tool),
[ [
'uri' => '#', 'uri' => '#',
] ]
); );*/
// The base resource node is the course. // The base resource node is the course.
$id = $parentResourceNode->getId(); $id = $parentResourceNode->getId();
@ -116,12 +122,13 @@ class ResourceController extends AbstractResourceController implements CourseCon
); );
$settings = $repository->getResourceSettings(); $settings = $repository->getResourceSettings();
$course = $this->getCourse(); $course = $this->getCourse();
$session = $this->getSession(); $session = $this->getSession();
/** @var QueryBuilder $qb */ /** @var QueryBuilder $qb */
$qb = $repository->getResources($this->getUser(), $parentNode, $course, $session, null); $qb = $repository->getResources($this->getUser(), $parentNode, $course, $session, null);
//$qb->getQuery()->setFetchMode(\Doctrine\ORM\Mapping\ClassMetadata::FETCH_EAGER);
// 3. Set QueryBuilder to the source. // 3. Set QueryBuilder to the source.
$source->initQueryBuilder($qb); $source->initQueryBuilder($qb);
$grid->setSource($source); $grid->setSource($source);
@ -338,7 +345,6 @@ class ResourceController extends AbstractResourceController implements CourseCon
} else { } else {
$link = $resource->getFirstResourceLink(); $link = $resource->getFirstResourceLink();
} }
if (null === $link) { if (null === $link) {
return null; return null;
} }
@ -429,6 +435,7 @@ class ResourceController extends AbstractResourceController implements CourseCon
$grid = $this->getGrid($request, $repository, $grid, $resourceNodeId, 'chamilo_core_resource_list'); $grid = $this->getGrid($request, $repository, $grid, $resourceNodeId, 'chamilo_core_resource_list');
$this->setBreadCrumb($request); $this->setBreadCrumb($request);
$parentResourceNode = $this->getParentResourceNode($request); $parentResourceNode = $this->getParentResourceNode($request);
return $grid->getGridResponse( return $grid->getGridResponse(
@ -626,18 +633,20 @@ class ResourceController extends AbstractResourceController implements CourseCon
* *
* @Route("/{tool}/{type}/{id}/info", methods={"GET", "POST"}, name="chamilo_core_resource_info") * @Route("/{tool}/{type}/{id}/info", methods={"GET", "POST"}, name="chamilo_core_resource_info")
*/ */
public function infoAction(Request $request, IllustrationRepository $illustrationRepository): Response public function infoAction(Request $request): Response
{ {
$this->setBreadCrumb($request); $this->setBreadCrumb($request);
$nodeId = $request->get('id');
$nodeId = $request->get('id');
$repository = $this->getRepositoryFromRequest($request); $repository = $this->getRepositoryFromRequest($request);
/** @var AbstractResource $resource */ /** @var AbstractResource $resource */
$resource = $repository->getResourceFromResourceNode($nodeId); $resource = $repository->getResourceFromResourceNode($nodeId);
$this->denyAccessUnlessValidResource($resource); $this->denyAccessUnlessValidResource($resource);
$resourceNode = $resource->getResourceNode(); $resourceNode = $resource->getResourceNode();
//throw new \Exception('as');
$this->denyAccessUnlessGranted( $this->denyAccessUnlessGranted(
ResourceNodeVoter::VIEW, ResourceNodeVoter::VIEW,
$resourceNode, $resourceNode,
@ -647,13 +656,12 @@ class ResourceController extends AbstractResourceController implements CourseCon
$tool = $request->get('tool'); $tool = $request->get('tool');
$type = $request->get('type'); $type = $request->get('type');
$illustration = $illustrationRepository->getIllustrationUrlFromNode($resourceNode); //$illustration = $illustrationRepository->getIllustrationUrlFromNode($resourceNode);
$form = $this->createForm(ResourceCommentType::class, null); $form = $this->createForm(ResourceCommentType::class, null);
$params = [ $params = [
'resource' => $resource, 'resource' => $resource,
'illustration' => $illustration, // 'illustration' => $illustration,
'tool' => $tool, 'tool' => $tool,
'type' => $type, 'type' => $type,
'comment_form' => $form->createView(), 'comment_form' => $form->createView(),
@ -1015,7 +1023,6 @@ class ResourceController extends AbstractResourceController implements CourseCon
); );
$form = $repository->getForm($this->container->get('form.factory'), null); $form = $repository->getForm($this->container->get('form.factory'), null);
$settings = $repository->getResourceSettings(); $settings = $repository->getResourceSettings();
if ('file' === $fileType && $settings->isAllowToSaveEditorToResourceFile()) { if ('file' === $fileType && $settings->isAllowToSaveEditorToResourceFile()) {
@ -1037,12 +1044,12 @@ class ResourceController extends AbstractResourceController implements CourseCon
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$course = $this->getCourse()->getId();
$course = $this->getCourse(); $course = $this->getDoctrine()->getRepository('ChamiloCoreBundle:Course')->find($course);
$session = $this->getSession(); $session = $this->getSession();
/** @var ResourceInterface $newResource */ /** @var ResourceInterface $newResource */
$newResource = $repository->saveResource($form, $course, $session, $fileType); $newResource = $repository->setResourceProperties($form, $course, $session, $fileType);
$file = null; $file = null;
if ('file' === $fileType && $settings->isAllowToSaveEditorToResourceFile()) { if ('file' === $fileType && $settings->isAllowToSaveEditorToResourceFile()) {
@ -1054,7 +1061,6 @@ class ResourceController extends AbstractResourceController implements CourseCon
fwrite($handle, $content); fwrite($handle, $content);
$meta = stream_get_meta_data($handle); $meta = stream_get_meta_data($handle);
$file = new UploadedFile($meta['uri'], $fileName, 'text/html', null, true); $file = new UploadedFile($meta['uri'], $fileName, 'text/html', null, true);
$em->persist($newResource);
} }
$repository->addResourceToCourseWithParent( $repository->addResourceToCourseWithParent(

@ -22,7 +22,7 @@ abstract class AbstractResource
* @GRID\Column(field="resourceNode.createdAt", title="Date added", type="datetime") * @GRID\Column(field="resourceNode.createdAt", title="Date added", type="datetime")
* @Groups({"list"}) * @Groups({"list"})
* @ORM\OneToOne( * @ORM\OneToOne(
* targetEntity="Chamilo\CoreBundle\Entity\Resource\ResourceNode", mappedBy="resource", cascade={"remove"}, orphanRemoval=true, fetch="EAGER" * targetEntity="Chamilo\CoreBundle\Entity\Resource\ResourceNode", mappedBy="resource", cascade={"remove"}, orphanRemoval=true
* ) * )
* @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="CASCADE") * @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="CASCADE")
*/ */
@ -96,8 +96,12 @@ abstract class AbstractResource
$result = null; $result = null;
if ($resourceNode && $resourceNode->getResourceLinks()->count() > 0) { if ($resourceNode && $resourceNode->getResourceLinks()->count() > 0) {
//var_dump($resourceNode->getResourceLinks()->count());
foreach ($resourceNode->getResourceLinks() as $link) {
//var_dump(get_class($link));
}
$result = $resourceNode->getResourceLinks()->matching($criteria)->first(); $result = $resourceNode->getResourceLinks()->matching($criteria)->first();
//var_dump($result);
if ($result) { if ($result) {
return $result; return $result;
} }

@ -31,11 +31,17 @@ class ResourceLink
protected $id; protected $id;
/** /**
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Resource\ResourceNode", inversedBy="resourceLinks", fetch="EAGER") * @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Resource\ResourceNode", inversedBy="resourceLinks")
* @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="SET NULL") * @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="SET NULL")
*/ */
protected $resourceNode; protected $resourceNode;
/**
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course", inversedBy="resourceLinks")
* @ORM\JoinColumn(name="c_id", referencedColumnName="id", nullable=true)
*/
protected $course;
/** /**
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Session", inversedBy="resourceLinks") * @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Session", inversedBy="resourceLinks")
* @ORM\JoinColumn(name="session_id", referencedColumnName="id", nullable=true) * @ORM\JoinColumn(name="session_id", referencedColumnName="id", nullable=true)
@ -48,12 +54,6 @@ class ResourceLink
*/ */
protected $user; protected $user;
/**
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course", inversedBy="resourceLinks")
* @ORM\JoinColumn(name="c_id", referencedColumnName="id", nullable=true)
*/
protected $course;
/** /**
* @ORM\ManyToOne(targetEntity="Chamilo\CourseBundle\Entity\CGroupInfo") * @ORM\ManyToOne(targetEntity="Chamilo\CourseBundle\Entity\CGroupInfo")
* @ORM\JoinColumn(name="group_id", referencedColumnName="iid", nullable=true, onDelete="CASCADE") * @ORM\JoinColumn(name="group_id", referencedColumnName="iid", nullable=true, onDelete="CASCADE")

@ -31,25 +31,6 @@ class ResourceNode
public const PATH_SEPARATOR = '`'; public const PATH_SEPARATOR = '`';
use TimestampableEntity; use TimestampableEntity;
/**
* @var \DateTime
* @Groups({"list"})
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
* @JMS\Type("DateTime")
*/
protected $createdAt;
/**
* @var \DateTime
*
* @Groups({"list"})
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
* @JMS\Type("DateTime")
*/
protected $updatedAt;
/** /**
* @ORM\Id * @ORM\Id
* @ORM\Column(type="integer") * @ORM\Column(type="integer")
@ -61,7 +42,16 @@ class ResourceNode
* @Assert\NotBlank() * @Assert\NotBlank()
* *
* @Gedmo\TreePathSource * @Gedmo\TreePathSource
* @ORM\Column(name="slug", type="string", length=255, nullable=true) *
* @ORM\Column(name="title", type="string", length=255, nullable=false)
*/
protected $title;
/**
* @Assert\NotBlank()
*
* @Gedmo\Slug(fields={"title"})
* @ORM\Column(name="slug", type="string", length=255, nullable=false)
*/ */
protected $slug; protected $slug;
@ -82,7 +72,7 @@ class ResourceNode
* @var ResourceFile * @var ResourceFile
* @Groups({"list"}) * @Groups({"list"})
* *
* @ORM\OneToOne(targetEntity="ResourceFile", inversedBy="resourceNode", orphanRemoval=true) * @ORM\OneToOne(targetEntity="ResourceFile", inversedBy="resourceNode", orphanRemoval=true, fetch="EAGER")
* @ORM\JoinColumn(name="resource_file_id", referencedColumnName="id", onDelete="CASCADE") * @ORM\JoinColumn(name="resource_file_id", referencedColumnName="id", onDelete="CASCADE")
*/ */
protected $resourceFile; protected $resourceFile;
@ -125,9 +115,9 @@ class ResourceNode
protected $children; protected $children;
/** /**
* @Gedmo\TreePath(separator="`") * @Gedmo\TreePath(appendId=true,separator="`")
* *
* @ORM\Column(name="path", type="string", length=3000, nullable=true) * @ORM\Column(name="path", type="text", nullable=true)
*/ */
protected $path; protected $path;
@ -152,7 +142,25 @@ class ResourceNode
*/ */
protected $comments; protected $comments;
//protected $pathForCreationLog = ''; /**
* @var \DateTime
*
* @Groups({"list"})
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
* @JMS\Type("DateTime")
*/
protected $createdAt;
/**
* @var \DateTime
*
* @Groups({"list"})
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
* @JMS\Type("DateTime")
*/
protected $updatedAt;
/** /**
* Constructor. * Constructor.
@ -312,6 +320,30 @@ class ResourceNode
return self::convertPathForDisplay($this->path); return self::convertPathForDisplay($this->path);
} }
public function getPathForDisplayToArray($baseRoot = null)
{
$parts = explode(self::PATH_SEPARATOR, $this->path);
$list = [];
foreach ($parts as $part) {
$parts = explode('-', $part);
if (empty($parts[1])) {
continue;
}
$value = $parts[0];
$id = $parts[1];
if (!empty($baseRoot)) {
if ($id < $baseRoot) {
continue;
}
}
$list[$id] = $value;
}
return $list;
}
/** /**
* @return string * @return string
*/ */
@ -327,6 +359,13 @@ class ResourceNode
return $this->slug; return $this->slug;
} }
public function setTitle(string $title)
{
$this->title = $title;
return $this;
}
/** /**
* @return ResourceNode * @return ResourceNode
*/ */
@ -372,26 +411,6 @@ class ResourceNode
return $pathForDisplay; return $pathForDisplay;
} }
/**
* This is required for logging the resource path at the creation.
* Do not use this function otherwise.
*/
public function setPathForCreationLog($path)
{
$this->pathForCreationLog = $path;
}
/**
* This is required for logging the resource path at the creation.
* Do not use this function otherwise.
*
* @return string
*/
public function getPathForCreationLog()
{
return $this->pathForCreationLog;
}
/** /**
* @return ResourceType * @return ResourceType
*/ */

@ -27,6 +27,7 @@ class LegacyListener
if (!$event->isMasterRequest()) { if (!$event->isMasterRequest()) {
return; return;
} }
$request = $event->getRequest(); $request = $event->getRequest();
$session = $request->getSession(); $session = $request->getSession();
@ -60,7 +61,6 @@ class LegacyListener
$userStatus = null; $userStatus = null;
if ($userObject instanceof UserInterface) { if ($userObject instanceof UserInterface) {
$userInfo = api_get_user_info($userObject->getId()); $userInfo = api_get_user_info($userObject->getId());
if ($userInfo) { if ($userInfo) {
$userStatus = $userObject->getStatus(); $userStatus = $userObject->getStatus();
$isAdmin = $userObject->hasRole('ROLE_ADMIN'); $isAdmin = $userObject->hasRole('ROLE_ADMIN');
@ -73,7 +73,7 @@ class LegacyListener
// Theme icon is loaded in the TwigListener src/ThemeBundle/EventListener/TwigListener.php // Theme icon is loaded in the TwigListener src/ThemeBundle/EventListener/TwigListener.php
//$theme = api_get_visual_theme(); //$theme = api_get_visual_theme();
$languages = api_get_languages(); /*$languages = api_get_languages();
$languageList = []; $languageList = [];
foreach ($languages as $isoCode => $language) { foreach ($languages as $isoCode => $language) {
$languageList[languageToCountryIsoCode($isoCode)] = $language; $languageList[languageToCountryIsoCode($isoCode)] = $language;
@ -91,9 +91,9 @@ class LegacyListener
'flag' => $isoFixed, 'flag' => $isoFixed,
'text' => $languageList[$isoFixed] ?? 'English', 'text' => $languageList[$isoFixed] ?? 'English',
] ]
); );*/
$twig->addGlobal('current_locale', $request->getLocale()); //$twig->addGlobal('current_locale', $request->getLocale());
$twig->addGlobal('available_locales', $languages); //$twig->addGlobal('available_locales', $languages);
$twig->addGlobal('show_toolbar', \Template::isToolBarDisplayedForUser() ? 1 : 0); $twig->addGlobal('show_toolbar', \Template::isToolBarDisplayedForUser() ? 1 : 0);
// Extra content // Extra content

@ -47,12 +47,21 @@ class LocaleListener implements EventSubscriberInterface
return; return;
} }
$loadFromDb = $request->getSession()->get('check_locale_from_db', true);
if (false === $loadFromDb &&
$request->getSession()->has('_locale') &&
!empty($request->getSession()->get('_locale'))
) {
$locale = $request->getSession()->get('_locale');
$request->setLocale($locale);
return true;
}
// Try to see if the locale has been set as a _locale routing parameter (from lang switcher) // Try to see if the locale has been set as a _locale routing parameter (from lang switcher)
//if ($locale = $request->getSession('_locale')) { //if ($locale = $request->getSession('_locale')) {
if (false) { if ($loadFromDb) {
//if ($locale = $request->attributes->get('_locale')) {
//$request->getSession()->set('_locale', $locale);
} else {
$localeList = []; $localeList = [];
// 1. Check platform locale // 1. Check platform locale
@ -133,6 +142,7 @@ class LocaleListener implements EventSubscriberInterface
// if no explicit locale has been set on this request, use one from the session // if no explicit locale has been set on this request, use one from the session
$request->setLocale($locale); $request->setLocale($locale);
$request->getSession()->set('_locale', $locale); $request->getSession()->set('_locale', $locale);
$request->getSession()->set('check_locale_from_db', false);
} }
} }

@ -80,7 +80,7 @@ class Container
public static $roles; public static $roles;
/** @var string */ /** @var string */
public static $legacyTemplate = '@ChamiloTheme/Layout/layout_one_col.html.twig'; public static $legacyTemplate = '@ChamiloTheme/Layout/layout_one_col.html.twig';
private static $settingsManager; //private static $settingsManager;
private static $userManager; private static $userManager;
private static $siteManager; private static $siteManager;
@ -261,13 +261,10 @@ class Container
return self::$container->get('chamilo.settings.manager'); return self::$container->get('chamilo.settings.manager');
} }
/** /*public static function setSettingsManager($manager)
* @param SettingsManager $manager
*/
public static function setSettingsManager($manager)
{ {
self::$settingsManager = $manager; self::$settingsManager = $manager;
} }*/
/** /**
* @return \Chamilo\CourseBundle\Manager\SettingsManager * @return \Chamilo\CourseBundle\Manager\SettingsManager
@ -624,7 +621,7 @@ class Container
$em = $container->get('doctrine.orm.entity_manager'); $em = $container->get('doctrine.orm.entity_manager');
\Database::setManager($em); \Database::setManager($em);
\CourseManager::setEntityManager($em); \CourseManager::setEntityManager($em);
self::setSettingsManager($container->get('chamilo.settings.manager')); //self::setSettingsManager($container->get('chamilo.settings.manager'));
self::setUserManager($container->get('fos_user.user_manager')); self::setUserManager($container->get('fos_user.user_manager'));
self::setSiteManager($container->get('sonata.page.manager.site')); self::setSiteManager($container->get('sonata.page.manager.site'));
\CourseManager::setCourseSettingsManager($container->get('Chamilo\CourseBundle\Manager\SettingsManager')); \CourseManager::setCourseSettingsManager($container->get('Chamilo\CourseBundle\Manager\SettingsManager'));

@ -18,7 +18,7 @@ interface GridInterface
{ {
public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroupInfo $group = null); public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroupInfo $group = null);
public function saveResource(FormInterface $form, Course $course, Session $session, $fileType); public function setResourceProperties(FormInterface $form, Course $course, Session $session, $fileType);
public function getTitleColumn(Grid $grid): Column; public function getTitleColumn(Grid $grid): Column;

@ -53,7 +53,7 @@ final class IllustrationRepository extends ResourceRepository implements GridInt
return $resource; return $resource;
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
$newResource = $form->getData(); $newResource = $form->getData();
$newResource $newResource

@ -37,7 +37,7 @@ final class PersonalFileRepository extends ResourceRepository implements GridInt
return $settings; return $settings;
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
$newResource = $form->getData(); $newResource = $form->getData();
$newResource $newResource

@ -208,7 +208,8 @@ class ResourceRepository extends BaseEntityRepository
$slug = $this->slugify->slugify($resourceName); $slug = $this->slugify->slugify($resourceName);
} }
$resourceNode->setSlug($slug); $resourceNode->setTitle($resourceName);
//$resourceNode->setSlug($slug);
$em->persist($resourceNode); $em->persist($resourceNode);
$em->persist($resource); $em->persist($resource);
@ -457,17 +458,21 @@ class ResourceRepository extends BaseEntityRepository
$qb = $repo->getEntityManager()->createQueryBuilder() $qb = $repo->getEntityManager()->createQueryBuilder()
->select('resource') ->select('resource')
->from($className, 'resource') ->from($className, 'resource')
->innerJoin( ->innerJoin('resource.resourceNode', 'node')
'resource.resourceNode',
'node'
)
->innerJoin('node.resourceLinks', 'links') ->innerJoin('node.resourceLinks', 'links')
->innerJoin('node.resourceType', 'type') ->innerJoin('node.resourceType', 'type')
//->innerJoin('links.course', 'course')
->leftJoin('node.resourceFile', 'file') ->leftJoin('node.resourceFile', 'file')
->where('type.name = :type') ->where('type.name = :type')
->setParameter('type', $resourceTypeName) ->setParameter('type', $resourceTypeName)
->andWhere('links.course = :course') ->andWhere('links.course = :course')
->setParameter('course', $course) ->setParameter('course', $course)
->addSelect('node')
->addSelect('links')
//->addSelect('course')
->addSelect('type')
->addSelect('file')
; ;
$isAdmin = $checker->isGranted('ROLE_ADMIN') || $isAdmin = $checker->isGranted('ROLE_ADMIN') ||
@ -484,7 +489,7 @@ class ResourceRepository extends BaseEntityRepository
->andWhere('links.visibility = :visibility') ->andWhere('links.visibility = :visibility')
->setParameter('visibility', ResourceLink::VISIBILITY_PUBLISHED) ->setParameter('visibility', ResourceLink::VISIBILITY_PUBLISHED)
; ;
// @todo Add start/end visibility restrictrions // @todo Add start/end visibility restrictions.
} }
if (null === $session) { if (null === $session) {
@ -673,17 +678,17 @@ class ResourceRepository extends BaseEntityRepository
$qb = $repo->getEntityManager()->createQueryBuilder() $qb = $repo->getEntityManager()->createQueryBuilder()
->select('resource') ->select('resource')
->from($className, 'resource') ->from($className, 'resource')
->innerJoin( ->innerJoin('resource.resourceNode', 'node')
'resource.resourceNode', ->innerJoin('node.creator', 'userCreator')
'node' //->innerJoin('node.resourceLinks', 'links')
) //->leftJoin('node.resourceFile', 'file')
->innerJoin('node.resourceLinks', 'links')
->leftJoin('node.resourceFile', 'file') ->where('node.id = :id')
->where('node = :id')
->setParameters(['id' => $resourceNodeId]) ->setParameters(['id' => $resourceNodeId])
//->addSelect('userCreator')
; ;
return $qb->getQuery()->getFirstResult();*/ return $qb->getQuery()->getSingleResult();*/
return $this->getRepository()->findOneBy(['resourceNode' => $resourceNodeId]); return $this->getRepository()->findOneBy(['resourceNode' => $resourceNodeId]);
} }
@ -866,6 +871,7 @@ class ResourceRepository extends BaseEntityRepository
} }
$resourceNode $resourceNode
->setTitle($resourceName)
->setSlug($slug) ->setSlug($slug)
->setCreator($creator) ->setCreator($creator)
->setResourceType($resourceType) ->setResourceType($resourceType)

@ -113,6 +113,8 @@ trait ResourceControllerTrait
$resourceNodeId = $request->get('id'); $resourceNodeId = $request->get('id');
$routeParams = $this->getResourceParams($request); $routeParams = $this->getResourceParams($request);
$baseNodeId = $this->getCourse()->getResourceNode()->getId();
if (!empty($resourceNodeId)) { if (!empty($resourceNodeId)) {
$breadcrumb = $this->getBreadCrumb(); $breadcrumb = $this->getBreadCrumb();
$toolParams = $routeParams; $toolParams = $routeParams;
@ -134,10 +136,13 @@ trait ResourceControllerTrait
if (null === $originalResource) { if (null === $originalResource) {
return; return;
} }
$parent = $originalParent = $originalResource->getResourceNode();
$parentList = []; $originalParent = $originalResource->getResourceNode();
while (null !== $parent) { $parentList = $originalParent->getPathForDisplayToArray($baseNodeId);
// var_dump($originalParent->getPath(), $originalParent->getPathForDisplay());
// $parentList = [];
/* while (null !== $parent) {
if ($type !== $parent->getResourceType()->getName()) { if ($type !== $parent->getResourceType()->getName()) {
break; break;
} }
@ -149,9 +154,7 @@ trait ResourceControllerTrait
} }
} }
} }
$parentList = array_reverse($parentList); $parentList = array_reverse($parentList);
/** @var ResourceInterface $item */
foreach ($parentList as $item) { foreach ($parentList as $item) {
$params = $routeParams; $params = $routeParams;
$params['id'] = $item->getResourceNode()->getId(); $params['id'] = $item->getResourceNode()->getId();
@ -161,6 +164,17 @@ trait ResourceControllerTrait
'uri' => $this->generateUrl('chamilo_core_resource_list', $params), 'uri' => $this->generateUrl('chamilo_core_resource_list', $params),
] ]
); );
}*/
foreach ($parentList as $id => $title) {
$params = $routeParams;
$params['id'] = $id;
$breadcrumb->addChild(
$title,
[
'uri' => $this->generateUrl('chamilo_core_resource_list', $params),
]
);
} }
$params = $routeParams; $params = $routeParams;

@ -61,6 +61,8 @@ class CourseListener
$translator = $container->get('translator'); $translator = $container->get('translator');
$course = null; $course = null;
$courseInfo = [];
// Check if URL has cid value. Using Symfony request. // Check if URL has cid value. Using Symfony request.
$courseId = (int) $request->get('cid'); $courseId = (int) $request->get('cid');
$checker = $container->get('security.authorization_checker'); $checker = $container->get('security.authorization_checker');
@ -78,6 +80,8 @@ class CourseListener
/** @var EntityManager $em */ /** @var EntityManager $em */
$em = $container->get('doctrine')->getManager(); $em = $container->get('doctrine')->getManager();
$course = $em->getRepository('ChamiloCoreBundle:Course')->find($courseId); $course = $em->getRepository('ChamiloCoreBundle:Course')->find($courseId);
dump("get course from DB $courseId");
$courseInfo = api_get_course_info($course->getCode());
} }
if (null === $course) { if (null === $course) {
@ -98,8 +102,6 @@ class CourseListener
$sessionHandler->set('_real_cid', $course->getId()); $sessionHandler->set('_real_cid', $course->getId());
$sessionHandler->set('cid', $course->getId()); $sessionHandler->set('cid', $course->getId());
$sessionHandler->set('_cid', $course->getCode()); $sessionHandler->set('_cid', $course->getCode());
$courseInfo = api_get_course_info($course->getCode());
$sessionHandler->set('_course', $courseInfo); $sessionHandler->set('_course', $courseInfo);
// Setting variables for the twig templates. // Setting variables for the twig templates.
@ -114,10 +116,12 @@ class CourseListener
$sessionHandler->remove('session'); $sessionHandler->remove('session');
// Check if user is allowed to this course // Check if user is allowed to this course
// See CourseVoter.php // See CourseVoter.php
dump("Checkisgranted");
if (false === $checker->isGranted(CourseVoter::VIEW, $course)) { if (false === $checker->isGranted(CourseVoter::VIEW, $course)) {
throw new AccessDeniedException($translator->trans('Unauthorised access to course!')); throw new AccessDeniedException($translator->trans('Unauthorised access to course!'));
} }
} else { } else {
dump("Load chamilo session from DB");
$session = $em->getRepository('ChamiloCoreBundle:Session')->find($sessionId); $session = $em->getRepository('ChamiloCoreBundle:Session')->find($sessionId);
if ($session) { if ($session) {
if (false === $session->hasCourse($course)) { if (false === $session->hasCourse($course)) {
@ -148,6 +152,7 @@ class CourseListener
if (empty($groupId)) { if (empty($groupId)) {
$sessionHandler->remove('gid'); $sessionHandler->remove('gid');
} else { } else {
dump("Load chamilo group from DB");
$group = $em->getRepository('ChamiloCourseBundle:CGroupInfo')->find($groupId); $group = $em->getRepository('ChamiloCourseBundle:CGroupInfo')->find($groupId);
if (!$group) { if (!$group) {

@ -52,7 +52,7 @@ final class CCourseDescriptionRepository extends ResourceRepository implements G
return $grid->getColumn('title'); return $grid->getColumn('title');
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
/** @var CCourseDescription $newResource */ /** @var CCourseDescription $newResource */
$newResource = $form->getData(); $newResource = $form->getData();

@ -60,7 +60,7 @@ final class CDocumentRepository extends ResourceRepository implements GridInterf
return $resource; return $resource;
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
$newResource = $form->getData(); $newResource = $form->getData();
$newResource $newResource

@ -52,7 +52,7 @@ final class CGlossaryRepository extends ResourceRepository implements GridInterf
return $grid->getColumn('name'); return $grid->getColumn('name');
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
/** @var CGlossary $newResource */ /** @var CGlossary $newResource */
$newResource = $form->getData(); $newResource = $form->getData();

@ -38,7 +38,7 @@ final class CLinkCategoryRepository extends ResourceRepository implements GridIn
return $settings; return $settings;
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
/** @var CLink $newResource */ /** @var CLink $newResource */
$newResource = $form->getData(); $newResource = $form->getData();

@ -28,7 +28,7 @@ final class CLinkRepository extends ResourceRepository implements GridInterface
return $this->getResourcesByCourse($course, $session, $group, $parentNode); return $this->getResourcesByCourse($course, $session, $group, $parentNode);
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
/** @var CLink $newResource */ /** @var CLink $newResource */
$newResource = $form->getData(); $newResource = $form->getData();

@ -58,7 +58,7 @@ final class CShortcutRepository extends ResourceRepository
return $qb; return $qb;
} }
public function saveResource(FormInterface $form, $course, $session, $fileType) public function setResourceProperties(FormInterface $form, $course, $session, $fileType)
{ {
$newResource = $form->getData(); $newResource = $form->getData();
$newResource $newResource

@ -201,9 +201,14 @@ class SettingsManager implements SettingsManagerInterface
public function loadAll() public function loadAll()
{ {
/*$session = $this->request->getCurrentRequest()->getSession(); $loadFromSession = true;
if ($loadFromSession && $this->request->getCurrentRequest()) {
$session = $this->request->getCurrentRequest()->getSession();
$schemaList = $session->get('schemas'); $schemaList = $session->get('schemas');
*/ $this->schemaList = $schemaList;
}
if (empty($this->schemaList)) { if (empty($this->schemaList)) {
$schemas = array_keys($this->getSchemas()); $schemas = array_keys($this->getSchemas());
$schemaList = []; $schemaList = [];
@ -232,7 +237,9 @@ class SettingsManager implements SettingsManagerInterface
$schemaList[$name] = $settings; $schemaList[$name] = $settings;
} }
$this->schemaList = $schemaList; $this->schemaList = $schemaList;
//$session->set('schemas', $schemaList); if ($loadFromSession && $this->request->getCurrentRequest()) {
$session->set('schemas', $schemaList);
}
} }
} }

@ -116,7 +116,7 @@ class UserRepository extends ResourceRepository
$resourceNode = new ResourceNode(); $resourceNode = new ResourceNode();
$resourceNode $resourceNode
->setSlug($user->getUsername()) ->setTitle($user->getUsername())
->setCreator($creator) ->setCreator($creator)
->setResourceType($this->getResourceType()) ->setResourceType($this->getResourceType())
// ->setParent($url->getResourceNode()) // ->setParent($url->getResourceNode())

Loading…
Cancel
Save