Skip to content

Commit

Permalink
MDL-19683 MDL-20300 MDL-20219 Interface for external blogs
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasconnault committed Oct 30, 2009
1 parent 05de723 commit b57d395
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 41 deletions.
46 changes: 21 additions & 25 deletions blog/external.php → blog/external_blog_edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,20 @@

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();
Expand All @@ -67,18 +67,17 @@
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;
Expand All @@ -91,15 +90,13 @@
$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 {
Expand All @@ -115,16 +112,15 @@
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();

Expand Down
35 changes: 19 additions & 16 deletions blog/external_form.php → blog/external_blog_edit_form.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,34 +26,27 @@
*/

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();
Expand All @@ -71,10 +64,17 @@ public function definition() {
* 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()) {
Expand All @@ -85,7 +85,6 @@ public function validation($data, $files) {
return $errors;
}

/// tweak the form - depending on existing data
public function definition_after_data() {
global $CFG, $COURSE;
$mform =& $this->_form;
Expand All @@ -107,7 +106,11 @@ public function definition_after_data() {
}

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 changes: 106 additions & 0 deletions blog/external_blogs.php
Original file line number Diff line number Diff line change
@@ -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();

0 comments on commit b57d395

Please sign in to comment.