From be644b39b221503699c3a2a09670a3e82dd4e152 Mon Sep 17 00:00:00 2001 From: Cristian Fasanando Date: Fri, 15 Jan 2010 09:24:26 -0500 Subject: [PATCH] fixed - Bug in empty the course with wiki - CT#511 --- .../classes/CourseBuilder.class.php | 44 ++++++++++--------- .../classes/CourseRecycler.class.php | 39 ++++++++++++++++ .../classes/CourseRestorer.class.php | 40 ++++++++++------- main/coursecopy/classes/Resource.class.php | 2 + main/coursecopy/classes/wiki.class.php | 10 ++++- 5 files changed, 96 insertions(+), 39 deletions(-) diff --git a/main/coursecopy/classes/CourseBuilder.class.php b/main/coursecopy/classes/CourseBuilder.class.php index 20f3ef5764..95ac256fa3 100755 --- a/main/coursecopy/classes/CourseBuilder.class.php +++ b/main/coursecopy/classes/CourseBuilder.class.php @@ -71,7 +71,7 @@ class CourseBuilder $this->build_learnpaths($session_id,$course_code); $this->build_links($session_id,$course_code); $this->build_course_descriptions($session_id,$course_code); - $this->build_wiki(); + $this->build_wiki($session_id,$course_code); } else { @@ -155,9 +155,9 @@ class CourseBuilder $table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY); if (!empty($this->course->type) && $this->course->type=='partial') - $sql = 'SELECT * FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND path NOT LIKE \'/images/gallery%\' ORDER BY path'; + $sql = 'SELECT * FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND path NOT LIKE \'/images/gallery%\' AND d.session_id = 0 ORDER BY path'; else - $sql = 'SELECT * FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 ORDER BY path'; + $sql = 'SELECT * FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND d.session_id = 0 ORDER BY path'; $db_result = Database::query($sql, __FILE__, __LINE__); while ($obj = Database::fetch_object($db_result)) @@ -244,7 +244,7 @@ class CourseBuilder } else { $table = Database :: get_course_table(TABLE_LINK); $table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY); - $sql = "SELECT * FROM $table l, $table_prop p WHERE p.ref=l.id AND p.tool = '".TOOL_LINK."' AND p.visibility != 2 ORDER BY l.display_order"; + $sql = "SELECT * FROM $table l, $table_prop p WHERE p.ref=l.id AND p.tool = '".TOOL_LINK."' AND p.visibility != 2 AND l.session_id = 0 ORDER BY l.display_order"; } $db_result = Database::query($sql, __FILE__, __LINE__); @@ -317,7 +317,7 @@ class CourseBuilder $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); - $sql = 'SELECT * FROM '.$table_qui.' WHERE active >=0'; //select only quizzes with active = 0 or 1 (not -1 which is for deleted quizzes) + $sql = 'SELECT * FROM '.$table_qui.' WHERE active >=0 AND session_id = 0'; //select only quizzes with active = 0 or 1 (not -1 which is for deleted quizzes) } $db_result = Database::query($sql, __FILE__, __LINE__); @@ -403,7 +403,7 @@ class CourseBuilder } if ($build_orphan_questions) { - $this->course->add_resource(new Quiz(-1, get_lang('OrphanQuestions', ''), '', 0, 0, 1, '', 0)); + //$this->course->add_resource(new Quiz(-1, get_lang('OrphanQuestions', ''), '', 0, 0, 1, '', 0)); } } /** @@ -444,7 +444,7 @@ class CourseBuilder { $table_survey = Database :: get_course_table(TABLE_SURVEY); $table_question = Database :: get_course_table(TABLE_SURVEY_QUESTION); - $sql = 'SELECT * FROM '.$table_survey; + $sql = 'SELECT * FROM '.$table_survey.' WHERE session_id = 0 '; $db_result = Database::query($sql, __FILE__, __LINE__); while ($obj = Database::fetch_object($db_result)) { @@ -494,7 +494,7 @@ class CourseBuilder function build_announcements() { $table = Database :: get_course_table(TABLE_ANNOUNCEMENT); - $sql = 'SELECT * FROM '.$table; + $sql = 'SELECT * FROM '.$table.' WHERE session_id = 0'; $db_result = Database::query($sql, __FILE__, __LINE__); while ($obj = Database::fetch_object($db_result)) { @@ -508,7 +508,7 @@ class CourseBuilder function build_events() { $table = Database :: get_course_table(TABLE_AGENDA); - $sql = 'SELECT * FROM '.$table; + $sql = 'SELECT * FROM '.$table.' WHERE session_id = 0'; $db_result = Database::query($sql, __FILE__, __LINE__); while ($obj = Database::fetch_object($db_result)) { @@ -528,7 +528,7 @@ class CourseBuilder $sql = 'SELECT * FROM '.$table. ' WHERE session_id ='.$session_id; } else { $table = Database :: get_course_table(TABLE_COURSE_DESCRIPTION); - $sql = 'SELECT * FROM '.$table; + $sql = 'SELECT * FROM '.$table. ' WHERE session_id = 0'; } $db_result = Database::query($sql, __FILE__, __LINE__); @@ -556,7 +556,7 @@ class CourseBuilder $table_item = Database :: get_course_table(TABLE_LP_ITEM); $table_tool = Database::get_course_table(TABLE_TOOL_LIST); - $sql = 'SELECT * FROM '.$table_main; + $sql = 'SELECT * FROM '.$table_main.' WHERE session_id = 0'; } $db_result = Database::query($sql, __FILE__, __LINE__); @@ -655,9 +655,9 @@ class CourseBuilder } else { $table_glossary = Database :: get_course_table(TABLE_GLOSSARY); if (!empty($this->course->type) && $this->course->type=='partial') { - $sql = 'SELECT * FROM '.$table_glossary.' g '; + $sql = 'SELECT * FROM '.$table_glossary.' g WHERE session_id = 0'; } else { - $sql = 'SELECT * FROM '.$table_glossary.' g '; + $sql = 'SELECT * FROM '.$table_glossary.' g WHERE session_id = 0'; } } @@ -698,17 +698,21 @@ class CourseBuilder return $list; } - function build_wiki() + function build_wiki($session_id = 0, $course_code = 0) { - // Database table definition - $tbl_wiki = Database::get_course_table('wiki'); - - $sql = 'SELECT * FROM ' . $tbl_wiki . ' INNER JOIN (SELECT MAX(id) as wikiid FROM ' . $tbl_wiki . ' GROUP BY page_id)ids ON id=ids.wikiid ORDER BY dtime DESC, group_id, reflink'; - + if (!empty($session_id) && !empty($course_code)) { + $course_info = api_get_course_info($course_code); + $tbl_wiki = Database::get_course_table(TABLE_WIKI,$course_info['dbName']); + $session_id = intval($session_id); + $sql = 'SELECT * FROM ' . $tbl_wiki . ' WHERE session_id='.$session_id.''; + } else { + $tbl_wiki = Database::get_course_table(TABLE_WIKI); + $sql = 'SELECT * FROM ' . $tbl_wiki . ' WHERE session_id = 0'; + } $db_result = api_sql_query($sql, __FILE__, __LINE__); while ($obj = mysql_fetch_object($db_result)) { - $wiki = new Wiki($obj->page_id, $obj->reflink, $obj->title, $obj->content, $obj->user_id, $obj->group_id, $obj->dtime); + $wiki = new Wiki($obj->id, $obj->page_id, $obj->reflink, $obj->title, $obj->content, $obj->user_id, $obj->group_id, $obj->dtime, $obj->progress, $obj->version); $this->course->add_resource($wiki); } } diff --git a/main/coursecopy/classes/CourseRecycler.class.php b/main/coursecopy/classes/CourseRecycler.class.php index f77fe0d52e..e0273546ba 100755 --- a/main/coursecopy/classes/CourseRecycler.class.php +++ b/main/coursecopy/classes/CourseRecycler.class.php @@ -85,6 +85,8 @@ class CourseRecycler $this->recycle_surveys(); $this->recycle_learnpaths(); $this->recycle_cours_description(); + $this->recycle_wiki(); + $this->recycle_glossary(); } /** * Delete documents @@ -103,6 +105,43 @@ class CourseRecycler Database::query($sql,__FILE__,__LINE__); } } + + /** + * Delete wiki + */ + function recycle_wiki() { + if ($this->course->has_resources(RESOURCE_WIKI)) { + $table_wiki = Database::get_course_table(TABLE_WIKI); + $table_wiki_conf = Database::get_course_table(TABLE_WIKI_CONF); + $table_wiki_discuss = Database::get_course_table(TABLE_WIKI_DISCUSS); + $table_wiki_mailcue = Database::get_course_table(TABLE_WIKI_MAILCUE); + + $pages = array(); + foreach ($this->course->resources[RESOURCE_WIKI] as $resource) { + $pages[] = $resource->page_id; + } + $wiki_ids = implode(',', (array_keys($this->course->resources[RESOURCE_WIKI]))); + $page_ids = implode(',', $pages); + + $sql = "DELETE FROM ".$table_wiki." WHERE id IN(".$wiki_ids.")"; + Database::query($sql,__FILE__,__LINE__); + $sql = "DELETE FROM ".$table_wiki_conf." WHERE page_id IN(".$page_ids.")"; + Database::query($sql,__FILE__,__LINE__); + } + } + + /** + * Delete glossary + */ + function recycle_glossary() { + if ($this->course->has_resources(RESOURCE_GLOSSARY)) { + $table_glossary = Database::get_course_table(TABLE_GLOSSARY); + $ids = implode(',', (array_keys($this->course->resources[RESOURCE_GLOSSARY]))); + $sql = "DELETE FROM ".$table_glossary." WHERE glossary_id IN(".$ids.")"; + Database::query($sql,__FILE__,__LINE__); + } + } + /** * Delete links */ diff --git a/main/coursecopy/classes/CourseRestorer.class.php b/main/coursecopy/classes/CourseRestorer.class.php index 5ffd8dfc69..e9934fe72e 100755 --- a/main/coursecopy/classes/CourseRestorer.class.php +++ b/main/coursecopy/classes/CourseRestorer.class.php @@ -104,7 +104,7 @@ class CourseRestorer $this->restore_learnpaths($session_id); $this->restore_links($session_id); $this->restore_course_descriptions($session_id); - $this->restore_wiki(); + $this->restore_wiki($session_id); } else { $this->restore_links(); $this->restore_tool_intro(); @@ -130,7 +130,7 @@ class CourseRestorer if (!empty($session_id)) { $condition_session = " , id_session='".intval($session_id)."'"; } - + foreach ($this->course->resources as $type => $resources) { if (is_array($resources)) { foreach ($resources as $id => $resource) { @@ -1442,7 +1442,7 @@ class CourseRestorer } } - function restore_wiki() + function restore_wiki($session_id = 0) { if ($this->course->has_resources(RESOURCE_WIKI)) { @@ -1457,26 +1457,32 @@ class CourseRestorer { //$wiki = new Wiki($obj->page_id, $obj->reflink, $obj->title, $obj->content, $obj->user_id, $obj->group_id, $obj->dtime); // the sql statement to insert the groups from the old course to the new course - $sql = "INSERT INTO $table_wiki (page_id, reflink, title, content, user_id, group_id, dtime) + + $sql = "INSERT INTO $table_wiki (page_id, reflink, title, content, user_id, group_id, dtime, progress, version, session_id) VALUES ( '".Database::escape_string($wiki->page_id)."', '".Database::escape_string($wiki->reflink)."', '".Database::escape_string($wiki->title)."', '".Database::escape_string($wiki->content)."', - '".Database::escape_string($wiki->user_id)."', " . - (empty($wiki->group_id) ? 'NULL' : Database::escape_string($wiki->group_id)).", - '".Database::escape_string($wiki->dtime)."')"; - $result = Database::query($sql, __FILE__, __LINE__); - $new_id = Database::insert_id(); + '".intval($wiki->user_id)."', + '".intval($wiki->group_id)."', + '".Database::escape_string($wiki->dtime)."', + '".Database::escape_string($wiki->progress)."', + '".intval($wiki->version)."', + '".(!empty($session_id)?intval($session_id):0)."')"; + $rs2 = Database::query($sql, __FILE__, __LINE__); + $new_id = Database::insert_id(); $this->course->resources[RESOURCE_WIKI][$id]->destination_id = $new_id; - - // we also add an entry in wiki_conf - $sql = "INSERT INTO $table_wiki_conf - (page_id, task, feedback1, feedback2, feedback3, fprogress1, fprogress2, fprogress3, max_size, max_text, max_version, startdate_assig, enddate_assig, delayedsubmit) - VALUES - ('".Database::escape_string($wiki->page_id)."', '', '', '', '', '', '', '', NULL, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0)"; - $result = Database::query($sql, __FILE__, __LINE__); - } + $sql = "UPDATE $table_wiki set page_id = '$new_id' WHERE id = '$new_id'"; + Database::query($sql, __FILE__, __LINE__); + + // we also add an entry in wiki_conf + $sql = "INSERT INTO $table_wiki_conf + (page_id, task, feedback1, feedback2, feedback3, fprogress1, fprogress2, fprogress3, max_size, max_text, max_version, startdate_assig, enddate_assig, delayedsubmit) + VALUES + ('".intval($new_id)."', '', '', '', '', '', '', '', NULL, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0)"; + $rs1 = Database::query($sql, __FILE__, __LINE__); + } } } } diff --git a/main/coursecopy/classes/Resource.class.php b/main/coursecopy/classes/Resource.class.php index 4ea4445552..869cfff6ec 100755 --- a/main/coursecopy/classes/Resource.class.php +++ b/main/coursecopy/classes/Resource.class.php @@ -186,6 +186,8 @@ class Resource // return TOOL_SURVEY_INVITATION; case RESOURCE_GLOSSARY: return TOOL_GLOSSARY; + case RESOURCE_WIKI: + return TOOL_WIKI; default: return null; } diff --git a/main/coursecopy/classes/wiki.class.php b/main/coursecopy/classes/wiki.class.php index dc92887440..4ae6c0277a 100755 --- a/main/coursecopy/classes/wiki.class.php +++ b/main/coursecopy/classes/wiki.class.php @@ -9,23 +9,29 @@ require_once('Resource.class.php'); class Wiki extends Resource { var $id; + var $page_id; var $reflink; var $title; var $content; var $user_id; var $group_id; var $timestamp; + var $progress; + var $version; - function Wiki($id, $reflink, $title, $content, $user_id, $group_id, $timestamp) + function Wiki($id, $page_id, $reflink, $title, $content, $user_id, $group_id, $timestamp, $progress, $version) { parent::Resource($id,RESOURCE_WIKI); - $this->page_id = $id; + $this->id = $id; + $this->page_id = $page_id; $this->reflink = $reflink; $this->title = $title; $this->content = $content; $this->user_id = $user_id; $this->group_id = $group_id; $this->dtime = $timestamp; + $this->progress = $progress; + $this->version = $version; } function show()