MDL-19683 MDL-20300 MDL-20219 Interface for external blogs

This commit is contained in:
Nicolas Connault 2009-10-30 07:26:27 +00:00
parent 05de723b1b
commit b57d395965
3 changed files with 145 additions and 40 deletions

View file

@ -27,20 +27,20 @@
require_once('../config.php'); require_once('../config.php');
require_once('lib.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->libdir . '/simplepie/moodle_simplepie.php');
require_once($CFG->dirroot.'/tag/lib.php'); require_once($CFG->dirroot.'/tag/lib.php');
require_login(); require_login();
require_capability('moodle/blog:manageexternal', get_context_instance(CONTEXT_SYSTEM));
$user = $USER;
// TODO redirect if $CFG->useexternalblogs is off, $CFG->maxexternalblogsperuser == 0, or if user doesn't have caps to manage external blogs // 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); $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'; $action = (empty($id)) ? 'add' : 'edit';
$external = new stdClass(); $external = new stdClass();
@ -67,18 +67,17 @@ if ($externalblogform->is_cancelled()){
case 'add': case 'add':
$rss = new moodle_simplepie($data->url); $rss = new moodle_simplepie($data->url);
$new_external = new stdClass(); $newexternal = new stdClass();
$new_external->name = (empty($data->name)) ? $rss->get_title() : $data->name; $newexternal->name = (empty($data->name)) ? $rss->get_title() : $data->name;
$new_external->description = (empty($data->description)) ? $rss->get_description() : $data->description; $newexternal->description = (empty($data->description)) ? $rss->get_description() : $data->description;
$new_external->userid = $user->id; $newexternal->userid = $USER->id;
$new_external->url = $data->url; $newexternal->url = $data->url;
$new_external->timemodified = mktime(); $newexternal->filtertags = $data->filtertags;
$newexternal->timemodified = mktime();
if ($new_external->id = $DB->insert_record('blog_external', $new_external)) { if ($newexternal->id = $DB->insert_record('blog_external', $newexternal)) {
tag_set('blog_external', $new_external->id, $data->tags); blog_sync_external_entries($newexternal);
// TODO success message tag_set('blog_external', $newexternal->id, $data->autotags);
} else {
// TODO error message
} }
break; break;
@ -91,15 +90,13 @@ if ($externalblogform->is_cancelled()){
$external->id = $data->id; $external->id = $data->id;
$external->name = (empty($data->name)) ? $rss->get_title() : $data->name; $external->name = (empty($data->name)) ? $rss->get_title() : $data->name;
$external->description = (empty($data->description)) ? $rss->get_description() : $data->description; $external->description = (empty($data->description)) ? $rss->get_description() : $data->description;
$external->userid = $user->id; $external->userid = $USER->id;
$external->url = $data->url; $external->url = $data->url;
$external->filtertags = $data->filtertags;
$external->timemodified = mktime(); $external->timemodified = mktime();
if ($DB->update_record('blog_external', $external)) { if ($DB->update_record('blog_external', $external)) {
tag_set('blog_external', $external->id, explode(',', $data->tags)); tag_set('blog_external', $external->id, explode(',', $data->autotags));
// TODO success message
} else {
// TODO error message
} }
} else { } else {
@ -115,8 +112,8 @@ if ($externalblogform->is_cancelled()){
redirect($returnurl); redirect($returnurl);
} }
$PAGE->navbar->add(fullname($user), new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$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($strblogs, new moodle_url($CFG->wwwroot.'/blog/index.php', array('userid'=>$USER->id)));
$PAGE->navbar->add($strformheading); $PAGE->navbar->add($strformheading);
$PAGE->set_heading("$SITE->shortname: $strblogs: $strexternalblogs", $SITE->fullname); $PAGE->set_heading("$SITE->shortname: $strblogs: $strexternalblogs", $SITE->fullname);
$PAGE->set_title("$SITE->shortname: $strblogs: $strexternalblogs"); $PAGE->set_title("$SITE->shortname: $strblogs: $strexternalblogs");
@ -124,7 +121,6 @@ $PAGE->set_title("$SITE->shortname: $strblogs: $strexternalblogs");
echo $OUTPUT->header(); echo $OUTPUT->header();
echo $OUTPUT->heading($strformheading, 2); echo $OUTPUT->heading($strformheading, 2);
$external->returnurl = $returnurl;
$externalblogform->set_data($external); $externalblogform->set_data($external);
$externalblogform->display(); $externalblogform->display();

View file

@ -26,34 +26,27 @@
*/ */
require_once($CFG->libdir.'/formslib.php'); 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 { class blog_edit_external_form extends moodleform {
public function definition() { public function definition() {
global $CFG; global $CFG;
$mform =& $this->_form; $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->addRule('url', get_string('emptyurl', 'blog'), 'required', null, 'client');
$mform->setHelpButton('url', array('url', get_string('url', 'blog'), 'blog')); $mform->setHelpButton('url', array('url', get_string('url', 'blog'), 'blog'));
$mform->addElement('text', 'name', get_string('name')); $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->setHelpButton('name', array('name', get_string('name', 'blog'), 'blog'));
$mform->addElement('textarea', 'description', get_string('description'), array('cols' => 50, 'rows' => 7)); $mform->addElement('textarea', 'description', get_string('description'), array('cols' => 50, 'rows' => 7));
$mform->setHelpButton('description', array('description', get_string('description', 'blog'), 'blog')); $mform->setHelpButton('description', array('description', get_string('description', 'blog'), 'blog'));
if (!empty($CFG->usetags)) { if (!empty($CFG->usetags)) {
$mform->addElement('text', 'tags', get_string('tags')); $mform->addElement('text', 'filtertags', get_string('filtertags', 'blog'), array('size' => 50));
$mform->setHelpButton('tags', array('tags', get_string('tags', 'blog'), 'blog')); $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(); $this->add_action_buttons();
@ -71,10 +64,17 @@ class blog_edit_external_form extends moodleform {
* Additional validation includes checking URL and tags * Additional validation includes checking URL and tags
*/ */
public function validation($data, $files) { public function validation($data, $files) {
global $CFG;
$errors = parent::validation($data, $files); $errors = parent::validation($data, $files);
if (!blog_is_valid_url($data['url'])) { require_once($CFG->libdir . '/simplepie/moodle_simplepie.php');
$errors['url'] = get_string('invalidurl', 'blog');
$rssfile = new moodle_simplepie_file($data['url']);
$filetest = new SimplePie_Locator($rssfile);
if (!$filetest->is_feed($rssfile)) {
$errors['url'] = get_string('feedisinvalid', 'blog');
} else { } else {
$rss = new moodle_simplepie($data['url']); $rss = new moodle_simplepie($data['url']);
if (!$rss->init()) { if (!$rss->init()) {
@ -85,7 +85,6 @@ class blog_edit_external_form extends moodleform {
return $errors; return $errors;
} }
/// tweak the form - depending on existing data
public function definition_after_data() { public function definition_after_data() {
global $CFG, $COURSE; global $CFG, $COURSE;
$mform =& $this->_form; $mform =& $this->_form;
@ -107,7 +106,11 @@ class blog_edit_external_form extends moodleform {
} }
if ($id = $mform->getElementValue('id')) { 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()
} }
} }
} }

106
blog/external_blogs.php Normal file
View file

@ -0,0 +1,106 @@
<?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();