]> git.mjollnir.org Git - moodle.git/commitdiff
"MDL-17381, first working wikemedia plugin"
authordongsheng <dongsheng>
Mon, 22 Dec 2008 02:44:18 +0000 (02:44 +0000)
committerdongsheng <dongsheng>
Mon, 22 Dec 2008 02:44:18 +0000 (02:44 +0000)
repository/wikimedia/icon.png [new file with mode: 0644]
repository/wikimedia/repository.class.php [new file with mode: 0644]
repository/wikimedia/wikimedia.php [new file with mode: 0644]

diff --git a/repository/wikimedia/icon.png b/repository/wikimedia/icon.png
new file mode 100644 (file)
index 0000000..7d6db4e
Binary files /dev/null and b/repository/wikimedia/icon.png differ
diff --git a/repository/wikimedia/repository.class.php b/repository/wikimedia/repository.class.php
new file mode 100644 (file)
index 0000000..88ea378
--- /dev/null
@@ -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;
+    }
+}
diff --git a/repository/wikimedia/wikimedia.php b/repository/wikimedia/wikimedia.php
new file mode 100644 (file)
index 0000000..cd1c257
--- /dev/null
@@ -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;
+    }
+}