From f34ca6cdc076f239a3718e6f65cc00cf371a12e0 Mon Sep 17 00:00:00 2001 From: dongsheng Date: Thu, 26 Jun 2008 04:45:35 +0000 Subject: [PATCH] "MDL-15349, the base repository class" --- repository/repository.class.php | 188 ++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100755 repository/repository.class.php diff --git a/repository/repository.class.php b/repository/repository.class.php new file mode 100755 index 0000000000..1feaf1a7cf --- /dev/null +++ b/repository/repository.class.php @@ -0,0 +1,188 @@ +'dmls97d8j3i9tn7av8y71m9eb55vrtj4', + * 'auth_token'=>'', 'path_root'=>'/'); + * $repo = new repository_xxx($options); + * // print login page or a link to redirect to another page + * $repo->print_login(); + * // call get_listing, and print result + * $repo->print_listing(); + * // print a search box + * $repo->print_search(); + * + * @version 1.0 dev + * @package repository_api + * @license http://www.gnu.org/copyleft/gpl.html GNU Public License + */ + +abstract class repository{ + protected $options = array(); + private $name = 'repository_base'; + + /** + * Take an array as a parameter, which contains necessary information + * of repository. + * + * @param string $parent The parent path, this parameter must + * not be the folder name, it may be a identification of folder + * @param string $search The text will be searched. + * @return array the list of files, including meta infomation + */ + public function __construct($options = array()){ + if(is_array($options)){ + foreach($options as $n=>$v) { + $this->options[$n] = $v; + } + } + } + + public function __set($name, $value){ + $this->options[$name] = $value; + } + + public function __get($name){ + if (array_key_exists($name, $this->options)){ + return $this->options[$name]; + } + trigger_error('Undefined property: '.$name, E_USER_NOTICE); + return null; + } + + public function __isset($name){ + return isset($this->options[$name]); + } + + public function __toString(){ + return 'Repository class: '.__CLASS__; + } + // Given a URL, get a file from there. + public function get_file($url){ + return null; + } + + /** + * Given a path, and perhaps a search, get a list of files. + * + * @param string $parent The parent path, this parameter can + * a folder name, or a identification of folder + * @param string $search The text will be searched. + * @return array the list of files, including meta infomation + */ + abstract public function get_listing($parent = '/', $search = ''); + + /** + * Print a list or return string + * + * @param string $list + * $list = array( + * array('name'=>'moodle.txt', 'size'=>12, 'path'=>'', 'date'=>''), + * array('name'=>'repository.txt', 'size'=>32, 'path'=>'', 'date'=>''), + * array('name'=>'forum.txt', 'size'=>82, 'path'=>'', 'date'=>''), + * ); + * + * @param boolean $print if printing the listing directly + * + */ + public function print_listing($listing = array(), $print=true){ + if(empty($listing)){ + return false; + } + $count = 0; + $str = ''; + $str = ''; + foreach ($listing as $v){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $count++; + } + $str = '
'.$v['name'].''.$v['size'].''.$v['date'].'
'; + if($print){ + echo $str; + return null; + } else { + return $str; + } + + } + + /** + * Show the login screen, if required + * This is an abstract function, it must be overriden. + * The specific plug-in need to specify authentication types in database + * options field + * Imagine following cases: + * 1. no need of authentication + * 2. Use username and password to authenticate + * 3. Redirect to authentication page, in this case, the repository + * will callback moodle with following common parameters: + * (1) boolean callback To tell moodle this is a callback + * (2) int id Specify repository ID + * The callback page need to use these parameters to init + * the repository plug-ins correctly. Also, auth_token or ticket may + * attach in the callback url, these must be taken into account too. + * + */ + abstract public function print_login(); + + /** + * Show the search screen, if required + * + * @return null + */ + abstract public function print_search(); + + /** + * Cache login details for repositories + * + * @param string $username + * @param string $password + * @param string $userid The id of specific user + * @return array the list of files, including meta infomation + */ + public function store_login($username = '', $password = '', + $userid = -1, $contextid = SITEID) { + global $DB; + $repostory = new stdclass; + $repostory->userid = $userid; + $repostory->repositorytype = $this->name; + $repostory->contextid = $contextid; + if ($entry = $DB->get_record('repository', $repository)) { + $repository->id = $entry->id; + $DB->update_record('repository', $repository); + return $repository->id; + } else { + $repository->username = $username; + $repository->password = $password; + $id = $DB->insert_record('repository', $repository); + return $id; + } + return false; + } + + /** + * Defines operations that happen occasionally on cron + * + */ + public function cron(){ + return true; + } +} + +?> -- 2.39.5