Refactor code, move code inside CoreBundle

pull/3262/head
Julio Montoya 5 years ago
parent a75e82ac08
commit c40939da44
  1. 2
      public/main/inc/lib/add_course.lib.inc.php
  2. 11
      public/main/inc/lib/api.lib.php
  3. 80
      public/main/inc/lib/usermanager.lib.php
  4. 11
      public/main/webservices/api/tests/SaveUserTest.php
  5. 1
      src/CoreBundle/Controller/Admin/AdminController.php
  6. 1
      src/CoreBundle/Controller/CourseHomeController.php
  7. 10
      src/CoreBundle/Controller/ResourceApiController.php
  8. 6
      src/CoreBundle/Entity/AbstractResource.php
  9. 13
      src/CoreBundle/Entity/AccessUrl.php
  10. 9
      src/CoreBundle/Entity/Course.php
  11. 1
      src/CoreBundle/Entity/CourseCategory.php
  12. 4
      src/CoreBundle/Entity/CourseRelUser.php
  13. 2
      src/CoreBundle/Entity/Illustration.php
  14. 3
      src/CoreBundle/Entity/Listener/CourseListener.php
  15. 5
      src/CoreBundle/Entity/Listener/ResourceListener.php
  16. 3
      src/CoreBundle/Entity/Listener/SessionListener.php
  17. 2
      src/CoreBundle/Entity/PersonalFile.php
  18. 1
      src/CoreBundle/Entity/ResourceComment.php
  19. 12
      src/CoreBundle/Entity/ResourceFile.php
  20. 9
      src/CoreBundle/Entity/ResourceLink.php
  21. 11
      src/CoreBundle/Entity/ResourceNode.php
  22. 1
      src/CoreBundle/Entity/ResourceType.php
  23. 12
      src/CoreBundle/Entity/Session.php
  24. 1
      src/CoreBundle/Entity/SessionCategory.php
  25. 2
      src/CoreBundle/Entity/Ticket.php
  26. 1
      src/CoreBundle/Entity/TicketAssignedLog.php
  27. 1
      src/CoreBundle/Entity/Tool.php
  28. 31
      src/CoreBundle/Entity/User.php
  29. 5
      src/CoreBundle/EventListener/CourseAccessListener.php
  30. 4
      src/CoreBundle/EventListener/CourseListener.php
  31. 2
      src/CoreBundle/EventListener/SessionAccessListener.php
  32. 5
      src/CoreBundle/EventSubscriber/ResolveResourceFileContentUrlSubscriber.php
  33. 2
      src/CoreBundle/Repository/IllustrationRepository.php
  34. 38
      src/CoreBundle/Repository/ResourceRepository.php
  35. 38
      src/CoreBundle/Repository/UserRepository.php
  36. 2
      src/CoreBundle/Resources/config/repositories.yml
  37. 30
      src/CoreBundle/Resources/config/services.yml
  38. 6
      src/CoreBundle/ToolChain.php
  39. 8
      src/CourseBundle/Entity/CDocument.php
  40. 2
      src/CourseBundle/Entity/CExerciseCategory.php
  41. 2
      src/CourseBundle/Entity/CGroupInfo.php
  42. 2
      src/CourseBundle/Entity/CQuiz.php
  43. 2
      src/CourseBundle/Entity/CTool.php
  44. 2
      src/CourseBundle/Repository/CForumPostRepository.php
  45. 2
      src/CourseBundle/Repository/CShortcutRepository.php
  46. 28
      src/CourseBundle/Resources/config/services.yml
  47. 11
      tests/datafiller/data_users.php
  48. 12
      tests/scripts/migrate_item_property.php

@ -831,7 +831,7 @@ class AddCourse
} }
// Adding the course to an URL. // Adding the course to an URL.
UrlManager::add_course_to_url($course_id, $accessUrlId); //UrlManager::add_course_to_url($course_id, $accessUrlId);
// Add event to the system log. // Add event to the system log.
$user_id = api_get_user_id(); $user_id = api_get_user_id();

