From fbd508b463c64b35aacff37c6713793f744c9490 Mon Sep 17 00:00:00 2001 From: dongsheng Date: Fri, 12 Sep 2008 08:16:09 +0000 Subject: [PATCH] MDL-13766 introduce new search API --- repository/flickr_public/repository.class.php | 50 +++++++++++++++---- repository/lib.php | 25 +++++++--- repository/ws.php | 13 +++-- 3 files changed, 65 insertions(+), 23 deletions(-) diff --git a/repository/flickr_public/repository.class.php b/repository/flickr_public/repository.class.php index e532f0aa1a..c04643d2d8 100644 --- a/repository/flickr_public/repository.class.php +++ b/repository/flickr_public/repository.class.php @@ -36,7 +36,6 @@ class repository_flickr_public extends repository{ } public function global_search(){ - global $SESSION; if (empty($this->flickr_account)) { return false; } else { @@ -45,7 +44,7 @@ class repository_flickr_public extends repository{ } public function __construct($repositoryid, $context = SITEID, $options = array()){ - global $SESSION, $action, $CFG; + global $action, $CFG; $options['page'] = optional_param('p', 1, PARAM_INT); parent::__construct($repositoryid, $context, $options); $this->api_key = $this->get_option('api_key'); @@ -73,7 +72,6 @@ class repository_flickr_public extends repository{ } } public function print_login($ajax = true){ - global $SESSION; if(empty($this->flickr_account)) { if($ajax){ $ret = array(); @@ -94,17 +92,46 @@ class repository_flickr_public extends repository{ return $this->get_listing(); } } + public function search(){ + $people = $this->flickr->people_findByEmail($this->flickr_account); + $tag = optional_param('tag', '', PARAM_CLEANHTML); + $search = optional_param('s', '', PARAM_CLEANHTML); + if(!empty($tag)){ + $photos = $this->flickr->photos_search(array( + 'tags'=>$tag + )); + } else { + $photos = $this->flickr->photos_search(array( + 'user_id'=>$people['nsid'], + 'text'=>$search)); + } + $ret = array(); + $ret['list'] = array(); + $ret['nologin'] = true; + $ret['pages'] = $photos['pages']; + foreach ($photos['photo'] as $p) { + if(empty($p['title'])) { + $p['title'] = get_string('notitle', 'repository_flickr_public'); + } + if (isset($p['originalformat'])) { + $format = $p['originalformat']; + } else { + $format = 'jpg'; + } + $ret['list'][] = + array('title'=>$p['title'].'.'.$format,'source'=>$p['id'],'id'=>$p['id'],'thumbnail'=>$this->flickr->buildPhotoURL($p, 'Square'), 'date'=>'', 'size'=>'unknown', 'url'=>'http://www.flickr.com/photos/'.$p['owner'].'/'.$p['id']); + } + if(empty($ret)) { + throw new repository_exception('nullphotolist', 'repository_flickr_public'); + } else { + return $ret; + } + } public function get_listing($path = '1', $search = ''){ - global $SESSION; $people = $this->flickr->people_findByEmail($this->flickr_account); $photos_url = $this->flickr->urls_getUserPhotos($people['nsid']); - if(!empty($search)) { - // do searching, if $path is not empty, ignore it. - $photos = $this->flickr->photos_search(array('user_id'=>$people['nsid'], 'text'=>$search)); - } elseif(!empty($path) && empty($search)) { - $photos = $this->flickr->people_getPublicPhotos($people['nsid'], 'original_format', 25, $path); - } + $photos = $this->flickr->people_getPublicPhotos($people['nsid'], 'original_format', 25, $path); $ret = array(); $ret['manage'] = $photos_url; @@ -139,7 +166,8 @@ class repository_flickr_public extends repository{ } public function print_search(){ parent::print_search(); - echo ''; + echo '
'; + echo '
'; return true; } public function get_file($photo_id, $file = ''){ diff --git a/repository/lib.php b/repository/lib.php index cec2666568..900471dfa5 100644 --- a/repository/lib.php +++ b/repository/lib.php @@ -829,6 +829,15 @@ abstract class repository { */ abstract public function get_listing($parent = '/', $search = ''); + /** + * Search + * @return mixed, see get_listing() + */ + public function search(){ + $search = optional_param('s', '', PARAM_CLEANHTML); + return $this->get_listing(null, $search); + } + /** * Show the login screen, if required @@ -1236,21 +1245,21 @@ function repository_get_client($context){ .fp-searchbar{float:right} .fp-viewbar{width:300px;float:left} .fp-toolbar{padding: .8em;background: #FFFFCC;color:white;text-align:center} -.fp-toolbar a{padding: 0 5px} +.fp-toolbar a{padding: 0 .5em} .fp-list{list-style-type:none;padding:0} .fp-list li{border-bottom:1px dotted gray;margin-bottom: 1em;} -.fp-repo-name{display:block;padding: 3px;margin-bottom: 5px} -.fp-pathbar{margin: 4px;border-bottom: 1px dotted gray;} -.fp-pathbar a{padding: 4px;} +.fp-repo-name{display:block;padding: .5em;margin-bottom: .5em} +.fp-pathbar{margin: .4em;border-bottom: 1px dotted gray;} +.fp-pathbar a{padding: .4em;} .fp-rename-form{text-align:center} .fp-rename-form p{margin: 1em;} .fp-upload-form{margin: 2em 0;text-align:center} -.fp-upload-btn a{font-size: 14px;background: #ccc;color:white;padding: 5px} +.fp-upload-btn a{font-size: 1.5em;background: #ccc;color:white;padding: .5em} .fp-upload-btn a:hover {background: grey;color:white} -.fp-paging{margin:10px 5px; clear:both;text-align:center} -.fp-paging a{padding: 4px;border: 1px solid #CCC} +.fp-paging{margin:1em .5em; clear:both;text-align:center;line-height: 2.5em;} +.fp-paging a{padding: .5em;border: 1px solid #CCC} .fp-popup{text-align:center} -.fp-popup a{font-size: 24px} +.fp-popup a{font-size: 3em} .fp-grid{width:80px; float:left;text-align:center;} .fp-grid div{width: 80px; overflow: hidden} .fp-grid p{margin:0;padding:0;background: #FFFFCC} diff --git a/repository/ws.php b/repository/ws.php index 0e5abac115..97b8a9398e 100644 --- a/repository/ws.php +++ b/repository/ws.php @@ -14,7 +14,6 @@ $file = optional_param('file', '', PARAM_RAW); // rename the file name $title = optional_param('title', '', PARAM_FILE); $action = optional_param('action', '', PARAM_ALPHA); -$search = optional_param('s', '', PARAM_CLEANHTML); $callback = optional_param('callback', '', PARAM_CLEANHTML); // repository ID $repo_id = optional_param('repo_id', 1, PARAM_INT); @@ -124,13 +123,19 @@ case 'login': die(json_encode($err)); } break; -case 'list': case 'search': + try { + echo json_encode($repo->search()); + } catch (repository_exception $e) { + $err = new stdclass; + $err->e = $e->getMessage(); + die(json_encode($err)); + } + break; +case 'list': try { if(!empty($p)) { echo json_encode($repo->get_listing($p)); - } else if(!empty($search)) { - echo json_encode($repo->get_listing('', $search)); } else { echo json_encode($repo->get_listing()); } -- 2.39.5