From: Nicolas Connault Date: Fri, 30 Oct 2009 07:26:27 +0000 (+0000) Subject: MDL-19683 MDL-20300 MDL-20219 Interface for external blogs X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=b57d395965651b2aa196c50c28466640d08481ef;p=moodle.git MDL-19683 MDL-20300 MDL-20219 Interface for external blogs --- diff --git a/blog/external.php b/blog/external_blog_edit.php similarity index 73% rename from blog/external.php rename to blog/external_blog_edit.php index 38862add9c..2b8e21fc5b 100644 --- a/blog/external.php +++ b/blog/external_blog_edit.php @@ -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(); - - 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; @@ -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(); diff --git a/blog/external_form.php b/blog/external_blog_edit_form.php similarity index 75% rename from blog/external_form.php rename to blog/external_blog_edit_form.php index 34a80683ae..01cd34dc5a 100644 --- a/blog/external_form.php +++ b/blog/external_blog_edit_form.php @@ -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() } } } diff --git a/blog/external_blogs.php b/blog/external_blogs.php new file mode 100644 index 0000000000..f789d0c873 --- /dev/null +++ b/blog/external_blogs.php @@ -0,0 +1,106 @@ +. + + +/** + * 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();