@ -1689,7 +1689,12 @@ function api_get_user_info_from_entity(
$result['registration_date'] = $user->getRegistrationDate()->format('Y-m-d H:i:s'); $result['registration_date'] = $user->getRegistrationDate()->format('Y-m-d H:i:s');
$result['hr_dept_id'] = $user->getHrDeptId(); $result['hr_dept_id'] = $user->getHrDeptId();
$result['expiration_date'] = $user->getExpirationDate()->format('Y-m-d H:i:s'); $result['expiration_date'] = $user->getExpirationDate()->format('Y-m-d H:i:s');
$result['last_login'] = $user->getLastLogin()->format('Y-m-d H:i:s');
$result['last_login'] = null;
if ($user->getLastLogin()) {
$result['last_login'] = $user->getLastLogin()->format('Y-m-d H:i:s');
}
$result['competences'] = $user->getCompetences(); $result['competences'] = $user->getCompetences();
$result['diplomas'] = $user->getDiplomas(); $result['diplomas'] = $user->getDiplomas();
$result['teach'] = $user->getTeach(); $result['teach'] = $user->getTeach();
@ -3846,12 +3851,12 @@ function api_not_allowed(
$message = null, $message = null,
$responseCode = 0 $responseCode = 0
) { ) {
throw new Exception('You are not allowed'); /*throw new Exception('You are not allowed');
$message = empty($message) ? get_lang('You are not allowed') : $message; $message = empty($message) ? get_lang('You are not allowed') : $message;
Session::write('error_message', $message); Session::write('error_message', $message);
header('Location: '.api_get_path(WEB_PUBLIC_PATH).'error'); header('Location: '.api_get_path(WEB_PUBLIC_PATH).'error');
exit; exit;*/
} }
/** /**

@ -2,7 +2,7 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField; use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
use Chamilo\CoreBundle\Entity\Resource\ResourceNode; use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\Entity\SkillRelUser; use Chamilo\CoreBundle\Entity\SkillRelUser;
use Chamilo\CoreBundle\Entity\SkillRelUserComment; use Chamilo\CoreBundle\Entity\SkillRelUserComment;
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
@ -63,7 +63,6 @@ class UserManager
* Create/update/delete methods are available in the UserManager * Create/update/delete methods are available in the UserManager
* (based in the Sonata\UserBundle\Entity\UserManager). * (based in the Sonata\UserBundle\Entity\UserManager).
* *
* @return \Sonata\UserBundle\Entity\UserManager
*/ */
public static function getManager() public static function getManager()
{ {
@ -311,10 +310,7 @@ class UserManager
} }
$userManager = self::getManager(); $userManager = self::getManager();
$user = new User();
/** @var User $user */
$user = $userManager->createUser();
$user $user
->setLastname($lastName) ->setLastname($lastName)
->setFirstname($firstName) ->setFirstname($firstName)
@ -339,48 +335,48 @@ class UserManager
$user->setExpirationDate($expirationDate); $user->setExpirationDate($expirationDate);
} }
try { $em = Database::getManager();
$factory = Container::$container->get('Chamilo\CoreBundle\Repository\ResourceFactory'); $repo = Container::$container->get('Chamilo\CoreBundle\Repository\UserRepository');
$repo = $factory->createRepository('global', 'users'); $repo->updateUser($user, false);
$userManager->updateUser($user); /*$factory = Container::$container->get('Chamilo\CoreBundle\Repository\ResourceFactory');
$repo = $factory->createRepository('global', 'users');*/
// Add user as a node
if ($addUserToNode) {
$resourceNode = new ResourceNode();
$resourceNode
->setTitle($loginName)
->setCreator(api_get_user_entity($creatorId))
->setResourceType($repo->getResourceType())
// ->setParent($url->getResourceNode())
;
$em->persist($resourceNode);
$user->setResourceNode($resourceNode);
}
// Add user as a node $em->persist($user);
if ($addUserToNode) { $em->flush($user);
$resourceNode = new ResourceNode();
$resourceNode
->setTitle($loginName)
->setCreator(api_get_user_entity($creatorId))
->setResourceType($repo->getResourceType())
// ->setParent($url->getResourceNode())
;
$repo->getEntityManager()->persist($resourceNode);
$user->setResourceNode($resourceNode);
}
$repo->getEntityManager()->persist($user); $userId = $user->getId();
$userId = $user->getId(); // Add user to a group
$statusToGroup = [
COURSEMANAGER => 'TEACHER',
STUDENT => 'STUDENT',
DRH => 'RRHH',
SESSIONADMIN => 'SESSION_ADMIN',
STUDENT_BOSS => 'STUDENT_BOSS',
INVITEE => 'INVITEE',
];
// Add user to a group $group = Container::$container->get('Chamilo\CoreBundle\Repository\GroupRepository')->findOneBy(['code' => $statusToGroup[$status]]);
$statusToGroup = [ if ($group) {
COURSEMANAGER => 'TEACHER', $user->addGroup($group);
STUDENT => 'STUDENT', $repo->updateUser($user);
DRH => 'RRHH', }
SESSIONADMIN => 'SESSION_ADMIN',
STUDENT_BOSS => 'STUDENT_BOSS',
INVITEE => 'INVITEE',
];
$group = Container::$container->get('Chamilo\CoreBundle\Repository\GroupRepository')->findOneBy(['code' => $statusToGroup[$status]]); $em->flush();
if ($group) {
$user->addGroup($group);
$userManager->updateUser($user);
}
$repo->getEntityManager()->flush();
} catch (Exception $e) {
error_log($e->getMessage());
}
if (!empty($userId)) { if (!empty($userId)) {
$return = $userId; $return = $userId;
$sql = "UPDATE $table_user SET user_id = $return WHERE id = $return"; $sql = "UPDATE $table_user SET user_id = $return WHERE id = $return";

@ -2,7 +2,7 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
require_once __DIR__.'/V2TestCase.php'; require_once __DIR__.'/V2TestCase.php';
require_once __DIR__.'/../../../../vendor/autoload.php'; require_once __DIR__.'/../../../../../vendor/autoload.php';
/** /**
* Class SaveUserTest * Class SaveUserTest
@ -28,11 +28,12 @@ class SaveUserTest extends V2TestCase
$loginName = 'testUser'.time(); $loginName = 'testUser'.time();
$email = 'testUser@local'; $email = 'testUser@local';
$status = 5; $status = 5;
$userId = $this->integer( $userId = $this->integer(
[ [
'loginname' => $loginName, 'loginname' => $loginName,
'firstname' => 'Małgorzata', 'firstname' => $loginName,
'lastname' => 'Summer', 'lastname' => $loginName,
'original_user_id_name' => 'external_user_id', 'original_user_id_name' => 'external_user_id',
'original_user_id_value' => $loginName, 'original_user_id_value' => $loginName,
'email' => $email, 'email' => $email,
@ -74,8 +75,8 @@ class SaveUserTest extends V2TestCase
'original_user_id_value' => $loginName, 'original_user_id_value' => $loginName,
'status' => 5, 'status' => 5,
'password' => 'test', 'password' => 'test',
'firstname' => 'Małgorzata', 'firstname' => $loginName,
'lastname' => 'Summer', 'lastname' => $loginName,
'extra' => [ 'extra' => [
['field_name' => $extraFieldName, 'field_value' => $extraFieldOriginalValue], ['field_name' => $extraFieldName, 'field_value' => $extraFieldOriginalValue],
], ],

@ -11,6 +11,7 @@ use Symfony\Component\Routing\Annotation\Route;
/** /**
* Class Administrator. * Class Administrator.
*
* @Route("/admin") * @Route("/admin")
*/ */
class AdminController extends BaseController class AdminController extends BaseController

@ -120,7 +120,6 @@ class CourseHomeController extends ToolBaseController
'tool' 'tool'
); );
$result = $qb->getQuery()->getResult(); $result = $qb->getQuery()->getResult();
$tools = []; $tools = [];
/** @var CTool $item */ /** @var CTool $item */
foreach ($result as $item) { foreach ($result as $item) {

@ -34,9 +34,6 @@ class ResourceApiController extends AbstractController implements CourseControll
use ResourceControllerTrait; use ResourceControllerTrait;
use ControllerTrait; use ControllerTrait;
/**
*
*/
public function getResourcesListAction($id, Request $request) public function getResourcesListAction($id, Request $request)
{ {
$repository = $this->getRepositoryFromRequest($request); $repository = $this->getRepositoryFromRequest($request);
@ -57,9 +54,6 @@ class ResourceApiController extends AbstractController implements CourseControll
return $qb->getQuery()->getResult(); return $qb->getQuery()->getResult();
} }
/**
*
*/
public function getResourceAction($id, Request $request) public function getResourceAction($id, Request $request)
{ {
$repository = $this->getRepositoryFromRequest($request); $repository = $this->getRepositoryFromRequest($request);
@ -71,8 +65,6 @@ class ResourceApiController extends AbstractController implements CourseControll
return $resource; return $resource;
} }
/**
*/
public function getResourceCommentsAction($id, Request $request, $paramFetcher) public function getResourceCommentsAction($id, Request $request, $paramFetcher)
{ {
$repository = $this->getRepositoryFromRequest($request); $repository = $this->getRepositoryFromRequest($request);
@ -87,8 +79,6 @@ class ResourceApiController extends AbstractController implements CourseControll
return $resource->getResourceNode()->getComments()->matching($criteria); return $resource->getResourceNode()->getComments()->matching($criteria);
} }
/**
*/
public function postResourceCommentAction($id, Request $request) public function postResourceCommentAction($id, Request $request)
{ {
$repository = $this->getRepositoryFromRequest($request); $repository = $this->getRepositoryFromRequest($request);

@ -6,8 +6,6 @@ namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Core\Annotation\ApiSubresource; use ApiPlatform\Core\Annotation\ApiSubresource;
use APY\DataGridBundle\Grid\Mapping as GRID; use APY\DataGridBundle\Grid\Mapping as GRID;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Serializer\Annotation\Groups;
@ -27,9 +25,7 @@ abstract class AbstractResource
* @ApiSubresource() * @ApiSubresource()
* @Groups({"resource_node:read", "resource_node:write", "document:read","document:write"}) * @Groups({"resource_node:read", "resource_node:write", "document:read","document:write"})
* @GRID\Column(field="resourceNode.createdAt", title="Date added", type="datetime") * @GRID\Column(field="resourceNode.createdAt", title="Date added", type="datetime")
* @ORM\OneToOne( * @ORM\OneToOne(targetEntity="Chamilo\CoreBundle\Entity\ResourceNode", cascade={"persist", "remove"}, orphanRemoval=true)
* targetEntity="Chamilo\CoreBundle\Entity\ResourceNode", cascade={"remove"}, orphanRemoval=true
* )
* @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="CASCADE") * @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="CASCADE")
*/ */
public $resourceNode; public $resourceNode;

@ -4,14 +4,18 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use Chamilo\CoreBundle\Entity\AbstractResource; use ApiPlatform\Core\Annotation\ApiResource;
use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Traits\CourseTrait; use Chamilo\CoreBundle\Traits\CourseTrait;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo; use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
/** /**
* AccessUrl. * @ApiResource(
* normalizationContext={"groups"={"access_url:read"}, "swagger_definition_name"="Read"},
* denormalizationContext={"groups"={"access_url:write","course_category:write"}},
* )
* *
* @Gedmo\Tree(type="nested") * @Gedmo\Tree(type="nested")
* @ORM\Table(name="access_url") * @ORM\Table(name="access_url")
@ -109,6 +113,9 @@ class AccessUrl extends AbstractResource implements ResourceInterface
/** /**
* @var string * @var string
* @Assert\NotBlank()
*
* @Groups({"access_url:read", "access_url:write"})
* *
* @ORM\Column(name="url", type="string", length=255, nullable=false, unique=false) * @ORM\Column(name="url", type="string", length=255, nullable=false, unique=false)
*/ */

@ -11,9 +11,6 @@ use ApiPlatform\Core\Annotation\ApiSubresource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter; use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\ResourceLink;
use Chamilo\CourseBundle\Entity\CGroupInfo; use Chamilo\CourseBundle\Entity\CGroupInfo;
use Chamilo\CourseBundle\Entity\CTool; use Chamilo\CourseBundle\Entity\CTool;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
@ -98,7 +95,7 @@ class Course extends AbstractResource implements ResourceInterface
* @var CourseRelUser[]|ArrayCollection * @var CourseRelUser[]|ArrayCollection
* *
* @ApiSubresource() * @ApiSubresource()
* * @Groups({"course:read"})
* "orphanRemoval" is needed to delete the CourseRelUser relation * "orphanRemoval" is needed to delete the CourseRelUser relation
* in the CourseAdmin class. The setUsers, getUsers, removeUsers and * in the CourseAdmin class. The setUsers, getUsers, removeUsers and
* addUsers methods need to be added. * addUsers methods need to be added.
@ -431,11 +428,11 @@ class Course extends AbstractResource implements ResourceInterface
public function setTools($tools) public function setTools($tools)
{ {
foreach ($tools as $tool) { foreach ($tools as $tool) {
$this->addTools($tool); $this->addTool($tool);
} }
} }
public function addTools(CTool $tool) public function addTool(CTool $tool)
{ {
$tool->setCourse($this); $tool->setCourse($this);
$this->tools[] = $tool; $this->tools[] = $tool;

@ -16,6 +16,7 @@ use Symfony\Component\Validator\Constraints as Assert;
/** /**
* CourseCategory. * CourseCategory.
*
* @ApiResource( * @ApiResource(
* normalizationContext={"groups"={"course_category:read", "course:read"}, "swagger_definition_name"="Read"}, * normalizationContext={"groups"={"course_category:read", "course:read"}, "swagger_definition_name"="Read"},
* denormalizationContext={"groups"={"course_category:write", "course:write"}}, * denormalizationContext={"groups"={"course_category:write", "course:write"}},

@ -13,7 +13,6 @@ use Symfony\Component\Serializer\Annotation\Groups;
* *
* @ApiResource( * @ApiResource(
* shortName="CourseSubscription", * shortName="CourseSubscription",
* attributes={"security"="is_granted('ROLE_ADMIN')"},
* normalizationContext={"groups"={"course_rel_user:read"}} * normalizationContext={"groups"={"course_rel_user:read"}}
* ) * )
* *
@ -25,7 +24,6 @@ use Symfony\Component\Serializer\Annotation\Groups;
* } * }
* ) * )
* @ORM\Entity * @ORM\Entity
* @ORM\Table(name="course_rel_user")
*/ */
class CourseRelUser class CourseRelUser
{ {
@ -39,6 +37,8 @@ class CourseRelUser
protected $id; protected $id;
/** /**
* @Groups({"course:read"})
*
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\User", inversedBy="courses", cascade={"persist"}) * @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\User", inversedBy="courses", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/ */

@ -6,8 +6,6 @@ namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource; use ApiPlatform\Core\Annotation\ApiResource;
use APY\DataGridBundle\Grid\Mapping as GRID; use APY\DataGridBundle\Grid\Mapping as GRID;
use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CourseBundle\Traits\PersonalResourceTrait; use Chamilo\CourseBundle\Traits\PersonalResourceTrait;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity; use Gedmo\Timestampable\Traits\TimestampableEntity;

@ -61,8 +61,6 @@ class CourseListener
//$url = $course->getCurrentUrl(); //$url = $course->getCurrentUrl();
//$repo = $args->getEntityManager()->getRepository('ChamiloCoreBundle:Course'); //$repo = $args->getEntityManager()->getRepository('ChamiloCoreBundle:Course');
///$this->checkLimit($repo, $course, $url); ///$this->checkLimit($repo, $course, $url);
///
// $repo = $args->getEntityManager()->getRepository('ChamiloCoreBundle:Course');
$this->toolChain->addToolsInCourse($this->toolRepository, $course); $this->toolChain->addToolsInCourse($this->toolRepository, $course);
} }
} }
@ -71,6 +69,7 @@ class CourseListener
{ {
/** @var AccessUrlRelCourse $urlRelCourse */ /** @var AccessUrlRelCourse $urlRelCourse */
if ($course) { if ($course) {
/*$urlRelCourse = $course->getUrls()->first(); /*$urlRelCourse = $course->getUrls()->first();
$url = $urlRelCourse->getUrl();*/ $url = $urlRelCourse->getUrl();*/
//$url = $course->getCurrentUrl(); //$url = $course->getCurrentUrl();

@ -5,6 +5,7 @@
namespace Chamilo\CoreBundle\Entity\Listener; namespace Chamilo\CoreBundle\Entity\Listener;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceNode; use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\ToolChain; use Chamilo\CoreBundle\ToolChain;
use Cocur\Slugify\SlugifyInterface; use Cocur\Slugify\SlugifyInterface;
@ -34,6 +35,10 @@ class ResourceListener
public function prePersist(AbstractResource $resource, LifecycleEventArgs $args) public function prePersist(AbstractResource $resource, LifecycleEventArgs $args)
{ {
if (!$resource instanceof Course) {
return true;
}
// Add resource node // Add resource node
$em = $args->getEntityManager(); $em = $args->getEntityManager();
$id = $this->request->getCurrentRequest()->getSession()->get('access_url_id'); $id = $this->request->getCurrentRequest()->getSession()->get('access_url_id');

@ -5,11 +5,8 @@
namespace Chamilo\CoreBundle\Entity\Listener; namespace Chamilo\CoreBundle\Entity\Listener;
use Chamilo\CoreBundle\Entity\AccessUrl; use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Entity\AccessUrlRelSession;
use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Repository\SessionRepository; use Chamilo\CoreBundle\Repository\SessionRepository;
use Chamilo\CoreBundle\ToolChain;
use Cocur\Slugify\SlugifyInterface;
use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;

@ -5,8 +5,6 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use APY\DataGridBundle\Grid\Mapping as GRID; use APY\DataGridBundle\Grid\Mapping as GRID;
use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\ResourceInterface;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity; use Gedmo\Timestampable\Traits\TimestampableEntity;

@ -5,7 +5,6 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource; use ApiPlatform\Core\Annotation\ApiResource;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Traits\TimestampableAgoTrait; use Chamilo\CoreBundle\Traits\TimestampableAgoTrait;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;

@ -10,6 +10,7 @@ use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter; use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use Chamilo\CoreBundle\Controller\CreateResourceFileAction;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity; use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\HttpFoundation\File\File; use Symfony\Component\HttpFoundation\File\File;
@ -17,7 +18,6 @@ use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Mapping\Annotation as Vich; use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Chamilo\CoreBundle\Controller\CreateResourceFileAction;
// //
//* attributes={"security"="is_granted('ROLE_ADMIN')"}, //* attributes={"security"="is_granted('ROLE_ADMIN')"},
@ -414,20 +414,12 @@ class ResourceFile
} }
} }
/**
* @return string|null
*/
public function getContentUrl(): ?string public function getContentUrl(): ?string
{ {
return $this->contentUrl; return $this->contentUrl;
} }
/** public function setContentUrl(?string $contentUrl): self
* @param string|null $contentUrl
*
* @return ResourceFile
*/
public function setContentUrl(?string $contentUrl): ResourceFile
{ {
$this->contentUrl = $contentUrl; $this->contentUrl = $contentUrl;

@ -12,8 +12,8 @@ use Symfony\Component\Serializer\Annotation\Groups;
/** /**
* @ApiResource( * @ApiResource(
* normalizationContext={"groups"={"resource_link:read", "course:read"}}, * shortName="ResourceLink",
* * normalizationContext={"groups"={"resource_link:read", "course:read"}}
* ) * )
* @ORM\Entity * @ORM\Entity
* @ORM\Table(name="resource_link") * @ORM\Table(name="resource_link")
@ -28,12 +28,12 @@ class ResourceLink
/** /**
* @ORM\Id * @ORM\Id
* @ORM\Column(type="integer") * @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO") * @ORM\GeneratedValue
*/ */
protected $id; protected $id;
/** /**
* @Groups({"resource_link:read", "resource_node:read", "course:read"}) *
* *
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\ResourceNode", inversedBy="resourceLinks") * @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\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")
@ -41,7 +41,6 @@ class ResourceLink
protected $resourceNode; protected $resourceNode;
/** /**
* @Groups({"resource_link:read", "resource_node:read", "course:read"})
* *
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course", inversedBy="resourceLinks") * @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course", inversedBy="resourceLinks")
* @ORM\JoinColumn(name="c_id", referencedColumnName="id", nullable=true) * @ORM\JoinColumn(name="c_id", referencedColumnName="id", nullable=true)

@ -5,14 +5,11 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Core\Annotation\ApiFilter; use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource; use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiSubresource; use ApiPlatform\Core\Annotation\ApiSubresource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter; use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Traits\TimestampableAgoTrait; use Chamilo\CoreBundle\Traits\TimestampableAgoTrait;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
@ -73,8 +70,6 @@ class ResourceNode
protected $slug; protected $slug;
/** /**
* @Groups({"resource_node:read", "resource_node:write"})
*
* @ORM\ManyToOne(targetEntity="ResourceType") * @ORM\ManyToOne(targetEntity="ResourceType")
* @ORM\JoinColumn(name="resource_type_id", referencedColumnName="id", nullable=false) * @ORM\JoinColumn(name="resource_type_id", referencedColumnName="id", nullable=false)
*/ */
@ -85,7 +80,7 @@ class ResourceNode
* *
* @var ResourceLink[] * @var ResourceLink[]
* *
* @ORM\OneToMany(targetEntity="ResourceLink", mappedBy="resourceNode", cascade={"remove"}) * @ORM\OneToMany(targetEntity="ResourceLink", mappedBy="resourceNode", cascade={"persist", "remove"})
*/ */
protected $resourceLinks; protected $resourceLinks;
@ -111,6 +106,9 @@ class ResourceNode
protected $creator; protected $creator;
/** /**
* @ApiSubresource()
*
* @Groups({"resource_node:read", "document:read"})
* @Gedmo\TreeParent * @Gedmo\TreeParent
* @ORM\ManyToOne( * @ORM\ManyToOne(
* targetEntity="ResourceNode", * targetEntity="ResourceNode",
@ -139,6 +137,7 @@ class ResourceNode
protected $children; protected $children;
/** /**
* @Groups({"resource_node:read", "document:read"})
* @Gedmo\TreePath(appendId=true,separator="`") * @Gedmo\TreePath(appendId=true,separator="`")
* *
* @ORM\Column(name="path", type="text", nullable=true) * @ORM\Column(name="path", type="text", nullable=true)

@ -4,7 +4,6 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use Chamilo\CoreBundle\Entity\Tool;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity; use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;

@ -1290,28 +1290,18 @@ class Session
return $this; return $this;
} }
/**
* @return User
*/
public function getSessionAdmin(): User public function getSessionAdmin(): User
{ {
return $this->sessionAdmin; return $this->sessionAdmin;
} }
/** public function setSessionAdmin(User $sessionAdmin): self
* @param User $sessionAdmin
*
* @return Session
*/
public function setSessionAdmin(User $sessionAdmin): Session
{ {
$this->sessionAdmin = $sessionAdmin; $this->sessionAdmin = $sessionAdmin;
return $this; return $this;
} }
public function isUserGeneralCoach(User $user): bool public function isUserGeneralCoach(User $user): bool
{ {
$generalCoach = $this->getGeneralCoach(); $generalCoach = $this->getGeneralCoach();

@ -10,6 +10,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
/** /**
* SessionCategory. * SessionCategory.
*
* @ApiResource( * @ApiResource(
* normalizationContext={"groups"={"session_category:read"}, "swagger_definition_name"="Read"}, * normalizationContext={"groups"={"session_category:read"}, "swagger_definition_name"="Read"},
* denormalizationContext={"groups"={"session_category:write"}}, * denormalizationContext={"groups"={"session_category:write"}},

@ -4,8 +4,6 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
/** /**

@ -4,7 +4,6 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use Chamilo\CoreBundle\Entity\User;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
/** /**

@ -4,7 +4,6 @@
namespace Chamilo\CoreBundle\Entity; namespace Chamilo\CoreBundle\Entity;
use Chamilo\CoreBundle\Entity\ResourceType;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;

@ -10,7 +10,6 @@ use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiSubresource; use ApiPlatform\Core\Annotation\ApiSubresource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use Chamilo\CoreBundle\Entity\ResourceNode;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
@ -112,7 +111,7 @@ class User implements UserInterface, EquatableInterface
/** /**
* @var string * @var string
* @Groups({"user:read", "user:write"}) * @Groups({"user:read", "user:write", "course:read"})
* @Assert\NotBlank() * @Assert\NotBlank()
* @ORM\Column(name="username", type="string", length=100, nullable=false, unique=true) * @ORM\Column(name="username", type="string", length=100, nullable=false, unique=true)
*/ */
@ -582,8 +581,8 @@ class User implements UserInterface, EquatableInterface
$this->groups = new ArrayCollection(); $this->groups = new ArrayCollection();
//$this->extraFields = new ArrayCollection(); //$this->extraFields = new ArrayCollection();
//$this->userId = 0; //$this->userId = 0;
//$this->createdAt = new \DateTime(); $this->createdAt = new \DateTime();
//$this->updatedAt = new \DateTime(); $this->updatedAt = new \DateTime();
$this->enabled = false; $this->enabled = false;
$this->locked = false; $this->locked = false;
@ -1485,8 +1484,6 @@ class User implements UserInterface, EquatableInterface
return $this; return $this;
} }
/** /**
* Set lastLogin. * Set lastLogin.
* *
@ -2125,40 +2122,24 @@ class User implements UserInterface, EquatableInterface
return $this; return $this;
} }
/**
* @return string
*/
public function getWebsite(): string public function getWebsite(): string
{ {
return $this->website; return $this->website;
} }
/** public function setWebsite(string $website): self
* @param string $website
*
* @return User
*/
public function setWebsite(string $website): User
{ {
$this->website = $website; $this->website = $website;
return $this; return $this;
} }
/**
* @return string
*/
public function getBiography(): string public function getBiography(): string
{ {
return $this->biography; return $this->biography;
} }
/** public function setBiography(string $biography): self
* @param string $biography
*
* @return User
*/
public function setBiography(string $biography): User
{ {
$this->biography = $biography; $this->biography = $biography;
@ -2174,6 +2155,4 @@ class User implements UserInterface, EquatableInterface
return $this->courseGroupsAsTutor->matching($criteria); return $this->courseGroupsAsTutor->matching($criteria);
} }
} }

@ -2,11 +2,12 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
namespace Chamilo\CourseBundle\EventListener; namespace Chamilo\CoreBundle\EventListener;
use Chamilo\CoreBundle\Entity\TrackECourseAccess; use Chamilo\CoreBundle\Entity\TrackECourseAccess;
use Chamilo\CourseBundle\Event\CourseAccess; use Chamilo\CourseBundle\Event\CourseAccess;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RequestStack;
/** /**
@ -19,7 +20,7 @@ class CourseAccessListener
protected $em; protected $em;
/** /**
* @var \Symfony\Component\HttpFoundation\Request * @var Request
*/ */
protected $request; protected $request;

@ -2,7 +2,7 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
namespace Chamilo\CourseBundle\EventListener; namespace Chamilo\CoreBundle\EventListener;
use Chamilo\CoreBundle\Entity\Course; use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\User; use Chamilo\CoreBundle\Entity\User;
@ -73,6 +73,7 @@ class CourseListener
$courseFromSession = $sessionHandler->get('course'); $courseFromSession = $sessionHandler->get('course');
if ($courseId === $courseFromSession->getId()) { if ($courseId === $courseFromSession->getId()) {
$course = $courseFromSession; $course = $courseFromSession;
$courseInfo = $sessionHandler->get('_course');
} }
} }
@ -80,6 +81,7 @@ 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"); //dump("get course from DB $courseId");
$courseInfo = api_get_course_info($course->getCode()); $courseInfo = api_get_course_info($course->getCode());
} }

