]> git.mjollnir.org Git - moodle.git/commitdiff
"MDL-20648, merlot.org repository plugin, support basic search only"
authorDongsheng Cai <unoter@gmail.com>
Fri, 13 Nov 2009 08:43:18 +0000 (08:43 +0000)
committerDongsheng Cai <unoter@gmail.com>
Fri, 13 Nov 2009 08:43:18 +0000 (08:43 +0000)
lang/en_utf8/repository_merlot.php [new file with mode: 0644]
repository/merlot/db/access.php [new file with mode: 0755]
repository/merlot/db/upgrade.php [new file with mode: 0755]
repository/merlot/icon.png [new file with mode: 0755]
repository/merlot/repository.class.php [new file with mode: 0755]
repository/merlot/version.php [new file with mode: 0755]

diff --git a/lang/en_utf8/repository_merlot.php b/lang/en_utf8/repository_merlot.php
new file mode 100644 (file)
index 0000000..66b7020
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+$string['configplugin'] = 'Merlot.org configuration';
+$string['licensekey'] = 'License Key';
+$string['repositorydesc'] = 'Merlot.org';
+$string['repositoryname'] = 'Merlot.org';
diff --git a/repository/merlot/db/access.php b/repository/merlot/db/access.php
new file mode 100755 (executable)
index 0000000..a436f8b
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+
+$capabilities = array(
+
+    'repository/merlot:view' => array(
+        'captype' => 'read',
+        'contextlevel' => CONTEXT_SYSTEM,
+        'legacy' => array(
+            'student' => CAP_ALLOW,
+            'teacher' => CAP_ALLOW,
+            'editingteacher' => CAP_ALLOW,
+            'admin' => CAP_ALLOW
+        )
+    )
+);
diff --git a/repository/merlot/db/upgrade.php b/repository/merlot/db/upgrade.php
new file mode 100755 (executable)
index 0000000..031fbc9
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+function xmldb_repository_merlot_upgrade($oldversion) {
+
+    global $CFG, $DB;
+
+    $dbman = $DB->get_manager();
+    $result = true;
+
+/// And upgrade begins here. For each one, you'll need one
+/// block of code similar to the next one. Please, delete
+/// this comment lines once this file start handling proper
+/// upgrade code.
+
+/// if ($result && $oldversion < YYYYMMDD00) { //New version in version.php
+///     $result = result of database_manager methods
+/// }
+
+    return $result;
+}
diff --git a/repository/merlot/icon.png b/repository/merlot/icon.png
new file mode 100755 (executable)
index 0000000..80abfa7
Binary files /dev/null and b/repository/merlot/icon.png differ
diff --git a/repository/merlot/repository.class.php b/repository/merlot/repository.class.php
new file mode 100755 (executable)
index 0000000..3722e3a
--- /dev/null
@@ -0,0 +1,153 @@
+<?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/>.
+
+/**
+ * repository_merlot is used to search merlot.org in moodle
+ *
+ * @author Dongsheng Cai <dongsheng@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ */
+class repository_merlot extends repository {
+
+    public function __construct($repositoryid, $context = SITEID, $options = array()) {
+        parent::__construct($repositoryid, $context, $options);
+        $this->keyword = optional_param('merlot_keyword', '', PARAM_RAW);
+        $this->author = optional_param('merlot_author', '', PARAM_RAW);
+        $this->licensekey = trim(get_config('merlot', 'licensekey'));
+    }
+
+    /**
+     * Display login screen or not
+     *
+     * @return boolean
+     */
+    public function check_login() {
+        return !empty($this->keyword);
+    }
+
+    /**
+     * Doesn't support global search
+     *
+     * @return boolean
+     */
+    public function global_search() {
+        return false;
+    }
+
+    /**
+     * Look for a link in merlot.org
+     * @param string $search_text
+     * @return array
+     */
+    public function search($search_text) {
+        $ret  = array();
+        $ret['nologin'] = true;
+        $ret['list'] = $this->_get_collection($this->keyword, $this->author);
+        return $ret;
+    }
+
+    /**
+     * Get a list of links
+     * @return array
+     */
+    public function get_listing() {
+        $ret  = array();
+        $ret['nologin'] = true;
+        $ret['list'] = $this->_get_collection($this->keyword);
+        return $ret;
+    }
+
+    private function _get_collection($keyword, $author) {
+        global $OUTPUT;
+        $list = array();
+        $this->api = 'http://www.merlot.org/merlot/materials.rest?keywords=' . urlencode($keyword) . '&licenseKey='.$this->licensekey;
+        $c = new curl(array('cache'=>true, 'module_cache'=>'repository'));
+        $content = $c->get($this->api);
+               $xml = simplexml_load_string($content);
+        foreach ($xml->results->material as $entry) {
+            $list[] = array(
+                'title'=>(string)$entry->title,
+                'thumbnail'=>$OUTPUT->old_icon_url('f/unknown-32'),
+                'date'=>userdate((int)$entry->creationDate),
+                'size'=>'',
+                'source'=>(string)$entry->URL
+            );
+        }
+        return $list;
+    }
+
+    /**
+     * Define a search form
+     *
+     * @return array
+     */
+    public function print_login(){
+        $ret = array();
+        $search = new stdclass;
+        $search->type = 'text';
+        $search->id   = 'merlog_search';
+        $search->name = 'merlot_keyword';
+        $search->label = get_string('search').': ';
+        $author = new stdclass;
+        $author->type = 'text';
+        $author->id   = 'merlog_author';
+        $author->name = 'merlot_author';
+        $author->label = get_string('author', 'search').': ';
+
+        $ret['login'] = array($search, $author);
+        $ret['login_btn_label'] = get_string('search');
+        $ret['login_btn_action'] = 'search';
+        return $ret;
+    }
+
+    /**
+     * Names of the plugin settings
+     *
+     * @return array
+     */
+    public static function get_type_option_names() {
+        return array('licensekey');
+    }
+
+    /**
+     * Add Plugin settings input to Moodle form
+     *
+     * @param object $mform
+     */
+    public function type_config_form(&$mform) {
+        $licensekey = get_config('merlot', 'licensekey');
+        if (empty($licensekey)) {
+            $licensekey = '';
+        }
+        $strrequired = get_string('required');
+        $mform->addElement('text', 'licensekey', get_string('licensekey', 'repository_merlot'), array('value'=>$licensekey,'size' => '40'));
+        $mform->addRule('licensekey', $strrequired, 'required', null, 'client');
+    }
+
+    /**
+     * Support external link only
+     *
+     * @return int
+     */
+    public function supported_returntypes() {
+        return FILE_EXTERNAL;
+    }
+    public function supported_filetypes() {
+        return array('link');
+    }
+}
+
diff --git a/repository/merlot/version.php b/repository/merlot/version.php
new file mode 100755 (executable)
index 0000000..d30bf2e
--- /dev/null
@@ -0,0 +1,2 @@
+<?php
+$plugin->version = 2009111300;