]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-19683 MDL-20300 MDL-20219 Interface for external blogs
authorNicolas Connault <nicolasconnault@gmail.com>
Fri, 30 Oct 2009 07:26:27 +0000 (07:26 +0000)
committerNicolas Connault <nicolasconnault@gmail.com>
Fri, 30 Oct 2009 07:26:27 +0000 (07:26 +0000)
blog/external_blog_edit.php [moved from blog/external.php with 73% similarity]
blog/external_blog_edit_form.php [moved from blog/external_form.php with 75% similarity]
blog/external_blogs.php [new file with mode: 0644]

similarity index 73%
rename from blog/external.php
rename to blog/external_blog_edit.php
index 38862add9c0a261e977ccd65051199845e9fd44d..2b8e21fc5bc0c119d6c2b206f4d5148469cc29ca 100644 (file)
 
 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();
 
similarity index 75%
rename from blog/external_form.php
rename to blog/external_blog_edit_form.php
index 34a80683ae6085ea82bebefdbe4a6fc1d8923ff6..01cd34dc5ae75005a8a99faa01597051d0f24e35 100644 (file)
  */
 
 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 (file)
index 0000000..f789d0c
--- /dev/null
@@ -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();