3b41373d45e5fd118cfa29d40f3f820d283c7b6c
[moodle.git] / tag / edit.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  * @package    core
20  * @subpackage tag
21  * @copyright  2007 Luiz Cruz <luiz.laydner@gmail.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 require_once('../config.php');
26 require_once('lib.php');
27 require_once('edit_form.php');
29 $tag_id = optional_param('id', 0, PARAM_INT);
30 $tag_name = optional_param('tag', '', PARAM_TAG);
32 require_login();
34 if (empty($CFG->usetags)) {
35     print_error('tagsaredisabled', 'tag');
36 }
38 //Editing a tag requires moodle/tag:edit capability
39 $systemcontext   = get_context_instance(CONTEXT_SYSTEM);
40 require_capability('moodle/tag:edit', $systemcontext);
42 if ($tag_name) {
43     $tag = tag_get('name', $tag_name, '*');
44 } else if ($tag_id) {
45     $tag = tag_get('id', $tag_id, '*');
46 }
48 if (empty($tag)) {
49     redirect($CFG->wwwroot.'/tag/search.php');
50 }
52 $PAGE->set_url('/tag/index.php', array('id' => $tag->id));
53 $PAGE->set_subpage($tag->id);
54 $PAGE->set_context($systemcontext);
55 $PAGE->set_blocks_editing_capability('moodle/tag:editblocks');
56 $PAGE->set_pagelayout('base');
58 $PAGE->requires->yui2_lib('animation');
59 $PAGE->requires->yui2_lib('autocomplete');
61 $tagname = tag_display_name($tag);
63 // set the relatedtags field of the $tag object that will be passed to the form
64 $tag->relatedtags = tag_get_related_tags_csv(tag_get_related_tags($tag->id, TAG_RELATED_MANUAL), TAG_RETURN_TEXT);
66 if (can_use_html_editor()) {
67     $options = new stdClass();
68     $options->smiley = false;
69     $options->filter = false;
71     // convert and remove any XSS
72     $tag->description       = format_text($tag->description, $tag->descriptionformat, $options);
73     $tag->descriptionformat = FORMAT_HTML;
74 }
76 $errorstring = '';
78 $editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false);
79 $tag = file_prepare_standard_editor($tag, 'description', $editoroptions, $systemcontext, 'tag', 'description', $tag->id);
81 $tagform = new tag_edit_form(null, compact('editoroptions'));
82 if ( $tag->tagtype == 'official' ) {
83     $tag->tagtype = '1';
84 } else {
85     $tag->tagtype = '0';
86 }
88 $tagform->set_data($tag);
90 // If new data has been sent, update the tag record
91 if ($tagnew = $tagform->get_data()) {
93     if (has_capability('moodle/tag:manage', $systemcontext)) {
94         if (($tag->tagtype != 'default') && (!isset($tagnew->tagtype) || ($tagnew->tagtype != '1'))) {
95             tag_type_set($tag->id, 'default');
97         } elseif (($tag->tagtype != 'official') && ($tagnew->tagtype == '1')) {
98             tag_type_set($tag->id, 'official');
99         }
100     }
102     if (!has_capability('moodle/tag:manage', $systemcontext) && !has_capability('moodle/tag:edit', $systemcontext)) {
103         unset($tagnew->name);
104         unset($tagnew->rawname);
106     } else {  // They might be trying to change the rawname, make sure it's a change that doesn't affect name
107         $tagnew->name = array_shift(tag_normalize($tagnew->rawname, TAG_CASE_LOWER));
109         if ($tag->name != $tagnew->name) {  // The name has changed, let's make sure it's not another existing tag
110             if (tag_get_id($tagnew->name)) {   // Something exists already, so flag an error
111                 $errorstring = s($tagnew->rawname).': '.get_string('namesalreadybeeingused', 'tag');
112             }
113         }
114     }
116     if (empty($errorstring)) {    // All is OK, let's save it
118         $tagnew = file_postupdate_standard_editor($tagnew, 'description', $editoroptions, $systemcontext, 'tag', 'description', $tag->id);
120         tag_description_set($tag_id, $tagnew->description, $tagnew->descriptionformat);
122         $tagnew->timemodified = time();
124         if (has_capability('moodle/tag:manage', $systemcontext)) {
125             // rename tag
126             if(!tag_rename($tag->id, $tagnew->rawname)) {
127                 print_error('errorupdatingrecord', 'tag');
128             }
129         }
131         //log tag changes activity
132         //if tag name exist from form, renaming is allow.  record log action as rename
133         //otherwise, record log action as update
134         if (isset($tagnew->name) && ($tag->name != $tagnew->name)){
135             add_to_log($COURSE->id, 'tag', 'update', 'index.php?id='. $tag->id, $tag->name . '->'. $tagnew->name);
137         } elseif ($tag->description != $tagnew->description) {
138             add_to_log($COURSE->id, 'tag', 'update', 'index.php?id='. $tag->id, $tag->name);
139         }
141         //updated related tags
142         tag_set('tag', $tagnew->id, explode(',', trim($tagnew->relatedtags)));
143         //print_object($tagnew); die();
145         redirect($CFG->wwwroot.'/tag/index.php?tag='.rawurlencode($tag->name)); // must use $tag here, as the name isn't in the edit form
146     }
149 $PAGE->navbar->add(get_string('tags', 'tag'), new moodle_url('/tag/search.php'));
150 $PAGE->navbar->add($tagname);
151 $PAGE->navbar->add(get_string('edit'));
152 $PAGE->set_title(get_string('tag', 'tag') . ' - '. $tagname);
153 $PAGE->set_heading($COURSE->fullname);
154 echo $OUTPUT->header();
155 echo $OUTPUT->heading($tagname, 2);
157 if (!empty($errorstring)) {
158     echo $OUTPUT->notification($errorstring);
161 $tagform->display();
163 if (ajaxenabled()) {
164     $PAGE->requires->js('/tag/tag.js');
165     $PAGE->requires->js_function_call('init_tag_autocomplete', null, true);
167 echo $OUTPUT->footer();