Merge branch 'MDL-64284-36_get_component_classes_cache' of https://github.com/tomdick...
[moodle.git] / blog / classes / external / post_exporter.php
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/>.
17 /**
18  * Class for exporting a blog post (entry).
19  *
20  * @package    core_blog
21  * @copyright  2018 Juan Leyva <juan@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
24 namespace core_blog\external;
25 defined('MOODLE_INTERNAL') || die();
27 use core\external\exporter;
28 use external_util;
29 use external_files;
30 use renderer_base;
31 use context_system;
33 /**
34  * Class for exporting a blog post (entry).
35  *
36  * @copyright  2018 Juan Leyva <juan@moodle.com>
37  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class post_exporter extends exporter {
41     /**
42      * Return the list of properties.
43      *
44      * @return array list of properties
45      */
46     protected static function define_properties() {
47         return array(
48             'id' => array(
49                 'type' => PARAM_INT,
50                 'null' => NULL_ALLOWED,
51                 'description' => 'Post/entry id.',
52             ),
53             'module' => array(
54                 'type' => PARAM_ALPHANUMEXT,
55                 'null' => NULL_NOT_ALLOWED,
56                 'description' => 'Where it was published the post (blog, blog_external...).',
57             ),
58             'userid' => array(
59                 'type' => PARAM_INT,
60                 'null' => NULL_NOT_ALLOWED,
61                 'default' => 0,
62                 'description' => 'Post author.',
63             ),
64             'courseid' => array(
65                 'type' => PARAM_INT,
66                 'null' => NULL_NOT_ALLOWED,
67                 'default' => 0,
68                 'description' => 'Course where the post was created.',
69             ),
70             'groupid' => array(
71                 'type' => PARAM_INT,
72                 'null' => NULL_NOT_ALLOWED,
73                 'default' => 0,
74                 'description' => 'Group post was created for.',
75             ),
76             'moduleid' => array(
77                 'type' => PARAM_INT,
78                 'null' => NULL_NOT_ALLOWED,
79                 'default' => 0,
80                 'description' => 'Module id where the post was created (not used anymore).',
81             ),
82             'coursemoduleid' => array(
83                 'type' => PARAM_INT,
84                 'null' => NULL_NOT_ALLOWED,
85                 'default' => 0,
86                 'description' => 'Course module id where the post was created.',
87             ),
88             'subject' => array(
89                 'type' => PARAM_TEXT,
90                 'null' => NULL_NOT_ALLOWED,
91                 'description' => 'Post subject.',
92             ),
93             'summary' => array(
94                 'type' => PARAM_RAW,
95                 'null' => NULL_ALLOWED,
96                 'description' => 'Post summary.',
97             ),
98             'content' => array(
99                 'type' => PARAM_RAW,
100                 'null' => NULL_ALLOWED,
101                 'description' => 'Post content.',
102             ),
103             'uniquehash' => array(
104                 'type' => PARAM_RAW,
105                 'null' => NULL_NOT_ALLOWED,
106                 'description' => 'Post unique hash.',
107             ),
108             'rating' => array(
109                 'type' => PARAM_INT,
110                 'null' => NULL_NOT_ALLOWED,
111                 'default' => 0,
112                 'description' => 'Post rating.',
113             ),
114             'format' => array(
115                 'type' => PARAM_INT,
116                 'null' => NULL_NOT_ALLOWED,
117                 'default' => 0,
118                 'description' => 'Post content format.',
119             ),
120             'summaryformat' => array(
121                 'choices' => array(FORMAT_HTML, FORMAT_MOODLE, FORMAT_PLAIN, FORMAT_MARKDOWN),
122                 'type' => PARAM_INT,
123                 'default' => FORMAT_MOODLE,
124                 'description' => 'Format for the summary field.',
125             ),
126             'attachment' => array(
127                 'type' => PARAM_RAW,
128                 'null' => NULL_ALLOWED,
129                 'description' => 'Post atachment.',
130             ),
131             'publishstate' => array(
132                 'type' => PARAM_ALPHA,
133                 'null' => NULL_NOT_ALLOWED,
134                 'default' => 'draft',
135                 'description' => 'Post publish state.',
136             ),
137             'lastmodified' => array(
138                 'type' => PARAM_INT,
139                 'null' => NULL_NOT_ALLOWED,
140                 'default' => 0,
141                 'description' => 'When it was last modified.',
142             ),
143             'created' => array(
144                 'type' => PARAM_INT,
145                 'null' => NULL_NOT_ALLOWED,
146                 'default' => 0,
147                 'description' => 'When it was created.',
148             ),
149             'usermodified' => array(
150                 'type' => PARAM_INT,
151                 'null' => NULL_ALLOWED,
152                 'description' => 'User that updated the post.',
153             ),
154         );
155     }
157     protected static function define_related() {
158         return array(
159             'context' => 'context'
160         );
161     }
163     protected static function define_other_properties() {
164         return array(
165             'summaryfiles' => array(
166                 'type' => external_files::get_properties_for_exporter(),
167                 'multiple' => true
168             ),
169             'attachmentfiles' => array(
170                 'type' => external_files::get_properties_for_exporter(),
171                 'multiple' => true,
172                 'optional' => true
173             ),
174         );
175     }
177     protected function get_other_values(renderer_base $output) {
178         $context = context_system::instance(); // Files always on site context.
180         $values['summaryfiles'] = external_util::get_area_files($context->id, 'blog', 'post', $this->data->id);
181         $values['attachmentfiles'] = external_util::get_area_files($context->id, 'blog', 'attachment', $this->data->id);
183         return $values;
184     }