mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 08:26:37 +02:00
MDL-19683 MDL-20300 MDL-20219 Interface for external blogs
This commit is contained in:
parent
05de723b1b
commit
b57d395965
3 changed files with 145 additions and 40 deletions
|
@ -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();
|
||||
|
@ -67,18 +67,17 @@ if ($externalblogform->is_cancelled()){
|
|||
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();
|
||||
$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 ($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
|
||||
if ($newexternal->id = $DB->insert_record('blog_external', $newexternal)) {
|
||||
blog_sync_external_entries($newexternal);
|
||||
tag_set('blog_external', $newexternal->id, $data->autotags);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -91,15 +90,13 @@ if ($externalblogform->is_cancelled()){
|
|||
$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 {
|
||||
|
@ -115,8 +112,8 @@ if ($externalblogform->is_cancelled()){
|
|||
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");
|
||||
|
@ -124,7 +121,6 @@ $PAGE->set_title("$SITE->shortname: $strblogs: $strexternalblogs");
|
|||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading($strformheading, 2);
|
||||
|
||||
$external->returnurl = $returnurl;
|
||||
$externalblogform->set_data($external);
|
||||
$externalblogform->display();
|
||||
|
|
@ -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();
|
||||
|
@ -71,10 +64,17 @@ class blog_edit_external_form extends moodleform {
|
|||
* 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()) {
|
||||
|
@ -85,7 +85,6 @@ class blog_edit_external_form extends moodleform {
|
|||
return $errors;
|
||||
}
|
||||
|
||||
/// tweak the form - depending on existing data
|
||||
public function definition_after_data() {
|
||||
global $CFG, $COURSE;
|
||||
$mform =& $this->_form;
|
||||
|
@ -107,7 +106,11 @@ class blog_edit_external_form extends moodleform {
|
|||
}
|
||||
|
||||
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
106
blog/external_blogs.php
Normal 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();
|
Loading…
Add table
Add a link
Reference in a new issue