@ -2,7 +2,7 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
namespace Chamilo\CourseBundle\EventListener; namespace Chamilo\CoreBundle\EventListener;
use Chamilo\CoreBundle\Entity\TrackECourseAccess; use Chamilo\CoreBundle\Entity\TrackECourseAccess;
use Chamilo\CourseBundle\Event\SessionAccess; use Chamilo\CourseBundle\Event\SessionAccess;

@ -6,13 +6,12 @@ namespace Chamilo\CoreBundle\EventSubscriber;
use ApiPlatform\Core\EventListener\EventPriorities; use ApiPlatform\Core\EventListener\EventPriorities;
use ApiPlatform\Core\Util\RequestAttributesExtractor; use ApiPlatform\Core\Util\RequestAttributesExtractor;
use Chamilo\CoreBundle\Entity\Resource\ResourceFile; use Chamilo\CoreBundle\Entity\ResourceFile;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ViewEvent; use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\RouterInterface;
use Vich\UploaderBundle\Storage\StorageInterface; use Vich\UploaderBundle\Storage\StorageInterface;
class ResolveResourceFileContentUrlSubscriber implements EventSubscriberInterface class ResolveResourceFileContentUrlSubscriber implements EventSubscriberInterface
@ -65,8 +64,6 @@ class ResolveResourceFileContentUrlSubscriber implements EventSubscriberInterfac
]; ];
$mediaObject->contentUrl = $this->generator->generate('chamilo_core_resource_view_file', $params); $mediaObject->contentUrl = $this->generator->generate('chamilo_core_resource_view_file', $params);
//$mediaObject->contentUrl = $this->storage->resolveUri($mediaObject, 'file');
} }
} }
} }

