Shortcut - Fix addShortCut + add tests

pull/4037/head
Julio 4 years ago
parent f57a216dcd
commit 2863a766c5
  1. 3
      public/main/exercise/exercise.php
  2. 6
      public/main/lp/learnpath.class.php
  3. 14
      src/CourseBundle/Entity/CQuizQuestionCategory.php
  4. 38
      src/CourseBundle/Repository/CShortcutRepository.php
  5. 8
      src/LtiBundle/Controller/CourseController.php
  6. 4
      tests/CourseBundle/Repository/CCourseSettingRepositoryTest.php
  7. 1
      tests/CourseBundle/Repository/CExerciseCategoryRepositoryTest.php
  8. 3
      tests/CourseBundle/Repository/CForumThreadRepositoryTest.php
  9. 49
      tests/CourseBundle/Repository/CLpItemRepositoryTest.php
  10. 39
      tests/CourseBundle/Repository/CQuizQuestionCategoryRepositoryTest.php
  11. 41
      tests/CourseBundle/Repository/CQuizQuestionRepositoryTest.php
  12. 66
      tests/CourseBundle/Repository/CShortcutRepositoryTest.php

@ -89,7 +89,8 @@ if ($is_allowedToEdit && !empty($action)) {
case 'add_shortcut':
$repo = Container::getShortcutRepository();
$courseEntity = api_get_course_entity(api_get_course_int_id());
$repo->addShortCut($exerciseEntity, $courseEntity, $courseEntity, api_get_session_entity());
$user = api_get_user_entity();
$repo->addShortCut($exerciseEntity, $user, $courseEntity, api_get_session_entity());
Display::addFlash(Display::return_message(get_lang('Updated')));

@ -3282,10 +3282,8 @@ class learnpath
return false;
}
$repoShortcut = Container::getShortcutRepository();
$courseEntity = api_get_course_entity();
if ($addShortcut) {
$repoShortcut->addShortCut($lp, $courseEntity, $courseEntity, api_get_session_entity());
$repoShortcut->addShortCut($lp, api_get_user_entity(), api_get_course_entity(), api_get_session_entity());
} else {
$repoShortcut->removeShortCut($lp);
}
@ -3320,7 +3318,7 @@ class learnpath
$repoShortcut = Container::getShortcutRepository();
if ($addShortcut) {
$courseEntity = api_get_course_entity(api_get_course_int_id());
$repoShortcut->addShortCut($category, $courseEntity, $courseEntity, api_get_session_entity());
$repoShortcut->addShortCut($category, api_get_user_entity(), $courseEntity, api_get_session_entity());
} else {
$repoShortcut->removeShortCut($category);
}

