Fix course copy - Was wrongly using course ID vs course code - refs BT#10008

1.9.x
Yannick Warnier 11 years ago
parent 14a2d5595b
commit e5ecfade8b
  1. 246
      main/coursecopy/classes/CourseBuilder.class.php

@ -127,16 +127,16 @@ class CourseBuilder
{
$table_link = Database :: get_course_table(TABLE_LINKED_RESOURCES);
$table_properties = Database :: get_course_table(TABLE_ITEM_PROPERTY);
$course = api_get_course_info($course_code);
$course_id = $course['real_id'];
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
foreach ($this->tools_to_build as $tool) {
$function_build = 'build_'.$tool;
$specificIdList = isset($this->specific_id_list[$tool]) ? $this->specific_id_list[$tool] : null;
$this->$function_build(
$session_id,
$course_code,
$course_id,
$with_base_content,
$specificIdList
);
@ -151,6 +151,7 @@ class CourseBuilder
source_type = '".$resource->get_type()."' AND
source_id = '".$resource->get_id()."'";
$res = Database::query($sql);
error_log($sql);
while ($link = Database::fetch_object($res)) {
$this->course->resources[$type][$id]->add_linked_resource($link->resource_type, $link->resource_id);
}
@ -176,21 +177,20 @@ class CourseBuilder
}
}
}
error_log(print_r($this->course, 1));
return $this->course;
}
/**
* Build the documents
* @param int $session_id
* @param string $course_code
* @param int $course_id
* @param bool $with_base_content
* @param array $id_list
*/
public function build_documents($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_documents($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$table_doc = Database::get_course_table(TABLE_DOCUMENT);
$table_prop = Database::get_course_table(TABLE_ITEM_PROPERTY);
@ -199,7 +199,7 @@ class CourseBuilder
path NOT LIKE '/chat_files%' ";
//$avoid_paths = " 1 = 1 ";
if (!empty($course_code) && !empty($session_id)) {
if (!empty($course_id) && !empty($session_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
@ -278,17 +278,19 @@ class CourseBuilder
/**
* Build the forums
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
* @return void
*/
public function build_forums($session_id = 0, $course_code = null, $with_base_content = false, $id_list = array())
public function build_forums($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$table = Database :: get_course_table(TABLE_FORUM);
$sessionCodition = api_get_session_condition($session_id, true, $with_base_content);
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCodition";
$sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCondition";
$sql .= " ORDER BY forum_title, forum_category";
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result)) {
@ -299,16 +301,19 @@ class CourseBuilder
/**
* Build a forum-category
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
* @return void
*/
public function build_forum_category($session_id = 0, $course_code = null, $with_base_content = false, $id_list = array())
public function build_forum_category($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table = Database :: get_course_table(TABLE_FORUM_CATEGORY);
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$sessionCodition = api_get_session_condition($session_id, true, $with_base_content);
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCodition ORDER BY cat_title";
$sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCondition ORDER BY cat_title";
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result)) {
@ -319,34 +324,39 @@ class CourseBuilder
/**
* Build the forum-topics
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
* @return void
*/
public function build_forum_topics($session_id = 0, $course_code = null, $with_base_content = false, $id_list = array())
public function build_forum_topics($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table = Database :: get_course_table(TABLE_FORUM_THREAD);
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$sessionCodition = api_get_session_condition($session_id, true, $with_base_content);
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = "SELECT * FROM $table WHERE c_id = $course_id
$sessionCodition
$sessionCondition
ORDER BY thread_title ";
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result)) {
$forum_topic = new ForumTopic($obj);
$this->course->add_resource($forum_topic);
$this->build_forum_posts($obj->thread_id, $obj->forum_id, true);
$this->build_forum_posts($course_id, $obj->thread_id, $obj->forum_id, true);
}
}
/**
* Build the forum-posts
* TODO: All tree structure of posts should be built, attachments for example.
* @param int $course_id Internal course ID
* @param int $thread_id Internal thread ID
* @param int $forum_id Internal forum ID
* @param bool $only_first_post Whether to only copy the first post or not
*/
public function build_forum_posts($thread_id = null, $forum_id = null, $only_first_post = false)
public function build_forum_posts($course_id, $thread_id = null, $forum_id = null, $only_first_post = false)
{
$table = Database :: get_course_table(TABLE_FORUM_POST);
$course_id = api_get_course_int_id();
$table = Database :: get_course_table(TABLE_FORUM_POST);;
$sql = "SELECT * FROM $table WHERE c_id = $course_id ";
if (!empty($thread_id) && !empty($forum_id)) {
$forum_id = intval($forum_id);
@ -363,16 +373,17 @@ class CourseBuilder
/**
* Build the links
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_links($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_links($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$table = Database :: get_course_table(TABLE_LINK);
$table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY);
if (!empty($session_id) && !empty($course_code)) {
if (!empty($session_id) && !empty($course_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
@ -395,8 +406,8 @@ class CourseBuilder
$link = new Link($obj->id, $obj->title, $obj->url, $obj->description, $obj->category_id, $obj->on_homepage);
$this->course->add_resource($link);
if (!empty($course_code)) {
$res = $this->build_link_category($obj->category_id,$course_code);
if (!empty($course_id)) {
$res = $this->build_link_category($obj->category_id, $course_id);
} else {
$res = $this->build_link_category($obj->category_id);
}
@ -409,15 +420,17 @@ class CourseBuilder
/**
* Build tool intro
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_tool_intro($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_tool_intro($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table = Database :: get_course_table(TABLE_TOOL_INTRO);
$course_id = api_get_course_int_id();
$sessionCodition = api_get_session_condition($session_id, true, $with_base_content);
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCodition";
$sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCondition";
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result)) {
@ -428,12 +441,11 @@ class CourseBuilder
/**
* Build a link category
* @param int $id Internal link ID
* @param int $course_id Internal course ID
*/
public function build_link_category($id, $course_code = '')
public function build_link_category($id, $course_id = 0)
{
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$link_cat_table = Database :: get_course_table(TABLE_LINK_CATEGORY);
$sql = "SELECT * FROM $link_cat_table WHERE c_id = $course_id AND id = $id";
@ -448,17 +460,18 @@ class CourseBuilder
/**
* Build the Quizzes
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_quizzes($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_quizzes($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$table_qui = Database :: get_course_table(TABLE_QUIZ_TEST);
$table_rel = Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION);
$table_doc = Database :: get_course_table(TABLE_DOCUMENT);
$course_id = $course_info['real_id'];
if (!empty($course_code) && !empty($session_id)) {
if (!empty($course_id) && !empty($session_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
@ -490,8 +503,8 @@ class CourseBuilder
$this->course->add_resource($quiz);
}
if (!empty($course_code)) {
$this->build_quiz_questions($course_code);
if (!empty($course_id)) {
$this->build_quiz_questions($course_id);
} else {
$this->build_quiz_questions();
}
@ -499,12 +512,10 @@ class CourseBuilder
/**
* Build the Quiz-Questions
* @param int $course_id Internal course ID
*/
public function build_quiz_questions($course_code = null)
public function build_quiz_questions($course_id = 0)
{
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$table_qui = Database :: get_course_table(TABLE_QUIZ_TEST);
$table_rel = Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION);
$table_que = Database :: get_course_table(TABLE_QUIZ_QUESTION);
@ -717,13 +728,14 @@ class CourseBuilder
/**
* Build the test category
* $session_id, $course_code, $with_base_content, $this->specific_id_list[$tool]
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
* @todo add course session
*/
public function build_test_category($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_test_category($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_id = api_get_course_int_id();
// get all test category in course
$tab_test_categories_id = Testcategory::getCategoryListInfo("id", $course_id);
foreach ($tab_test_categories_id as $test_category_id)
@ -736,16 +748,19 @@ class CourseBuilder
/**
* Build the Surveys
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_surveys($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_surveys($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table_survey = Database :: get_course_table(TABLE_SURVEY);
$table_question = Database :: get_course_table(TABLE_SURVEY_QUESTION);
$course_id = api_get_course_int_id();
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = 'SELECT * FROM '.$table_survey.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
error_log($sql);
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result)) {
$survey = new Survey($obj->survey_id, $obj->code,$obj->title,
@ -761,18 +776,17 @@ class CourseBuilder
}
$this->course->add_resource($survey);
}
$this->build_survey_questions();
$this->build_survey_questions($course_id);
}
/**
* Build the Survey Questions
* @param int $course_id Internal course ID
*/
public function build_survey_questions() {
public function build_survey_questions($course_id) {
$table_que = Database :: get_course_table(TABLE_SURVEY_QUESTION);
$table_opt = Database :: get_course_table(TABLE_SURVEY_QUESTION_OPTION);
$course_id = api_get_course_int_id();
$sql = 'SELECT * FROM '.$table_que.' WHERE c_id = '.$course_id.' ';
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result)){
@ -798,12 +812,14 @@ class CourseBuilder
/**
* Build the announcements
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_announcements($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_announcements($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table = Database :: get_course_table(TABLE_ANNOUNCEMENT);
$course_id = api_get_course_int_id();
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = 'SELECT * FROM '.$table.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
@ -839,12 +855,14 @@ class CourseBuilder
/**
* Build the events
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_events($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_events($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table = Database :: get_course_table(TABLE_AGENDA);
$course_id = api_get_course_int_id();
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = 'SELECT * FROM '.$table.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
@ -869,15 +887,16 @@ class CourseBuilder
/**
* Build the course-descriptions
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_course_descriptions($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_course_descriptions($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$table = Database :: get_course_table(TABLE_COURSE_DESCRIPTION);
if (!empty($session_id) && !empty($course_code)) {
if (!empty($session_id) && !empty($course_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
@ -899,16 +918,18 @@ class CourseBuilder
/**
* Build the learnpaths
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_learnpaths($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_learnpaths($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$course_id = $course_info['real_id'];
$table_main = Database::get_course_table(TABLE_LP_MAIN);
$table_item = Database::get_course_table(TABLE_LP_ITEM);
$table_tool = Database::get_course_table(TABLE_TOOL_LIST);
if (!empty($session_id) && !empty($course_code)) {
if (!empty($session_id) && !empty($course_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
@ -1013,15 +1034,17 @@ class CourseBuilder
}
/**
* Build the glossarys
* Build the glossaries
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_glossary($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_glossary($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$table_glossary = Database :: get_course_table(TABLE_GLOSSARY);
$course_id = $course_info['real_id'];
if (!empty($session_id) && !empty($course_code)) {
if (!empty($session_id) && !empty($course_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
@ -1051,8 +1074,8 @@ class CourseBuilder
}
/*
* build session course by jhon
* */
* Build session course by jhon
*/
public function build_session_course()
{
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
@ -1081,19 +1104,16 @@ class CourseBuilder
}
/**
* @param int $session_id
* @param string $course_code
* @param bool $with_base_content
* @param array $id_list
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_wiki($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_wiki($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$course_info = api_get_course_info($course_code);
$tbl_wiki = Database::get_course_table(TABLE_WIKI);
$course_id = $course_info['real_id'];
if (!empty($session_id) && !empty($course_code)) {
if (!empty($session_id) && !empty($course_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
@ -1114,8 +1134,12 @@ class CourseBuilder
/**
* Build the Surveys
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_thematic($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_thematic($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table_thematic = Database :: get_course_table(TABLE_THEMATIC);
$table_thematic_advance = Database :: get_course_table(TABLE_THEMATIC_ADVANCE);
@ -1128,8 +1152,6 @@ class CourseBuilder
$session_condition = api_get_session_condition($session_id, true);
}
$course_id = api_get_course_int_id();
$sql = "SELECT * FROM $table_thematic WHERE c_id = $course_id $session_condition ";
$db_result = Database::query($sql);
while ($row = Database::fetch_array($db_result,'ASSOC')) {
@ -1172,14 +1194,16 @@ class CourseBuilder
/**
* Build the attendances
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_attendance($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_attendance($session_id = 0, $course_id = '', $with_base_content = false, $id_list = array())
{
$table_attendance = Database :: get_course_table(TABLE_ATTENDANCE);
$table_attendance_calendar = Database :: get_course_table(TABLE_ATTENDANCE_CALENDAR);
$course_id = api_get_course_int_id();
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = 'SELECT * FROM '.$table_attendance.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
@ -1198,16 +1222,14 @@ class CourseBuilder
/**
* Build the works (or "student publications", or "assignments")
*
* @param int $session_id
* @param string $course_code
* @param bool $with_base_content
* @param array $id_list
* @param int $session_id Internal session ID
* @param int $course_id Internal course ID
* @param bool $with_base_content Whether to include content from the course without session or not
* @param array $id_list If you want to restrict the structure to only the given IDs
*/
public function build_works($session_id = 0, $course_code = '', $with_base_content = false, $id_list = array())
public function build_works($session_id = 0, $course_id = 0, $with_base_content = false, $id_list = array())
{
$table_work = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
$course_id = api_get_course_int_id();
$sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
$sql = "SELECT * FROM $table_work

Loading…
Cancel
Save