"MDL-17381, first working wikemedia plugin"

This commit is contained in:
dongsheng
2008-12-22 02:44:18 +00:00
parent 227ab054e3
commit 4f16680ce2
3 changed files with 152 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 970 B

+64
View File
@@ -0,0 +1,64 @@
<?php
require_once('wikimedia.php');
class repository_wikimedia extends repository {
public function __construct($repositoryid, $context = SITEID, $options = array()) {
parent::__construct($repositoryid, $context, $options);
$this->keyword = optional_param('wikimedia_keyword', '', PARAM_RAW);
}
public function get_listing($path = '') {
global $CFG;
$client = new wikimedia;
$result = $client->search_images($this->keyword);
$list = array();
$list['list'] = array();
foreach ($result as $title=>$url) {
$list['list'][] = array(
'title'=>$title,
'thumbnail'=>$CFG->pixpath.'/f/'.mimeinfo('icon', 'xx.jpg'),
// plugin-dependent unique path to the file (id, url, path, etc.)
'source'=>$url,
// the accessible url of the file
'url'=>$url
);
}
return $list;
}
// login
public function check_login() {
echo_fb($this->keyword);
return !empty($this->keyword);
}
// if check_login returns false,
// this function will be called to print a login form.
public function print_login() {
$keyword->label = get_string('keyword', 'repository_wikimedia').': ';
$keyword->id = 'input_text_keyword';
$keyword->type = 'text';
$keyword->name = 'wikimedia_keyword';
$keyword->value = '';
$form = array();
$form['login'] = array($keyword);
return $form;
}
//search
// if this plugin support global search, if this function return
// true, search function will be called when global searching working
public function global_search() {
return false;
}
public function search($text) {
$search_result = array();
$search_result['list'] = array();
return $search_result;
}
// when logout button on file picker is clicked, this function will be
// called.
public function logout() {
return true;
}
public static function get_type_option_names() {
return null;
}
}
+88
View File
@@ -0,0 +1,88 @@
<?php
class wikimedia {
private $_conn = null;
private $_param = array();
public function __construct($url = '') {
if (empty($url)) {
$this->api = 'http://commons.wikimedia.org/w/api.php';
}
$this->_param['format'] = 'php';
$this->_param['redirects'] = true;
$this->_conn = new curl(array('cache'=>true, 'debug'=>false));
}
public function login($user, $pass) {
$this->_param['action'] = 'login';
$this->_param['lgname'] = $user;
$this->_param['lgpassword'] = $pass;
$content = $this->_conn->post($this->api, $this->_param);
$result = unserialize($content);
if (!empty($result['result']['sessionid'])) {
$this->userid = $result['result']['lguserid'];
$this->username = $result['result']['lgusername'];
$this->token = $result['result']['lgtoken'];
return true;
} else {
return false;
}
}
public function logout() {
$this->_param['action'] = 'logout';
$content = $this->_conn->post($this->api, $this->_param);
return;
}
public function get_image_url($titles) {
$image_urls = array();
$this->_param['action'] = 'query';
if (is_array($titles)) {
foreach ($titles as $title) {
$this->_param['titles'] .= ('|'.urldecode($title));
}
} else {
$this->_param['titles'] = urldecode($title);
}
$this->_param['prop'] = 'imageinfo';
$this->_param['iiprop'] = 'url';
$content = $this->_conn->post($this->api, $this->_param);
$result = unserialize($content);
foreach ($result['query']['pages'] as $page) {
if (!empty($page['imageinfo'][0]['url'])) {
$image_urls[] = $page['imageinfo'][0]['url'];
}
}
return $image_urls;
}
public function get_images_by_page($title) {
$image_urls = array();
$this->_param['action'] = 'query';
$this->_param['generator'] = 'images';
$this->_param['titles'] = urldecode($title);
$this->_param['prop'] = 'images|info|imageinfo';
$this->_param['iiprop'] = 'url';
$content = $this->_conn->post($this->api, $this->_param);
$result = unserialize($content);
if (!empty($result['query']['pages'])) {
foreach ($result['query']['pages'] as $page) {
$image_urls[$page['title']] = $page['imageinfo'][0]['url'];
}
}
return $image_urls;
}
public function search_images($title) {
$image_urls = array();
$this->_param['action'] = 'query';
$this->_param['generator'] = 'search';
$this->_param['gsrsearch'] = $title;
$this->_param['gsrnamespace'] = 6;
$this->_param['prop'] = 'imageinfo';
$this->_param['iiprop'] = 'url';
$content = $this->_conn->post($this->api, $this->_param);
$result = unserialize($content);
if (!empty($result['query']['pages'])) {
foreach ($result['query']['pages'] as $page) {
$image_urls[$page['title']] = $page['imageinfo'][0]['url'];
}
}
return $image_urls;
}
}