require_once('../config.php');
require_once('lib.php');
-require_once('external_form.php');
+require_once('external_blog_edit_form.php');
require_once($CFG->libdir . '/simplepie/moodle_simplepie.php');
require_once($CFG->dirroot.'/tag/lib.php');
require_login();
-
-$user = $USER;
+require_capability('moodle/blog:manageexternal', get_context_instance(CONTEXT_SYSTEM));
// TODO redirect if $CFG->useexternalblogs is off, $CFG->maxexternalblogsperuser == 0, or if user doesn't have caps to manage external blogs
$id = optional_param('id', null, PARAM_INT);
-$PAGE->set_url('/blog/external.php', array('id' => $id));
+$PAGE->set_url('/blog/external_blog_edit.php', array('id' => $id));
+
+$returnurl = new moodle_url($CFG->wwwroot . '/blog/external_blogs.php');
-$returnurl = urldecode(optional_param('returnurl', $PAGE->url->out(), PARAM_RAW));
$action = (empty($id)) ? 'add' : 'edit';
$external = new stdClass();
case 'add':
$rss = new moodle_simplepie($data->url);
- $new_external = new stdClass();
- $new_external->name = (empty($data->name)) ? $rss->get_title() : $data->name;
- $new_external->description = (empty($data->description)) ? $rss->get_description() : $data->description;
- $new_external->userid = $user->id;
- $new_external->url = $data->url;
- $new_external->timemodified = mktime();
-
- if ($new_external->id = $DB->insert_record('blog_external', $new_external)) {
- tag_set('blog_external', $new_external->id, $data->tags);
- // TODO success message
- } else {
- // TODO error message
+ $newexternal = new stdClass();
+ $newexternal->name = (empty($data->name)) ? $rss->get_title() : $data->name;
+ $newexternal->description = (empty($data->description)) ? $rss->get_description() : $data->description;
+ $newexternal->userid = $USER->id;
+ $newexternal->url = $data->url;
+ $newexternal->filtertags = $data->filtertags;
+ $newexternal->timemodified = mktime();
+
+ if ($newexternal->id = $DB->insert_record('blog_external', $newexternal)) {
+ blog_sync_external_entries($newexternal);
+ tag_set('blog_external', $newexternal->id, $data->autotags);
}
break;
$external->id = $data->id;
$external->name = (empty($data->name)) ? $rss->get_title() : $data->name;
$external->description = (empty($data->description)) ? $rss->get_description() : $data->description;
- $external->userid = $user->id;
+ $external->userid = $USER->id;
$external->url = $data->url;
+ $external->filtertags = $data->filtertags;
$external->timemodified = mktime();
if ($DB->update_record('blog_external', $external)) {
- tag_set('blog_external', $external->id, explode(',', $data->tags));
- // TODO success message
- } else {
- // TODO error message
+ tag_set('blog_external', $external->id, explode(',', $data->autotags));
}
} else {
redirect($returnurl);
}
-$PAGE->navbar->add(fullname($user), new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$user->id)));
-$PAGE->navbar->add($strblogs, new moodle_url($CFG->wwwroot.'/blog/index.php', array('userid'=>$user->id)));
+$PAGE->navbar->add(fullname($USER), new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$USER->id)));
+$PAGE->navbar->add($strblogs, new moodle_url($CFG->wwwroot.'/blog/index.php', array('userid'=>$USER->id)));
$PAGE->navbar->add($strformheading);
$PAGE->set_heading("$SITE->shortname: $strblogs: $strexternalblogs", $SITE->fullname);
$PAGE->set_title("$SITE->shortname: $strblogs: $strexternalblogs");
echo $OUTPUT->header();
echo $OUTPUT->heading($strformheading, 2);
-$external->returnurl = $returnurl;
$externalblogform->set_data($external);
$externalblogform->display();
*/
require_once($CFG->libdir.'/formslib.php');
-// TODO remove "Blogging is disabled" text from blog_menu when editing not on
-// DONE put Associations in Advanced items
-// TODO add descriptive text to Associations fieldset
-// TODO forceopen on preferences page
-// TODO Add Blog link under course navigation tree
-// DONE add string for invalidgroupid
-// DONE Restrict groupid entries to entries associated with the course
+
class blog_edit_external_form extends moodleform {
public function definition() {
global $CFG;
$mform =& $this->_form;
- $mform->addElement('text', 'url', get_string('url'));
+ $mform->addElement('text', 'url', get_string('url'), array('size' => 50));
$mform->addRule('url', get_string('emptyurl', 'blog'), 'required', null, 'client');
$mform->setHelpButton('url', array('url', get_string('url', 'blog'), 'blog'));
$mform->addElement('text', 'name', get_string('name'));
- // No need to require the name, it gets prefilled with the external blog's site name if empty
- // $mform->addRule('name', get_string('emptyname', 'blog'), 'required', null, 'client');
$mform->setHelpButton('name', array('name', get_string('name', 'blog'), 'blog'));
$mform->addElement('textarea', 'description', get_string('description'), array('cols' => 50, 'rows' => 7));
$mform->setHelpButton('description', array('description', get_string('description', 'blog'), 'blog'));
if (!empty($CFG->usetags)) {
- $mform->addElement('text', 'tags', get_string('tags'));
- $mform->setHelpButton('tags', array('tags', get_string('tags', 'blog'), 'blog'));
+ $mform->addElement('text', 'filtertags', get_string('filtertags', 'blog'), array('size' => 50));
+ $mform->setHelpButton('filtertags', array('filtertags', get_string('filtertags', 'blog'), 'blog'));
+ $mform->addElement('text', 'autotags', get_string('autotags', 'blog'), array('size' => 50));
}
$this->add_action_buttons();
* Additional validation includes checking URL and tags
*/
public function validation($data, $files) {
+ global $CFG;
+
$errors = parent::validation($data, $files);
- if (!blog_is_valid_url($data['url'])) {
- $errors['url'] = get_string('invalidurl', 'blog');
+ require_once($CFG->libdir . '/simplepie/moodle_simplepie.php');
+
+ $rssfile = new moodle_simplepie_file($data['url']);
+ $filetest = new SimplePie_Locator($rssfile);
+
+ if (!$filetest->is_feed($rssfile)) {
+ $errors['url'] = get_string('feedisinvalid', 'blog');
} else {
$rss = new moodle_simplepie($data['url']);
if (!$rss->init()) {
return $errors;
}
-/// tweak the form - depending on existing data
public function definition_after_data() {
global $CFG, $COURSE;
$mform =& $this->_form;
}
if ($id = $mform->getElementValue('id')) {
- $mform->setDefault('tags', implode(',', tag_get_tags_array('blog_external', $id)));
+ $mform->setDefault('autotags', implode(',', tag_get_tags_array('blog_external', $id)));
+ $mform->freeze('url');
+ $mform->freeze('filtertags');
+ // TODO change the filtertags element to a multiple select, using the tags of the external blog
+ // Use $rss->get_channel_tags()
}
}
}
--- /dev/null
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+
+/**
+ * List of external blogs for current user.
+ *
+ * @package moodlecore
+ * @subpackage blog
+ * @copyright 2009 Nicolas Connault
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once('../config.php');
+require_once('lib.php');
+
+require_login();
+
+$PAGE->set_url('/blog/external_blogs.php');
+require_capability('moodle/blog:manageexternal', get_context_instance(CONTEXT_SYSTEM));
+
+$delete = optional_param('delete', null, PARAM_INT);
+
+$strexternalblogs = get_string('externalblogs','blog');
+$straddnewexternalblog = get_string('addnewexternalblog','blog');
+$strblogs = get_string('blogs','blog');
+$message = null;
+
+if ($delete && confirm_sesskey()) {
+ $externalbloguserid = $DB->get_field('blog_external', 'userid', array('id' => $delete));
+ if ($externalbloguserid == $USER->id) {
+ $DB->delete_records('blog_external', array('id' => $delete));
+ $message = get_string('externalblogdeleted', 'blog');
+ }
+}
+
+$blogs = $DB->get_records('blog_external', array('userid' => $USER->id));
+
+$PAGE->navbar->add(fullname($USER), new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$USER->id)));
+$PAGE->navbar->add($strblogs, new moodle_url($CFG->wwwroot.'/blog/index.php', array('userid'=>$USER->id)));
+$PAGE->navbar->add($strexternalblogs);
+$PAGE->set_heading("$SITE->shortname: $strblogs: $strexternalblogs", $SITE->fullname);
+$PAGE->set_title("$SITE->shortname: $strblogs: $strexternalblogs");
+
+echo $OUTPUT->header();
+echo $OUTPUT->heading($strexternalblogs, 2);
+
+if (!empty($message)) {
+ echo $OUTPUT->notification($message);
+}
+
+echo $OUTPUT->box_start('generalbox boxaligncenter');
+
+if (!empty($blogs)) {
+ $table = new html_table();
+ $table->cellpadding = 4;
+ $table->add_class('generaltable boxaligncenter');
+ $table->head = array(get_string('name'), get_string('url'), get_string('timefetched', 'blog'), get_string('valid', 'blog'), get_string('actions'));
+
+ foreach ($blogs as $blog) {
+ $validicon = html_image::make($OUTPUT->old_icon_url('i/tick_green_big'));
+ $validicon->alt = get_string('feedisvalid', 'blog');
+ $validicon->title = get_string('feedisvalid', 'blog');
+
+ if ($blog->failedlastsync) {
+ $validicon->src = $OUTPUT->old_icon_url('i/cross_red_big');
+ $validicon->alt = get_string('feedisinvalid', 'blog');
+ $validicon->title = get_string('feedisinvalid', 'blog');
+ }
+
+ $editicon = new moodle_action_icon;
+ $editicon->link->url = new moodle_url($CFG->wwwroot.'/blog/external_blog_edit.php', array('id' => $blog->id));
+ $editicon->link->title = get_string('editexternalblog', 'blog');
+ $editicon->image->src = $OUTPUT->old_icon_url('t/edit');
+ $editicon->image->alt = get_string('editexternalblog', 'blog');
+
+ $deleteicon = new moodle_action_icon;
+ $deleteicon->link->url = new moodle_url($CFG->wwwroot.'/blog/external_blogs.php', array('delete' => $blog->id, 'sesskey' => sesskey()));
+ $deleteicon->link->title = get_string('deleteexternalblog', 'blog');
+ $deleteicon->image->src = $OUTPUT->old_icon_url('t/delete');
+ $deleteicon->image->alt = get_string('deleteexternalblog', 'blog');
+ $deleteicon->add_confirm_action(get_string('externalblogdeleteconfirm', 'blog'));
+ $icons = $OUTPUT->action_icon($editicon) . $OUTPUT->action_icon($deleteicon);
+ $table->data[] = html_table_row::make(array($blog->name, $blog->url, userdate($blog->timefetched), $OUTPUT->image($validicon), $icons));
+ }
+ echo $OUTPUT->table($table);
+}
+
+$newexternalurl = new moodle_url($CFG->wwwroot.'/blog/external_blog_edit.php');
+echo $OUTPUT->link(html_link::make($newexternalurl, $straddnewexternalblog));
+echo $OUTPUT->box_end();
+echo $OUTPUT->footer();