Course description: Fix list in course

pull/3984/head
Angel Fernando Quiroz Campos 5 years ago
parent e118ea1697
commit b6b03a8ad7
  1. 65
      public/main/inc/lib/course_description.lib.php
  2. 19
      src/CourseBundle/Repository/CCourseDescriptionRepository.php
  3. 35
      tests/CourseBundle/Repository/CCourseDescriptionRepositoryTest.php

@ -96,33 +96,25 @@ class CourseDescription
$courseId = null,
$session_id = null
) {
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
$courseId = (int) $courseId;
$result = Container::getCourseDescriptionRepository()->findByTypeInCourse(
(int) $description_type,
api_get_course_entity($courseId),
api_get_session_entity($session_id),
api_get_group_entity()
);
if (empty($courseId)) {
$courseId = api_get_course_int_id();
if (empty($result)) {
return [];
}
if (!isset($session_id)) {
$session_id = $this->session_id;
}
$condition_session = api_get_session_condition($session_id);
$description_type = (int) $description_type;
$description = $result[0];
$sql = "SELECT * FROM $table
WHERE
description_type = '$description_type'
";
$rs = Database::query($sql);
$data = [];
if ($description = Database::fetch_array($rs)) {
$data['description_title'] = $description['title'];
$data['description_content'] = $description['content'];
$data['progress'] = $description['progress'];
$data['iid'] = $description['iid'];
}
return $data;
return [
'description_title' => $description->getTitle(),
'description_content' => $description->getContent(),
'progress' => $description->getProgress(),
'iid' => $description->getIid(),
];
}
/**
@ -134,28 +126,15 @@ class CourseDescription
*/
public function get_data_by_id($id, $course_code = '', $session_id = null)
{
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
$course_id = api_get_course_int_id();
$id = (int) $id;
if (!isset($session_id)) {
$session_id = $this->session_id;
}
$condition_session = api_get_session_condition($session_id);
if (!empty($course_code)) {
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
}
$description = Container::getCourseDescriptionRepository()->find($id);
$sql = "SELECT * FROM $table
WHERE iid='$id' ";
$rs = Database::query($sql);
$data = [];
if ($description = Database::fetch_array($rs)) {
$data['description_type'] = $description['description_type'];
$data['description_title'] = $description['title'];
$data['description_content'] = $description['content'];
$data['progress'] = $description['progress'];
if ($description) {
$data['description_type'] = $description->getDescriptionType();
$data['description_title'] = $description->getTitle();
$data['description_content'] = $description->getContent();
$data['progress'] = $description->getProgress();
}
return $data;

@ -6,8 +6,11 @@ declare(strict_types=1);
namespace Chamilo\CourseBundle\Repository;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Repository\ResourceRepository;
use Chamilo\CourseBundle\Entity\CCourseDescription;
use Chamilo\CourseBundle\Entity\CGroup;
use Doctrine\Persistence\ManagerRegistry;
final class CCourseDescriptionRepository extends ResourceRepository
@ -16,4 +19,20 @@ final class CCourseDescriptionRepository extends ResourceRepository
{
parent::__construct($registry, CCourseDescription::class);
}
public function findByTypeInCourse(int $type, Course $course, Session $session = null, CGroup $group = null)
{
$qb = $this->createQueryBuilder('d');
$qb
->innerJoin('d.resourceNode', 'node')
->innerJoin('node.resourceLinks', 'links')
->where('d.descriptionType = :type')
->setParameter('type', $type);
$this->addCourseSessionGroupQueryBuilder($course, $session, $group, $qb);
$query = $qb->getQuery();
return $query->getResult();
}
}

@ -40,4 +40,39 @@ class CCourseDescriptionRepositoryTest extends AbstractApiTest
$this->assertSame('title', (string) $item);
$this->assertSame(1, $repo->count([]));
}
public function testGetDescriptions(): void
{
self::bootKernel();
$repo = self::getContainer()->get(CCourseDescriptionRepository::class);
$em = $this->getEntityManager();
$course = $this->createCourse('Test');
$session = $this->createSession('Test Session');
$admin = $this->getUser('admin');
$item = (new CCourseDescription())
->setTitle('title')
->setContent('content')
->setDescriptionType(CCourseDescription::TYPE_DESCRIPTION)
->setProgress(100)
->setCreator($admin)
->setParent($course)
->addCourseLink($course)
;
$this->assertHasNoEntityViolations($item);
$em->persist($item);
$em->flush();
$descriptionsInCourse = $repo->findByTypeInCourse(CCourseDescription::TYPE_DESCRIPTION, $course);
$this->assertSame(1, count($descriptionsInCourse));
$descriptionsInSession = $repo->findByTypeInCourse(CCourseDescription::TYPE_DESCRIPTION, $course, $session);
$this->assertSame(1, count($descriptionsInSession));
}
}

Loading…
Cancel
Save