Forums: Fix LP association

pull/3984/head
Julio 4 years ago
parent 2338dd1ddd
commit fca6239656
  1. 1
      src/CoreBundle/Repository/ResourceRepository.php
  2. 26
      src/CourseBundle/Entity/CLp.php
  3. 22
      src/CourseBundle/Entity/CLpItem.php
  4. 13
      src/CourseBundle/Repository/CForumCategoryRepository.php
  5. 11
      src/CourseBundle/Repository/CForumThreadRepository.php
  6. 19
      src/CourseBundle/Repository/CLpRepository.php
  7. 8
      tests/CourseBundle/Repository/CForumCategoryRepositoryTest.php
  8. 5
      tests/CourseBundle/Repository/CForumThreadRepositoryTest.php
  9. 1
      tests/CourseBundle/Repository/CLpItemRepositoryTest.php
  10. 47
      tests/CourseBundle/Repository/CLpRepositoryTest.php

@ -224,7 +224,6 @@ abstract class ResourceRepository extends ServiceEntityRepository
public function getResourceType(): ResourceType
{
$resourceTypeName = $this->toolChain->getResourceTypeNameByEntity($this->getClassName());
$repo = $this->getEntityManager()->getRepository(ResourceType::class);
return $repo->findOneBy([

@ -207,9 +207,11 @@ class CLp extends AbstractResource implements ResourceInterface
protected Collection $items;
/**
* @var Collection|CForum[]
*
* @ORM\OneToMany(targetEntity="CForum", mappedBy="lp", cascade={"persist", "remove"})
*/
protected ?CForum $forum = null;
protected Collection $forums;
/**
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Asset", cascade={"persist", "remove"})
@ -247,6 +249,7 @@ class CLp extends AbstractResource implements ResourceInterface
$this->useMaxScore = 1;
$this->theme = '';
$this->items = new ArrayCollection();
$this->forums = new ArrayCollection();
}
public function __toString(): string
@ -757,19 +760,22 @@ class CLp extends AbstractResource implements ResourceInterface
return $this;
}
public function getForum(): ?CForum
{
return $this->forum;
}
public function hasForum(): bool
/**
* @return ArrayCollection|Collection|CForum[]
*/
public function getForums()
{
return null !== $this->forum;
return $this->forums;
}
public function setForum(CForum $forum): self
/**
* @param ArrayCollection|Collection $forums
*
* @return CLp
*/
public function setForums($forums): self
{
$this->forum = $forum;
$this->forums = $forums;
return $this;
}

@ -48,6 +48,7 @@ class CLpItem
/**
* @ORM\Column(name="ref", type="text", nullable=false)
*/
#[Assert\NotBlank]
protected string $ref;
/**
@ -205,12 +206,7 @@ class CLpItem
return $this;
}
/**
* Get itemType.
*
* @return string
*/
public function getItemType()
public function getItemType(): string
{
return $this->itemType;
}
@ -222,12 +218,7 @@ class CLpItem
return $this;
}
/**
* Get ref.
*
* @return string
*/
public function getRef()
public function getRef(): string
{
return $this->ref;
}
@ -239,12 +230,7 @@ class CLpItem
return $this;
}
/**
* Get title.
*
* @return string
*/
public function getTitle()
public function getTitle(): string
{
return $this->title;
}

@ -23,6 +23,19 @@ class CForumCategoryRepository extends ResourceRepository
parent::__construct($registry, CForumCategory::class);
}
public function getForumCategoryByTitle(string $title, Course $course, Session $session = null): ?CForumCategory
{
/** @var CForumCategory|null $result */
$result = $this->findCourseResourceByTitle(
$title,
$course->getResourceNode(),
$course,
$session
);
return $result;
}
/*public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroup $group = null): QueryBuilder
{
return $this->getResourcesByCourse($course, $session, $group, $parentNode);

@ -21,6 +21,17 @@ class CForumThreadRepository extends ResourceRepository
parent::__construct($registry, CForumThread::class);
}
public function getForumThread(string $title, Course $course, Session $session = null): ?CForumThread
{
$qb = $this->getResourcesByCourse($course, $session);
$qb
->andWhere('resource.threadTitle = :title')
->setParameter('title', $title)
;
return $qb->getQuery()->getOneOrNullResult();
}
public function findAllByCourse(
Course $course,
Session $session = null,

@ -11,6 +11,7 @@ use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Repository\ResourceRepository;
use Chamilo\CoreBundle\Repository\ResourceWithLinkInterface;
use Chamilo\CourseBundle\Entity\CForum;
use Chamilo\CourseBundle\Entity\CLp;
use Chamilo\CourseBundle\Entity\CLpItem;
use Doctrine\ORM\QueryBuilder;
@ -41,6 +42,24 @@ final class CLpRepository extends ResourceRepository implements ResourceWithLink
$this->create($lp);
}
public function findForumByCourse(CLp $lp, Course $course, Session $session = null): ?CForum
{
$forums = $lp->getForums();
$result = null;
foreach ($forums as $forum) {
$links = $forum->getResourceNode()->getResourceLinks();
foreach ($links as $link) {
if ($link->getCourse() === $course && $link->getSession() === $session) {
$result = $forum;
break 2;
}
}
}
return $result;
}
public function findAllByCourse(
Course $course,
Session $session = null,

@ -28,20 +28,22 @@ class CForumCategoryRepositoryTest extends AbstractApiTest
$teacher = $this->createUser('teacher');
$category = (new CForumCategory())
->setCatTitle('cat')
->setCatTitle('cat 1')
->setParent($course)
->setCreator($teacher)
->addCourseLink($course)
;
$this->assertHasNoEntityViolations($category);
$categoryRepo->create($category);
$this->assertSame('cat', (string) $category);
$this->assertSame('cat 1', (string) $category);
$forum = (new CForum())
->setForumTitle('forum')
->setParent($course)
->setCreator($teacher)
->setForumCategory($category)
->addCourseLink($course)
;
$forumRepo->create($forum);
@ -51,6 +53,8 @@ class CForumCategoryRepositoryTest extends AbstractApiTest
$this->assertSame(1, $categoryRepo->count([]));
$this->assertSame(1, $forumRepo->count([]));
$this->assertNotNull($categoryRepo->getForumCategoryByTitle('cat 1', $course));
$categoryRepo->delete($category);
$this->assertSame(0, $categoryRepo->count([]));

@ -30,6 +30,7 @@ class CForumThreadRepositoryTest extends AbstractApiTest
->setForumTitle('forum')
->setParent($course)
->setCreator($teacher)
->addCourseLink($course)
;
$forumRepo->create($forum);
@ -38,6 +39,7 @@ class CForumThreadRepositoryTest extends AbstractApiTest
->setForum($forum)
->setParent($course)
->setCreator($teacher)
->addCourseLink($course)
;
$threadRepo->create($thread);
@ -49,9 +51,10 @@ class CForumThreadRepositoryTest extends AbstractApiTest
$this->assertSame(1, $forumRepo->count([]));
$this->assertSame(1, $forum->getThreads()->count());
$this->assertNull($threadRepo->getForumThread('title', $course));
$this->assertSame(0, $thread->getThreadViews());
$threadRepo->increaseView($thread);
$this->assertSame(1, $thread->getThreadViews());
$forumRepo->delete($forum);

@ -51,6 +51,7 @@ class CLpItemRepositoryTest extends AbstractApiTest
$this->assertSame(1, $lp->getItems()->count());
$this->assertSame('lp', (string) $lp);
$this->assertNotEmpty((string) $lpItem);
$this->assertSame(1, $lpRepo->count([]));
$this->assertSame(2, $lpItemRepo->count([]));
}

@ -6,7 +6,9 @@ declare(strict_types=1);
namespace Chamilo\Tests\CourseBundle\Repository;
use Chamilo\CourseBundle\Entity\CForum;
use Chamilo\CourseBundle\Entity\CLp;
use Chamilo\CourseBundle\Repository\CForumRepository;
use Chamilo\CourseBundle\Repository\CLpRepository;
use Chamilo\Tests\AbstractApiTest;
use Chamilo\Tests\ChamiloTestTrait;
@ -59,6 +61,51 @@ class CLpRepositoryTest extends AbstractApiTest
$this->assertSame('/main/lp/lp_controller.php?lp_id='.$lp->getIid().'&action=view', $link);
}
public function testCreateWithForum(): void
{
self::bootKernel();
$lpRepo = self::getContainer()->get(CLpRepository::class);
$forumRepo = self::getContainer()->get(CForumRepository::class);
$course = $this->createCourse('new');
$course2 = $this->createCourse('new2');
$teacher = $this->createUser('teacher');
$forum = (new CForum())
->setForumTitle('forum')
->setParent($course)
->setCreator($teacher)
->addCourseLink($course)
;
$forumRepo->create($forum);
$forum2 = (new CForum())
->setForumTitle('forum2')
->setParent($course2)
->setCreator($teacher)
->addCourseLink($course)
;
$forumRepo->create($forum2);
$lp = (new CLp())
->setName('lp')
->setParent($course)
->setCreator($teacher)
->setLpType(CLp::LP_TYPE)
->addCourseLink($course)
;
$lp->getForums()->add($forum);
$lp->getForums()->add($forum2);
$lpRepo->createLp($lp);
$this->assertSame(2, $lp->getForums()->count());
$forum = $lpRepo->findForumByCourse($lp, $course);
$this->assertNotNull($forum);
}
public function testFindAllByCourse(): void
{
self::bootKernel();

Loading…
Cancel
Save