3 * repository_flickr class
4 * This is a subclass of repository class
6 * @author Dongsheng Cai
8 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
11 require_once($CFG->dirroot.'/repository/flickr/'.'phpFlickr.php');
13 class repository_flickr extends repository{
17 public function set_option($options = array()){
18 if (!empty($options['api_key'])) {
19 set_config('api_key', trim($options['api_key']), 'flickr');
21 unset($options['api_key']);
22 $ret = parent::set_option($options);
26 public function get_option($config = ''){
27 if($config==='api_key'){
28 return trim(get_config('flickr', 'api_key'));
30 $options['api_key'] = trim(get_config('flickr', 'api_key'));
32 $options = parent::get_option($config);
36 public function global_search(){
38 $sess_name = 'flickrmail'.$this->id;
39 if (empty($SESSION->$sess_name)) {
46 public function __construct($repositoryid, $context = SITEID, $options = array()){
47 global $SESSION, $action, $CFG;
48 $options['page'] = optional_param('p', 1, PARAM_INT);
49 parent::__construct($repositoryid, $context, $options);
50 $this->api_key = $this->get_option('api_key');
51 if (empty($this->api_key)) {
53 $this->flickr = new phpFlickr($this->api_key);
55 $reset = optional_param('reset', 0, PARAM_INT);
56 $sess_name = 'flickrmail'.$this->id;
59 unset($SESSION->$sess_name);
60 set_user_preference('flickrmail'.$this->id, '');
63 if(!empty($SESSION->$sess_name)) {
69 $account = optional_param('flickrmail', '', PARAM_RAW);
70 if(!empty($account)) {
71 $people = $this->flickr->people_findByEmail($account);
73 $remember = optional_param('remember', '', PARAM_RAW);
74 if(!empty($remember)) {
75 set_user_preference('flickrmail'.$this->id, $account);
77 $SESSION->$sess_name = $account;
78 if (empty($account)) {
84 throw new repository_exception('invalidemail', 'repository_flickr');
87 if($account = get_user_preferences('flickrmail'.$this->id, '')){
88 $SESSION->$sess_name = $account;
98 public function print_login($ajax = true){
100 $sess_name = 'flickrmail'.$this->id;
101 if(empty($SESSION->$sess_name)) {
103 <form id="moodle-repo-login">
104 <label for="account">Account (Email)</label><br/>
105 <input type='text' name='flickrmail' id='account' />
106 <input type='hidden' name='id' value='$this->id' /><br/>
107 <input type='checkbox' name='remember' id="keepid" value='true' /> <label for="keepid">Remember? </label>
108 <p><input type='button' onclick="repository_client.login()" value="Go" /></p>
113 $e1->label = get_string('username', 'repository_flickr').': ';
116 $e1->name = 'flickrmail';
119 $e2->label = get_string('remember', 'repository_flickr').' ';
120 $e2->type = 'checkbox';
121 $e2->name = 'remember';
123 $e3->type = 'hidden';
124 $e3->name = 'repo_id';
125 $e3->value = $this->id;
126 $ret['login'] = array($e1, $e2, $e3);
132 return $this->get_listing();
135 public function get_listing($path = '1', $search = ''){
137 $sess_name = 'flickrmail'.$this->id;
138 $people = $this->flickr->people_findByEmail($SESSION->$sess_name);
139 $photos_url = $this->flickr->urls_getUserPhotos($people['nsid']);
141 if(!empty($search)) {
142 // do searching, if $path is not empty, ignore it.
143 $photos = $this->flickr->photos_search(array('user_id'=>$people['nsid'], 'text'=>$search));
144 } elseif(!empty($path) && empty($search)) {
145 $photos = $this->flickr->people_getPublicPhotos($people['nsid'], 'original_format', 36, $path);
149 $ret['manage'] = $photos_url;
150 $ret['list'] = array();
151 $ret['pages'] = $photos['pages'];
152 if(is_int($path) && $path <= $ret['pages']) {
153 $ret['page'] = $path;
157 foreach ($photos['photo'] as $p) {
158 if(empty($p['title'])) {
159 $p['title'] = get_string('notitle', 'repository_flickr');
161 if (isset($p['originalformat'])) {
162 $format = $p['originalformat'];
167 array('title'=>$p['title'].'.'.$format,'source'=>$p['id'],'id'=>$p['id'],'thumbnail'=>$this->flickr->buildPhotoURL($p, 'Square'), 'date'=>'', 'size'=>'unknown', 'url'=>$photos_url.$p['id']);
170 throw new repository_exception('nullphotolist', 'repository_flickr');
175 public function print_listing(){
176 if(empty($this->photos)){
177 $this->get_listing();
180 $str .= '<h2>Account: <span>'.$this->photos['a'].'</span></h2>';
181 foreach ((array)$this->photos['photo'] as $photo) {
182 $str .= "<a href='".$this->photos['url'].$photo[id]."'>";
183 $str .= "<img border='0' alt='$photo[title]' ".
184 "src=" . $photo['thumbnail'] . ">";
193 <style type='text/css'>
194 #paging{margin-top: 10px; clear:both}
195 #paging a{padding: 4px; border: 1px solid gray}
198 $str .= '<div id="paging">';
199 for($i=1; $i <= $this->photos['pages']; $i++) {
200 $str .= '<a href="###" onclick="cr('.$this->id.', '.$i.', 0)">';
207 public function print_search(){
208 echo '<input type="text" name="Search" value="search terms..." size="40" class="right"/>';
211 public function get_file($photo_id, $file = ''){
213 $result = $this->flickr->photos_getSizes($photo_id);
215 if(!empty($result[4])) {
216 $url = $result[4]['source'];
217 } elseif(!empty($result[3])) {
218 $url = $result[3]['source'];
219 } elseif(!empty($result[2])) {
220 $url = $result[2]['source'];
222 if (!file_exists($CFG->dataroot.'/repository/download')) {
223 mkdir($CFG->dataroot.'/repository/download/', 0777, true);
225 if(is_dir($CFG->dataroot.'/repository/download')) {
226 $dir = $CFG->dataroot.'/repository/download/';
230 $file = $photo_id.'_'.time().'.jpg';
232 if(file_exists($dir.$file)) {
233 $file = uniqid('m').$file;
235 $fp = fopen($dir.$file, 'w');
238 array('url'=>$url, 'file'=>$fp)
242 public static function has_admin_config() {
246 public static function has_multiple_instances() {
250 public static function has_instance_config() {
254 public function admin_config_form(&$mform) {
255 $api_key = get_config('flickr', 'api_key');
256 if (empty($api_key)) {
259 $strrequired = get_string('required');
260 $mform->addElement('text', 'api_key', get_string('apikey', 'repository_boxnet'), array('value'=>$api_key,'size' => '40'));
261 $mform->addRule('api_key', $strrequired, 'required', null, 'client');
263 public static function get_admin_option_names(){
264 return array('api_key');