@ -6,9 +6,9 @@ namespace Chamilo\CoreBundle\Repository;
use APY\DataGridBundle\Grid\Column\Column; use APY\DataGridBundle\Grid\Column\Column;
use APY\DataGridBundle\Grid\Grid; use APY\DataGridBundle\Grid\Grid;
use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course; use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Illustration; use Chamilo\CoreBundle\Entity\Illustration;
use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\ResourceFile; use Chamilo\CoreBundle\Entity\ResourceFile;
use Chamilo\CoreBundle\Entity\ResourceNode; use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Session;

@ -8,8 +8,8 @@ use APY\DataGridBundle\Grid\Action\RowAction;
use APY\DataGridBundle\Grid\Row; use APY\DataGridBundle\Grid\Row;
use Chamilo\CoreBundle\Component\Resource\Settings; use Chamilo\CoreBundle\Component\Resource\Settings;
use Chamilo\CoreBundle\Component\Resource\Template; use Chamilo\CoreBundle\Component\Resource\Template;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceFile; use Chamilo\CoreBundle\Entity\ResourceFile;
use Chamilo\CoreBundle\Entity\ResourceInterface; use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\ResourceLink; use Chamilo\CoreBundle\Entity\ResourceLink;
@ -26,7 +26,6 @@ use Chamilo\CourseBundle\Entity\CGroupInfo;
use Cocur\Slugify\SlugifyInterface; use Cocur\Slugify\SlugifyInterface;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityRepository as BaseEntityRepository;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use League\Flysystem\FilesystemInterface; use League\Flysystem\FilesystemInterface;
use Symfony\Component\Filesystem\Exception\FileNotFoundException; use Symfony\Component\Filesystem\Exception\FileNotFoundException;
@ -41,7 +40,7 @@ use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
* Class ResourceRepository. * Class ResourceRepository.
* Extends EntityRepository is needed to process settings. * Extends EntityRepository is needed to process settings.
*/ */
class ResourceRepository extends BaseEntityRepository class ResourceRepository extends EntityRepository
{ {
/** /**
* @var EntityRepository * @var EntityRepository
@ -254,21 +253,21 @@ class ResourceRepository extends BaseEntityRepository
public function addResourceToCourse(AbstractResource $resource, int $visibility, User $creator, Course $course, Session $session = null, CGroupInfo $group = null, UploadedFile $file = null) public function addResourceToCourse(AbstractResource $resource, int $visibility, User $creator, Course $course, Session $session = null, CGroupInfo $group = null, UploadedFile $file = null)
{ {
$node = $this->createNodeForResource($resource, $creator, $course->getResourceNode(), $file); $resourceNode = $this->createNodeForResource($resource, $creator, $course->getResourceNode(), $file);
$this->addResourceNodeToCourse($node, $visibility, $course, $session, $group); $this->addResourceNodeToCourse($resourceNode, $visibility, $course, $session, $group);
} }
public function addResourceToCourseWithParent(AbstractResource $resource, ResourceNode $parentNode, int $visibility, User $creator, Course $course, Session $session = null, CGroupInfo $group = null, UploadedFile $file = null) public function addResourceToCourseWithParent(AbstractResource $resource, ResourceNode $parentNode, int $visibility, User $creator, Course $course, Session $session = null, CGroupInfo $group = null, UploadedFile $file = null)
{ {
$node = $this->createNodeForResource($resource, $creator, $parentNode, $file); $resourceNode = $this->createNodeForResource($resource, $creator, $parentNode, $file);
$this->addResourceNodeToCourse($node, $visibility, $course, $session, $group); $this->addResourceNodeToCourse($resourceNode, $visibility, $course, $session, $group);
} }
public function addResourceNodeToCourse(ResourceNode $resourceNode, int $visibility, Course $course, Session $session = null, CGroupInfo $group = null, User $toUser = null): void public function addResourceNodeToCourse(ResourceNode $resourceNode, int $visibility, Course $course, Session $session = null, CGroupInfo $group = null, User $toUser = null): void
{ {
if (empty($visibility)) { if (0 === $visibility) {
$visibility = ResourceLink::VISIBILITY_PUBLISHED; $visibility = ResourceLink::VISIBILITY_PUBLISHED;
} }
@ -304,15 +303,14 @@ class ResourceRepository extends BaseEntityRepository
} }
$em = $this->getEntityManager(); $em = $this->getEntityManager();
$em->persist($resourceNode);
$em->persist($link); $em->persist($link);
} }
public function addResourceToMe(ResourceNode $resourceNode): ResourceLink public function addResourceToMe(ResourceNode $resourceNode): ResourceLink
{ {
$resourceLink = new ResourceLink(); $resourceLink = new ResourceLink();
$resourceLink $resourceLink->setResourceNode($resourceNode);
->setResourceNode($resourceNode)
;
$this->getEntityManager()->persist($resourceLink); $this->getEntityManager()->persist($resourceLink);
$this->getEntityManager()->flush(); $this->getEntityManager()->flush();
@ -353,15 +351,15 @@ class ResourceRepository extends BaseEntityRepository
return $resourceLink; return $resourceLink;
} }
public function addResourceToCourseGroup( public function addResourceToCourseGroup(ResourceNode $resourceNode, CGroupInfo $group)
ResourceNode $resourceNode, {
CGroupInfo $group $exists = $resourceNode->getResourceLinks()->exists(
) { function ($key, $element) use ($group) {
$exists = $resourceNode->getResourceLinks()->exists(function ($key, $element) use ($group) { if ($element->getGroup()) {
if ($element->getGroup()) { return $group->getIid() == $element->getGroup()->getIid();
return $group->getIid() == $element->getGroup()->getIid(); }
} }
}); );
if (false === $exists) { if (false === $exists) {
$resourceLink = new ResourceLink(); $resourceLink = new ResourceLink();
@ -863,7 +861,6 @@ class ResourceRepository extends BaseEntityRepository
$em = $this->getEntityManager(); $em = $this->getEntityManager();
$resourceType = $this->getResourceType(); $resourceType = $this->getResourceType();
$resourceNode = new ResourceNode();
$resourceName = $resource->getResourceName(); $resourceName = $resource->getResourceName();
$extension = $this->slugify->slugify(pathinfo($resourceName, PATHINFO_EXTENSION)); $extension = $this->slugify->slugify(pathinfo($resourceName, PATHINFO_EXTENSION));
@ -875,6 +872,7 @@ class ResourceRepository extends BaseEntityRepository
$slug = sprintf('%s.%s', $this->slugify->slugify($originalBasename), $originalExtension); $slug = sprintf('%s.%s', $this->slugify->slugify($originalBasename), $originalExtension);
} }
$resourceNode = new ResourceNode();
$resourceNode $resourceNode
->setTitle($resourceName) ->setTitle($resourceName)
->setSlug($slug) ->setSlug($slug)

@ -16,6 +16,7 @@ use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser; use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser;
use Chamilo\CoreBundle\Entity\SkillRelUser; use Chamilo\CoreBundle\Entity\SkillRelUser;
use Chamilo\CoreBundle\Entity\SkillRelUserComment; use Chamilo\CoreBundle\Entity\SkillRelUserComment;
use Chamilo\CoreBundle\Entity\Ticket;
use Chamilo\CoreBundle\Entity\TrackEAccess; use Chamilo\CoreBundle\Entity\TrackEAccess;
use Chamilo\CoreBundle\Entity\TrackEAttempt; use Chamilo\CoreBundle\Entity\TrackEAttempt;
use Chamilo\CoreBundle\Entity\TrackECourseAccess; use Chamilo\CoreBundle\Entity\TrackECourseAccess;
@ -45,10 +46,10 @@ use Chamilo\CourseBundle\Entity\CStudentPublication;
use Chamilo\CourseBundle\Entity\CStudentPublicationComment; use Chamilo\CourseBundle\Entity\CStudentPublicationComment;
use Chamilo\CourseBundle\Entity\CSurveyAnswer; use Chamilo\CourseBundle\Entity\CSurveyAnswer;
use Chamilo\CourseBundle\Entity\CWiki; use Chamilo\CourseBundle\Entity\CWiki;
use Chamilo\CoreBundle\Entity\Ticket;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\Query\Expr\Join;
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface; use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\User\PasswordUpgraderInterface; use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserInterface;
@ -65,6 +66,16 @@ use Symfony\Component\Serializer\Serializer;
*/ */
class UserRepository extends ResourceRepository implements UserLoaderInterface, PasswordUpgraderInterface class UserRepository extends ResourceRepository implements UserLoaderInterface, PasswordUpgraderInterface
{ {
/**
* @var UserPasswordEncoderInterface
*/
protected $encoder;
public function setEncoder(UserPasswordEncoderInterface $encoder){
$this->encoder = $encoder;
}
public function loadUserByUsername($username) public function loadUserByUsername($username)
{ {
return $this->findBy(['username' => $username]); return $this->findBy(['username' => $username]);
@ -80,26 +91,35 @@ class UserRepository extends ResourceRepository implements UserLoaderInterface,
} }
} }
public function updateCanonicalFields(UserInterface $user) public function canonicalize($string)
{ {
//$user->setUsernameCanonical($this->canonicalizeUsername($user->getUsername())); $encoding = mb_detect_encoding($string);
//$user->setEmailCanonical($this->canonicalizeEmail($user->getEmail())); $result = $encoding
? mb_convert_case($string, MB_CASE_LOWER, $encoding)
: mb_convert_case($string, MB_CASE_LOWER);
return $result;
} }
public function updateCanonicalFields(UserInterface $user)
{
$user->setUsernameCanonical($this->canonicalize($user->getUsername()));
$user->setEmailCanonical($this->canonicalize($user->getEmail()));
}
/**
* {@inheritDoc}
*/
public function updatePassword(UserInterface $user) public function updatePassword(UserInterface $user)
{ {
//UserPasswordEncoderInterface $passwordEncoder
if (0 !== strlen($password = $user->getPlainPassword())) { if (0 !== strlen($password = $user->getPlainPassword())) {
// $encoder = $this->getEncoder($user); $password = $this->encoder->encodePassword($user, $password);
$user->setPassword($password);
$user->eraseCredentials();
// $encoder = $this->getEncoder($user);
//$user->setPassword($encoder->encodePassword($password, $user->getSalt())); //$user->setPassword($encoder->encodePassword($password, $user->getSalt()));
//$user->eraseCredentials(); //$user->eraseCredentials();
} }
} }
public function upgradePassword(UserInterface $user, string $newEncodedPassword): void public function upgradePassword(UserInterface $user, string $newEncodedPassword): void
{ {
// this code is only an example; the exact code will depend on // this code is only an example; the exact code will depend on

@ -34,5 +34,7 @@ services:
Chamilo\CoreBundle\Repository\UserRepository: Chamilo\CoreBundle\Repository\UserRepository:
arguments: arguments:
$className: 'Chamilo\CoreBundle\Entity\User' $className: 'Chamilo\CoreBundle\Entity\User'
calls:
- [setEncoder, ['@security.user_password_encoder.generic']]
Chamilo\CoreBundle\Repository\GroupRepository: ~ Chamilo\CoreBundle\Repository\GroupRepository: ~

@ -153,6 +153,36 @@ services:
tags: tags:
- {name: doctrine.orm.entity_listener, entity_manager: default, lazy: true} - {name: doctrine.orm.entity_listener, entity_manager: default, lazy: true}
chamilo_course.listener.course:
class: Chamilo\CoreBundle\EventListener\CourseListener
calls:
- [setContainer, ['@service_container']]
tags:
- {name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 6}
- {name: kernel.event_listener, event: kernel.response, method: onKernelResponse}
- {name: kernel.event_listener, event: kernel.controller, method: onKernelController}
# Sets the user access in a course listener
chamilo_course.listener.course_access:
class: Chamilo\CoreBundle\EventListener\CourseAccessListener
arguments:
- '@doctrine.orm.entity_manager'
calls:
- [setRequest, ['@request_stack']]
tags:
- {name: kernel.event_listener, event: chamilo_course.course.access, method: onCourseAccessEvent}
# Sets the user access in a course session listener
chamilo_course.listener.session_access:
class: Chamilo\CoreBundle\EventListener\SessionAccessListener
arguments:
- '@doctrine.orm.entity_manager'
calls:
- [setRequest, ['@request_stack']]
tags:
- {name: kernel.event_listener, event: chamilo_course.course.session, method: onSessionAccessEvent}
# When Course entity is loaded # When Course entity is loaded
chamilo_core.listener.course: chamilo_core.listener.course:
class: Chamilo\CoreBundle\Entity\Listener\CourseListener class: Chamilo\CoreBundle\Entity\Listener\CourseListener

@ -170,10 +170,6 @@ class ToolChain
foreach ($tools as $tool) { foreach ($tools as $tool) {
$visibility = in_array($tool->getName(), $toolVisibility, true); $visibility = in_array($tool->getName(), $toolVisibility, true);
$criteria = ['name' => $tool->getName()]; $criteria = ['name' => $tool->getName()];
// Skip global tools.
/*if ($tool->isCourseTool() === false) {
continue;
}*/
if (!isset($toolList[$tool->getName()])) { if (!isset($toolList[$tool->getName()])) {
continue; continue;
} }
@ -190,7 +186,7 @@ class ToolChain
; ;
$toolRepository->addResourceToCourse($courseTool, ResourceLink::VISIBILITY_PUBLISHED, $user, $course); $toolRepository->addResourceToCourse($courseTool, ResourceLink::VISIBILITY_PUBLISHED, $user, $course);
$course->addTools($courseTool); $course->addTool($courseTool);
} }
return $course; return $course;

@ -5,21 +5,19 @@
namespace Chamilo\CourseBundle\Entity; namespace Chamilo\CourseBundle\Entity;
use ApiPlatform\Core\Annotation\ApiFilter; use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource; use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiSubresource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use APY\DataGridBundle\Grid\Mapping as GRID; use APY\DataGridBundle\Grid\Mapping as GRID;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceInterface; use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CourseBundle\Traits\ShowCourseResourcesInSessionTrait; use Chamilo\CourseBundle\Traits\ShowCourseResourcesInSessionTrait;
use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Serializer\Annotation\Groups;
//* attributes={"security"="is_granted('ROLE_ADMIN')"}, //* attributes={"security"="is_granted('ROLE_ADMIN')"},
/** /**
* @ApiResource( * @ApiResource(
@ -27,7 +25,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
* normalizationContext={"groups"={"document:read", "resource_node:read"}}, * normalizationContext={"groups"={"document:read", "resource_node:read"}},
* denormalizationContext={"groups"={"document:write"}} * denormalizationContext={"groups"={"document:write"}}
* ) * )
* @ApiFilter(SearchFilter::class, properties={"title": "partial", "resourceNode": "exact"}) * @ApiFilter(SearchFilter::class, properties={"title": "partial", "resourceNode.parent": "exact"})
* @ApiFilter( * @ApiFilter(
* OrderFilter::class, * OrderFilter::class,
* properties={ * properties={

@ -5,8 +5,8 @@
namespace Chamilo\CourseBundle\Entity; namespace Chamilo\CourseBundle\Entity;
use APY\DataGridBundle\Grid\Mapping as GRID; use APY\DataGridBundle\Grid\Mapping as GRID;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceInterface; use Chamilo\CoreBundle\Entity\ResourceInterface;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo; use Gedmo\Mapping\Annotation as Gedmo;

@ -4,8 +4,8 @@
namespace Chamilo\CourseBundle\Entity; namespace Chamilo\CourseBundle\Entity;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceInterface; use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\User; use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Traits\CourseTrait; use Chamilo\CoreBundle\Traits\CourseTrait;

@ -4,8 +4,8 @@
namespace Chamilo\CourseBundle\Entity; namespace Chamilo\CourseBundle\Entity;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceInterface; use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CourseBundle\Traits\ShowCourseResourcesInSessionTrait; use Chamilo\CourseBundle\Traits\ShowCourseResourcesInSessionTrait;
use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\Event\LifecycleEventArgs;

@ -5,8 +5,8 @@
namespace Chamilo\CourseBundle\Entity; namespace Chamilo\CourseBundle\Entity;
use APY\DataGridBundle\Grid\Mapping as GRID; use APY\DataGridBundle\Grid\Mapping as GRID;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceInterface; use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\Tool; use Chamilo\CoreBundle\Entity\Tool;

@ -4,8 +4,8 @@
namespace Chamilo\CourseBundle\Repository; namespace Chamilo\CourseBundle\Repository;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\User; use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Repository\ResourceRepository; use Chamilo\CoreBundle\Repository\ResourceRepository;
use Chamilo\CourseBundle\Entity\CForumPost; use Chamilo\CourseBundle\Entity\CForumPost;

@ -4,8 +4,8 @@
namespace Chamilo\CourseBundle\Repository; namespace Chamilo\CourseBundle\Repository;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\AbstractResource; use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceNode; use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\User; use Chamilo\CoreBundle\Entity\User;

@ -162,31 +162,3 @@ services:
$className: 'Chamilo\CourseBundle\Entity\CTool' $className: 'Chamilo\CourseBundle\Entity\CTool'
# Event Listeners # Event Listeners
chamilo_course.listener.course:
class: Chamilo\CourseBundle\EventListener\CourseListener
calls:
- [setContainer, ['@service_container']]
tags:
- {name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 6}
- {name: kernel.event_listener, event: kernel.response, method: onKernelResponse}
- {name: kernel.event_listener, event: kernel.controller, method: onKernelController}
# Sets the user access in a course listener
chamilo_course.listener.course_access:
class: Chamilo\CourseBundle\EventListener\CourseAccessListener
arguments:
- '@doctrine.orm.entity_manager'
calls:
- [setRequest, ['@request_stack']]
tags:
- {name: kernel.event_listener, event: chamilo_course.course.access, method: onCourseAccessEvent}
# Sets the user access in a course session listener
chamilo_course.listener.session_access:
class: Chamilo\CourseBundle\EventListener\SessionAccessListener
arguments:
- '@doctrine.orm.entity_manager'
calls:
- [setRequest, ['@request_stack']]
tags:
- {name: kernel.event_listener, event: chamilo_course.course.session, method: onSessionAccessEvent}

@ -439,17 +439,6 @@ $users[] = [
'creator_id' => 1, 'creator_id' => 1,
'active' => 1, 'active' => 1,
]; ];
$users[] = [
'username' => 'mdolata',
'pass' => 'mdolata',
'firstname' => 'Małgorzata',
'lastname' => 'Summer',
'status' => 5,
'auth_source' => 'platform',
'email' => 'mdolata@example.com',
'creator_id' => 1,
'active' => 1,
];
$users[] = [ $users[] = [
'username' => 'adaniel', 'username' => 'adaniel',
'pass' => 'adaniel', 'pass' => 'adaniel',

@ -3,11 +3,11 @@
use Chamilo\CourseBundle\Entity\CDocument; use Chamilo\CourseBundle\Entity\CDocument;
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CoreBundle\Entity\Resource\ResourceNode; use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\Entity\Resource\ResourceLink; use Chamilo\CoreBundle\Entity\ResourceLink;
use Chamilo\CoreBundle\Entity\Resource\ResourceFile; use Chamilo\CoreBundle\Entity\ResourceFile;
use Chamilo\CoreBundle\Entity\Resource\ResourceType; use Chamilo\CoreBundle\Entity\ResourceType;
use Chamilo\CoreBundle\Entity\Resource\ResourceRight; use Chamilo\CoreBundle\Entity\ResourceRight;
use Chamilo\MediaBundle\Entity\Media; use Chamilo\MediaBundle\Entity\Media;
use Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter; use Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter;
@ -47,7 +47,7 @@ $sql = "SELECT
$result = Database::query($sql); $result = Database::query($sql);
$em = Database::getManager(); $em = Database::getManager();
$resourceType = $em->getRepository('ChamiloCoreBundle:Resource\ResourceType')->findOneBy(['name' => 'document']); $resourceType = $em->getRepository('ChamiloCoreBundle:ResourceType')->findOneBy(['name' => 'document']);
$coursePath = api_get_path(SYS_PATH).'app/courses/'; $coursePath = api_get_path(SYS_PATH).'app/courses/';
$mediaManager = Container::$container->get('sonata.media.manager.media'); $mediaManager = Container::$container->get('sonata.media.manager.media');
$documentManager = $em->getRepository('ChamiloCourseBundle:CDocument'); $documentManager = $em->getRepository('ChamiloCourseBundle:CDocument');

Loading…
Cancel
Save