From ec6cd87e94fbe75fe1eff1e83daba18cc69753f3 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 29 Nov 2013 17:55:53 +0100 Subject: [PATCH] Adding auto insertion of course introduction see BT#7068 only works in page add_courses_to_session.php. --- main/admin/add_courses_to_session.php | 4 +- main/inc/lib/course_description.lib.php | 107 +++++++++++++----------- main/inc/lib/sessionmanager.lib.php | 87 +++++++++++++++++++ 3 files changed, 148 insertions(+), 50 deletions(-) diff --git a/main/admin/add_courses_to_session.php b/main/admin/add_courses_to_session.php index eb5487fc5d..93938d0edf 100644 --- a/main/admin/add_courses_to_session.php +++ b/main/admin/add_courses_to_session.php @@ -137,16 +137,18 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { $nbr_users++; } } + SessionManager::installCourse($id_session, $course_info['real_id']); Database::query("UPDATE $tbl_session_rel_course SET nbr_users=$nbr_users WHERE id_session='$id_session' AND course_code='$enreg_course'"); } } foreach ($existingCourses as $existingCourse) { - if(!in_array($existingCourse['course_code'], $CourseList)) { + if (!in_array($existingCourse['course_code'], $CourseList)) { $course_info = api_get_course_info($existingCourse['course_code']); CourseManager::remove_course_ranking($course_info['real_id'], $id_session); Database::query("DELETE FROM $tbl_session_rel_course WHERE course_code='".$existingCourse['course_code']."' AND id_session=$id_session"); Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE course_code='".$existingCourse['course_code']."' AND id_session=$id_session"); + SessionManager::unInstallCourse($id_session, $course_info['real_id']); } } diff --git a/main/inc/lib/course_description.lib.php b/main/inc/lib/course_description.lib.php index 7171192572..5f9a3d034e 100644 --- a/main/inc/lib/course_description.lib.php +++ b/main/inc/lib/course_description.lib.php @@ -1,8 +1,8 @@ * @package chamilo.course_description @@ -27,11 +27,14 @@ class CourseDescription /** * Constructor */ - public function __construct() {} - + public function __construct() + { + + } + /** * Returns an array of objects of type CourseDescription corresponding to a specific course, without session ids (session id = 0) - * + * * @param int Course id * @return array Array of CourseDescriptions */ @@ -42,7 +45,7 @@ class CourseDescription $course_id = $course_info['real_id']; } else { return array(); - } + } $t_course_desc = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $sql = "SELECT * FROM $t_course_desc WHERE c_id = $course_id AND session_id = '0';"; $sql_result = Database::query($sql); @@ -59,21 +62,22 @@ class CourseDescription } return $results; } - + /** * Get all data of course description by session id, * first you must set session_id property with the object CourseDescription * @return array */ - public function get_description_data() { + public function get_description_data() + { $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $condition_session = api_get_session_condition($this->session_id, true, true); $course_id = api_get_course_int_id(); $sql = "SELECT * FROM $tbl_course_description WHERE c_id = $course_id $condition_session ORDER BY id "; $rs = Database::query($sql); $data = array(); - while ($description = Database::fetch_array($rs)) { + while ($description = Database::fetch_array($rs)) { $data['descriptions'][$description['id']] = Security::remove_XSS($description, STUDENT); //reload titles to ensure we have the last version (after edition) //$data['default_description_titles'][$description['id']] = Security::remove_XSS($description['title'], STUDENT); @@ -89,16 +93,16 @@ class CourseDescription public function get_description_history($description_type) { $tbl_stats_item_property = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ITEM_PROPERTY); $tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY); - + $description_id = $this->get_id_by_description_type($description_type); $item_property_id = api_get_item_property_id($course_id, TOOL_COURSE_DESCRIPTION, $description_id); - + $course_id = api_get_course_int_id(); - $sql = "SELECT tip.id, tip.course_id, tip.item_property_id, tip.title, tip.content, tip.progress, tip.lastedit_date, tip.session_id - FROM $tbl_stats_item_property tip INNER JOIN $tbl_item_property ip + $sql = "SELECT tip.id, tip.course_id, tip.item_property_id, tip.title, tip.content, tip.progress, tip.lastedit_date, tip.session_id + FROM $tbl_stats_item_property tip INNER JOIN $tbl_item_property ip ON ip.tool = '".TOOL_COURSE_DESCRIPTION."' AND ip.id = tip.item_property_id - WHERE ip.c_id = $course_id AND tip.course_id = '$course_id' AND tip.session_id = '".intval($this->session_id)."' + WHERE ip.c_id = $course_id AND tip.course_id = '$course_id' AND tip.session_id = '".intval($this->session_id)."' ORDER BY tip.lastedit_date DESC"; $rs = Database::query($sql); @@ -120,13 +124,13 @@ class CourseDescription public function get_data_by_description_type($description_type, $course_code = '', $session_id = null) { $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $course_id = api_get_course_int_id(); - + if (!isset($session_id)) { $session_id = $this->session_id; - } - $condition_session = api_get_session_condition($session_id); + } + $condition_session = api_get_session_condition($session_id); if (!empty($course_code)) { - $course_info = api_get_course_info($course_code); + $course_info = api_get_course_info($course_code); $course_id = $course_info['real_id']; } $description_type = intval($description_type); @@ -140,18 +144,17 @@ class CourseDescription } return $data; } - - + public function get_data_by_id($id, $course_code = '', $session_id = null) { $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $course_id = api_get_course_int_id(); - + if (!isset($session_id)) { $session_id = $this->session_id; - } - $condition_session = api_get_session_condition($session_id); + } + $condition_session = api_get_session_condition($session_id); if (!empty($course_code)) { - $course_info = api_get_course_info($course_code); + $course_info = api_get_course_info($course_code); $course_id = $course_info['real_id']; } $id = intval($id); @@ -166,7 +169,7 @@ class CourseDescription } return $data; } - + /** * Get maximum description type by session id, first you must set session_id properties with the object CourseDescription @@ -175,7 +178,7 @@ class CourseDescription public function get_max_description_type() { $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $course_id = api_get_course_int_id(); - + $sql = "SELECT MAX(description_type) as MAX FROM $tbl_course_description WHERE c_id = $course_id AND session_id='".$this->session_id."'"; $rs = Database::query($sql); $max = Database::fetch_array($rs); @@ -191,19 +194,20 @@ class CourseDescription * first you must set description_type, title, content, progress and session_id properties with the object CourseDescription * @return int affected rows */ - public function insert() { + public function insert() + { if (empty($this->course_id)) { $course_id = api_get_course_int_id(); } else { $course_id = $this->course_id; } - $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); + $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $sql = "INSERT IGNORE INTO $tbl_course_description SET - c_id = $course_id, - description_type = '".intval($this->description_type)."', - title = '".Database::escape_string($this->title)."', - content = '".Database::escape_string($this->content)."', - progress = '".intval($this->progress)."', + c_id = $course_id, + description_type = '".intval($this->description_type)."', + title = '".Database::escape_string($this->title)."', + content = '".Database::escape_string($this->content)."', + progress = '".intval($this->progress)."', session_id = '".intval($this->session_id)."' "; Database::query($sql); $last_id = Database::insert_id(); @@ -222,7 +226,8 @@ class CourseDescription * @param int description type * @return int affected rows */ - public function insert_stats($description_type) { + public function insert_stats($description_type) + { $tbl_stats_item_property = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ITEM_PROPERTY); $description_id = $this->get_id_by_description_type($description_type); $course_id = api_get_real_course_id(); @@ -248,19 +253,20 @@ class CourseDescription * and session_id properties with the object CourseDescription * @return int affected rows */ - public function update() { - $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); - $sql = "UPDATE $tbl_course_description SET - title = '".Database::escape_string($this->title)."', - content = '".Database::escape_string($this->content)."', - progress = '".$this->progress."' - WHERE id = '".intval($this->id)."' AND + public function update() + { + $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); + $sql = "UPDATE $tbl_course_description SET + title = '".Database::escape_string($this->title)."', + content = '".Database::escape_string($this->content)."', + progress = '".$this->progress."' + WHERE id = '".intval($this->id)."' AND session_id = '".$this->session_id."' AND c_id = ".api_get_course_int_id()." "; Database::query($sql); $affected_rows = Database::affected_rows(); - + if ($this->id > 0) { //insert into item_property api_item_property_update(api_get_course_info(), TOOL_COURSE_DESCRIPTION, $this->id, 'CourseDescriptionUpdated', api_get_user_id()); @@ -272,8 +278,9 @@ class CourseDescription * Delete a description, first you must set description_type and session_id properties with the object CourseDescription * @return int affected rows */ - public function delete() { - $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); + public function delete() + { + $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $course_id = api_get_course_int_id(); $sql = "DELETE FROM $tbl_course_description WHERE c_id = $course_id AND id = '".intval($this->id)."' AND session_id = '".intval($this->session_id)."'"; Database::query($sql); @@ -290,10 +297,11 @@ class CourseDescription * @param int description type * @return int description id */ - public function get_id_by_description_type($description_type) { + public function get_id_by_description_type($description_type) + { $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $course_id = api_get_course_int_id(); - + $sql = "SELECT id FROM $tbl_course_description WHERE c_id = $course_id AND description_type = '".intval($description_type)."'"; $rs = Database::query($sql); $row = Database::fetch_array($rs); @@ -312,7 +320,7 @@ class CourseDescription $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $session_id = intval($session_id); $course_id = api_get_course_int_id(); - + $sql = "SELECT progress FROM $tbl_course_description WHERE c_id = $course_id AND description_type = '".intval($description_type)."' AND session_id = '".intval($this->session_id)."' "; $rs = Database::query($sql); $progress = ''; @@ -335,7 +343,8 @@ class CourseDescription * Get description titles by default * @return array */ - public function get_default_description_title() { + public function get_default_description_title() + { $default_description_titles = array(); $default_description_titles[1]= get_lang('GeneralDescription'); $default_description_titles[2]= get_lang('Objectives'); @@ -344,7 +353,7 @@ class CourseDescription $default_description_titles[5]= get_lang('CourseMaterial'); $default_description_titles[6]= get_lang('HumanAndTechnicalResources'); $default_description_titles[7]= get_lang('Assessment'); - + $default_description_titles[8]= get_lang('Other'); return $default_description_titles; } diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index fcf9b2ebc3..e091a16486 100644 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -2810,4 +2810,91 @@ class SessionManager } return $htmlResult; } + + public static function getCourseToolToByManaged() + { + return array( + 'courseDescription', + 'courseIntroduction' + ); + } + + + /** + * @param $sessionId + * @param $courseId + */ + public static function installCourse($sessionId, $courseId) + { + $toolList = self::getCourseToolToByManaged(); + + foreach($toolList as $tool) { + $method = 'add'.$tool; + if (method_exists(get_class(), $method)) { + self::$method($sessionId, $courseId); + } + } + } + + /** + * @param $sessionId + * @param $courseId + */ + public static function unInstallCourse($sessionId, $courseId) + { + $toolList = self::getCourseToolToByManaged(); + + foreach($toolList as $tool) { + $method = 'remove'.$tool; + if (method_exists(get_class(), $method)) { + self::$method($sessionId, $courseId); + } + } + } + + public static function addCourseIntroduction($sessionId, $courseId) + { + // @todo create a tool intro lib + $sessionId = intval($sessionId); + $courseId = intval($courseId); + + $TBL_INTRODUCTION = Database::get_course_table(TABLE_TOOL_INTRO); + $sql = "SELECT * FROM $TBL_INTRODUCTION WHERE c_id = $courseId"; + $result = Database::query($sql); + $result = Database::store_result($result, 'ASSOC'); + + if (!empty($result)) { + foreach ($result as $result) { + // @todo check if relation exits. + $result['session_id'] = $sessionId; + Database::insert($TBL_INTRODUCTION, $result); + } + } + } + + public static function removeCourseIntroduction($sessionId, $courseId) + { + $sessionId = intval($sessionId); + $courseId = intval($courseId); + $TBL_INTRODUCTION = Database::get_course_table(TABLE_TOOL_INTRO); + $sql = "DELETE FROM $TBL_INTRODUCTION WHERE c_id = $courseId AND session_id = $sessionId"; + Database::query($sql); + } + + + public static function addCourseDescription($sessionId, $courseId) + { + /*$description = new CourseDescription(); + $descriptions = $description->get_descriptions($courseId); + foreach ($descriptions as $description) { + }*/ + } + + public static function removeCourseDescription($sessionId, $courseId) + { + + } + + + }