@ -11,13 +11,10 @@ use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\ResourceShowCourseResourcesInSessionInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* CQuizQuestionCategory.
*
* @ORM\Table(
* name="c_quiz_question_category",
* indexes={
@ -116,17 +113,6 @@ class CQuizQuestionCategory extends AbstractResource implements ResourceInterfac
return $this->description;
}
/**
* @ORM\PostPersist()
*/
public function postPersist(LifecycleEventArgs $args): void
{
// Update id with iid value
/*$em = $args->getEntityManager();
$em->persist($this);
$em->flush();*/
}
/**
* @return Collection|CQuizQuestion[]
*/

@ -9,12 +9,10 @@ namespace Chamilo\CourseBundle\Repository;
use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Repository\ResourceRepository;
use Chamilo\CourseBundle\Entity\CGroup;
use Chamilo\CourseBundle\Entity\CShortcut;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
final class CShortcutRepository extends ResourceRepository
@ -24,7 +22,7 @@ final class CShortcutRepository extends ResourceRepository
parent::__construct($registry, CShortcut::class);
}
public function getShortcutFromResource(AbstractResource $resource): ?CShortcut
public function getShortcutFromResource(ResourceInterface $resource): ?CShortcut
{
$criteria = [
'shortCutNode' => $resource->getResourceNode(),
@ -33,16 +31,16 @@ final class CShortcutRepository extends ResourceRepository
return $this->findOneBy($criteria);
}
public function addShortCut(AbstractResource $resource, ResourceInterface $parent, Course $course, Session $session = null): CShortcut
public function addShortCut(ResourceInterface $resource, User $user, Course $course, Session $session = null): CShortcut
{
$shortcut = $this->getShortcutFromResource($resource);
if (null === $shortcut) {
$shortcut = new CShortcut();
$shortcut
$shortcut = (new CShortcut())
->setName($resource->getResourceName())
->setShortCutNode($resource->getResourceNode())
->setParent($parent)
->setCreator($user)
->setParent($course)
->addCourseLink($course, $session)
;
@ -52,7 +50,7 @@ final class CShortcutRepository extends ResourceRepository
return $shortcut;
}
public function removeShortCut(AbstractResource $resource): bool
public function removeShortCut(ResourceInterface $resource): bool
{
$em = $this->getEntityManager();
$shortcut = $this->getShortcutFromResource($resource);
@ -65,26 +63,4 @@ final class CShortcutRepository extends ResourceRepository
return false;
}
/*public function getResources(ResourceNode $parentNode, Course $course = null, Session $session = null, CGroup $group = null): QueryBuilder
{
$qb = $this->createQueryBuilder('resource')
->select('resource')
//->from($className, 'resource')
->innerJoin(
'resource.resourceNode',
'node'
)
->leftJoin('node.resourceFile', 'file')
//->innerJoin('node.resourceLinks', 'links')
//->where('node.resourceType = :type')
//->setParameter('type',$type)
;
if (null !== $parentNode) {
$qb->andWhere('node.parent = :parentNode');
$qb->setParameter('parentNode', $parentNode);
}
return $qb;
}*/
}

@ -467,9 +467,11 @@ class CourseController extends ToolBaseController
$em->flush();
$this->addFlash('success', $this->trans('External tool added'));
/** @var User $user */
$user = $this->getUser();
if (!$externalTool->isActiveDeepLinking()) {
$this->shortcutRepository->addShortCut($externalTool, $course, $course);
$this->shortcutRepository->addShortCut($externalTool, $user, $course);
return $this->redirectToRoute(
'chamilo_core_course_home',
@ -788,7 +790,9 @@ class CourseController extends ToolBaseController
$em->persist($newTool);
$em->flush();
$this->shortcutRepository->addShortCut($newTool, $course, $course);
/** @var User $user */
$user = $this->getUser();
$this->shortcutRepository->addShortCut($newTool, $user, $course);
return $newTool;
}

@ -28,6 +28,10 @@ class CCourseSettingRepositoryTest extends AbstractApiTest
->setTitle('test')
->setVariable('test')
->setCategory('cat')
->setSubkey('subkey')
->setType('type')
->setComment('comment')
->setSubkeytext('text')
->setCId($courseId)
;
$this->assertHasNoEntityViolations($item);

@ -36,5 +36,6 @@ class CExerciseCategoryRepositoryTest extends AbstractApiTest
$this->assertSame('cat', (string) $item);
$this->assertSame(1, $repo->count([]));
$this->assertCount(1, $repo->getCategories($course->getId()));
}
}

@ -57,6 +57,9 @@ class CForumThreadRepositoryTest extends AbstractApiTest
$forum = $forumRepo->find($forum->getIid());
$this->assertSame('thread title', (string) $thread);
$qb = $threadRepo->findAllByCourse($course);
$this->assertCount(1, $qb->getQuery()->getResult());
$this->assertSame(1, $threadRepo->count([]));
$this->assertSame(1, $forumRepo->count([]));
$this->assertSame(1, $forum->getThreads()->count());

