Index: backup/moodle2/backup_chat_activity_task.class.php ========================================================= --- backup/moodle2/backup_chat_activity_task.class.php Thu May 06 12:10:06 WST 2010 +++ backup/moodle2/backup_chat_activity_task.class.php Thu May 06 12:10:06 WST 2010 @@ -0,0 +1,86 @@ +. + +/** + * This is the "graphical" structure of the chat mod: + * + * chat + * (CL,pk->id) + * | + * | + * | + * chat_messages + * (UL,pk->id, fk->chatid) + * + * Meaning: pk->primary key field of the table + * fk->foreign key to link with parent + * nt->nested field (recursive data) + * CL->course level info + * UL->user level info + * + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards Dongsheng Cai + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +require_once($CFG->dirroot . '/mod/chat/backup/moodle2/backup_chat_stepslib.php'); // Because it exists (must) +require_once($CFG->dirroot . '/mod/chat/backup/moodle2/backup_chat_settingslib.php'); // Because it exists (optional) + +/** + * chat backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_chat_activity_task extends backup_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // chat only has one structure step + $this->add_step(new backup_chat_activity_structure_step('chat_structure', 'chat.xml')); + } + + /** + * Code the transformations to perform in the chat activity in + * order to get transportable (encoded) links + * + * @param string $content + * @return string + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot.'/mod/chat','#'); + + //Link to the list of chats + $pattern = "#(".$base."\/index.php\?id\=)([0-9]+)#"; + $content = preg_replace($pattern, '$@CHATINDEX*$2@$', $content); + + //Link to chat view by moduleid + $pattern = "#(".$base."\/view.php\?id\=)([0-9]+)#"; + $content = preg_replace($pattern, '$@CHATVIEWBYID*$2@$', $content); + + return $content; + } +} Index: backup/moodle2/backup_chat_settingslib.php ========================================================= --- backup/moodle2/backup_chat_settingslib.php Thu May 06 11:07:41 WST 2010 +++ backup/moodle2/backup_chat_settingslib.php Thu May 06 11:07:41 WST 2010 @@ -0,0 +1,27 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards Dongsheng Cai + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + + // This activity has not particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section)?php Index: backup/moodle2/backup_chat_stepslib.php ========================================================= --- backup/moodle2/backup_chat_stepslib.php Thu May 06 11:52:57 WST 2010 +++ backup/moodle2/backup_chat_stepslib.php Thu May 06 11:52:57 WST 2010 @@ -0,0 +1,66 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards Dongsheng Cai + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Define all the backup steps that will be used by the backup_chat_activity_task + */ +class backup_chat_activity_structure_step extends backup_activity_structure_step { + protected function define_structure() { + $userinfo = $this->get_setting_value('userinfo'); + + // Define each element separated + $chat = new backup_nested_element('chat', array('id'), array( + 'name', 'intro', 'introformat', 'keepdays', 'studentlogs', + 'chattime', 'schedule', 'timemodified')); + $messages = new backup_nested_element('messages'); + + $message = new backup_nested_element('message', array('id'), array('userid', 'groupid', 'system', 'message', 'timestamp')); + + // Build the tree + $chat->add_child($messages); + $messages->add_child($message); + + // Define sources + $chat->set_source_table('chat', array('id' => backup::VAR_ACTIVITYID)); + + // User related messages only happen if we are including user info + if ($userinfo) { + $message->set_source_sql(' + SELECT * + FROM {chat_messages} + WHERE chatid = ?', + array(backup::VAR_PARENTID) + ); + } + + // Define id annotations + $message->annotate_ids('user', 'userid'); + $message->annotate_ids('group', 'groupid'); + + // chat don't use files, so no files need to be processed here + + // Return the root element (chat), wrapped into standard activity structure + return $this->prepare_activity_structure($chat); + } +} Index: lib.php ========================================================= --- lib.php (revision 1.169) +++ lib.php Wed May 05 16:39:22 WST 2010 @@ -1221,6 +1221,7 @@ case FEATURE_GROUPINGS: return true; case FEATURE_GROUPMEMBERSONLY: return true; case FEATURE_MOD_INTRO: return true; + case FEATURE_BACKUP_MOODLE2: return true; case FEATURE_COMPLETION_TRACKS_VIEWS: return false; case FEATURE_GRADE_HAS_GRADE: return false; case FEATURE_GRADE_OUTCOMES: return true;