protected function define_structure() { global $DB; // Get the block $block = $DB->get_record('block_instances', array('id' => $this->task->get_blockid())); // Extract configdata $config = unserialize(base64_decode($block->configdata)); // Get array of used rss feeds if (!empty($config->rssid)) { $feedids = $config->rssid; // Get the IN corresponding query list($in_sql, $in_params) = $DB->get_in_or_equal($feedids); // Define all the in_params as sqlparams foreach ($in_params as $key => $value) { $in_params[$key] = backup_helper::is_sqlparam($value); } } // Define each element separated $rss_client = new backup_nested_element('rss_client', array('id'), null); $feeds = new backup_nested_element('feeds'); $feed = new backup_nested_element('feed', array('id'), array('title', 'preferredtitle', 'description', 'shared', 'url')); // Build the tree $rss_client->add_child($feeds); $feeds->add_child($feed); // Define sources $rss_client->set_source_array(array((object) array('id' => $this->task->get_blockid()))); // Only if there are feeds if (!empty($config->rssid)) { $feed->set_source_sql("\n SELECT *\n FROM {block_rss_client}\n WHERE id {$in_sql}", $in_params); } // Annotations (none) // Return the root element (rss_client), wrapped into standard block structure return $this->prepare_block_structure($rss_client); }
protected function define_structure() { // To know if we are including userinfo $userinfo = $this->get_setting_value('userinfo'); // Define each element separated $glossary = new backup_nested_element('glossary', array('id'), array('name', 'intro', 'introformat', 'allowduplicatedentries', 'displayformat', 'mainglossary', 'showspecial', 'showalphabet', 'showall', 'allowcomments', 'allowprintview', 'usedynalink', 'defaultapproval', 'globalglossary', 'entbypage', 'editalways', 'rsstype', 'rssarticles', 'assessed', 'assesstimestart', 'assesstimefinish', 'scale', 'timecreated', 'timemodified', 'completionentries')); $entries = new backup_nested_element('entries'); $entry = new backup_nested_element('entry', array('id'), array('userid', 'concept', 'definition', 'definitionformat', 'definitiontrust', 'attachment', 'timecreated', 'timemodified', 'teacherentry', 'sourceglossaryid', 'usedynalink', 'casesensitive', 'fullmatch', 'approved')); $aliases = new backup_nested_element('aliases'); $alias = new backup_nested_element('alias', array('id'), array('alias_text')); $ratings = new backup_nested_element('ratings'); $rating = new backup_nested_element('rating', array('id'), array('component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified')); $categories = new backup_nested_element('categories'); $category = new backup_nested_element('category', array('id'), array('name', 'usedynalink')); $categoryentries = new backup_nested_element('category_entries'); $categoryentry = new backup_nested_element('category_entry', array('id'), array('entryid')); // Build the tree $glossary->add_child($entries); $entries->add_child($entry); $entry->add_child($aliases); $aliases->add_child($alias); $entry->add_child($ratings); $ratings->add_child($rating); $glossary->add_child($categories); $categories->add_child($category); $category->add_child($categoryentries); $categoryentries->add_child($categoryentry); // Define sources $glossary->set_source_table('glossary', array('id' => backup::VAR_ACTIVITYID)); $category->set_source_table('glossary_categories', array('glossaryid' => backup::VAR_PARENTID)); // All the rest of elements only happen if we are including user info if ($userinfo) { $entry->set_source_table('glossary_entries', array('glossaryid' => backup::VAR_PARENTID)); $alias->set_source_table('glossary_alias', array('entryid' => backup::VAR_PARENTID)); $alias->set_source_alias('alias', 'alias_text'); $rating->set_source_table('rating', array('contextid' => backup::VAR_CONTEXTID, 'itemid' => backup::VAR_PARENTID, 'component' => backup_helper::is_sqlparam('mod_glossary'), 'ratingarea' => backup_helper::is_sqlparam('entry'))); $rating->set_source_alias('rating', 'value'); $categoryentry->set_source_table('glossary_entries_categories', array('categoryid' => backup::VAR_PARENTID)); } // Define id annotations $glossary->annotate_ids('scale', 'scale'); $entry->annotate_ids('user', 'userid'); $rating->annotate_ids('scale', 'scaleid'); $rating->annotate_ids('user', 'userid'); // Define file annotations $glossary->annotate_files('mod_glossary', 'intro', null); // This file area hasn't itemid $entry->annotate_files('mod_glossary', 'entry', 'id'); $entry->annotate_files('mod_glossary', 'attachment', 'id'); // Return the root element (glossary), wrapped into standard activity structure return $this->prepare_activity_structure($glossary); }
protected function define_course_plugin_structure() { $plugin = $this->get_plugin_element(); $plugin_element = new backup_nested_element($this->get_recommended_name()); $plugin->add_child($plugin_element); // Add courses from Turnitintool table $turnitin_courses = new backup_nested_element('turnitin_courses'); $turnitin_course = new backup_nested_element('turnitin_course', array('id'), array('courseid', 'ownerid', 'turnitin_ctl', 'turnitin_cid', 'course_type')); $plugin_element->add_child($turnitin_courses); $turnitin_courses->add_child($turnitin_course); $turnitin_course->set_source_table('turnitintooltwo_courses', array('courseid' => backup::VAR_COURSEID, 'course_type' => backup_helper::is_sqlparam('PP'))); return $plugin; }
protected function define_structure() { // To know if we are including userinfo $userinfo = $this->get_setting_value('userinfo'); // Define each element separated $data = new backup_nested_element('data', array('id'), array('name', 'intro', 'introformat', 'comments', 'timeavailablefrom', 'timeavailableto', 'timeviewfrom', 'timeviewto', 'requiredentries', 'requiredentriestoview', 'maxentries', 'rssarticles', 'singletemplate', 'listtemplate', 'listtemplateheader', 'listtemplatefooter', 'addtemplate', 'rsstemplate', 'rsstitletemplate', 'csstemplate', 'jstemplate', 'asearchtemplate', 'approval', 'manageapproved', 'scale', 'assessed', 'assesstimestart', 'assesstimefinish', 'defaultsort', 'defaultsortdir', 'editany', 'notification')); $fields = new backup_nested_element('fields'); $field = new backup_nested_element('field', array('id'), array('type', 'name', 'description', 'required', 'param1', 'param2', 'param3', 'param4', 'param5', 'param6', 'param7', 'param8', 'param9', 'param10')); $records = new backup_nested_element('records'); $record = new backup_nested_element('record', array('id'), array('userid', 'groupid', 'timecreated', 'timemodified', 'approved')); $contents = new backup_nested_element('contents'); $content = new backup_nested_element('content', array('id'), array('fieldid', 'content', 'content1', 'content2', 'content3', 'content4')); $ratings = new backup_nested_element('ratings'); $rating = new backup_nested_element('rating', array('id'), array('component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified')); // Build the tree $data->add_child($fields); $fields->add_child($field); $data->add_child($records); $records->add_child($record); $record->add_child($contents); $contents->add_child($content); $record->add_child($ratings); $ratings->add_child($rating); // Define sources $data->set_source_table('data', array('id' => backup::VAR_ACTIVITYID)); $field->set_source_sql(' SELECT * FROM {data_fields} WHERE dataid = ?', array(backup::VAR_PARENTID)); // All the rest of elements only happen if we are including user info if ($userinfo) { $record->set_source_table('data_records', array('dataid' => backup::VAR_PARENTID)); $content->set_source_table('data_content', array('recordid' => backup::VAR_PARENTID)); $rating->set_source_table('rating', array('contextid' => backup::VAR_CONTEXTID, 'itemid' => backup::VAR_PARENTID, 'component' => backup_helper::is_sqlparam('mod_data'), 'ratingarea' => backup_helper::is_sqlparam('entry'))); $rating->set_source_alias('rating', 'value'); } // Define id annotations $data->annotate_ids('scale', 'scale'); $record->annotate_ids('user', 'userid'); $record->annotate_ids('group', 'groupid'); $rating->annotate_ids('scale', 'scaleid'); $rating->annotate_ids('user', 'userid'); // Define file annotations $data->annotate_files('mod_data', 'intro', null); // This file area hasn't itemid $content->annotate_files('mod_data', 'content', 'id'); // By content->id // Return the root element (data), wrapped into standard activity structure return $this->prepare_activity_structure($data); }
protected function define_course_plugin_structure() { // Define the virtual plugin element without conditions as the global class checks already. $plugin = $this->get_plugin_element(); // Create one standard named plugin element (the visible container). $pluginwrapper = new backup_nested_element($this->get_recommended_name()); // Connect the visible container ASAP. $plugin->add_child($pluginwrapper); // Save id from compilatio course. $compilatioconfigs = new backup_nested_element('compilatio_configs'); $compilatioconfig = new backup_nested_element('compilatio_config', array('id'), array('plugin', 'name', 'value')); $pluginwrapper->add_child($compilatioconfigs); $compilatioconfigs->add_child($compilatioconfig); $compilatioconfig->set_source_table('config_plugins', array('name' => backup::VAR_PARENTID, 'plugin' => backup_helper::is_sqlparam('plagiarism_compilatio_course'))); return $plugin; }
protected function define_structure() { // The lesson table // This table contains all of the goodness for the lesson module, quite // alot goes into it but nothing relational other than course when will // need to be corrected upon restore. $lesson = new backup_nested_element('lesson', array('id'), array('course', 'name', 'intro', 'introformat', 'practice', 'modattempts', 'usepassword', 'password', 'dependency', 'conditions', 'grade', 'custom', 'ongoing', 'usemaxgrade', 'maxanswers', 'maxattempts', 'review', 'nextpagedefault', 'feedback', 'minquestions', 'maxpages', 'timelimit', 'retake', 'activitylink', 'mediafile', 'mediaheight', 'mediawidth', 'mediaclose', 'slideshow', 'width', 'height', 'bgcolor', 'displayleft', 'displayleftif', 'progressbar', 'available', 'deadline', 'timemodified', 'completionendreached', 'completiontimespent')); // The lesson_pages table // Grouped within a `pages` element, important to note that page is relational // to the lesson, and also to the previous/next page in the series. // Upon restore prevpageid and nextpageid will need to be corrected. $pages = new backup_nested_element('pages'); $page = new backup_nested_element('page', array('id'), array('prevpageid', 'nextpageid', 'qtype', 'qoption', 'layout', 'display', 'timecreated', 'timemodified', 'title', 'contents', 'contentsformat')); // The lesson_answers table // Grouped within an answers `element`, the lesson_answers table relates // to the page and lesson with `pageid` and `lessonid` that will both need // to be corrected during restore. $answers = new backup_nested_element('answers'); $answer = new backup_nested_element('answer', array('id'), array('jumpto', 'grade', 'score', 'flags', 'timecreated', 'timemodified', 'answer_text', 'response', 'answerformat', 'responseformat')); // Tell the answer element about the answer_text elements mapping to the answer // database field. $answer->set_source_alias('answer', 'answer_text'); // The lesson_attempts table // Grouped by an `attempts` element this is relational to the page, lesson, // and user. $attempts = new backup_nested_element('attempts'); $attempt = new backup_nested_element('attempt', array('id'), array('userid', 'retry', 'correct', 'useranswer', 'timeseen')); // The lesson_branch table // Grouped by a `branch` element this is relational to the page, lesson, // and user. $branches = new backup_nested_element('branches'); $branch = new backup_nested_element('branch', array('id'), array('userid', 'retry', 'flag', 'timeseen', 'nextpageid')); // The lesson_grades table // Grouped by a grades element this is relational to the lesson and user. $grades = new backup_nested_element('grades'); $grade = new backup_nested_element('grade', array('id'), array('userid', 'grade', 'late', 'completed')); // The lesson_timer table // Grouped by a `timers` element this is relational to the lesson and user. $timers = new backup_nested_element('timers'); $timer = new backup_nested_element('timer', array('id'), array('userid', 'starttime', 'lessontime', 'completed')); $overrides = new backup_nested_element('overrides'); $override = new backup_nested_element('override', array('id'), array('groupid', 'userid', 'available', 'deadline', 'timelimit', 'review', 'maxattempts', 'retake', 'password')); // Now that we have all of the elements created we've got to put them // together correctly. $lesson->add_child($pages); $pages->add_child($page); $page->add_child($answers); $answers->add_child($answer); $answer->add_child($attempts); $attempts->add_child($attempt); $page->add_child($branches); $branches->add_child($branch); $lesson->add_child($grades); $grades->add_child($grade); $lesson->add_child($timers); $timers->add_child($timer); $lesson->add_child($overrides); $overrides->add_child($override); // Set the source table for the elements that aren't reliant on the user // at this point (lesson, lesson_pages, lesson_answers) $lesson->set_source_table('lesson', array('id' => backup::VAR_ACTIVITYID)); //we use SQL here as it must be ordered by prevpageid so that restore gets the pages in the right order. $page->set_source_table('lesson_pages', array('lessonid' => backup::VAR_PARENTID), 'prevpageid ASC'); // We use SQL here as answers must be ordered by id so that the restore gets them in the right order $answer->set_source_table('lesson_answers', array('pageid' => backup::VAR_PARENTID), 'id ASC'); // Lesson overrides to backup are different depending of user info. $overrideparams = array('lessonid' => backup::VAR_PARENTID); // Check if we are also backing up user information if ($this->get_setting_value('userinfo')) { // Set the source table for elements that are reliant on the user // lesson_attempts, lesson_branch, lesson_grades, lesson_timer. $attempt->set_source_table('lesson_attempts', array('answerid' => backup::VAR_PARENTID)); $branch->set_source_table('lesson_branch', array('pageid' => backup::VAR_PARENTID)); $grade->set_source_table('lesson_grades', array('lessonid' => backup::VAR_PARENTID)); $timer->set_source_table('lesson_timer', array('lessonid' => backup::VAR_PARENTID)); } else { $overrideparams['userid'] = backup_helper::is_sqlparam(null); // Without userinfo, skip user overrides. } $override->set_source_table('lesson_overrides', $overrideparams); // Annotate the user id's where required. $attempt->annotate_ids('user', 'userid'); $branch->annotate_ids('user', 'userid'); $grade->annotate_ids('user', 'userid'); $timer->annotate_ids('user', 'userid'); $override->annotate_ids('user', 'userid'); $override->annotate_ids('group', 'groupid'); // Annotate the file areas in user by the lesson module. $lesson->annotate_files('mod_lesson', 'intro', null); $lesson->annotate_files('mod_lesson', 'mediafile', null); $page->annotate_files('mod_lesson', 'page_contents', 'id'); $answer->annotate_files('mod_lesson', 'page_answers', 'id'); $answer->annotate_files('mod_lesson', 'page_responses', 'id'); $attempt->annotate_files('mod_lesson', 'essay_responses', 'id'); // Prepare and return the structure we have just created for the lesson module. return $this->prepare_activity_structure($lesson); }
protected function define_structure() { // To know if we are including userinfo $userinfo = $this->get_setting_value('userinfo'); // Define each element separated $forum = new backup_nested_element('forum', array('id'), array('type', 'name', 'intro', 'introformat', 'assessed', 'assesstimestart', 'assesstimefinish', 'scale', 'maxbytes', 'maxattachments', 'forcesubscribe', 'trackingtype', 'rsstype', 'rssarticles', 'timemodified', 'warnafter', 'blockafter', 'blockperiod', 'completiondiscussions', 'completionreplies', 'completionposts', 'displaywordcount')); $discussions = new backup_nested_element('discussions'); $discussion = new backup_nested_element('discussion', array('id'), array('name', 'firstpost', 'userid', 'groupid', 'assessed', 'timemodified', 'usermodified', 'timestart', 'timeend')); $posts = new backup_nested_element('posts'); $post = new backup_nested_element('post', array('id'), array('parent', 'userid', 'created', 'modified', 'mailed', 'subject', 'message', 'messageformat', 'messagetrust', 'attachment', 'totalscore', 'mailnow')); $ratings = new backup_nested_element('ratings'); $rating = new backup_nested_element('rating', array('id'), array('component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified')); $subscriptions = new backup_nested_element('subscriptions'); $subscription = new backup_nested_element('subscription', array('id'), array('userid')); $digests = new backup_nested_element('digests'); $digest = new backup_nested_element('digest', array('id'), array('userid', 'maildigest')); $readposts = new backup_nested_element('readposts'); $read = new backup_nested_element('read', array('id'), array('userid', 'discussionid', 'postid', 'firstread', 'lastread')); $trackedprefs = new backup_nested_element('trackedprefs'); $track = new backup_nested_element('track', array('id'), array('userid')); // Build the tree $forum->add_child($discussions); $discussions->add_child($discussion); $forum->add_child($subscriptions); $subscriptions->add_child($subscription); $forum->add_child($digests); $digests->add_child($digest); $forum->add_child($readposts); $readposts->add_child($read); $forum->add_child($trackedprefs); $trackedprefs->add_child($track); $discussion->add_child($posts); $posts->add_child($post); $post->add_child($ratings); $ratings->add_child($rating); // Define sources $forum->set_source_table('forum', array('id' => backup::VAR_ACTIVITYID)); // All these source definitions only happen if we are including user info if ($userinfo) { $discussion->set_source_sql(' SELECT * FROM {forum_discussions} WHERE forum = ?', array(backup::VAR_PARENTID)); // Need posts ordered by id so parents are always before childs on restore $post->set_source_table('forum_posts', array('discussion' => backup::VAR_PARENTID), 'id ASC'); $subscription->set_source_table('forum_subscriptions', array('forum' => backup::VAR_PARENTID)); $digest->set_source_table('forum_digests', array('forum' => backup::VAR_PARENTID)); $read->set_source_table('forum_read', array('forumid' => backup::VAR_PARENTID)); $track->set_source_table('forum_track_prefs', array('forumid' => backup::VAR_PARENTID)); $rating->set_source_table('rating', array('contextid' => backup::VAR_CONTEXTID, 'component' => backup_helper::is_sqlparam('mod_forum'), 'ratingarea' => backup_helper::is_sqlparam('post'), 'itemid' => backup::VAR_PARENTID)); $rating->set_source_alias('rating', 'value'); } // Define id annotations $forum->annotate_ids('scale', 'scale'); $discussion->annotate_ids('group', 'groupid'); $post->annotate_ids('user', 'userid'); $rating->annotate_ids('scale', 'scaleid'); $rating->annotate_ids('user', 'userid'); $subscription->annotate_ids('user', 'userid'); $digest->annotate_ids('user', 'userid'); $read->annotate_ids('user', 'userid'); $track->annotate_ids('user', 'userid'); // Define file annotations $forum->annotate_files('mod_forum', 'intro', null); // This file area hasn't itemid $post->annotate_files('mod_forum', 'post', 'id'); $post->annotate_files('mod_forum', 'attachment', 'id'); // Return the root element (forum), wrapped into standard activity structure return $this->prepare_activity_structure($forum); }
protected function define_structure() { global $CFG; // To know if we are including userinfo. $userinfo = $this->get_setting_value('userinfo'); // Define each element separated. $dataform = new backup_nested_element('dataform', array('id'), array('name', 'intro', 'introformat', 'inlineview', 'embedded', 'timemodified', 'timeavailable', 'timedue', 'timeinterval', 'intervalcount', 'grade', 'gradeitems', 'maxentries', 'entriesrequired', 'individualized', 'grouped', 'anonymous', 'timelimit', 'css', 'cssincludes', 'js', 'jsincludes', 'defaultview', 'defaultfilter', 'completionentries', 'completionspecificgrade')); $fields = new backup_nested_element('fields'); $field = new backup_nested_element('field', array('id'), array('type', 'name', 'description', 'visible', 'editable', 'label', 'defaultcontentmode', 'defaultcontent', 'param1', 'param2', 'param3', 'param4', 'param5', 'param6', 'param7', 'param8', 'param9', 'param10')); $filters = new backup_nested_element('filters'); $filter = new backup_nested_element('filter', array('id'), array('name', 'description', 'visible', 'perpage', 'selection', 'search', 'customsort', 'customsearch')); $views = new backup_nested_element('views'); $view = new backup_nested_element('view', array('id'), array('type', 'name', 'description', 'visible', 'perpage', 'filterid', 'patterns', 'submission', 'section', 'param1', 'param2', 'param3', 'param4', 'param5', 'param6', 'param7', 'param8', 'param9', 'param10')); $entries = new backup_nested_element('entries'); $entry = new backup_nested_element('entry', array('id'), array('userid', 'groupid', 'timecreated', 'timemodified', 'state')); $contents = new backup_nested_element('contents'); $content = new backup_nested_element('content', array('id'), array('fieldid', 'content', 'content1', 'content2', 'content3', 'content4')); $ratings = new backup_nested_element('ratings'); $rating = new backup_nested_element('rating', array('id'), array('component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified')); // Build the tree. $dataform->add_child($fields); $fields->add_child($field); $dataform->add_child($filters); $filters->add_child($filter); $dataform->add_child($views); $views->add_child($view); $dataform->add_child($entries); $entries->add_child($entry); $entry->add_child($contents); $contents->add_child($content); $entry->add_child($ratings); $ratings->add_child($rating); // Define sources. $dataform->set_source_table('dataform', array('id' => backup::VAR_ACTIVITYID)); $field->set_source_table('dataform_fields', array('dataid' => backup::VAR_PARENTID)); $filter->set_source_table('dataform_filters', array('dataid' => backup::VAR_PARENTID)); $view->set_source_table('dataform_views', array('dataid' => backup::VAR_PARENTID)); // All the rest of elements only happen if we are including user info. if ($userinfo) { $entry->set_source_table('dataform_entries', array('dataid' => backup::VAR_PARENTID)); $content->set_source_table('dataform_contents', array('entryid' => backup::VAR_PARENTID)); // Entry ratings. $rating->set_source_table('rating', array('contextid' => backup::VAR_CONTEXTID, 'itemid' => backup::VAR_PARENTID, 'component' => backup_helper::is_sqlparam('mod_dataform'))); $rating->set_source_alias('rating', 'value'); } // Define id annotations. $entry->annotate_ids('user', 'userid'); $entry->annotate_ids('group', 'groupid'); $rating->annotate_ids('scale', 'scaleid'); $rating->annotate_ids('user', 'userid'); // Define file annotations. $dataform->annotate_files('mod_dataform', 'intro', null); // This file area hasn't itemid. $dataform->annotate_files('mod_dataform', 'activityicon', null); // This file area hasn't itemid. $content->annotate_files('mod_dataform', 'content', 'id'); // By content->id. $this->annotate_dataformplugin_files('dataformfield', $field); // By field->id. $this->annotate_dataformplugin_files('dataformview', $view); // By view->id. // Return the root element (data), wrapped into standard activity structure. return $this->prepare_activity_structure($dataform); }
protected function define_structure() { // To know if we are including userinfo $userinfo = $this->get_setting_value('userinfo'); // Define each element separated $quiz = new backup_nested_element('quiz', array('id'), array('name', 'intro', 'introformat', 'timeopen', 'timeclose', 'optionflags', 'penaltyscheme', 'attempts', 'attemptonlast', 'grademethod', 'decimalpoints', 'questiondecimalpoints', 'review', 'questionsperpage', 'shufflequestions', 'shuffleanswers', 'questions', 'sumgrades', 'grade', 'timecreated', 'timemodified', 'timelimit', 'password', 'subnet', 'popup', 'delay1', 'delay2', 'showuserpicture', 'showblocks')); $qinstances = new backup_nested_element('question_instances'); $qinstance = new backup_nested_element('question_instance', array('id'), array('question', 'grade')); $feedbacks = new backup_nested_element('feedbacks'); $feedback = new backup_nested_element('feedback', array('id'), array('feedbacktext', 'feedbacktextformat', 'mingrade', 'maxgrade')); $overrides = new backup_nested_element('overrides'); $override = new backup_nested_element('override', array('id'), array('userid', 'groupid', 'timeopen', 'timeclose', 'timelimit', 'attempts', 'password')); $grades = new backup_nested_element('grades'); $grade = new backup_nested_element('grade', array('id'), array('userid', 'gradeval', 'timemodified')); $attempts = new backup_nested_element('attempts'); $attempt = new backup_nested_element('attempt', array('id'), array('uniqueid', 'userid', 'attemptnum', 'sumgrades', 'timestart', 'timefinish', 'timemodified', 'layout', 'preview')); // This module is using questions, so produce the related question states and sessions // attaching them to the $attempt element based in 'uniqueid' matching $this->add_question_attempts_states($attempt, 'uniqueid'); $this->add_question_attempts_sessions($attempt, 'uniqueid'); // Build the tree $quiz->add_child($qinstances); $qinstances->add_child($qinstance); $quiz->add_child($feedbacks); $feedbacks->add_child($feedback); $quiz->add_child($overrides); $overrides->add_child($override); $quiz->add_child($grades); $grades->add_child($grade); $quiz->add_child($attempts); $attempts->add_child($attempt); // Define sources $quiz->set_source_table('quiz', array('id' => backup::VAR_ACTIVITYID)); $qinstance->set_source_table('quiz_question_instances', array('quiz' => backup::VAR_PARENTID)); $feedback->set_source_table('quiz_feedback', array('quizid' => backup::VAR_PARENTID)); // Quiz overrides to backup are different depending of user info $overrideparams = array('quiz' => backup::VAR_PARENTID); if (!$userinfo) { // Without userinfo, skip user overrides $overrideparams['userid'] = backup_helper::is_sqlparam(null); } $override->set_source_table('quiz_overrides', $overrideparams); // All the rest of elements only happen if we are including user info if ($userinfo) { $grade->set_source_table('quiz_grades', array('quiz' => backup::VAR_PARENTID)); $attempt->set_source_table('quiz_attempts', array('quiz' => backup::VAR_PARENTID)); } // Define source alias $grade->set_source_alias('grade', 'gradeval'); $attempt->set_source_alias('attempt', 'attemptnum'); // Define id annotations $qinstance->annotate_ids('question', 'question'); $override->annotate_ids('user', 'userid'); $override->annotate_ids('group', 'groupid'); $grade->annotate_ids('user', 'userid'); $attempt->annotate_ids('user', 'userid'); // Define file annotations $quiz->annotate_files('mod_quiz', 'intro', null); // This file area hasn't itemid $feedback->annotate_files('mod_quiz', 'feedback', 'id'); // Return the root element (quiz), wrapped into standard activity structure return $this->prepare_activity_structure($quiz); }
protected function define_structure() { // To know if we are including userinfo $userinfo = $this->get_setting_value('userinfo'); // Define each element separated $forumng = new backup_nested_element('forumng', array('id'), array('name', 'intro', 'introformat', 'type', 'ratingscale', 'ratingfrom', 'ratinguntil', 'ratingthreshold', 'grading', 'attachmentmaxbytes', 'reportingemail', 'subscription', 'feedtype', 'feeditems', 'maxpostsperiod', 'maxpostsblock', 'postingfrom', 'postinguntil', 'typedata', 'magicnumber', 'completiondiscussions', 'completionreplies', 'completionposts', 'removeafter', 'removeto', 'shared', 'originalcmid', 'gradingscale', 'canpostanon', 'tags', 'enableratings')); $discussions = new backup_nested_element('discussions'); $discussion = new backup_nested_element('discussion', array('id'), array('groupid', 'timestart', 'timeend', 'deleted', 'locked', 'sticky')); $posts = new backup_nested_element('posts'); $post = new backup_nested_element('post', array('id'), array('parentpostid', 'userid', 'created', 'modified', 'deleted', 'deleteuserid', 'important', 'mailstate', 'oldversion', 'edituserid', 'subject', 'message', 'messageformat', 'attachments', 'asmoderator')); $newratings = new backup_nested_element('newratings'); $newrating = new backup_nested_element('newrating', array('id'), array('component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified')); $ratings = new backup_nested_element('ratings'); $rating = new backup_nested_element('rating', array('id'), array('userid', 'time', 'rating')); $subscriptions = new backup_nested_element('subscriptions'); $subscription = new backup_nested_element('subscription', array('id'), array('userid', 'subscribed', 'discussionid', 'clonecmid', 'groupid')); $readdiscussions = new backup_nested_element('readdiscussions'); $read = new backup_nested_element('read', array('id'), array('userid', 'time')); $readposts = new backup_nested_element('readposts'); $readp = new backup_nested_element('readpost', array('id'), array('userid', 'time')); $drafts = new backup_nested_element('drafts'); $draft = new backup_nested_element('draft', array('id'), array('userid', 'groupid', 'parentpostid', 'subject', 'message', 'messageformat', 'attachments', 'saved', 'options', 'asmoderator')); $flags = new backup_nested_element('flags'); $flag = new backup_nested_element('flag', array('id'), array('userid', 'flagged')); $flagsd = new backup_nested_element('flagsd'); $flagd = new backup_nested_element('flagd', array('id'), array('userid', 'flagged')); $tags = new backup_nested_element('tags'); $tag = new backup_nested_element('tag', array('id'), array('name', 'rawname')); $forumtaginstances = new backup_nested_element('forumtaginstances'); $forumtaginstance = new backup_nested_element('forumtaginstance', array('id'), array('name', 'rawname', 'tagid', 'itemtype', 'tiuserid', 'ordering', 'component')); $forumgrouptaginstances = new backup_nested_element('forumgrouptaginstances'); $forumgrouptaginstance = new backup_nested_element('forumgrouptaginstance', array('id'), array('name', 'rawname', 'tagid', 'itemtype', 'itemid', 'tiuserid', 'ordering', 'component')); // Build the tree $forumng->add_child($discussions); $discussions->add_child($discussion); $forumng->add_child($subscriptions); $subscriptions->add_child($subscription); $forumng->add_child($drafts); $drafts->add_child($draft); $discussion->add_child($posts); $posts->add_child($post); $discussion->add_child($readdiscussions); $readdiscussions->add_child($read); $discussion->add_child($flagsd); $flagsd->add_child($flagd); $post->add_child($newratings); $newratings->add_child($newrating); $post->add_child($ratings); $ratings->add_child($rating); $post->add_child($flags); $flags->add_child($flag); $post->add_child($readposts); $readposts->add_child($readp); $discussion->add_child($tags); $tags->add_child($tag); $forumng->add_child($forumtaginstances); $forumtaginstances->add_child($forumtaginstance); $forumng->add_child($forumgrouptaginstances); $forumgrouptaginstances->add_child($forumgrouptaginstance); // Define sources $forumng->set_source_table('forumng', array('id' => backup::VAR_ACTIVITYID)); // All these source definitions only happen if we are including user info if ($userinfo) { $discussion->set_source_table('forumng_discussions', array('forumngid' => backup::VAR_PARENTID)); $subscription->set_source_table('forumng_subscriptions', array('forumngid' => backup::VAR_PARENTID)); $draft->set_source_table('forumng_drafts', array('forumngid' => backup::VAR_PARENTID)); // Need posts ordered by id so parents are always before childs on restore $post->set_source_sql("SELECT * FROM {forumng_posts} WHERE discussionid = ?" . "ORDER BY id", array(backup::VAR_PARENTID)); $read->set_source_table('forumng_read', array('discussionid' => backup::VAR_PARENTID)); $readp->set_source_table('forumng_read_posts', array('postid' => backup::VAR_PARENTID)); $newrating->set_source_table('rating', array('contextid' => backup::VAR_CONTEXTID, 'itemid' => backup::VAR_PARENTID, 'component' => backup_helper::is_sqlparam('mod_forumng'), 'ratingarea' => backup_helper::is_sqlparam('post'))); $newrating->set_source_alias('rating', 'value'); $rating->set_source_table('forumng_ratings', array('postid' => backup::VAR_PARENTID)); $flag->set_source_table('forumng_flags', array('postid' => backup::VAR_PARENTID)); $flagd->set_source_table('forumng_flags', array('discussionid' => backup::VAR_PARENTID)); $tag->set_source_sql('SELECT t.id, t.name, t.rawname FROM {tag} t JOIN {tag_instance} ti ON ti.tagid = t.id WHERE ti.itemtype = ? AND ti.component = ? AND ti.itemid = ?', array(backup_helper::is_sqlparam('forumng_discussions'), backup_helper::is_sqlparam('mod_forumng'), backup::VAR_PARENTID)); } $forumtaginstance->set_source_sql('SELECT t.name, t.rawname, ti.* FROM {tag} t JOIN {tag_instance} ti ON ti.tagid = t.id WHERE ti.contextid = ? AND ti.itemid = ? AND ti.itemtype = ? AND ti.component = ?', array(backup::VAR_CONTEXTID, backup::VAR_PARENTID, backup_helper::is_sqlparam('forumng'), backup_helper::is_sqlparam('mod_forumng'))); $forumgrouptaginstance->set_source_sql('SELECT t.name, t.rawname, ti.* FROM {tag} t JOIN {tag_instance} ti ON ti.tagid = t.id WHERE ti.contextid = ? AND ti.itemtype = ? AND ti.component = ?', array(backup::VAR_CONTEXTID, backup_helper::is_sqlparam('groups'), backup_helper::is_sqlparam('mod_forumng'))); // Define id annotations $forumng->annotate_ids('course_modules', 'originalcmid'); $forumng->annotate_ids('scale', 'ratingscale'); $discussion->annotate_ids('group', 'groupid'); $post->annotate_ids('user', 'userid'); $post->annotate_ids('user', 'deleteuserid'); $post->annotate_ids('user', 'edituserid'); $newrating->annotate_ids('user', 'userid'); $newrating->annotate_ids('scale', 'scaleid'); $rating->annotate_ids('user', 'userid'); $subscription->annotate_ids('user', 'userid'); $subscription->annotate_ids('group', 'groupid'); $subscription->annotate_ids('course_modules', 'clonecmid'); $read->annotate_ids('user', 'userid'); $readp->annotate_ids('user', 'userid'); $draft->annotate_ids('user', 'userid'); $draft->annotate_ids('group', 'groupid'); $flag->annotate_ids('user', 'userid'); $forumgrouptaginstance->annotate_ids('group', 'itemid'); // Define file annotations $forumng->annotate_files('mod_forumng', 'intro', null); // This file area hasn't itemid $post->annotate_files('mod_forumng', 'message', 'id'); $post->annotate_files('mod_forumng', 'attachment', 'id'); $draft->annotate_files('mod_forumng', 'draft', 'id'); // Return the root element (forumng), wrapped into standard activity structure return $this->prepare_activity_structure($forumng); }
protected function define_structure() { // To know if we are including userinfo $userinfo = $this->get_setting_value('userinfo'); // Define each element separated $wiki = new backup_nested_element('wiki', array('id'), array('name', 'intro', 'introformat', 'timecreated', 'timemodified', 'firstpagetitle', 'wikimode', 'defaultformat', 'forceformat', 'editbegin', 'editend')); $subwikis = new backup_nested_element('subwikis'); $subwiki = new backup_nested_element('subwiki', array('id'), array('groupid', 'userid')); $pages = new backup_nested_element('pages'); $page = new backup_nested_element('page', array('id'), array('title', 'cachedcontent', 'timecreated', 'timemodified', 'timerendered', 'userid', 'pageviews', 'readonly')); $synonyms = new backup_nested_element('synonyms'); $synonym = new backup_nested_element('synonym', array('id'), array('pageid', 'pagesynonym')); $links = new backup_nested_element('links'); $link = new backup_nested_element('link', array('id'), array('frompageid', 'topageid', 'tomissingpage')); $versions = new backup_nested_element('versions'); $version = new backup_nested_element('version', array('id'), array('content', 'contentformat', 'version', 'timecreated', 'userid')); $tags = new backup_nested_element('tags'); $tag = new backup_nested_element('tag', array('id'), array('name', 'rawname')); // Build the tree $wiki->add_child($subwikis); $subwikis->add_child($subwiki); $subwiki->add_child($pages); $pages->add_child($page); $subwiki->add_child($synonyms); $synonyms->add_child($synonym); $subwiki->add_child($links); $links->add_child($link); $page->add_child($versions); $versions->add_child($version); $page->add_child($tags); $tags->add_child($tag); // Define sources $wiki->set_source_table('wiki', array('id' => backup::VAR_ACTIVITYID)); // All these source definitions only happen if we are including user info if ($userinfo) { $subwiki->set_source_sql(' SELECT * FROM {wiki_subwikis} WHERE wikiid = ?', array(backup::VAR_PARENTID)); $page->set_source_table('wiki_pages', array('subwikiid' => backup::VAR_PARENTID)); $synonym->set_source_table('wiki_synonyms', array('subwikiid' => backup::VAR_PARENTID)); $link->set_source_table('wiki_links', array('subwikiid' => backup::VAR_PARENTID)); $version->set_source_table('wiki_versions', array('pageid' => backup::VAR_PARENTID)); $tag->set_source_sql('SELECT t.id, t.name, t.rawname FROM {tag} t JOIN {tag_instance} ti ON ti.tagid = t.id WHERE ti.itemtype = ? AND ti.itemid = ?', array(backup_helper::is_sqlparam('wiki_pages'), backup::VAR_PARENTID)); } // Define id annotations $subwiki->annotate_ids('group', 'groupid'); $subwiki->annotate_ids('user', 'userid'); $page->annotate_ids('user', 'userid'); $version->annotate_ids('user', 'userid'); // Define file annotations $wiki->annotate_files('mod_wiki', 'intro', null); // This file area hasn't itemid $subwiki->annotate_files('mod_wiki', 'attachments', 'id'); // This file area hasn't itemid // Return the root element (wiki), wrapped into standard activity structure return $this->prepare_activity_structure($wiki); }
/** * Defines the backup structure of the module * * @return backup_nested_element */ protected function define_structure() { // Get know if we are including userinfo. $userinfo = $this->get_setting_value('userinfo'); // Define the root element describing the resop instance. $resop = new backup_nested_element('resop', array('id'), array('name', 'intro', 'introformat', 'grade', 'id_abt', 'type')); // If we had more elements, we would build the tree here. //(kr) yes, I forgot this, so the backup contains nothing :-) //leider nicht verstanden - backup bleibt erstmal unvollständig //https://docs.moodle.org/dev/Backup_2.0_for_developers#Defining_each_element /* * Problem: habe elemente, die die gesamte moodle-Instanz betreffen und elemente, * die nur das Modul hier betreffen - mir unklar, wie ich hier ein Backup * mit der moodlefunktionalität stricken kann. * vielleicht muesen die in der task class aufgenommen werden ? * * */ $usedResources = new backup_nested_element('usedResources'); //mdl_resop_resource_user $usedResource = new backup_nested_element('usedResource', array('id'), array('uid', 'resid', 'actid', 'creation', 'termin', 'moun', 'note', 'time')); $usedUsers = new backup_nested_element('usedUsers'); //mdl_resop_resop_user, alle s. unten bei source $usedUser = new backup_nested_element('usedUser', array('uid'), array('actid')); //die uid reicht an sich //bei fester actid muesste uid eindeutig sein! lasse ich actid jedoch weg, speichert er nichts $resources = new backup_nested_element('resources'); //mdl_resop_resource $resource = new backup_nested_element('resource', array('id'), array('actid', 'name', 'anzahl')); $departements = new backup_nested_element('departements'); //mdl_resop_abt, alle s. unten bei source $departement = new backup_nested_element('departement', array('id'), array('name')); $users = new backup_nested_element('users'); //mdl_resop_user, alle s. unten bei source $user = new backup_nested_element('user', array('id'), array('name')); // /* //$users = new backup_nested_element('users');//mdl_resop_user //$user = new backup_nested_element('user', array('id'), array('name')); $usedUsers = new backup_nested_element('usedUsers');//mdl_resop_resop_user $usedUser = new backup_nested_element('usedUser', array('id'),array('actid','uid')); //Problem: have no id in this the resop_resop_user table, so maybe i have to generate one */ //build the tree $resop->add_child($usedResources); $usedResources->add_child($usedResource); $resop->add_child($resources); $resources->add_child($resource); $resop->add_child($usedUsers); $usedUsers->add_child($usedUser); $resop->add_child($departements); $departements->add_child($departement); $resop->add_child($users); $users->add_child($user); /* //$resop->add_child($users); //$users->add_child($user); $resop->add_child($usedUsers); $usedUsers->add_child($usedUser); */ // Define data sources. $resop->set_source_table('resop', array('id' => backup::VAR_ACTIVITYID)); $usedResource->set_source_table('resop_resource_user', array('actid' => backup::VAR_ACTIVITYID)); $resource->set_source_table('resop_resource', array('actid' => backup::VAR_ACTIVITYID)); $usedUser->set_source_table('resop_resop_user', array('actid' => backup::VAR_ACTIVITYID)); //muesste einfacher gehen, da uid eindeutig wenn actid fest //$usedUser->set_source_sql('SELECT @i:=@i+1 AS id, t.* FROM mdl_resop_resop_user AS t, (SELECT @i:=0) AS foo where t.actid=?', // array('actid' => backup::VAR_ACTIVITYID)); //hier nehme ich alle $departement->set_source_sql('select * from {resop_abt} where id like ?', array(backup_helper::is_sqlparam('%'))); $user->set_source_sql('select * from {resop_user} where id like ?', array(backup_helper::is_sqlparam('%'))); //damit alle departements //$usedUser->set_source_table('resop_resop_user',array('actid'=>backup::VAR_ACTIVITYID)); /* nicht verstanden */ // If we were referring to other tables, we would annotate the relation // with the element's annotate_ids() method. //$usedUser->annotate_ids('resop_user', 'uid'); //$resop->annotate_ids('resop_abt','id_abt'); //hmm, kein unterschied?, ist glaube ich auch uninteressant // Define file annotations (we do not use itemid in this example). $resop->annotate_files('mod_resop', 'intro', null); // Return the root element (resop), wrapped into standard activity structure. return $this->prepare_activity_structure($resop); }
protected function define_structure() { // Define each element separated $evalcomix = new backup_nested_element('evalcomix', array('id'), array('viewmode')); $evalcomix_environment = new backup_nested_element('environment', null, array('courseid', 'moodlename')); $evalcomix_tools = new backup_nested_element('tools'); $evalcomix_tool = new backup_nested_element('tool', array('id'), array('title', 'type', 'timecreated', 'timemodified', 'idtool', 'code')); $evalcomix_tasks = new backup_nested_element('tasks'); $evalcomix_task = new backup_nested_element('task', array('id'), array('instanceid', 'maxgrade', 'weighing', 'timemodified', 'visible')); //$evalcomix_task = new backup_nested_element('task', array('instanceid'), array('id', 'maxgrade', 'weighing', 'timemodified')); $evalcomix_assessments = new backup_nested_element('assessments'); //$evalcomix_assessment = new backup_nested_element('assessment', array('id'), array('assessorid', 'studentid', 'grade', 'timemodified', 'code')); $evalcomix_assessment = new backup_nested_element('assessment', array('id'), array('assessorid', 'studentid', 'grade', 'timemodified')); $evalcomix_modes = new backup_nested_element('modes'); $evalcomix_mode = new backup_nested_element('mode', array('id'), array('toolid', 'modality', 'weighing')); $evalcomix_modes_time = new backup_nested_element('mode_time', array('id'), array('timeavailable', 'timedue')); $evalcomix_modes_extra = new backup_nested_element('mode_extra', array('id'), array('anonymous', 'visible', 'whoassesses')); $evalcomix_grades = new backup_nested_element('grades'); $evalcomix_grade = new backup_nested_element('grade', array('id'), array('userid', 'cmid', 'finalgrade', 'courseid')); $evalcomix_allowedusers = new backup_nested_element('allowedusers'); $evalcomix_alloweduser = new backup_nested_element('alloweduser', array('id'), array('cmid', 'assessorid', 'studentid')); // $invented = new backup_nested_element('invented', null, array('one', 'two', 'three') ); // Build the tree $evalcomix->add_child($evalcomix_tools); $evalcomix->add_child($evalcomix_environment); $evalcomix->add_child($evalcomix_tasks); $evalcomix->add_child($evalcomix_grades); $evalcomix_grades->add_child($evalcomix_grade); $evalcomix->add_child($evalcomix_allowedusers); $evalcomix_allowedusers->add_child($evalcomix_alloweduser); $evalcomix_tools->add_child($evalcomix_tool); $evalcomix_tasks->add_child($evalcomix_task); $evalcomix_task->add_child($evalcomix_assessments); $evalcomix_task->add_child($evalcomix_modes); $evalcomix_assessments->add_child($evalcomix_assessment); $evalcomix_modes->add_child($evalcomix_mode); $evalcomix_mode->add_child($evalcomix_modes_time); $evalcomix_mode->add_child($evalcomix_modes_extra); //$inventeds->add_child($invented); // Define sources global $DB, $COURSE, $CFG; $courseid = $this->get_courseid(); $cms = $DB->get_records('course_modules', array('course' => $courseid)); $items = array(); foreach ($cms as $cm) { $items[] = $cm->id; } $in_params = array(); if (!empty($items)) { list($in_sql, $in_params) = $DB->get_in_or_equal($items); foreach ($in_params as $key => $value) { $in_params[$key] = backup_helper::is_sqlparam($value); } } if ($block = $DB->get_record('block_evalcomix', array('courseid' => $courseid))) { $evalcomix->set_source_table('block_evalcomix', array('id' => backup_helper::is_sqlparam($block->id))); } include_once $CFG->dirroot . '/blocks/evalcomix/configeval.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/webservice_evalcomix_client.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_tasks.php'; $evalcomix_environment->set_source_array(array((object) array('courseid' => $COURSE->id, 'moodlename' => MOODLE_NAME))); try { $array_xml_tool = array(); $xml = webservice_evalcomix_client::get_ws_xml_tools2(array('courseid' => $courseid)); foreach ($xml as $toolxml) { $id = (string) $toolxml['id']; foreach ($toolxml as $txml) { $array_xml_tool[$id] = $txml->asXML(); } } if ($tools = $DB->get_records('block_evalcomix_tools', array('evxid' => $block->id))) { $array = array(); foreach ($tools as $tool) { $time = time(); $idtool = $tool->idtool; if (isset($array_xml_tool[$idtool])) { $array[] = (object) array('id' => $tool->id, 'title' => $tool->title, 'type' => $tool->type, 'timecreated' => $time, 'timemodified' => $time, 'idtool' => $idtool, 'code' => $array_xml_tool[$idtool]); } } $evalcomix_tool->set_source_array($array); } } catch (Exception $e) { } /*$invented->set_source_array(array((object)array('one' => 1, 'two' => 2, 'three' => 3), (object)array('one' => 11, 'two' => 22, 'three' => 33))); // 2 object array*/ //$evalcomix_tool->set_source_table('block_evalcomix_tools', array('evxid' => backup::VAR_PARENTID)); if (!empty($in_params)) { $evalcomix_task->set_source_sql("\n SELECT *\n FROM {block_evalcomix_tasks}\n WHERE instanceid {$in_sql}", $in_params); $evalcomix_grade->set_source_sql("\n SELECT *\n FROM {block_evalcomix_grades}\n WHERE cmid {$in_sql}", $in_params); $evalcomix_alloweduser->set_source_sql("\n SELECT *\n FROM {block_evalcomix_allowedusers}\n WHERE cmid {$in_sql}", $in_params); } $evalcomix_assessment->set_source_table('block_evalcomix_assessments', array('taskid' => backup::VAR_PARENTID)); $evalcomix_mode->set_source_table('block_evalcomix_modes', array('taskid' => backup::VAR_PARENTID)); $evalcomix_modes_time->set_source_table('block_evalcomix_modes_time', array('modeid' => backup::VAR_PARENTID)); $evalcomix_modes_extra->set_source_table('block_evalcomix_modes_extra', array('modeid' => backup::VAR_PARENTID)); // Define annotations $evalcomix_task->annotate_ids('course_modules', 'instanceid'); //$evalcomix->set_source_table('block_evalcomix', array('id' => backup::VAR_BLOCKID)); //$evalcomix->set_source_array(array((object)array('id' => $this->task->get_blockid()))); //$evalcomix_tool->set_source_table('evalcomix_tools', array('evxid' => '../id')); return $this->prepare_block_structure($evalcomix); //EvalCOMIX assessment------------------------------------------------------- /* $tasks = evalcomix_tasks::get_tasks_by_courseid($courseid); if(!empty($tasks)){ $array_xml_assessment = array(); $hash_assessment = array(); $params['courseid'] = $courseid; $params['lms'] = MOODLE_NAME; $array_course_assessments = array(); $coursecontext = context_course::instance($courseid); $k = 0; foreach($tasks as $task){ $module = evalcomix_tasks::get_type_task($task->instanceid); if($assessments = $DB->get_records('block_evalcomix_assessments', array('taskid' => $task->id))){ foreach($assessments as $assessment){ $params['module'][$k] = $module; $params['activity'][$k] = $task->instanceid; $params['student'][$k] = $assessment->studentid; $params['assessor'][$k] = $assessment->assessorid; if($assessment->studentid == $assessment->assessorid){ $params['mode'][$k] = 'self'; } elseif(has_capability('moodle/grade:viewhidden',$coursecontext, $assessment->assessorid)){ $params['mode'][$k] = 'teacher'; } else{ $params['mode'][$k] = 'peer'; } $str = $courseid . '_' . $params['module'][$k] . '_' . $params['activity'][$k] . '_' . $params['student'][$k] . '_' . $params['assessor'][$k] . '_' . $params['mode'][$k] . '_' . MOODLE_NAME; $id = $assessment->id; $hash_assessment[$id] = md5($str); $array_course_assessments[] = $assessment; ++$k; } } } $xml = webservice_evalcomix_client::get_ws_xml_tools($params); foreach($xml as $assessmentxml){ $id = (string)$assessmentxml['id']; foreach($assessmentxml as $txml){ $array_xml_assessment[$id] = $txml->asXML(); } } $array_result = array(); if(!empty($array_course_assessments)){ foreach($array_course_assessments as $assessment){ $time = time(); $id = $assessment->id; $assid = $hash_assessment[$id]; $array_xml = ''; if(isset($array_xml_assessment[$assid])){ $array_xml = $array_xml_assessment[$assid]; } echo "task = " . $assessment->taskid . ": " . $assessment->assessorid . '--' . $assessment->studentid . "<br>"; $array_result[] = (object)array('id' => $assessment->id, 'taskid' => $assessment->taskid, 'assessorid' => $assessment->assessorid, 'studentid' => $assessment->studentid, 'timemodified' => $time, 'grade' => $assessment->grade, 'code' => $array_xml); } $evalcomix_assessment->set_source_array($array_result); } }*/ }
protected function define_structure() { // To know if we are including userinfo. $userinfo = $this->get_setting_value('userinfo'); // Define each element separated. $quiz = new backup_nested_element('quiz', array('id'), array('name', 'intro', 'introformat', 'timeopen', 'timeclose', 'timelimit', 'overduehandling', 'graceperiod', 'preferredbehaviour', 'attempts_number', 'attemptonlast', 'grademethod', 'decimalpoints', 'questiondecimalpoints', 'reviewattempt', 'reviewcorrectness', 'reviewmarks', 'reviewspecificfeedback', 'reviewgeneralfeedback', 'reviewrightanswer', 'reviewoverallfeedback', 'questionsperpage', 'navmethod', 'shufflequestions', 'shuffleanswers', 'sumgrades', 'grade', 'timecreated', 'timemodified', 'password', 'subnet', 'browsersecurity', 'delay1', 'delay2', 'showuserpicture', 'showblocks')); // Define elements for access rule subplugin settings. $this->add_subplugin_structure('quizaccess', $quiz, true); $qinstances = new backup_nested_element('question_instances'); $qinstance = new backup_nested_element('question_instance', array('id'), array('slot', 'page', 'questionid', 'maxmark')); $feedbacks = new backup_nested_element('feedbacks'); $feedback = new backup_nested_element('feedback', array('id'), array('feedbacktext', 'feedbacktextformat', 'mingrade', 'maxgrade')); $overrides = new backup_nested_element('overrides'); $override = new backup_nested_element('override', array('id'), array('userid', 'groupid', 'timeopen', 'timeclose', 'timelimit', 'attempts', 'password')); $grades = new backup_nested_element('grades'); $grade = new backup_nested_element('grade', array('id'), array('userid', 'gradeval', 'timemodified')); $attempts = new backup_nested_element('attempts'); $attempt = new backup_nested_element('attempt', array('id'), array('userid', 'attemptnum', 'uniqueid', 'layout', 'currentpage', 'preview', 'state', 'timestart', 'timefinish', 'timemodified', 'timecheckstate', 'sumgrades')); // This module is using questions, so produce the related question states and sessions // attaching them to the $attempt element based in 'uniqueid' matching. $this->add_question_usages($attempt, 'uniqueid'); // Define elements for access rule subplugin attempt data. $this->add_subplugin_structure('quizaccess', $attempt, true); // Build the tree. $quiz->add_child($qinstances); $qinstances->add_child($qinstance); $quiz->add_child($feedbacks); $feedbacks->add_child($feedback); $quiz->add_child($overrides); $overrides->add_child($override); $quiz->add_child($grades); $grades->add_child($grade); $quiz->add_child($attempts); $attempts->add_child($attempt); // Define sources. $quiz->set_source_table('quiz', array('id' => backup::VAR_ACTIVITYID)); $qinstance->set_source_table('quiz_slots', array('quizid' => backup::VAR_PARENTID)); $feedback->set_source_table('quiz_feedback', array('quizid' => backup::VAR_PARENTID)); // Quiz overrides to backup are different depending of user info. $overrideparams = array('quiz' => backup::VAR_PARENTID); if (!$userinfo) { // Without userinfo, skip user overrides. $overrideparams['userid'] = backup_helper::is_sqlparam(null); } $override->set_source_table('quiz_overrides', $overrideparams); // All the rest of elements only happen if we are including user info. if ($userinfo) { $grade->set_source_table('quiz_grades', array('quiz' => backup::VAR_PARENTID)); $attempt->set_source_sql(' SELECT * FROM {quiz_attempts} WHERE quiz = :quiz AND preview = 0', array('quiz' => backup::VAR_PARENTID)); } // Define source alias. $quiz->set_source_alias('attempts', 'attempts_number'); $grade->set_source_alias('grade', 'gradeval'); $attempt->set_source_alias('attempt', 'attemptnum'); // Define id annotations. $qinstance->annotate_ids('question', 'questionid'); $override->annotate_ids('user', 'userid'); $override->annotate_ids('group', 'groupid'); $grade->annotate_ids('user', 'userid'); $attempt->annotate_ids('user', 'userid'); // Define file annotations. $quiz->annotate_files('mod_quiz', 'intro', null); // This file area hasn't itemid. $feedback->annotate_files('mod_quiz', 'feedback', 'id'); // Return the root element (quiz), wrapped into standard activity structure. return $this->prepare_activity_structure($quiz); }
/** * Define the structure for the assign activity * @return void */ protected function define_structure() { // To know if we are including userinfo. $userinfo = $this->get_setting_value('userinfo'); // Define each element separated. $assign = new backup_nested_element('assign', array('id'), array('name', 'intro', 'introformat', 'alwaysshowdescription', 'submissiondrafts', 'sendnotifications', 'sendlatenotifications', 'sendstudentnotifications', 'duedate', 'cutoffdate', 'allowsubmissionsfromdate', 'grade', 'timemodified', 'completionsubmit', 'requiresubmissionstatement', 'teamsubmission', 'requireallteammemberssubmit', 'teamsubmissiongroupingid', 'blindmarking', 'revealidentities', 'attemptreopenmethod', 'maxattempts', 'markingworkflow', 'markingallocation', 'preventsubmissionnotingroup')); $userflags = new backup_nested_element('userflags'); $userflag = new backup_nested_element('userflag', array('id'), array('userid', 'assignment', 'mailed', 'locked', 'extensionduedate', 'workflowstate', 'allocatedmarker')); $submissions = new backup_nested_element('submissions'); $submission = new backup_nested_element('submission', array('id'), array('userid', 'timecreated', 'timemodified', 'status', 'groupid', 'attemptnumber', 'latest')); $grades = new backup_nested_element('grades'); $grade = new backup_nested_element('grade', array('id'), array('userid', 'timecreated', 'timemodified', 'grader', 'grade', 'attemptnumber')); $pluginconfigs = new backup_nested_element('plugin_configs'); $pluginconfig = new backup_nested_element('plugin_config', array('id'), array('plugin', 'subtype', 'name', 'value')); $overrides = new backup_nested_element('overrides'); $override = new backup_nested_element('override', array('id'), array('groupid', 'userid', 'sortorder', 'allowsubmissionsfromdate', 'duedate', 'cutoffdate')); // Build the tree. $assign->add_child($userflags); $userflags->add_child($userflag); $assign->add_child($submissions); $submissions->add_child($submission); $assign->add_child($grades); $grades->add_child($grade); $assign->add_child($pluginconfigs); $pluginconfigs->add_child($pluginconfig); $assign->add_child($overrides); $overrides->add_child($override); // Define sources. $assign->set_source_table('assign', array('id' => backup::VAR_ACTIVITYID)); $pluginconfig->set_source_table('assign_plugin_config', array('assignment' => backup::VAR_PARENTID)); // Assign overrides to backup are different depending of user info. $overrideparams = array('assignid' => backup::VAR_PARENTID); if ($userinfo) { $userflag->set_source_table('assign_user_flags', array('assignment' => backup::VAR_PARENTID)); $submission->set_source_table('assign_submission', array('assignment' => backup::VAR_PARENTID)); $grade->set_source_table('assign_grades', array('assignment' => backup::VAR_PARENTID)); // Support 2 types of subplugins. $this->add_subplugin_structure('assignsubmission', $submission, true); $this->add_subplugin_structure('assignfeedback', $grade, true); } else { $overrideparams['userid'] = backup_helper::is_sqlparam(null); // Without userinfo, skip user overrides. } $override->set_source_table('assign_overrides', $overrideparams); // Define id annotations. $userflag->annotate_ids('user', 'userid'); $userflag->annotate_ids('user', 'allocatedmarker'); $submission->annotate_ids('user', 'userid'); $submission->annotate_ids('group', 'groupid'); $grade->annotate_ids('user', 'userid'); $grade->annotate_ids('user', 'grader'); $assign->annotate_ids('grouping', 'teamsubmissiongroupingid'); $override->annotate_ids('user', 'userid'); $override->annotate_ids('group', 'groupid'); // Define file annotations. // These file areas don't have an itemid. $assign->annotate_files('mod_assign', 'intro', null); $assign->annotate_files('mod_assign', 'introattachment', null); $this->annotate_plugin_config_files($assign, 'assignsubmission'); $this->annotate_plugin_config_files($assign, 'assignfeedback'); // Return the root element (choice), wrapped into standard activity structure. return $this->prepare_activity_structure($assign); }
protected function define_structure() { // Items we want to include in the inforef file. $items = backup_helper::get_inforef_itemnames(); // Build the tree $inforef = new backup_nested_element('inforef'); // For each item, conditionally, if there are already records, build element foreach ($items as $itemname) { if (backup_structure_dbops::annotations_exist($this->get_backupid(), $itemname)) { $elementroot = new backup_nested_element($itemname . 'ref'); $element = new backup_nested_element($itemname, array(), array('id')); $inforef->add_child($elementroot); $elementroot->add_child($element); $element->set_source_sql("\n SELECT itemid AS id\n FROM {backup_ids_temp}\n WHERE backupid = ?\n AND itemname = ?", array(backup::VAR_BACKUPID, backup_helper::is_sqlparam($itemname))); } } // We don't annotate anything there, but rely in the next step // (move_inforef_annotations_to_final) that will change all the // already saved 'inforref' entries to their 'final' annotations. return $inforef; }
protected function define_structure() { // To know if we are including userinfo $userinfo = $this->get_setting_value('userinfo'); // Define each element separated $oublog = new backup_nested_element('oublog', array('id'), array('name', 'course', 'accesstoken', 'intro', 'introformat', 'allowcomments', 'individual', 'maxbytes', 'maxattachments', 'maxvisibility', 'global', 'views', 'completionposts', 'completioncomments', 'reportingemail', 'displayname', 'statblockon', 'allowimport', 'introonpost', 'tags', 'assessed', 'assesstimestart', 'assesstimefinish', 'scale', 'grading', 'restricttags', 'postfrom', 'postuntil', 'commentfrom', 'commentuntil')); $instances = new backup_nested_element('instances'); $instance = new backup_nested_element('instance', array('id'), array('userid', 'name', 'summary', 'accesstoken', 'views')); $links = new backup_nested_element('links'); $link = new backup_nested_element('link', array('id'), array('title', 'url', 'sortorder')); $posts = new backup_nested_element('posts'); $post = new backup_nested_element('post', array('id'), array('groupid', 'title', 'message', 'timeposted', 'allowcomments', 'timeupdated', 'lasteditedby', 'deletedby', 'timedeleted', 'visibility')); $ratings = new backup_nested_element('ratings'); $rating = new backup_nested_element('rating', array('id'), array('component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified')); $comments = new backup_nested_element('comments'); $comment = new backup_nested_element('comment', array('id'), array('userid', 'title', 'message', 'timeposted', 'deletedby', 'timedeleted', 'authorname', 'authorip', 'timeapproved')); $edits = new backup_nested_element('edits'); $edit = new backup_nested_element('edit', array('id'), array('userid', 'oldtitle', 'oldmessage', 'timeupdated')); $taginstances = new backup_nested_element('tags'); $taginstance = new backup_nested_element('tag', array('id'), array('tag')); // Build the tree $oublog->add_child($instances); $instances->add_child($instance); $oublog->add_child($links); $links->add_child($link); $instance->add_child($posts); $posts->add_child($post); $post->add_child($ratings); $ratings->add_child($rating); $post->add_child($comments); $comments->add_child($comment); $post->add_child($edits); $edits->add_child($edit); $post->add_child($taginstances); $taginstances->add_child($taginstance); // Define sources $oublog->set_source_table('oublog', array('id' => backup::VAR_ACTIVITYID)); // All the rest of elements only happen if we are including user info if ($userinfo) { $instance->set_source_table('oublog_instances', array('oublogid' => backup::VAR_PARENTID)); $link->set_source_table('oublog_links', array('oubloginstancesid' => backup::VAR_PARENTID)); $post->set_source_table('oublog_posts', array('oubloginstancesid' => backup::VAR_PARENTID)); $comment->set_source_table('oublog_comments', array('postid' => backup::VAR_PARENTID)); $edit->set_source_table('oublog_edits', array('postid' => backup::VAR_PARENTID)); $taginstance->set_source_sql("SELECT t.id, t.tag\n FROM {oublog_tags} t\n JOIN {oublog_taginstances} ti\n ON t.id=ti.tagid\n WHERE ti.postid=?", array(backup::VAR_PARENTID)); $rating->set_source_table('rating', array('contextid' => backup::VAR_CONTEXTID, 'component' => backup_helper::is_sqlparam('mod_oublog'), 'ratingarea' => backup_helper::is_sqlparam('post'))); $rating->set_source_alias('rating', 'value'); } // Define id annotations $instance->annotate_ids('user', 'userid'); $post->annotate_ids('group', 'groupid'); $post->annotate_ids('user', 'lasteditedby'); $post->annotate_ids('user', 'deletedby'); $comment->annotate_ids('user', 'userid'); $edit->annotate_ids('user', 'userid'); $link->annotate_ids('oublog_instances', 'id'); $oublog->annotate_ids('scale', 'scale'); $rating->annotate_ids('scale', 'scaleid'); $rating->annotate_ids('user', 'userid'); // Define file annotations $oublog->annotate_files('mod_oublog', 'intro', null); // This file area hasn't itemid $instance->annotate_files('mod_oublog', 'summary', 'id'); $post->annotate_files('mod_oublog', 'attachment', 'id'); $post->annotate_files('mod_oublog', 'message', 'id'); $edit->annotate_files('mod_oublog', 'edit', 'id'); $comment->annotate_files('mod_oublog', 'messagecomment', 'id'); // Return the root element (oublog), wrapped into standard activity structure return $this->prepare_activity_structure($oublog); }