3 // This file is part of Moodle - http://moodle.org/
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.
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.
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/>.
21 * @copyright 2007 Luiz Cruz <luiz.laydner@gmail.com>
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
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
);
34 if (empty($CFG->usetags
)) {
35 print_error('tagsaredisabled', 'tag');
38 //Editing a tag requires moodle/tag:edit capability
39 $systemcontext = get_context_instance(CONTEXT_SYSTEM
);
40 require_capability('moodle/tag:edit', $systemcontext);
43 $tag = tag_get('name', $tag_name, '*');
45 $tag = tag_get('id', $tag_id, '*');
49 redirect($CFG->wwwroot
.'/tag/search.php');
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('connection');
59 $PAGE->requires
->yui2_lib('animation');
60 $PAGE->requires
->yui2_lib('datasource');
61 $PAGE->requires
->yui2_lib('autocomplete');
63 $tagname = tag_display_name($tag);
65 // set the relatedtags field of the $tag object that will be passed to the form
66 $tag->relatedtags
= tag_get_related_tags_csv(tag_get_related_tags($tag->id
, TAG_RELATED_MANUAL
), TAG_RETURN_TEXT
);
68 if (can_use_html_editor()) {
69 $options = new stdClass();
70 $options->smiley
= false;
71 $options->filter
= false;
73 // convert and remove any XSS
74 $tag->description
= format_text($tag->description
, $tag->descriptionformat
, $options);
75 $tag->descriptionformat
= FORMAT_HTML
;
80 $editoroptions = array(
81 'maxfiles' => EDITOR_UNLIMITED_FILES
,
82 'maxbytes' => $CFG->maxbytes
,
84 'context' => $systemcontext
86 $tag = file_prepare_standard_editor($tag, 'description', $editoroptions, $systemcontext, 'tag', 'description', $tag->id
);
88 $tagform = new tag_edit_form(null, compact('editoroptions'));
89 if ( $tag->tagtype
== 'official' ) {
95 $tagform->set_data($tag);
97 // If new data has been sent, update the tag record
98 if ($tagnew = $tagform->get_data()) {
100 if (has_capability('moodle/tag:manage', $systemcontext)) {
101 if (($tag->tagtype
!= 'default') && (!isset($tagnew->tagtype
) ||
($tagnew->tagtype
!= '1'))) {
102 tag_type_set($tag->id
, 'default');
104 } elseif (($tag->tagtype
!= 'official') && ($tagnew->tagtype
== '1')) {
105 tag_type_set($tag->id
, 'official');
109 if (!has_capability('moodle/tag:manage', $systemcontext) && !has_capability('moodle/tag:edit', $systemcontext)) {
110 unset($tagnew->name
);
111 unset($tagnew->rawname
);
113 } else { // They might be trying to change the rawname, make sure it's a change that doesn't affect name
114 $tagnew->name
= array_shift(tag_normalize($tagnew->rawname
, TAG_CASE_LOWER
));
116 if ($tag->name
!= $tagnew->name
) { // The name has changed, let's make sure it's not another existing tag
117 if (tag_get_id($tagnew->name
)) { // Something exists already, so flag an error
118 $errorstring = s($tagnew->rawname
).': '.get_string('namesalreadybeeingused', 'tag');
123 if (empty($errorstring)) { // All is OK, let's save it
125 $tagnew = file_postupdate_standard_editor($tagnew, 'description', $editoroptions, $systemcontext, 'tag', 'description', $tag->id
);
127 tag_description_set($tag_id, $tagnew->description
, $tagnew->descriptionformat
);
129 $tagnew->timemodified
= time();
131 if (has_capability('moodle/tag:manage', $systemcontext)) {
133 if(!tag_rename($tag->id
, $tagnew->rawname
)) {
134 print_error('errorupdatingrecord', 'tag');
138 //log tag changes activity
139 //if tag name exist from form, renaming is allow. record log action as rename
140 //otherwise, record log action as update
141 if (isset($tagnew->name
) && ($tag->name
!= $tagnew->name
)){
142 add_to_log($COURSE->id
, 'tag', 'update', 'index.php?id='. $tag->id
, $tag->name
. '->'. $tagnew->name
);
144 } elseif ($tag->description
!= $tagnew->description
) {
145 add_to_log($COURSE->id
, 'tag', 'update', 'index.php?id='. $tag->id
, $tag->name
);
148 //updated related tags
149 tag_set('tag', $tagnew->id
, explode(',', trim($tagnew->relatedtags
)));
150 //print_object($tagnew); die();
152 redirect($CFG->wwwroot
.'/tag/index.php?tag='.rawurlencode($tag->name
)); // must use $tag here, as the name isn't in the edit form
156 $PAGE->navbar
->add(get_string('tags', 'tag'), new moodle_url('/tag/search.php'));
157 $PAGE->navbar
->add($tagname);
158 $PAGE->navbar
->add(get_string('edit'));
159 $PAGE->set_title(get_string('tag', 'tag') . ' - '. $tagname);
160 $PAGE->set_heading($COURSE->fullname
);
161 echo $OUTPUT->header();
162 echo $OUTPUT->heading($tagname, 2);
164 if (!empty($errorstring)) {
165 echo $OUTPUT->notification($errorstring);
171 $PAGE->requires
->js('/tag/tag.js');
172 $PAGE->requires
->js_function_call('init_tag_autocomplete', null, true);
174 echo $OUTPUT->footer();