@ -8,6 +8,8 @@ namespace Chamilo\Tests\CourseBundle\Repository;
use Chamilo\CourseBundle\Entity\CLp;
use Chamilo\CourseBundle\Entity\CLpItem;
use Chamilo\CourseBundle\Entity\CLpItemView;
use Chamilo\CourseBundle\Entity\CLpView;
use Chamilo\CourseBundle\Repository\CLpItemRepository;
use Chamilo\CourseBundle\Repository\CLpRepository;
use Chamilo\Tests\AbstractApiTest;
@ -24,6 +26,7 @@ class CLpItemRepositoryTest extends AbstractApiTest
$course = $this->createCourse('new');
$teacher = $this->createUser('teacher');
$student = $this->createUser('student');
$lp = (new CLp())
->setName('lp')
@ -42,12 +45,58 @@ class CLpItemRepositoryTest extends AbstractApiTest
->setDescription('lp')
->setTitle('lp item')
->setRef('ref')
->setMinScore(100)
->setMaxScore(100)
->setMasteryScore(100)
->setPreviousItemId(0)
->setNextItemId(0)
->setDisplayOrder(1)
->setPrerequisite('')
->setParameters('')
->setLaunchData('')
->setMaxTimeAllowed('100')
->setTerms('')
->setSearchDid(0)
->setAudio('')
->setPrerequisiteMinScore(100)
->setPrerequisiteMaxScore(100)
->setParent(null)
->setLvl(0)
->setLp($lp)
->setItemType('document')
;
$this->assertHasNoEntityViolations($lpItem);
$lpItemRepo->create($lpItem);
$em = $this->getEntityManager();
$view = (new CLpView())
->setUser($student)
->setViewCount(1)
->setLastItem(0)
->setLp($lp)
->setProgress(0)
->setCourse($course)
->setSession(null)
;
$em->persist($view);
$itemView = (new CLpItemView())
->setStatus('ok')
->setCoreExit('exit')
->setItem($lpItem)
->setLessonLocation('')
->setMaxScore('100')
->setScore(100)
->setStartTime(time())
->setSuspendData('')
->setTotalTime(100)
->setView($view)
->setViewCount(1)
;
$em->persist($itemView);
$em->flush();
$this->assertSame(1, $lp->getItems()->count());
$this->assertSame('lp', (string) $lp);
$this->assertNotEmpty((string) $lpItem);

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\Tests\CourseBundle\Repository;
use Chamilo\CourseBundle\Entity\CQuizQuestionCategory;
use Chamilo\CourseBundle\Repository\CQuizQuestionCategoryRepository;
use Chamilo\Tests\AbstractApiTest;
use Chamilo\Tests\ChamiloTestTrait;
class CQuizQuestionCategoryRepositoryTest extends AbstractApiTest
{
use ChamiloTestTrait;
public function testCreate(): void
{
$categoryRepo = self::getContainer()->get(CQuizQuestionCategoryRepository::class);
$course = $this->createCourse('new');
$teacher = $this->createUser('teacher');
$category = (new CQuizQuestionCategory())
->setTitle('category')
->setDescription('desc')
->setParent($course)
->setCreator($teacher)
;
$this->assertHasNoEntityViolations($category);
$categoryRepo->create($category);
$category = $categoryRepo->find($category->getIid());
$this->assertSame(0, $category->getQuestions()->count());
$this->assertSame(1, $categoryRepo->count([]));
}
}

