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
 * Class for exporting record data.
19
 *
20
 * @package    mod_data
21
 * @copyright  2017 Juan Leyva <juan@moodle.com>
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
namespace mod_data\external;
25
defined('MOODLE_INTERNAL') || die();
26
 
27
use core\external\exporter;
28
use renderer_base;
29
use core_user;
30
use core_tag\external\tag_item_exporter;
31
 
32
/**
33
 * Class for exporting record data.
34
 *
35
 * @copyright  2017 Juan Leyva <juan@moodle.com>
36
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37
 */
38
class record_exporter extends exporter {
39
 
40
    protected static function define_properties() {
41
 
42
        return array(
43
            'id' => array(
44
                'type' => PARAM_INT,
45
                'description' => 'Record id.',
46
            ),
47
            'userid' => array(
48
                'type' => PARAM_INT,
49
                'description' => 'The id of the user who created the record.',
50
                'default' => 0,
51
            ),
52
            'groupid' => array(
53
                'type' => PARAM_INT,
54
                'description' => 'The group id this record belongs to (0 for no groups).',
55
                'default' => 0,
56
            ),
57
            'dataid' => array(
58
                'type' => PARAM_INT,
59
                'description' => 'The database id this record belongs to.',
60
                'default' => 0,
61
            ),
62
            'timecreated' => array(
63
                'type' => PARAM_INT,
64
                'description' => 'Time the record was created.',
65
                'default' => 0,
66
            ),
67
            'timemodified' => array(
68
                'type' => PARAM_INT,
69
                'description' => 'Last time the record was modified.',
70
                'default' => 0,
71
            ),
72
            'approved' => array(
73
                'type' => PARAM_BOOL,
74
                'description' => 'Whether the entry has been approved (if the database is configured in that way).',
75
                'default' => 0,
76
            ),
77
        );
78
    }
79
 
80
    protected static function define_related() {
81
        return array(
82
            'database' => 'stdClass',
83
            'user' => 'stdClass?',
84
            'context' => 'context',
85
            'contents' => 'stdClass[]?',
86
        );
87
    }
88
 
89
    protected static function define_other_properties() {
90
        return array(
91
            'canmanageentry' => array(
92
                'type' => PARAM_BOOL,
93
                'description' => 'Whether the current user can manage this entry',
94
            ),
95
            'fullname' => array(
96
                'type' => PARAM_TEXT,
97
                'description' => 'The user who created the entry fullname.',
98
                'optional' => true,
99
            ),
100
            'contents' => array(
101
                'type' => content_exporter::read_properties_definition(),
102
                'description' => 'The record contents.',
103
                'multiple' => true,
104
                'optional' => true,
105
            ),
106
            'tags' => array(
107
                'type' => tag_item_exporter::read_properties_definition(),
108
                'description' => 'Tags.',
109
                'multiple' => true,
110
                'optional' => true,
111
            ),
112
        );
113
    }
114
 
115
    protected function get_other_values(renderer_base $output) {
116
        global $PAGE;
117
 
118
        $values = array(
119
            'canmanageentry' => data_user_can_manage_entry($this->data, $this->related['database'], $this->related['context']),
120
        );
121
 
122
        if (!empty($this->related['user']) and !empty($this->related['user']->id)) {
123
            $values['fullname'] = fullname($this->related['user']);
124
        } else if ($this->data->userid) {
125
            $user = core_user::get_user($this->data->userid);
126
            $values['fullname'] = fullname($user);
127
        }
128
 
129
        if (!empty($this->related['contents'])) {
130
            $contents = [];
131
            foreach ($this->related['contents'] as $content) {
132
                $related = array('context' => $this->related['context']);
133
                $exporter = new content_exporter($content, $related);
134
                $contents[] = $exporter->export($PAGE->get_renderer('core'));
135
            }
136
            $values['contents'] = $contents;
137
        }
138
 
139
        $values['tags'] = \core_tag\external\util::get_item_tags('mod_data', 'data_records', $this->data->id);
140
 
141
        return $values;
142
    }
143
}