MDL-65788 tool_policy: Prevent two modals rendering for guests.
[moodle.git] / blocks / rss_client / editfeed.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  * Script to let a user edit the properties of a particular RSS feed.
19  *
20  * @package   block_rss_client
21  * @copyright 2009 Tim Hunt
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
26 require_once(__DIR__ . '/../../config.php');
27 require_once($CFG->libdir . '/formslib.php');
28 require_once($CFG->libdir .'/simplepie/moodle_simplepie.php');
30 class feed_edit_form extends moodleform {
31     protected $isadding;
32     protected $caneditshared;
33     protected $title = '';
34     protected $description = '';
36     function __construct($actionurl, $isadding, $caneditshared) {
37         $this->isadding = $isadding;
38         $this->caneditshared = $caneditshared;
39         parent::__construct($actionurl);
40     }
42     function definition() {
43         $mform =& $this->_form;
45         // Then show the fields about where this block appears.
46         $mform->addElement('header', 'rsseditfeedheader', get_string('feed', 'block_rss_client'));
48         $mform->addElement('text', 'url', get_string('feedurl', 'block_rss_client'), array('size' => 60));
49         $mform->setType('url', PARAM_URL);
50         $mform->addRule('url', null, 'required');
52         $mform->addElement('checkbox', 'autodiscovery', get_string('enableautodiscovery', 'block_rss_client'));
53         $mform->setDefault('autodiscovery', 1);
54         $mform->setAdvanced('autodiscovery');
55         $mform->addHelpButton('autodiscovery', 'enableautodiscovery', 'block_rss_client');
57         $mform->addElement('text', 'preferredtitle', get_string('customtitlelabel', 'block_rss_client'), array('size' => 60));
58         $mform->setType('preferredtitle', PARAM_NOTAGS);
60         if ($this->caneditshared) {
61             $mform->addElement('selectyesno', 'shared', get_string('sharedfeed', 'block_rss_client'));
62             $mform->setDefault('shared', 0);
63         }
65         $submitlabal = null; // Default
66         if ($this->isadding) {
67             $submitlabal = get_string('addnewfeed', 'block_rss_client');
68         }
69         $this->add_action_buttons(true, $submitlabal);
70     }
72     function definition_after_data(){
73         $mform =& $this->_form;
75         if($mform->getElementValue('autodiscovery')){
76             $mform->applyFilter('url', 'feed_edit_form::autodiscover_feed_url');
77         }
78     }
80     function validation($data, $files) {
81         $errors = parent::validation($data, $files);
83         $rss =  new moodle_simplepie();
84         // set timeout for longer than normal to try and grab the feed
85         $rss->set_timeout(10);
86         $rss->set_feed_url($data['url']);
87         $rss->set_autodiscovery_cache_duration(0);
88         $rss->set_autodiscovery_level(SIMPLEPIE_LOCATOR_NONE);
89         $rss->init();
91         if ($rss->error()) {
92             $errors['url'] = get_string('couldnotfindloadrssfeed', 'block_rss_client');
93         } else {
94             $this->title = $rss->get_title();
95             $this->description = $rss->get_description();
96         }
98         return $errors;
99     }
101     function get_data() {
102         $data = parent::get_data();
103         if ($data) {
104             $data->title = '';
105             $data->description = '';
107             if($this->title){
108                 $data->title = $this->title;
109             }
111             if($this->description){
112                 $data->description = $this->description;
113             }
114         }
115         return $data;
116     }
118     /**
119      * Autodiscovers a feed url from a given url, to be used by the formslibs
120      * filter function
121      *
122      * Uses simplepie with autodiscovery set to maximum level to try and find
123      * a feed to subscribe to.
124      * See: http://simplepie.org/wiki/reference/simplepie/set_autodiscovery_level
125      *
126      * @param string URL to autodiscover a url
127      * @return string URL of feed or original url if none found
128      */
129     public static function autodiscover_feed_url($url){
130             $rss =  new moodle_simplepie();
131             $rss->set_feed_url($url);
132             $rss->set_autodiscovery_level(SIMPLEPIE_LOCATOR_ALL);
133             // When autodiscovering an RSS feed, simplepie will try lots of
134             // rss links on a page, so set the timeout high
135             $rss->set_timeout(20);
136             $rss->init();
138             if($rss->error()){
139                 return $url;
140             }
142             // return URL without quoting..
143             $discoveredurl = new moodle_url($rss->subscribe_url());
144             return $discoveredurl->out(false);
145     }
148 $returnurl = optional_param('returnurl', '', PARAM_LOCALURL);
149 $courseid = optional_param('courseid', 0, PARAM_INT);
150 $rssid = optional_param('rssid', 0, PARAM_INT); // 0 mean create new.
152 if ($courseid == SITEID) {
153     $courseid = 0;
155 if ($courseid) {
156     $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
157     $PAGE->set_course($course);
158     $context = $PAGE->context;
159 } else {
160     $context = context_system::instance();
161     $PAGE->set_context($context);
164 $managesharedfeeds = has_capability('block/rss_client:manageanyfeeds', $context);
165 if (!$managesharedfeeds) {
166     require_capability('block/rss_client:manageownfeeds', $context);
169 $urlparams = array('rssid' => $rssid);
170 if ($courseid) {
171     $urlparams['courseid'] = $courseid;
173 if ($returnurl) {
174     $urlparams['returnurl'] = $returnurl;
176 $managefeeds = new moodle_url('/blocks/rss_client/managefeeds.php', $urlparams);
178 $PAGE->set_url('/blocks/rss_client/editfeed.php', $urlparams);
179 $PAGE->set_pagelayout('admin');
181 if ($rssid) {
182     $isadding = false;
183     $rssrecord = $DB->get_record('block_rss_client', array('id' => $rssid), '*', MUST_EXIST);
184 } else {
185     $isadding = true;
186     $rssrecord = new stdClass;
189 $mform = new feed_edit_form($PAGE->url, $isadding, $managesharedfeeds);
190 $mform->set_data($rssrecord);
192 if ($mform->is_cancelled()) {
193     redirect($managefeeds);
195 } else if ($data = $mform->get_data()) {
196     $data->userid = $USER->id;
197     if (!$managesharedfeeds) {
198         $data->shared = 0;
199     }
201     if ($isadding) {
202         $DB->insert_record('block_rss_client', $data);
203     } else {
204         $data->id = $rssid;
205         $DB->update_record('block_rss_client', $data);
206     }
208     redirect($managefeeds);
210 } else {
211     if ($isadding) {
212         $strtitle = get_string('addnewfeed', 'block_rss_client');
213     } else {
214         $strtitle = get_string('editafeed', 'block_rss_client');
215     }
217     $PAGE->set_title($strtitle);
218     $PAGE->set_heading($strtitle);
220     $PAGE->navbar->add(get_string('blocks'));
221     $PAGE->navbar->add(get_string('pluginname', 'block_rss_client'));
222     $PAGE->navbar->add(get_string('managefeeds', 'block_rss_client'), $managefeeds );
223     $PAGE->navbar->add($strtitle);
225     echo $OUTPUT->header();
226     echo $OUTPUT->heading($strtitle, 2);
228     $mform->display();
230     echo $OUTPUT->footer();