]> git.mjollnir.org Git - moodle.git/commitdiff
"REPOSITORY/MDL-18520, file system plugin added"
authordongsheng <dongsheng>
Fri, 13 Mar 2009 02:54:28 +0000 (02:54 +0000)
committerdongsheng <dongsheng>
Fri, 13 Mar 2009 02:54:28 +0000 (02:54 +0000)
lang/en_utf8/repository_filesystem.php [new file with mode: 0644]
repository/filesystem/icon.png [new file with mode: 0644]
repository/filesystem/repository.class.php [new file with mode: 0644]

diff --git a/lang/en_utf8/repository_filesystem.php b/lang/en_utf8/repository_filesystem.php
new file mode 100644 (file)
index 0000000..2f41524
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+
+$string['configplugin'] = 'Setup repository on file system';
+$string['repositoryname'] = 'File system';
+$string['repositorydesc'] = 'Create repository from local directory';
+$string['path'] = 'Path';
+$string['invalidpath'] = 'Invalid root path';
diff --git a/repository/filesystem/icon.png b/repository/filesystem/icon.png
new file mode 100644 (file)
index 0000000..5c3b858
Binary files /dev/null and b/repository/filesystem/icon.png differ
diff --git a/repository/filesystem/repository.class.php b/repository/filesystem/repository.class.php
new file mode 100644 (file)
index 0000000..fa0bad3
--- /dev/null
@@ -0,0 +1,139 @@
+<?php // $Id$
+
+class repository_filesystem extends repository {
+    public function __construct($repositoryid, $context = SITEID, $options = array()) {
+        parent::__construct($repositoryid, $context, $options);
+        $this->root_path = trim($this->root_path);
+        if ($options['ajax']) {
+            // if created from filepicker
+            if (empty($this->root_path)) {
+                $ret = array();
+                $ret['msg'] = get_string('invalidpath', 'repository_filesystem');
+                $ret['nosearch'] = true;
+                echo json_encode($ret);
+                exit;
+            } else {
+                if (!is_dir($this->root_path)) {
+                    $ret = array();
+                    $ret['msg'] = get_string('invalidpath', 'repository_filesystem');
+                    $ret['nosearch'] = true;
+                    if ($options['ajax']) {
+                        echo json_encode($ret);
+                        exit;
+                    }
+                }
+            }
+            if ($this->root_path{strlen($this->root_path)-1} !== '/') {
+                $this->root_path .= '/';
+            }
+        }
+    }
+    public function get_listing($path = '', $page = '') {
+        global $CFG;
+        $list = array();
+        $list['list'] = array();
+        // process breacrumb trail
+        $list['path'] = array(
+            array('name'=>'Root','path'=>'')
+        );
+        $trail = '';
+        if (!empty($path)) {
+            $parts = explode('/', $path);
+            if (count($parts) > 1) {
+                foreach ($parts as $part) {
+                    $trail .= ('/'.$part);
+                    $list['path'][] = array('name'=>$part, 'path'=>$trail);
+                }
+            } else {
+                $list['path'][] = array('name'=>$path, 'path'=>$path);
+            }
+            $this->root_path .= ($path.'/');
+        }
+        // set options
+        $list['manage'] = false;
+        // dynamically loading
+        $list['dynload'] = true;
+        // the current path of this list.
+        // set to true, the login link will be removed
+        $list['nologin'] = true;
+        // set to true, the search button will be removed
+        $list['nosearch'] = true;
+        if ($dh = opendir($this->root_path)) {
+            while (($file = readdir($dh)) != false) {
+                if ( $file != '.' and $file !='..') {
+                    if (filetype($this->root_path.$file) == 'file') {
+                        $list['list'][] = array(
+                            'title' => $file,
+                            'source' => $path.'/'.$file,
+                            'size' => filesize($this->root_path.$file),
+                            'date' => time(),
+                            'thumbnail' => $CFG->pixpath .'/f/'. mimeinfo('icon32', $this->root_path.$file)
+                        );
+                    } else {
+                        if (!empty($path)) {
+                            $current_path = $path . '/'. $file;
+                        } else {
+                            $current_path = $file;
+                        }
+                        $list['list'][] = array(
+                            'title' => $file,
+                            'children' => array(),
+                            'thumbnail' => $CFG->pixpath .'/f/folder-32.png',
+                            'path' => $current_path
+                            );
+                    }
+                }
+            }
+        }
+        return $list;
+    }
+    // login 
+    public function check_login() {
+        return true;
+    }
+    // if check_login returns false,
+    // this function will be called to print a login form.
+    public function print_login() {
+        return true;
+    }
+    //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;
+    }
+    // move file to local moodle
+    public function get_file($file, $title = '') {
+        global $CFG;
+        if ($file{0} == '/') {
+            $file = $this->root_path.substr($file, 1, strlen($file)-1);
+        }
+        // this is a hack to prevent move_to_file deleteing files
+        // in local repository
+        $CFG->repository_no_delete = true;
+        return $file;
+    }
+
+    public function logout() {
+        return true;
+    }
+
+    public static function get_instance_option_names() {
+        return array('root_path');
+    }
+
+    public function instance_config_form(&$mform) {
+        $mform->addElement('text', 'root_path', get_string('path', 'repository_filesystem'), array('value'=>'','size' => '40'));
+    }
+
+    public static function get_type_option_names() {
+        return array();
+    }
+    public function type_config_form(&$mform) {
+    }
+}