@ -7,7 +7,9 @@ declare(strict_types=1);
namespace Chamilo\Tests\CourseBundle\Repository;
use Chamilo\CourseBundle\Entity\CQuiz;
use Chamilo\CourseBundle\Entity\CQuizAnswer;
use Chamilo\CourseBundle\Entity\CQuizQuestion;
use Chamilo\CourseBundle\Entity\CQuizQuestionCategory;
use Chamilo\CourseBundle\Entity\CQuizRelQuestion;
use Chamilo\CourseBundle\Repository\CQuizQuestionRepository;
use Chamilo\Tests\AbstractApiTest;
@ -20,7 +22,7 @@ class CQuizQuestionRepositoryTest extends AbstractApiTest
public function testCreate(): void
{
$em = $this->getEntityManager();
$repo = self::getContainer()->get(CQuizQuestionRepository::class);
$questionRepo = self::getContainer()->get(CQuizQuestionRepository::class);
$course = $this->createCourse('new');
$teacher = $this->createUser('teacher');
@ -32,6 +34,13 @@ class CQuizQuestionRepositoryTest extends AbstractApiTest
;
$em->persist($exercise);
$category = (new CQuizQuestionCategory())
->setTitle('category')
->setParent($course)
->setCreator($teacher)
;
$em->persist($category);
$question = (new CQuizQuestion())
->setQuestionCode('code')
->setQuestion('question')
@ -42,10 +51,15 @@ class CQuizQuestionRepositoryTest extends AbstractApiTest
->setLevel(1)
->setPonderation(100)
->setPosition(1)
->setPicture('')
->setParent($course)
->addCourseLink($course)
->setCreator($teacher)
;
$question->addCategory($category);
$question->updateCategory($category);
$em->persist($question);
$quizRelQuestion = (new CQuizRelQuestion())
@ -57,8 +71,29 @@ class CQuizQuestionRepositoryTest extends AbstractApiTest
$em->flush();
$answer = (new CQuizAnswer())
->setComment('comment')
->setQuestion($question)
->setPosition(1)
->setAnswer('answer')
->setAnswerCode('answer')
->setDestination('')
->setCorrect(1)
->setHotspotCoordinates('')
->setHotspotType('')
->setPonderation(100)
;
$em->persist($answer);
$em->flush();
$em->clear();
$question = $questionRepo->find($question->getIid());
$this->assertSame(1, $question->getAnswers()->count());
$this->assertSame(1, $exercise->getQuestions()->count());
$this->assertSame(1, $repo->count([]));
$this->assertSame('', $repo->getHotSpotImageUrl($question));
$this->assertSame(1, $questionRepo->count([]));
$this->assertSame(1, $quizRelQuestion->getQuestionOrder());
$this->assertSame('', $questionRepo->getHotSpotImageUrl($question));
$this->assertSame(1, $question->getCategories()->count());
}
}

@ -0,0 +1,66 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\Tests\CourseBundle\Repository;
use Chamilo\CourseBundle\Entity\CForum;
use Chamilo\CourseBundle\Entity\CShortcut;
use Chamilo\CourseBundle\Repository\CForumRepository;
use Chamilo\CourseBundle\Repository\CShortcutRepository;
use Chamilo\Tests\AbstractApiTest;
use Chamilo\Tests\ChamiloTestTrait;
class CShortcutRepositoryTest extends AbstractApiTest
{
use ChamiloTestTrait;
public function testCreate(): void
{
$em = $this->getEntityManager();
$shortcutRepo = self::getContainer()->get(CShortcutRepository::class);
$forumRepo = self::getContainer()->get(CForumRepository::class);
$course = $this->createCourse('new');
$teacher = $this->createUser('teacher');
$resource = (new CForum())
->setForumTitle('forum')
->setParent($course)
->setCreator($teacher)
->addCourseLink($course)
;
$em->persist($resource);
$em->flush();
$shortcut = (new CShortcut())
->setName($resource->getResourceName())
->setShortCutNode($resource->getResourceNode())
->setCreator($teacher)
->setParent($resource)
->addCourseLink($course)
;
$this->assertHasNoEntityViolations($shortcut);
$em->persist($shortcut);
$em->flush();
$this->assertSame(1, $shortcutRepo->count([]));
$this->assertSame($resource->getResourceName(), (string) $shortcut);
$this->assertNotNull($shortcut->getUrl());
$this->assertNotNull($shortcut->getTool());
$shortcut = $shortcutRepo->getShortcutFromResource($resource);
$this->assertInstanceOf(CShortcut::class, $shortcut);
$shortcutRepo->removeShortCut($resource);
$this->assertSame(0, $shortcutRepo->count([]));
$this->assertSame(1, $forumRepo->count([]));
$shortcutRepo->addShortCut($resource, $teacher, $course);
$this->assertSame(1, $shortcutRepo->count([]));
}
}
Loading…
Cancel
Save