[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * This plugin is used to access youtube videos 19 * 20 * @since Moodle 2.0 21 * @package repository_youtube 22 * @copyright 2010 Dongsheng Cai {@link http://dongsheng.org} 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 require_once($CFG->dirroot . '/repository/lib.php'); 26 27 /** 28 * repository_youtube class 29 * 30 * @since Moodle 2.0 31 * @package repository_youtube 32 * @copyright 2009 Dongsheng Cai {@link http://dongsheng.org} 33 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 34 */ 35 36 class repository_youtube extends repository { 37 /** @var int maximum number of thumbs per page */ 38 const YOUTUBE_THUMBS_PER_PAGE = 27; 39 40 /** 41 * Youtube plugin constructor 42 * @param int $repositoryid 43 * @param object $context 44 * @param array $options 45 */ 46 public function __construct($repositoryid, $context = SYSCONTEXTID, $options = array()) { 47 parent::__construct($repositoryid, $context, $options); 48 } 49 50 public function check_login() { 51 return !empty($this->keyword); 52 } 53 54 /** 55 * Return search results 56 * @param string $search_text 57 * @return array 58 */ 59 public function search($search_text, $page = 0) { 60 global $SESSION; 61 $sort = optional_param('youtube_sort', '', PARAM_TEXT); 62 $sess_keyword = 'youtube_'.$this->id.'_keyword'; 63 $sess_sort = 'youtube_'.$this->id.'_sort'; 64 65 // This is the request of another page for the last search, retrieve the cached keyword and sort 66 if ($page && !$search_text && isset($SESSION->{$sess_keyword})) { 67 $search_text = $SESSION->{$sess_keyword}; 68 } 69 if ($page && !$sort && isset($SESSION->{$sess_sort})) { 70 $sort = $SESSION->{$sess_sort}; 71 } 72 if (!$sort) { 73 $sort = 'relevance'; // default 74 } 75 76 // Save this search in session 77 $SESSION->{$sess_keyword} = $search_text; 78 $SESSION->{$sess_sort} = $sort; 79 80 $this->keyword = $search_text; 81 $ret = array(); 82 $ret['nologin'] = true; 83 $ret['page'] = (int)$page; 84 if ($ret['page'] < 1) { 85 $ret['page'] = 1; 86 } 87 $start = ($ret['page'] - 1) * self::YOUTUBE_THUMBS_PER_PAGE + 1; 88 $max = self::YOUTUBE_THUMBS_PER_PAGE; 89 $ret['list'] = $this->_get_collection($search_text, $start, $max, $sort); 90 $ret['norefresh'] = true; 91 $ret['nosearch'] = true; 92 // If the number of results is smaller than $max, it means we reached the last page. 93 $ret['pages'] = (count($ret['list']) < $max) ? $ret['page'] : -1; 94 return $ret; 95 } 96 97 /** 98 * Private method to get youtube search results 99 * @param string $keyword 100 * @param int $start 101 * @param int $max max results 102 * @param string $sort 103 * @return array 104 */ 105 private function _get_collection($keyword, $start, $max, $sort) { 106 $list = array(); 107 $this->feed_url = 'http://gdata.youtube.com/feeds/api/videos?q=' . urlencode($keyword) . '&format=5&start-index=' . $start . '&max-results=' .$max . '&orderby=' . $sort; 108 $c = new curl(array('cache'=>true, 'module_cache'=>'repository')); 109 $content = $c->get($this->feed_url); 110 $xml = simplexml_load_string($content); 111 $media = $xml->entry->children('http://search.yahoo.com/mrss/'); 112 $links = $xml->children('http://www.w3.org/2005/Atom'); 113 foreach ($xml->entry as $entry) { 114 $media = $entry->children('http://search.yahoo.com/mrss/'); 115 $title = (string)$media->group->title; 116 $description = (string)$media->group->description; 117 if (empty($description)) { 118 $description = $title; 119 } 120 $attrs = $media->group->thumbnail[2]->attributes(); 121 $thumbnail = $attrs['url']; 122 $arr = explode('/', $entry->id); 123 $id = $arr[count($arr)-1]; 124 $source = 'http://www.youtube.com/v/' . $id . '#' . $title; 125 $list[] = array( 126 'shorttitle'=>$title, 127 'thumbnail_title'=>$description, 128 'title'=>$title.'.avi', // this is a hack so we accept this file by extension 129 'thumbnail'=>(string)$attrs['url'], 130 'thumbnail_width'=>(int)$attrs['width'], 131 'thumbnail_height'=>(int)$attrs['height'], 132 'size'=>'', 133 'date'=>'', 134 'source'=>$source 135 ); 136 } 137 return $list; 138 } 139 140 /** 141 * Youtube plugin doesn't support global search 142 */ 143 public function global_search() { 144 return false; 145 } 146 147 public function get_listing($path='', $page = '') { 148 return array(); 149 } 150 151 /** 152 * Generate search form 153 */ 154 public function print_login($ajax = true) { 155 $ret = array(); 156 $search = new stdClass(); 157 $search->type = 'text'; 158 $search->id = 'youtube_search'; 159 $search->name = 's'; 160 $search->label = get_string('search', 'repository_youtube').': '; 161 $sort = new stdClass(); 162 $sort->type = 'select'; 163 $sort->options = array( 164 (object)array( 165 'value' => 'relevance', 166 'label' => get_string('sortrelevance', 'repository_youtube') 167 ), 168 (object)array( 169 'value' => 'published', 170 'label' => get_string('sortpublished', 'repository_youtube') 171 ), 172 (object)array( 173 'value' => 'rating', 174 'label' => get_string('sortrating', 'repository_youtube') 175 ), 176 (object)array( 177 'value' => 'viewCount', 178 'label' => get_string('sortviewcount', 'repository_youtube') 179 ) 180 ); 181 $sort->id = 'youtube_sort'; 182 $sort->name = 'youtube_sort'; 183 $sort->label = get_string('sortby', 'repository_youtube').': '; 184 $ret['login'] = array($search, $sort); 185 $ret['login_btn_label'] = get_string('search'); 186 $ret['login_btn_action'] = 'search'; 187 $ret['allowcaching'] = true; // indicates that login form can be cached in filepicker.js 188 return $ret; 189 } 190 191 /** 192 * file types supported by youtube plugin 193 * @return array 194 */ 195 public function supported_filetypes() { 196 return array('video'); 197 } 198 199 /** 200 * Youtube plugin only return external links 201 * @return int 202 */ 203 public function supported_returntypes() { 204 return FILE_EXTERNAL; 205 } 206 207 /** 208 * Is this repository accessing private data? 209 * 210 * @return bool 211 */ 212 public function contains_private_data() { 213 return false; 214 } 215 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |