Internal - Fix delete course

pull/3464/head
Julio Montoya 5 years ago
parent 3681fe3881
commit 964714fafb
  1. 3
      public/main/admin/course_list.php
  2. 7
      public/main/inc/lib/course.lib.php
  3. 16
      src/CourseBundle/Entity/CQuiz.php
  4. 5
      src/CourseBundle/Entity/CQuizQuestion.php
  5. 4
      src/CourseBundle/Entity/CQuizRelQuestion.php
  6. 17
      src/CourseBundle/Repository/CQuizRepository.php

@ -355,6 +355,7 @@ if (isset($_POST['action'])) {
Display::addFlash(Display::return_message(get_lang('Deleted')));
}
api_location(api_get_self());
break;
}
@ -424,6 +425,8 @@ if (isset($_GET['search']) && 'advanced' === $_GET['search']) {
if ($result) {
Display::addFlash(Display::return_message(get_lang('Deleted')));
}
api_location(api_get_self());
}
// Create a search-box
$form = new FormValidator(

@ -2391,10 +2391,6 @@ class CourseManager
* course.
*
* @param string $code The code of the course to delete
*
* @todo When deleting a virtual course: unsubscribe users from that virtual
* course from the groups in the real course if they are not subscribed in
* that real course.
*/
public static function delete_course($code)
{
@ -2586,6 +2582,9 @@ class CourseManager
$appPlugin = new AppPlugin();
$appPlugin->performActionsWhenDeletingItem('course', $courseId);
$repo = Container::getQuizRepository();
$repo->deleteAllByCourse($courseEntity);
// Delete the course from the database
$repo = Container::getCourseRepository();
$repo->deleteCourse($courseEntity);

@ -259,9 +259,9 @@ class CQuiz extends AbstractResource implements ResourceInterface
/**
* @var CQuizRelQuestion[]|ArrayCollection
*
* @ORM\OneToMany(targetEntity="Chamilo\CourseBundle\Entity\CQuizRelQuestion", mappedBy="quiz"))
* @ORM\OneToMany(targetEntity="Chamilo\CourseBundle\Entity\CQuizRelQuestion", mappedBy="quiz", cascade={"persist"}, orphanRemoval=true))
*/
protected $quizRelQuestions;
protected $questions;
/**
* CQuiz constructor.
@ -286,7 +286,7 @@ class CQuiz extends AbstractResource implements ResourceInterface
$this->reviewAnswers = 0;
$this->randomByCategory = 0;
$this->displayCategoryName = 0;
$this->quizRelQuestions = new ArrayCollection();
$this->questions = new ArrayCollection();
}
public function __toString(): string
@ -294,6 +294,14 @@ class CQuiz extends AbstractResource implements ResourceInterface
return $this->getTitle();
}
/**
* @return CQuizRelQuestion[]|ArrayCollection
*/
public function getQuestions()
{
return $this->questions;
}
/**
* Set title.
*
@ -972,7 +980,7 @@ class CQuiz extends AbstractResource implements ResourceInterface
public function getMaxScore(): int
{
$maxScore = 0;
foreach ($this->quizRelQuestions as $relQuestion) {
foreach ($this->questions as $relQuestion) {
$maxScore += $relQuestion->getQuestion()->getPonderation();
}

@ -124,6 +124,11 @@ class CQuizQuestion extends AbstractResource implements ResourceInterface
*/
protected $categories;
/**
* @ORM\OneToMany(targetEntity="Chamilo\CourseBundle\Entity\CQuizRelQuestion", mappedBy="question", cascade={"persist"})
*/
protected $relQuizzes;
/**
* CQuizQuestion constructor.
*/

@ -47,7 +47,7 @@ class CQuizRelQuestion
/**
* @var CQuizQuestion
*
* @ORM\ManyToOne(targetEntity="Chamilo\CourseBundle\Entity\CQuizQuestion", inversedBy="relQuiz")
* @ORM\ManyToOne(targetEntity="CQuizQuestion", inversedBy="relQuizzes", cascade={"persist"})
* @ORM\JoinColumn(name="question_id", referencedColumnName="iid")
*/
protected $question;
@ -55,7 +55,7 @@ class CQuizRelQuestion
/**
* @var CQuiz
*
* @ORM\ManyToOne(targetEntity="CQuiz", inversedBy="relQuestions")
* @ORM\ManyToOne(targetEntity="CQuiz", inversedBy="questions", cascade={"persist"})
* @ORM\JoinColumn(name="exercice_id", referencedColumnName="iid")
*/
protected $quiz;

@ -7,6 +7,7 @@ namespace Chamilo\CourseBundle\Repository;
use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Repository\ResourceRepository;
use Chamilo\CoreBundle\Repository\ResourceWithLinkInterface;
use Chamilo\CourseBundle\Entity\CQuiz;
use Symfony\Component\Routing\RouterInterface;
/**
@ -23,4 +24,20 @@ final class CQuizRepository extends ResourceRepository implements ResourceWithLi
return $router->generate('legacy_main', $params);
}
public function deleteAllByCourse($course)
{
$qb = $this->getResourcesByCourse($course);
$resources = $qb->getQuery()->getResult();
/** @var CQuiz $quiz */
foreach ($resources as $quiz) {
$questions = $quiz->getQuestions();
foreach ($questions as $question) {
//$this->getEntityManager()->remove($question);
}
$this->getEntityManager()->remove($quiz);
}
$this->getEntityManager()->flush();
}
}

Loading…
Cancel
Save