Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
// This file is part of Moodle - http://moodle.org/
4
//
5
// Moodle is free software: you can redistribute it and/or modify
6
// it under the terms of the GNU General Public License as published by
7
// the Free Software Foundation, either version 3 of the License, or
8
// (at your option) any later version.
9
//
10
// Moodle is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
// GNU General Public License for more details.
14
//
15
// You should have received a copy of the GNU General Public License
16
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17
 
18
/**
19
 * @package    mod_data
20
 * @subpackage backup-moodle2
21
 * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
22
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
/**
26
 * Define all the backup steps that will be used by the backup_data_activity_task
27
 */
28
 
29
/**
30
 * Define the complete data structure for backup, with file and id annotations
31
 */
32
class backup_data_activity_structure_step extends backup_activity_structure_step {
33
 
34
    protected function define_structure() {
35
 
36
        // To know if we are including userinfo
37
        $userinfo = $this->get_setting_value('userinfo');
38
 
39
        // Define each element separated
40
        $data = new backup_nested_element('data', array('id'), array(
41
            'name', 'intro', 'introformat', 'comments',
42
            'timeavailablefrom', 'timeavailableto', 'timeviewfrom', 'timeviewto',
43
            'requiredentries', 'requiredentriestoview', 'maxentries', 'rssarticles',
44
            'singletemplate', 'listtemplate', 'listtemplateheader', 'listtemplatefooter',
45
            'addtemplate', 'rsstemplate', 'rsstitletemplate', 'csstemplate',
46
            'jstemplate', 'asearchtemplate', 'approval', 'manageapproved', 'scale',
47
            'assessed', 'assesstimestart', 'assesstimefinish', 'defaultsort',
48
            'defaultsortdir', 'editany', 'notification', 'timemodified', 'config', 'completionentries'));
49
 
50
        $tags = new backup_nested_element('recordstags');
51
        $tag = new backup_nested_element('tag', array('id'), array('itemid', 'rawname'));
52
 
53
        $fields = new backup_nested_element('fields');
54
 
55
        $field = new backup_nested_element('field', array('id'), array(
56
            'type', 'name', 'description', 'required', 'param1', 'param2',
57
            'param3', 'param4', 'param5', 'param6',
58
            'param7', 'param8', 'param9', 'param10'));
59
 
60
        $records = new backup_nested_element('records');
61
 
62
        $record = new backup_nested_element('record', array('id'), array(
63
            'userid', 'groupid', 'timecreated', 'timemodified',
64
            'approved'));
65
 
66
        $contents = new backup_nested_element('contents');
67
 
68
        $content = new backup_nested_element('content', array('id'), array(
69
            'fieldid', 'content', 'content1', 'content2',
70
            'content3', 'content4'));
71
 
72
        $ratings = new backup_nested_element('ratings');
73
 
74
        $rating = new backup_nested_element('rating', array('id'), array(
75
            'component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified'));
76
 
77
        // Build the tree
78
        $data->add_child($fields);
79
        $fields->add_child($field);
80
 
81
        $data->add_child($records);
82
        $records->add_child($record);
83
 
84
        $record->add_child($contents);
85
        $contents->add_child($content);
86
 
87
        $record->add_child($ratings);
88
        $ratings->add_child($rating);
89
 
90
        $data->add_child($tags);
91
        $tags->add_child($tag);
92
 
93
        // Define sources
94
        $data->set_source_table('data', array('id' => backup::VAR_ACTIVITYID));
95
 
96
        $field->set_source_sql('
97
            SELECT *
98
              FROM {data_fields}
99
             WHERE dataid = ?',
100
            array(backup::VAR_PARENTID));
101
 
102
        // All the rest of elements only happen if we are including user info
103
        if ($userinfo) {
104
            $record->set_source_table('data_records', array('dataid' => backup::VAR_PARENTID));
105
 
106
            $content->set_source_table('data_content', array('recordid' => backup::VAR_PARENTID));
107
 
108
            $rating->set_source_table('rating', array('contextid'  => backup::VAR_CONTEXTID,
109
                                                      'itemid'     => backup::VAR_PARENTID,
110
                                                      'component'  => backup_helper::is_sqlparam('mod_data'),
111
                                                      'ratingarea' => backup_helper::is_sqlparam('entry')));
112
            $rating->set_source_alias('rating', 'value');
113
            if (core_tag_tag::is_enabled('mod_data', 'data_records')) {
114
                $tag->set_source_sql('SELECT t.id, ti.itemid, t.rawname
115
                                        FROM {tag} t
116
                                        JOIN {tag_instance} ti
117
                                          ON ti.tagid = t.id
118
                                       WHERE ti.itemtype = ?
119
                                         AND ti.component = ?
120
                                         AND ti.contextid = ?', array(
121
                    backup_helper::is_sqlparam('data_records'),
122
                    backup_helper::is_sqlparam('mod_data'),
123
                    backup::VAR_CONTEXTID));
124
            }
125
        }
126
 
127
        // Define id annotations
128
        $data->annotate_ids('scale', 'scale');
129
 
130
        $record->annotate_ids('user', 'userid');
131
        $record->annotate_ids('group', 'groupid');
132
 
133
        $rating->annotate_ids('scale', 'scaleid');
134
        $rating->annotate_ids('user', 'userid');
135
 
136
        // Define file annotations
137
        $data->annotate_files('mod_data', 'intro', null); // This file area hasn't itemid
138
        $content->annotate_files('mod_data', 'content', 'id'); // By content->id
139
 
140
        // Return the root element (data), wrapped into standard activity structure
141
        return $this->prepare_activity_structure($data);
142
    }
143
}