ebfebde296f534da28877c65c9f8db3fe831fed3
[moodle.git] / mod / data / templates.php
1 <?php
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/>.
18 /**
19  * This file is part of the Database module for Moodle
20  *
21  * @copyright 2005 Martin Dougiamas  http://dougiamas.com
22  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  * @package mod-data
24  */
26 require_once('../../config.php');
27 require_once('lib.php');
29 $id    = optional_param('id', 0, PARAM_INT);  // course module id
30 $d     = optional_param('d', 0, PARAM_INT);   // database id
31 $mode  = optional_param('mode', 'singletemplate', PARAM_ALPHA);
32 $disableeditor  = optional_param('switcheditor', false, PARAM_ALPHA);
34 $url = new moodle_url('/mod/data/templates.php');
35 if ($mode !== 'singletemplate') {
36     $url->param('mode', $mode);
37 }
39 if ($id) {
40     $url->param('id', $id);
41     $PAGE->set_url($url);
42     if (! $cm = get_coursemodule_from_id('data', $id)) {
43         print_error('invalidcoursemodule');
44     }
45     if (! $course = $DB->get_record('course', array('id'=>$cm->course))) {
46         print_error('coursemisconf');
47     }
48     if (! $data = $DB->get_record('data', array('id'=>$cm->instance))) {
49         print_error('invalidcoursemodule');
50     }
52 } else {
53     $url->param('d', $d);
54     $PAGE->set_url($url);
55     if (! $data = $DB->get_record('data', array('id'=>$d))) {
56         print_error('invalidid', 'data');
57     }
58     if (! $course = $DB->get_record('course', array('id'=>$data->course))) {
59         print_error('coursemisconf');
60     }
61     if (! $cm = get_coursemodule_from_instance('data', $data->id, $course->id)) {
62         print_error('invalidcoursemodule');
63     }
64 }
66 require_login($course->id, false, $cm);
68 $context = get_context_instance(CONTEXT_MODULE, $cm->id);
69 require_capability('mod/data:managetemplates', $context);
71 if (!$DB->count_records('data_fields', array('dataid'=>$data->id))) {      // Brand new database!
72     redirect($CFG->wwwroot.'/mod/data/field.php?d='.$data->id);  // Redirect to field entry
73 }
75 add_to_log($course->id, 'data', 'templates view', "templates.php?id=$cm->id&amp;d=$data->id", $data->id, $cm->id);
78 /// Print the page header
80 $strdata = get_string('modulenameplural','data');
82 // For the javascript for inserting template tags: initialise the default textarea to
83 // 'edit_template' - it is always present in all different possible views.
85 $editorobj = 'editor_'.md5('template');
87 $bodytag = 'onload="';
88 $bodytag .= 'if (typeof('.$editorobj.') != \'undefined\') { currEditor = '.$editorobj.'; } ';
89 $bodytag .= 'currTextarea = document.getElementById(\'tempform\').template;';
90 $bodytag .= '" ';
92 if ($mode == 'singletemplate') {
93     $PAGE->navbar->add(get_string($mode,'data'));
94 }
96 $PAGE->requires->js('/mod/data/data.js');
97 $PAGE->set_title($data->name);
98 $PAGE->set_heading($course->fullname);
99 echo $OUTPUT->header();
100 echo $OUTPUT->heading(format_string($data->name));
103 /// Groups needed for Add entry tab
104 $currentgroup = groups_get_activity_group($cm);
105 $groupmode = groups_get_activity_groupmode($cm);
107 /// Print the tabs.
108 $currenttab = 'templates';
109 include('tabs.php');
111 /// Processing submitted data, i.e updating form.
112 $resettemplate = false;
114 if (($mytemplate = data_submitted()) && confirm_sesskey()) {
115     $newtemplate = new stdClass();
116     $newtemplate->id = $data->id;
117     $newtemplate->{$mode} = $mytemplate->template;
119     if (!empty($mytemplate->defaultform)) {
120         // Reset the template to default, but don't save yet.
121         $resettemplate = true;
122         $data->{$mode} = data_generate_default_template($data, $mode, 0, false, false);
123         if ($mode == 'listtemplate') {
124             $data->listtemplateheader = '';
125             $data->listtemplatefooter = '';
126         }
127     } else {
128         if (isset($mytemplate->listtemplateheader)){
129             $newtemplate->listtemplateheader = $mytemplate->listtemplateheader;
130         }
131         if (isset($mytemplate->listtemplatefooter)){
132             $newtemplate->listtemplatefooter = $mytemplate->listtemplatefooter;
133         }
134         if (isset($mytemplate->rsstitletemplate)){
135             $newtemplate->rsstitletemplate = $mytemplate->rsstitletemplate;
136         }
138         // Check for multiple tags, only need to check for add template.
139         if ($mode != 'addtemplate' or data_tags_check($data->id, $newtemplate->{$mode})) {
140             $DB->update_record('data', $newtemplate);
141             echo $OUTPUT->notification(get_string('templatesaved', 'data'), 'notifysuccess');
142         }
143         add_to_log($course->id, 'data', 'templates saved', "templates.php?id=$cm->id&amp;d=$data->id", $data->id, $cm->id);
144     }
145 } else {
146     echo '<div class="littleintro" style="text-align:center">'.get_string('header'.$mode,'data').'</div>';
149 /// If everything is empty then generate some defaults
150 if (empty($data->addtemplate) and empty($data->singletemplate) and
151     empty($data->listtemplate) and empty($data->rsstemplate)) {
152     data_generate_default_template($data, 'singletemplate');
153     data_generate_default_template($data, 'listtemplate');
154     data_generate_default_template($data, 'addtemplate');
155     data_generate_default_template($data, 'asearchtemplate');           //Template for advanced searches.
156     data_generate_default_template($data, 'rsstemplate');
159 editors_head_setup();
160 $format = FORMAT_HTML;
162 if ($mode === 'csstemplate' or $mode === 'jstemplate') {
163     $disableeditor = true;
166 if ($disableeditor) {
167     $format = FORMAT_PLAIN;
169 $editor = editors_get_preferred_editor($format);
170 $strformats = format_text_menu();
171 $formats =  $editor->get_supported_formats();
172 foreach ($formats as $fid) {
173     $formats[$fid] = $strformats[$fid];
175 $options = array();
176 $options['trusttext'] = false;
177 $options['forcehttps'] = false;
178 $options['subdirs'] = false;
179 $options['maxfiles'] = 0;
180 $options['maxbytes'] = 0;
181 $options['changeformat'] = 0;
182 $options['noclean'] = false;
184 echo '<form id="tempform" action="templates.php?d='.$data->id.'&amp;mode='.$mode.'" method="post">';
185 echo '<div>';
186 echo '<input name="sesskey" value="'.sesskey().'" type="hidden" />';
187 // Print button to autogen all forms, if all templates are empty
189 if (!$resettemplate) {
190     // Only reload if we are not resetting the template to default.
191     $data = $DB->get_record('data', array('id'=>$d));
193 echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
194 echo '<table cellpadding="4" cellspacing="0" border="0">';
196 /// Add the HTML editor(s).
197 $usehtmleditor = can_use_html_editor() && ($mode != 'csstemplate') && ($mode != 'jstemplate') && !$disableeditor;
198 if ($mode == 'listtemplate'){
199     // Print the list template header.
200     echo '<tr>';
201     echo '<td>&nbsp;</td>';
202     echo '<td>';
203     echo '<div style="text-align:center"><label for="edit-listtemplateheader">'.get_string('header','data').'</label></div>';
205     $field = 'listtemplateheader';
206     $editor->use_editor($field, $options);
207     echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->listtemplateheader).'</textarea></div>';
209     echo '</td>';
210     echo '</tr>';
213 // Print the main template.
215 echo '<tr><td valign="top">';
216 if ($mode != 'csstemplate' and $mode != 'jstemplate') {
217     // Add all the available fields for this data.
218     echo '<label for="availabletags">'.get_string('availabletags','data').'</label>';
219     echo $OUTPUT->help_icon('availabletags', 'data');
220     echo '<br />';
223     echo '<select name="fields1[]" id="availabletags" size="12" onclick="insert_field_tags(this)">';
225     $fields = $DB->get_records('data_fields', array('dataid'=>$data->id));
226     echo '<optgroup label="'.get_string('fields', 'data').'">';
227     foreach ($fields as $field) {
228         echo '<option value="[['.$field->name.']]" title="'.$field->description.'">'.$field->name.' - [['.$field->name.']]</option>';
229     }
230     echo '</optgroup>';
232     if ($mode == 'addtemplate') {
233         echo '<optgroup label="'.get_string('fieldids', 'data').'">';
234         foreach ($fields as $field) {
235             if (in_array($field->type, array('picture', 'checkbox', 'date', 'latlong', 'radiobutton'))) {
236                 continue; //ids are not usable for these composed items
237             }
238             echo '<option value="[['.$field->name.'#id]]" title="'.$field->description.' id">'.$field->name.' id - [['.$field->name.'#id]]</option>';
239         }
240         echo '</optgroup>';
241     }
243     // Print special tags. fix for MDL-7031
244     if ($mode != 'addtemplate' && $mode != 'asearchtemplate') {             //Don't print special tags when viewing the advanced search template and add template.
245         echo '<optgroup label="'.get_string('buttons', 'data').'">';
246         echo '<option value="##edit##">' .get_string('edit', 'data'). ' - ##edit##</option>';
247         echo '<option value="##delete##">' .get_string('delete', 'data'). ' - ##delete##</option>';
248         echo '<option value="##approve##">' .get_string('approve', 'data'). ' - ##approve##</option>';
249         if ($mode != 'rsstemplate') {
250             echo '<option value="##export##">' .get_string('export', 'data'). ' - ##export##</option>';
251         }
252         if ($mode != 'singletemplate') {
253             // more points to single template - not useable there
254             echo '<option value="##more##">' .get_string('more', 'data'). ' - ##more##</option>';
255             echo '<option value="##moreurl##">' .get_string('moreurl', 'data'). ' - ##moreurl##</option>';
256         }
257         echo '</optgroup>';
258         echo '<optgroup label="'.get_string('other', 'data').'">';
259         echo '<option value="##timeadded##">'.get_string('timeadded', 'data'). ' - ##timeadded##</option>';
260         echo '<option value="##timemodified##">'.get_string('timemodified', 'data'). ' - ##timemodified##</option>';
261         echo '<option value="##user##">' .get_string('user'). ' - ##user##</option>';
262         if ($mode != 'singletemplate') {
263             // more points to single template - not useable there
264             echo '<option value="##comments##">' .get_string('comments', 'data'). ' - ##comments##</option>';
265         }
266         echo '</optgroup>';
267     }
269     if ($mode == 'asearchtemplate') {
270         echo '<optgroup label="'.get_string('other', 'data').'">';
271         echo '<option value="##firstname##">' .get_string('authorfirstname', 'data'). ' - ##firstname##</option>';
272         echo '<option value="##lastname##">' .get_string('authorlastname', 'data'). ' - ##lastname##</option>';
273         echo '</optgroup>';
274     }
276     echo '</select>';
277     echo '<br /><br /><br /><br /><input type="submit" name="defaultform" value="'.get_string('resettemplate','data').'" />';
278     if (can_use_html_editor()) {
279         echo '<br /><br />';
280         if ($usehtmleditor) {
281             $switcheditor = get_string('editordisable', 'data');
282             echo '<input type="submit" name="switcheditor" value="'.s($switcheditor).'" />';
283         } else {
284             $switcheditor = get_string('editorenable', 'data');
285             echo '<input type="submit" name="useeditor" value="'.s($switcheditor).'" />';
286         }
287     }
288 } else {
289     echo '<br /><br /><br /><br /><input type="submit" name="defaultform" value="'.get_string('resettemplate','data').'" />';
291 echo '</td>';
293 echo '<td valign="top">';
294 if ($mode == 'listtemplate'){
295     echo '<div style="text-align:center"><label for="edit-template">'.get_string('multientry','data').'</label></div>';
296 } else {
297     echo '<div style="text-align:center"><label for="edit-template">'.get_string($mode,'data').'</label></div>';
300 $field = 'template';
301 $editor->use_editor($field, $options);
302 echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->{$mode}).'</textarea></div>';
303 echo '</td>';
304 echo '</tr>';
306 if ($mode == 'listtemplate'){
307     echo '<tr>';
308     echo '<td>&nbsp;</td>';
309     echo '<td>';
310     echo '<div style="text-align:center"><label for="edit-listtemplatefooter">'.get_string('footer','data').'</label></div>';
312     $field = 'listtemplatefooter';
313     $editor->use_editor($field, $options);
314     echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->listtemplatefooter).'</textarea></div>';
315     echo '</td>';
316     echo '</tr>';
317 } else if ($mode == 'rsstemplate') {
318     echo '<tr>';
319     echo '<td>&nbsp;</td>';
320     echo '<td>';
321     echo '<div style="text-align:center"><label for="edit-rsstitletemplate">'.get_string('rsstitletemplate','data').'</label></div>';
323     $field = 'rsstitletemplate';
324     $editor->use_editor($field, $options);
325     echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->rsstitletemplate).'</textarea></div>';
326     echo '</td>';
327     echo '</tr>';
330 echo '<tr><td style="text-align:center" colspan="2">';
331 echo '<input type="submit" value="'.get_string('savetemplate','data').'" />&nbsp;';
333 echo '</td></tr></table>';
336 echo $OUTPUT->box_end();
337 echo '</div>';
338 echo '</form>';
340 /// Finish the page
341 echo $OUTPUT->footer();