Bladeren bron

Build and restore course respect base content or session content - refs BT#8986

Angel Fernando Quiroz Campos 10 jaren geleden
bovenliggende
commit
d3c39e1213

+ 34 - 11
main/coursecopy/classes/CourseBuilder.class.php

@@ -284,7 +284,9 @@ class CourseBuilder
 
         $table = Database :: get_course_table(TABLE_FORUM);
 
-        $sql = "SELECT * FROM $table WHERE c_id = $course_id ";
+        $sessionCodition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCodition";
         $sql .= " ORDER BY forum_title, forum_category";
         $db_result = Database::query($sql);
         while ($obj = Database::fetch_object($db_result)) {
@@ -302,7 +304,10 @@ class CourseBuilder
         $course_info     = api_get_course_info($course_code);
         $course_id         = $course_info['real_id'];
 
-        $sql = "SELECT * FROM $table WHERE c_id = $course_id ORDER BY cat_title";
+        $sessionCodition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCodition ORDER BY cat_title";
+
         $db_result = Database::query($sql);
         while ($obj = Database::fetch_object($db_result)) {
             $forum_category = new ForumCategory($obj);
@@ -318,7 +323,11 @@ class CourseBuilder
         $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);
+
         $sql = "SELECT * FROM $table WHERE c_id = $course_id
+                $sessionCodition
                 ORDER BY thread_title ";
         $db_result = Database::query($sql);
         while ($obj = Database::fetch_object($db_result)) {
@@ -403,7 +412,11 @@ class CourseBuilder
     {
         $table = Database :: get_course_table(TABLE_TOOL_INTRO);
         $course_id = api_get_course_int_id();
-        $sql = "SELECT * FROM $table WHERE c_id = $course_id ";
+
+        $sessionCodition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = "SELECT * FROM $table WHERE c_id = $course_id $sessionCodition";
+
         $db_result = Database::query($sql);
         while ($obj = Database::fetch_object($db_result)) {
             $tool_intro = new ToolIntro($obj->id, $obj->intro_text);
@@ -728,7 +741,9 @@ class CourseBuilder
         $table_question = Database :: get_course_table(TABLE_SURVEY_QUESTION);
         $course_id = api_get_course_int_id();
 
-        $sql = 'SELECT * FROM '.$table_survey.' WHERE c_id = '.$course_id.' AND session_id = ' . $session_id;
+        $sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = 'SELECT * FROM '.$table_survey.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
         $db_result = Database::query($sql);
         while ($obj = Database::fetch_object($db_result)) {
             $survey = new Survey($obj->survey_id, $obj->code,$obj->title,
@@ -787,7 +802,9 @@ class CourseBuilder
         $table = Database :: get_course_table(TABLE_ANNOUNCEMENT);
         $course_id = api_get_course_int_id();
 
-        $sql = 'SELECT * FROM '.$table.' WHERE c_id = '.$course_id.' AND session_id = 0';
+        $sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = 'SELECT * FROM '.$table.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
         $db_result = Database::query($sql);
         $table_attachment = Database :: get_course_table(TABLE_ANNOUNCEMENT_ATTACHMENT);
         while ($obj = Database::fetch_object($db_result)) {
@@ -826,7 +843,9 @@ class CourseBuilder
         $table = Database :: get_course_table(TABLE_AGENDA);
         $course_id = api_get_course_int_id();
 
-        $sql = 'SELECT * FROM '.$table.' WHERE c_id = '.$course_id.' AND session_id = 0';
+        $sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = 'SELECT * FROM '.$table.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
         $db_result = Database::query($sql);
         while ($obj = Database::fetch_object($db_result)) {
             $table_attachment = Database :: get_course_table(TABLE_AGENDA_ATTACHMENT);
@@ -1159,7 +1178,9 @@ class CourseBuilder
 
         $course_id = api_get_course_int_id();
 
-        $sql = 'SELECT * FROM '.$table_attendance.' WHERE c_id = '.$course_id.' AND session_id = 0 ';
+        $sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = 'SELECT * FROM '.$table_attendance.' WHERE c_id = '.$course_id.' ' . $sessionCondition;
         $db_result = Database::query($sql);
         while ($row = Database::fetch_array($db_result,'ASSOC')) {
             $obj = new Attendance($row);
@@ -1183,13 +1204,15 @@ class CourseBuilder
 
         $course_id = api_get_course_int_id();
 
-        $sql = 'SELECT * FROM '.$table_work.'
+        $sessionCondition = api_get_session_condition($session_id, true, $with_base_content);
+
+        $sql = "SELECT * FROM $table_work
                 WHERE
-                    c_id = '.$course_id.' AND
-                    session_id = 0 AND
+                    c_id = $course_id 
+                    $sessionCondition AND
                     filetype = \'folder\' AND
                     parent_id = 0 AND
-                    active = 1';
+                    active = 1";
         $db_result = Database::query($sql);
         while ($row = Database::fetch_array($db_result,'ASSOC')) {
             $obj = new Work($row);

+ 18 - 7
main/coursecopy/classes/CourseRestorer.class.php

@@ -885,9 +885,10 @@ class CourseRestorer
 	/**
 	 * Restore forums
 	 */
-	public function restore_forums()
+	public function restore_forums($sessionId = 0)
     {
 		if ($this->course->has_resources(RESOURCE_FORUM)) {
+            $sessionId = intval($sessionId);
 			$table_forum = Database::get_course_table(TABLE_FORUM);
 			$resources = $this->course->resources;
 			foreach ($resources[RESOURCE_FORUM] as $id => $forum) {
@@ -901,6 +902,7 @@ class CourseRestorer
                 $params = self::DBUTF8_array($params);
                 $params['c_id'] = $this->destination_course_id;
                 $params['forum_category'] = $cat_id;
+                $params['session_id'] = $sessionId;
                 unset($params['forum_id']);
 
                 $params['forum_comment'] = DocumentManager::replace_urls_inside_content_html_from_copy_course(
@@ -1075,9 +1077,10 @@ class CourseRestorer
 	/**
 	 * Restore tool intro
 	 */
-    public function restore_tool_intro()
+    public function restore_tool_intro($sessionId = 0)
     {
 		if ($this->course->has_resources(RESOURCE_TOOL_INTRO)) {
+            $sessionId = intval($sessionId);
 			$tool_intro_table = Database :: get_course_table(TABLE_TOOL_INTRO);
 			$resources = $this->course->resources;
 			foreach ($resources[RESOURCE_TOOL_INTRO] as $id => $tool_intro) {
@@ -1085,7 +1088,8 @@ class CourseRestorer
 				Database::query($sql);
                 $tool_intro->intro_text = DocumentManager::replace_urls_inside_content_html_from_copy_course($tool_intro->intro_text,$this->course->code, $this->course->destination_path, $this->course->backup_path, $this->course->info['path']);
 				$sql = "INSERT INTO ".$tool_intro_table." SET c_id = ".$this->destination_course_id." , id='".self::DBUTF8escapestring($tool_intro->id)."', intro_text = '".self::DBUTF8escapestring($tool_intro->intro_text)."'";
-				Database::query($sql);
+				$sql.= ", session_id = $sessionId";
+                Database::query($sql);
 
 				$this->course->resources[RESOURCE_TOOL_INTRO][$id]->destination_id = Database::insert_id();
 			}
@@ -1125,9 +1129,10 @@ class CourseRestorer
 	/**
 	 * Restore events
 	 */
-    public function restore_events()
+    public function restore_events($sessionId = 0)
     {
 		if ($this->course->has_resources(RESOURCE_EVENT)) {
+            $sessionId = intval($sessionId);
 			$table = Database :: get_course_table(TABLE_AGENDA);
 			$resources = $this->course->resources;
 			foreach ($resources[RESOURCE_EVENT] as $id => $event) {
@@ -1141,6 +1146,7 @@ class CourseRestorer
                         all_day = '".$event->all_day."',
         				start_date = '".$event->start_date."',
         				end_date = '".$event->end_date."'";
+                $sql.= ", session_id = $sessionId";
 
 				Database::query($sql);
 				$new_event_id = Database::insert_id();
@@ -1219,9 +1225,10 @@ class CourseRestorer
 	/**
 	 * Restore announcements
 	 */
-    public function restore_announcements()
+    public function restore_announcements($sessionId = 0)
     {
 		if ($this->course->has_resources(RESOURCE_ANNOUNCEMENT)) {
+            $sessionId = intval($sessionId);
 			$table = Database :: get_course_table(TABLE_ANNOUNCEMENT);
 			$resources = $this->course->resources;
 			foreach ($resources[RESOURCE_ANNOUNCEMENT] as $id => $announcement) {
@@ -1235,7 +1242,8 @@ class CourseRestorer
 							"content = '".self::DBUTF8escapestring($announcement->content)."', " .
 							"end_date = '".$announcement->date."', " .
 							"display_order = '".$announcement->display_order."', " .
-							"email_sent = '".$announcement->email_sent."'";
+							"email_sent = '".$announcement->email_sent."', "
+                    . "session_id = $sessionId";
 				Database::query($sql);
 				$new_announcement_id = Database::insert_id();
 				$this->course->resources[RESOURCE_ANNOUNCEMENT][$id]->destination_id = $new_announcement_id;
@@ -2202,8 +2210,9 @@ class CourseRestorer
      * @deprecated use restore_works
      *
 	 */
-	public function restore_student_publication()
+	public function restore_student_publication($sessionId = 0)
     {
+        $sessionId = intval($sessionId);
 		$work_assignment_table  = Database :: get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT);
 		$work_table    			= Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
 		$item_property_table  	= Database :: get_course_table(TABLE_ITEM_PROPERTY);
@@ -2220,6 +2229,7 @@ class CourseRestorer
             unset($folder['id']);
 			$folder['c_id'] = $this->destination_course_id;
             $folder['parent_id'] = 0;
+            $folder['session_id'] = $sessionId;
 			$new_id = Database::insert($work_table, $folder);
 
             if ($new_id) {
@@ -2249,6 +2259,7 @@ class CourseRestorer
                 foreach ($sub_folders  as $sub_folder) {
                     $sub_folder['c_id'] = $this->destination_course_id;
                     $sub_folder['ref'] = $new_id;
+                    $sub_folder['session_id'] = $sessionId;
                     $new_item_id = Database::insert($item_property_table, $sub_folder);
                 }
 

+ 3 - 10
main/coursecopy/copy_course_session_selected.php

@@ -190,9 +190,7 @@ function displayForm()
     $html .= '<label class="radio"><input type="radio" id="copy_option_2" name="copy_option" value="select_items"/>';
     $html .= ' ' . get_lang('LetMeSelectItems') . '</label><br/>';
 
-    $html .= '<label class="checkbox"><input type="checkbox" id="copy_base_content_id" name="copy_only_session_items" />' . get_lang(
-            'CopyOnlySessionItems'
-        ) . '</label><br /><br/>';
+    $html .= '<p>' . get_lang('CopyOnlySessionItems') . '</p>';
 
     $html .= '<button class="save" type="submit" onclick="javascript:if(!confirm(' . "'" . addslashes(
             api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES)
@@ -285,11 +283,6 @@ $htmlHeadXtra[] = '<script>
 
 Display::display_header($nameTools);
 
-$withBaseContent = true;
-if (isset($_POST['copy_only_session_items']) && $_POST['copy_only_session_items']) {
-    $withBaseContent = false;
-}
-
 /* MAIN CODE */
 
 if ((isset($_POST['action']) && $_POST['action'] == 'course_select_form') ||
@@ -345,7 +338,7 @@ if ((isset($_POST['action']) && $_POST['action'] == 'course_select_form') ||
 
                 $cb = new CourseBuilder('', $courseInfo);
                 $course = $cb->build(
-                    $originSession, $courseCode, $withBaseContent
+                    $originSession, $courseCode
                 );
                 $cr = new CourseRestorer($course);
                 $cr->restore($courseDestination, $destinationSession);
@@ -385,7 +378,7 @@ if ((isset($_POST['action']) && $_POST['action'] == 'course_select_form') ||
         );
 
         $cb = new CourseBuilder('', $courseInfo);
-        $course = $cb->build($sessionId, $courseCode, $withBaseContent);
+        $course = $cb->build($sessionId, $courseCode);
         $hiddenFields['destination_course'] = $arrCourseDestination[0];
         $hiddenFields['destination_session'] = $destinationSession;
         $hiddenFields['origin_course'] = api_get_course_id();