WIP: Course: Fix course edit

pull/3466/head
lcubas 5 years ago
parent 357f5b7c44
commit 82107f5a88
  1. 20
      public/main/admin/course_edit.php
  2. 11
      src/CoreBundle/Entity/Course.php
  3. 37
      src/CoreBundle/Repository/CourseCategoryRepository.php

@ -6,6 +6,7 @@ use Chamilo\CoreBundle\Entity\CourseCategory;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Repository\CourseCategoryRepository;
use Chamilo\CoreBundle\Repository\CourseRepository;
use Chamilo\CoreBundle\Framework\Container;
$cidReset = true;
@ -16,7 +17,7 @@ api_protect_admin_script();
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$em = Database::getManager();
$courseCategoriesRepo = $em->getRepository('ChamiloCoreBundle:CourseCategory');
$courseCategoriesRepo = Container::getCourseCategoryRepository();
$urlId = api_get_current_access_url_id();
@ -362,25 +363,14 @@ if ($form->validate()) {
$em->persist($courseEntity);
$em->flush();
// Updating course categories
$courseCategoriesRepo->updateCourseRelCategoryByCourse($courseEntity, $course);
// update the extra fields
$courseFieldValue = new ExtraFieldValue('course');
$courseFieldValue->saveFieldValues($course);
$addTeacherToSessionCourses = isset($course['add_teachers_to_sessions_courses']) && !empty($course['add_teachers_to_sessions_courses']) ? 1 : 0;
// Updating categories
if (isset($course['course_categories'])) {
$courseId = $courseInfo['real_id'];
$sqlDeleteBeforeUpdateCategories = "DELETE FROM $tbl_course_rel_category
WHERE course_id = " . $courseInfo['real_id'];
Database::query($sqlDeleteBeforeUpdateCategories);
foreach ($course['course_categories'] as $categoryId) {
$sqlUpdateCategories = "INSERT INTO $tbl_course_rel_category (course_id, course_category_id)
VALUES($courseId, $categoryId)";
Database::query($sqlUpdateCategories);
}
}
// Updating teachers
if ($addTeacherToSessionCourses) {
foreach ($coursesInSession as $session) {

@ -238,7 +238,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
* @ORM\JoinTable(
* name="course_rel_category",
* joinColumns={@ORM\JoinColumn(name="course_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="course_category_id", referencedColumnName="id", unique=true)}
* inverseJoinColumns={@ORM\JoinColumn(name="course_category_id", referencedColumnName="id")}
* )
*/
protected $categories;
@ -782,9 +782,16 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
return $this->categories;
}
public function addCategory(CourseCategory $category)
public function addCategory(CourseCategory $category): self
{
$this->categories[] = $category;
return $this;
}
public function removeCategory(CourseCategory $category)
{
$this->categories->removeElement($category);
}
/**

@ -4,10 +4,12 @@
namespace Chamilo\CoreBundle\Repository;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\CourseCategory;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Class CCourseCategoryRepository.
@ -42,7 +44,7 @@ class CourseCategoryRepository extends ServiceEntityRepository
)
->where($qb->expr()->eq('a.url', $accessUrl))
->orderBy('c.treePos', 'ASC')
;
;
if ($allowBaseCategories) {
$qb->orWhere($qb->expr()->eq('a.url', 1));
@ -67,10 +69,9 @@ class CourseCategoryRepository extends ServiceEntityRepository
$qb = $this->createQueryBuilder('c');
$qb
->join('c.courses', 'a')
->where($qb->expr()->eq('a.id', $courseId))
->join('c.urls', 'b')
->where($qb->expr()->eq('b.url', $accessUrl))
->orderBy('c.treePos', 'ASC')
->where($qb->expr()->eq('a.id', $courseId))
->andWhere($qb->expr()->eq('b.url', $accessUrl))
;
if ($allowBaseCategories) {
@ -112,4 +113,32 @@ class CourseCategoryRepository extends ServiceEntityRepository
return (int) $count;
}
public function updateCourseRelCategoryByCourse(Course $course, $courseData)
{
$em = $this->getEntityManager();
// Remove current categories
foreach ($course->getCategories() as $category) {
$course->removeCategory($category);
}
$em->persist($course);
$em->flush();
// Add new categories
$courseCategories = new ArrayCollection();
if (isset($courseData['course_categories'])) {
foreach ($courseData['course_categories'] as $categoryId) {
$courseCategory = $this->find($categoryId);
$courseCategories->add($courseCategory);
}
}
$course->setCategories($courseCategories);
$em->persist($course);
$em->flush();
}
}

Loading…
Cancel
Save