From 69739e2be6ebf0094f144c52b22a2749e3c0f926 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 31 Oct 2019 16:24:35 +0100 Subject: [PATCH] Add CQuizQuestion repository --- main/exercise/admin.php | 9 ------ main/exercise/exercise.class.php | 19 +++++++----- main/exercise/exercise_admin.php | 1 + main/exercise/question.class.php | 25 ++++++++-------- main/exercise/question_admin.inc.php | 2 -- src/CoreBundle/Framework/Container.php | 10 +++++++ .../Migrations/Schema/V200/Version20.php | 4 ++- src/CoreBundle/Resources/config/tools.yml | 2 +- src/CourseBundle/Entity/CQuizQuestion.php | 30 ++++++++++++++++++- .../Repository/CQuizQuestionRepository.php | 13 ++++++++ .../Resources/config/services.yml | 4 +++ 11 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 src/CourseBundle/Repository/CQuizQuestionRepository.php diff --git a/main/exercise/admin.php b/main/exercise/admin.php index efc8b27265..aad13e739c 100755 --- a/main/exercise/admin.php +++ b/main/exercise/admin.php @@ -118,15 +118,6 @@ if (isset($_REQUEST['convertAnswer'])) { $objAnswer = Session::read('objAnswer'); $_course = api_get_course_info(); -// document path -$documentPath = api_get_path(SYS_COURSE_PATH).$_course['path'].'/document'; - -// picture path -$picturePath = $documentPath.'/images'; - -// audio path -$audioPath = $documentPath.'/audio'; - // tables used in the exercise tool if (!empty($_GET['action']) && $_GET['action'] == 'exportqti2' && !empty($_GET['questionId'])) { require_once 'export/qti2/qti2_export.php'; diff --git a/main/exercise/exercise.class.php b/main/exercise/exercise.class.php index e5fe2c87a0..7ac4be1863 100755 --- a/main/exercise/exercise.class.php +++ b/main/exercise/exercise.class.php @@ -23,7 +23,7 @@ use Doctrine\DBAL\Types\Type; */ class Exercise { - const PAGINATION_ITEMS_PER_PAGE = 20; + public const PAGINATION_ITEMS_PER_PAGE = 20; public $iId; public $id; public $name; @@ -968,6 +968,7 @@ class Exercise if (!empty($questions_by_category)) { $newCategoryList = []; $em = Database::getManager(); + $repo = $em->getRepository('ChamiloCoreBundle:CQuizCategory'); foreach ($questions_by_category as $categoryId => $questionList) { $cat = new TestCategory(); @@ -987,7 +988,6 @@ class Exercise } else { $categoryEntity = $parentsLoaded[$cat['parent_id']]; } - $repo = $em->getRepository('ChamiloCoreBundle:CQuizCategory'); $path = $repo->getPath($categoryEntity); $index = 0; @@ -1527,6 +1527,7 @@ class Exercise $expired_time = (int) $this->expired_time; $repo = Container::getExerciseRepository(); + $courseEntity = api_get_course_entity($this->course_id); // Exercise already exists if ($id) { @@ -1690,7 +1691,7 @@ class Exercise Database::query($sql); $exercise = $repo->find($this->id); - $node = $repo->addResourceNode($exercise, api_get_user_entity(api_get_user_id())); + $node = $repo->addResourceNode($exercise, api_get_user_entity(api_get_user_id()), $courseEntity); $repo->addResourceToCourse( $node, ResourceLink::VISIBILITY_PUBLISHED, @@ -1700,7 +1701,7 @@ class Exercise ); // insert into the item_property table - api_item_property_update( + /*api_item_property_update( $this->course, TOOL_QUIZ, $this->id, @@ -1715,7 +1716,7 @@ class Exercise TOOL_QUIZ, null, $this->course - ); + );*/ if (api_get_setting('search_enabled') == 'true' && extension_loaded('xapian')) { $this->search_engine_save(); @@ -1851,7 +1852,11 @@ class Exercise WHERE c_id = ".$this->course_id." AND id = ".intval($this->id); Database::query($sql); - api_item_property_update( + $repo = Container::getExerciseRepository(); + $exercise = $repo->find($this->iId); + $repo->softDelete($exercise); + + /*api_item_property_update( $this->course, TOOL_QUIZ, $this->id, @@ -1864,7 +1869,7 @@ class Exercise $this->id, 'delete', api_get_user_id() - ); + );*/ Skill::deleteSkillsFromItem($this->iId, ITEM_TYPE_EXERCISE); diff --git a/main/exercise/exercise_admin.php b/main/exercise/exercise_admin.php index 1a7076b779..3bc68bc585 100755 --- a/main/exercise/exercise_admin.php +++ b/main/exercise/exercise_admin.php @@ -11,6 +11,7 @@ use ChamiloSession as Session; * @author Olivier Brouckaert, Julio Montoya */ require_once __DIR__.'/../inc/global.inc.php'; + $this_section = SECTION_COURSES; api_protect_course_script(true); diff --git a/main/exercise/question.class.php b/main/exercise/question.class.php index 30832465cc..53565d3525 100755 --- a/main/exercise/question.class.php +++ b/main/exercise/question.class.php @@ -946,7 +946,8 @@ abstract class Question $c_id = $this->course['real_id']; $categoryId = $this->category; - $repo = Container::getQuestionCategoryRepository(); + $questionRepo = Container::getQuestionRepository(); + $exerciseRepo = Container::getExerciseRepository(); // question already exists if (!empty($id)) { @@ -1038,18 +1039,16 @@ abstract class Question $this->id ); - /** @var CQuizQuestionCategory $questionCategory */ - /*$questionCategory = $repo->find($this->id); - $repo->addResourceNode($questionCategory, api_get_user_entity(api_get_user_id())); - $repo->addResourceToCourse($questionCategory->getResourceNode());*/ - - /*api_item_property_update( - $this->course, - TOOL_QUIZ, - $this->id, - 'QuizQuestionAdded', - api_get_user_id() - );*/ + $questionEntity = $questionRepo->find($this->id); + $exerciseEntity = $exerciseRepo->find($exerciseId); + $node = $questionRepo->addResourceNode($questionEntity, api_get_user_entity(api_get_user_id()), $exerciseEntity); + $questionRepo->addResourceToCourse( + $node, + \Chamilo\CoreBundle\Entity\Resource\ResourceLink::VISIBILITY_PUBLISHED, + api_get_course_entity(), + api_get_session_entity(), + api_get_group_entity() + ); // If hotspot, create first answer if ($type == HOT_SPOT || $type == HOT_SPOT_ORDER) { diff --git a/main/exercise/question_admin.inc.php b/main/exercise/question_admin.inc.php index b1896e9f06..d9bfd09644 100755 --- a/main/exercise/question_admin.inc.php +++ b/main/exercise/question_admin.inc.php @@ -5,8 +5,6 @@ * This script allows to manage the statements of questions. * It is included from the script admin.php. * - * @package chamilo.exercise - * * @author Olivier Brouckaert * * @version $Id: question_admin.inc.php 22126 2009-07-15 22:38:39Z juliomontoya $ diff --git a/src/CoreBundle/Framework/Container.php b/src/CoreBundle/Framework/Container.php index 435e1cec7f..0a261b5712 100644 --- a/src/CoreBundle/Framework/Container.php +++ b/src/CoreBundle/Framework/Container.php @@ -9,9 +9,11 @@ use Chamilo\CoreBundle\Repository\AccessUrlRepository; use Chamilo\CoreBundle\Repository\CourseRepository; use Chamilo\CoreBundle\Repository\IllustrationRepository; use Chamilo\CoreBundle\ToolChain; +use Chamilo\CourseBundle\Entity\CQuizQuestion; use Chamilo\CourseBundle\Repository\CDocumentRepository; use Chamilo\CourseBundle\Repository\CExerciseCategoryRepository; use Chamilo\CourseBundle\Repository\CQuizQuestionCategoryRepository; +use Chamilo\CourseBundle\Repository\CQuizQuestionRepository; use Chamilo\CourseBundle\Repository\CQuizRepository; use Chamilo\PageBundle\Entity\Page; use Chamilo\SettingsBundle\Manager\SettingsManager; @@ -348,6 +350,14 @@ class Container return self::$container->get('Chamilo\CourseBundle\Repository\CExerciseCategoryRepository'); } + /** + * @return CQuizQuestionRepository + */ + public static function getQuestionRepository() + { + return self::$container->get('Chamilo\CourseBundle\Repository\CQuizQuestionRepository'); + } + /** * @return CQuizQuestionCategoryRepository */ diff --git a/src/CoreBundle/Migrations/Schema/V200/Version20.php b/src/CoreBundle/Migrations/Schema/V200/Version20.php index 0b5b4da130..d07044d7b9 100644 --- a/src/CoreBundle/Migrations/Schema/V200/Version20.php +++ b/src/CoreBundle/Migrations/Schema/V200/Version20.php @@ -945,7 +945,9 @@ class Version20 extends AbstractMigrationChamilo //CREATE TABLE illustration (id INT AUTO_INCREMENT NOT NULL, resource_node_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, UNIQUE INDEX UNIQ_D67B9A421BAD783F (resource_node_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB ROW_FORMAT = DYNAMIC; //ALTER TABLE illustration ADD CONSTRAINT FK_D67B9A421BAD783F FOREIGN KEY (resource_node_id) REFERENCES resource_node (id) ON DELETE CASCADE; - + /*ALTER TABLE c_quiz_question ADD resource_node_id INT DEFAULT NULL; + ALTER TABLE c_quiz_question ADD CONSTRAINT FK_9A48A59F1BAD783F FOREIGN KEY (resource_node_id) REFERENCES resource_node (id) ON DELETE CASCADE; + CREATE UNIQUE INDEX UNIQ_9A48A59F1BAD783F ON c_quiz_question (resource_node_id);*/ } /** diff --git a/src/CoreBundle/Resources/config/tools.yml b/src/CoreBundle/Resources/config/tools.yml index b319bf4de9..5bcaddefcf 100644 --- a/src/CoreBundle/Resources/config/tools.yml +++ b/src/CoreBundle/Resources/config/tools.yml @@ -223,7 +223,7 @@ services: - exercise/exercise.php - quiz.gif - '@chamilo_course.settings.exercise' - - [CQuiz, CQuizQuestionCategory, CQuizQuestionCategory, CExerciseCategory] + - [CQuiz, CQuizQuestion, CQuizQuestionCategory, CQuizQuestionCategory, CExerciseCategory] - 0 tags: - {name: chamilo_core.tool} diff --git a/src/CourseBundle/Entity/CQuizQuestion.php b/src/CourseBundle/Entity/CQuizQuestion.php index e7943a6743..af8be933f6 100644 --- a/src/CourseBundle/Entity/CQuizQuestion.php +++ b/src/CourseBundle/Entity/CQuizQuestion.php @@ -3,6 +3,8 @@ namespace Chamilo\CourseBundle\Entity; +use Chamilo\CoreBundle\Entity\Resource\AbstractResource; +use Chamilo\CoreBundle\Entity\Resource\ResourceInterface; use Doctrine\ORM\Mapping as ORM; /** @@ -17,7 +19,7 @@ use Doctrine\ORM\Mapping as ORM; * ) * @ORM\Entity() */ -class CQuizQuestion +class CQuizQuestion extends AbstractResource implements ResourceInterface { /** * @var int @@ -386,4 +388,30 @@ class CQuizQuestion { return $this->iid; } + + /** + * Resource identifier. + * + * @return int + */ + public function getResourceIdentifier(): int + { + return $this->getIid(); + } + + /** + * @return string + */ + public function getResourceName(): string + { + return $this->getQuestion(); + } + + /** + * @return string + */ + public function getToolName(): string + { + return 'CQuizQuestion'; + } } diff --git a/src/CourseBundle/Repository/CQuizQuestionRepository.php b/src/CourseBundle/Repository/CQuizQuestionRepository.php new file mode 100644 index 0000000000..5e51aa6242 --- /dev/null +++ b/src/CourseBundle/Repository/CQuizQuestionRepository.php @@ -0,0 +1,13 @@ +