Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Define all the backup steps that will be used by the backup_questionnaire_activity_task.
19
 *
20
 * Define the complete choice structure for backup, with file and id annotations.
21
 *
22
 * @package mod_questionnaire
23
 * @copyright  2016 Mike Churchward (mike.churchward@poetgroup.org)
24
 * @author     Mike Churchward
25
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26
 */
27
class backup_questionnaire_activity_structure_step extends backup_activity_structure_step {
28
 
29
    /**
30
     * Defines the backup structure.
31
     * @return backup_nested_element
32
     */
33
    protected function define_structure() {
34
        global $DB;
35
        // To know if we are including userinfo.
36
        $userinfo = $this->get_setting_value('userinfo');
37
 
38
        // Define each element separated.
39
        $questionnaire = new backup_nested_element('questionnaire', array('id'), array(
40
            'course', 'name', 'intro', 'introformat', 'qtype',
41
            'respondenttype', 'resp_eligible', 'resp_view', 'notifications', 'opendate',
42
            'closedate', 'resume', 'navigate', 'grade', 'sid', 'timemodified', 'completionsubmit', 'autonum'));
43
 
44
        $surveys = new backup_nested_element('surveys');
45
 
46
        $survey = new backup_nested_element('survey', array('id'), array(
47
            'name', 'courseid', 'realm', 'status', 'title', 'email', 'subtitle',
48
            'info', 'theme', 'thanks_page', 'thank_head', 'thank_body', 'feedbacksections',
49
            'feedbacknotes', 'feedbackscores', 'chart_type'));
50
 
51
        $questions = new backup_nested_element('questions');
52
 
53
        $question = new backup_nested_element('question', array('id'), array('surveyid', 'name', 'type_id', 'result_id',
54
            'length', 'precise', 'position', 'content', 'required', 'deleted', 'extradata'));
55
 
56
        $questchoices = new backup_nested_element('quest_choices');
57
 
58
        $questchoice = new backup_nested_element('quest_choice', array('id'), array('question_id', 'content', 'value'));
59
 
60
        $questdependencies = new backup_nested_element('quest_dependencies');
61
 
62
        $questdependency = new backup_nested_element('quest_dependency', array('id'), array(
63
            'dependquestionid', 'dependchoiceid', 'dependlogic', 'questionid', 'surveyid', 'dependandor'));
64
 
65
        $fbsections = new backup_nested_element('fb_sections');
66
 
67
        $fbsection = new backup_nested_element('fb_section', array('id'), array(
68
                'surveyid', 'section', 'scorecalculation', 'sectionlabel', 'sectionheading', 'sectionheadingformat'));
69
 
70
        $feedbacks = new backup_nested_element('feedbacks');
71
 
72
        $feedback = new backup_nested_element('feedback', array('id'), array(
73
                'sectionid', 'feedbacklabel', 'feedbacktext', 'feedbacktextformat', 'minscore', 'maxscore'));
74
 
75
        $responses = new backup_nested_element('responses');
76
 
77
        $response = new backup_nested_element('response', array('id'), array(
78
            'questionnaireid', 'submitted', 'complete', 'grade', 'userid'));
79
 
80
        $responsebools = new backup_nested_element('response_bools');
81
 
82
        $responsebool = new backup_nested_element('response_bool', array('id'), array('response_id', 'question_id', 'choice_id'));
83
 
84
        $responsedates = new backup_nested_element('response_dates');
85
 
86
        $responsedate = new backup_nested_element('response_date', array('id'), array('response_id', 'question_id', 'response'));
87
 
88
        $responsemultiples = new backup_nested_element('response_multiples');
89
 
90
        $responsemultiple = new backup_nested_element('response_multiple', array('id'), array(
91
            'response_id', 'question_id', 'choice_id'));
92
 
93
        $responseothers = new backup_nested_element('response_others');
94
 
95
        $responseother = new backup_nested_element('response_other', array('id'), array(
96
            'response_id', 'question_id', 'choice_id', 'response'));
97
 
98
        $responseranks = new backup_nested_element('response_ranks');
99
 
100
        $responserank = new backup_nested_element('response_rank', array('id'), array(
101
            'response_id', 'question_id', 'choice_id', 'rankvalue'));
102
 
103
        $responsesingles = new backup_nested_element('response_singles');
104
 
105
        $responsesingle = new backup_nested_element('response_single', array('id'), array(
106
            'response_id', 'question_id', 'choice_id'));
107
 
108
        $responsetexts = new backup_nested_element('response_texts');
109
 
110
        $responsetext = new backup_nested_element('response_text', array('id'), array('response_id', 'question_id', 'response'));
111
 
112
        // Build the tree.
113
        $questionnaire->add_child($surveys);
114
        $surveys->add_child($survey);
115
 
116
        $survey->add_child($questions);
117
        $questions->add_child($question);
118
 
119
        $question->add_child($questchoices);
120
        $questchoices->add_child($questchoice);
121
 
122
        $question->add_child($questdependencies);
123
        $questdependencies->add_child($questdependency);
124
 
125
        $survey->add_child($fbsections);
126
        $fbsections->add_child($fbsection);
127
 
128
        $fbsection->add_child($feedbacks);
129
        $feedbacks->add_child($feedback);
130
 
131
        $questionnaire->add_child($responses);
132
        $responses->add_child($response);
133
 
134
        $response->add_child($responsebools);
135
        $responsebools->add_child($responsebool);
136
 
137
        $response->add_child($responsedates);
138
        $responsedates->add_child($responsedate);
139
 
140
        $response->add_child($responsemultiples);
141
        $responsemultiples->add_child($responsemultiple);
142
 
143
        $response->add_child($responseothers);
144
        $responseothers->add_child($responseother);
145
 
146
        $response->add_child($responseranks);
147
        $responseranks->add_child($responserank);
148
 
149
        $response->add_child($responsesingles);
150
        $responsesingles->add_child($responsesingle);
151
 
152
        $response->add_child($responsetexts);
153
        $responsetexts->add_child($responsetext);
154
 
155
        // Define sources.
156
        $questionnaire->set_source_table('questionnaire', array('id' => backup::VAR_ACTIVITYID));
157
 
158
        // Is current questionnaire based on a public questionnaire?
159
        $qid = $this->task->get_activityid();
160
        $currentquestionnaire = $DB->get_record("questionnaire", array ("id" => $qid));
161
        $currentsurvey = $DB->get_record("questionnaire_survey", array ("id" => $currentquestionnaire->sid));
162
        $haspublic = false;
163
        if ($currentsurvey->realm == 'public' && $currentsurvey->courseid != $currentquestionnaire->course) {
164
            $haspublic = true;
165
        }
166
 
167
        // If current questionnaire is based on a public one, do not include survey nor questions in backup.
168
        if (!$haspublic) {
169
            $survey->set_source_table('questionnaire_survey', array('id' => '../../sid'));
170
            $question->set_source_table('questionnaire_question', array('surveyid' => backup::VAR_PARENTID));
171
            $fbsection->set_source_table('questionnaire_fb_sections', array('surveyid' => backup::VAR_PARENTID));
172
            $feedback->set_source_table('questionnaire_feedback', array('sectionid' => backup::VAR_PARENTID));
173
            $questchoice->set_source_table('questionnaire_quest_choice', array('question_id' => backup::VAR_PARENTID), 'id ASC');
174
            $questdependency->set_source_table('questionnaire_dependency', array('questionid' => backup::VAR_PARENTID));
175
 
176
            // All the rest of elements only happen if we are including user info.
177
            if ($userinfo) {
178
                $response->set_source_table('questionnaire_response', array('questionnaireid' => backup::VAR_PARENTID));
179
                $responsebool->set_source_table('questionnaire_response_bool', array('response_id' => backup::VAR_PARENTID));
180
                $responsedate->set_source_table('questionnaire_response_date', array('response_id' => backup::VAR_PARENTID));
181
                $responsemultiple->set_source_table('questionnaire_resp_multiple', array('response_id' => backup::VAR_PARENTID));
182
                $responseother->set_source_table('questionnaire_response_other', array('response_id' => backup::VAR_PARENTID));
183
                $responserank->set_source_table('questionnaire_response_rank', array('response_id' => backup::VAR_PARENTID));
184
                $responsesingle->set_source_table('questionnaire_resp_single', array('response_id' => backup::VAR_PARENTID));
185
                $responsetext->set_source_table('questionnaire_response_text', array('response_id' => backup::VAR_PARENTID));
186
            }
187
 
188
            // Define id annotations.
189
            $response->annotate_ids('user', 'userid');
190
        }
191
        // Define file annotations.
192
        $questionnaire->annotate_files('mod_questionnaire', 'intro', null); // This file area hasn't itemid.
193
 
194
        $survey->annotate_files('mod_questionnaire', 'info', 'id'); // By survey->id.
195
        $survey->annotate_files('mod_questionnaire', 'thankbody', 'id'); // By survey->id.
196
 
197
        $question->annotate_files('mod_questionnaire', 'question', 'id'); // By question->id.
198
 
199
        $fbsection->annotate_files('mod_questionnaire', 'sectionheading', 'id'); // By feedback->id.
200
        $feedback->annotate_files('mod_questionnaire', 'feedback', 'id'); // By feedback->id.
201
 
202
        // Return the root element, wrapped into standard activity structure.
203
        return $this->prepare_activity_structure($questionnaire);
204
    }
205
}