From: Dongsheng Cai Date: Fri, 13 Nov 2009 08:43:18 +0000 (+0000) Subject: "MDL-20648, merlot.org repository plugin, support basic search only" X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=9b1ebc5dc0c48d7e050a35f5407f1183c05eab61;p=moodle.git "MDL-20648, merlot.org repository plugin, support basic search only" --- diff --git a/lang/en_utf8/repository_merlot.php b/lang/en_utf8/repository_merlot.php new file mode 100644 index 0000000000..66b7020dec --- /dev/null +++ b/lang/en_utf8/repository_merlot.php @@ -0,0 +1,5 @@ + 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 index 0000000000..031fbc9e32 --- /dev/null +++ b/repository/merlot/db/upgrade.php @@ -0,0 +1,20 @@ +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 index 0000000000..80abfa7ad1 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 index 0000000000..3722e3a7ea --- /dev/null +++ b/repository/merlot/repository.class.php @@ -0,0 +1,153 @@ +. + +/** + * repository_merlot is used to search merlot.org in moodle + * + * @author Dongsheng Cai + * @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 index 0000000000..d30bf2e008 --- /dev/null +++ b/repository/merlot/version.php @@ -0,0 +1,2 @@ +version = 2009111300;