1*164faf82SSzymon Olewniczak<?php 2*164faf82SSzymon Olewniczak 3*164faf82SSzymon Olewniczakclass media_searchlist_test extends DokuWikiTest { 4*164faf82SSzymon Olewniczak 5*164faf82SSzymon Olewniczak /** 6*164faf82SSzymon Olewniczak * @var string namespace used for testing 7*164faf82SSzymon Olewniczak */ 8*164faf82SSzymon Olewniczak protected $upload_ns = 'media_searchlist_test'; 9*164faf82SSzymon Olewniczak 10*164faf82SSzymon Olewniczak /** 11*164faf82SSzymon Olewniczak * Save the file 12*164faf82SSzymon Olewniczak * 13*164faf82SSzymon Olewniczak * @param $name name of saving file 14*164faf82SSzymon Olewniczak * @param $copy file used as a content of uploaded file 15*164faf82SSzymon Olewniczak */ 16*164faf82SSzymon Olewniczak protected function save($name, $copy) { 17*164faf82SSzymon Olewniczak $media_id = $this->upload_ns.':'.$name; 18*164faf82SSzymon Olewniczak media_save(array('name' => $copy), $media_id, true, AUTH_UPLOAD, 'copy'); 19*164faf82SSzymon Olewniczak } 20*164faf82SSzymon Olewniczak 21*164faf82SSzymon Olewniczak /** 22*164faf82SSzymon Olewniczak * Called for each test 23*164faf82SSzymon Olewniczak * 24*164faf82SSzymon Olewniczak * @throws Exception 25*164faf82SSzymon Olewniczak */ 26*164faf82SSzymon Olewniczak function setUp() { 27*164faf82SSzymon Olewniczak //create some files to search 28*164faf82SSzymon Olewniczak $png = mediaFN('wiki:kind_zu_katze.png'); 29*164faf82SSzymon Olewniczak $ogv = mediaFN('wiki:kind_zu_katze.ogv'); 30*164faf82SSzymon Olewniczak $webm = mediaFN('wiki:kind_zu_katze.webm'); 31*164faf82SSzymon Olewniczak 32*164faf82SSzymon Olewniczak $this->save('a.png', $png); 33*164faf82SSzymon Olewniczak $this->save('aa.png', $png); 34*164faf82SSzymon Olewniczak $this->save('ab.png', $png); 35*164faf82SSzymon Olewniczak 36*164faf82SSzymon Olewniczak $this->save('a.ogv', $ogv); 37*164faf82SSzymon Olewniczak $this->save('aa.ogv', $ogv); 38*164faf82SSzymon Olewniczak $this->save('ab.ogv', $ogv); 39*164faf82SSzymon Olewniczak 40*164faf82SSzymon Olewniczak $this->save('a:a.png', $png); 41*164faf82SSzymon Olewniczak $this->save('b:a.png', $png); 42*164faf82SSzymon Olewniczak 43*164faf82SSzymon Olewniczak $this->save('0.webm', $webm); 44*164faf82SSzymon Olewniczak 45*164faf82SSzymon Olewniczak } 46*164faf82SSzymon Olewniczak 47*164faf82SSzymon Olewniczak /* 48*164faf82SSzymon Olewniczak * Reset media_printfile static variable $twibble to stat state 49*164faf82SSzymon Olewniczak */ 50*164faf82SSzymon Olewniczak protected function reset_media_printfile() { 51*164faf82SSzymon Olewniczak $reflect = new ReflectionFunction('media_printfile'); 52*164faf82SSzymon Olewniczak $static = $reflect->getStaticVariables(); 53*164faf82SSzymon Olewniczak if ($static['twibble'] == -1) { 54*164faf82SSzymon Olewniczak ob_start(); 55*164faf82SSzymon Olewniczak @media_printfile(array(), 0, ''); 56*164faf82SSzymon Olewniczak ob_end_clean(); 57*164faf82SSzymon Olewniczak } 58*164faf82SSzymon Olewniczak } 59*164faf82SSzymon Olewniczak 60*164faf82SSzymon Olewniczak /** 61*164faf82SSzymon Olewniczak * Build search result header as in media_searchlist() with $fullscreen = false 62*164faf82SSzymon Olewniczak * 63*164faf82SSzymon Olewniczak * @param $query search query 64*164faf82SSzymon Olewniczak * @param $ns namespece where we search 65*164faf82SSzymon Olewniczak * 66*164faf82SSzymon Olewniczak * @return string 67*164faf82SSzymon Olewniczak */ 68*164faf82SSzymon Olewniczak protected function media_searchlist_header($query, $ns) { 69*164faf82SSzymon Olewniczak global $lang; 70*164faf82SSzymon Olewniczak 71*164faf82SSzymon Olewniczak $header = '<h1 id="media__ns">'.sprintf($lang['searchmedia_in'],hsc($ns).':*').'</h1>'.NL; 72*164faf82SSzymon Olewniczak ob_start(); 73*164faf82SSzymon Olewniczak media_searchform($ns,$query); 74*164faf82SSzymon Olewniczak $header .= ob_get_contents(); 75*164faf82SSzymon Olewniczak ob_end_clean(); 76*164faf82SSzymon Olewniczak 77*164faf82SSzymon Olewniczak return $header; 78*164faf82SSzymon Olewniczak } 79*164faf82SSzymon Olewniczak 80*164faf82SSzymon Olewniczak /** 81*164faf82SSzymon Olewniczak * Wrap around media_printfile: return the result. 82*164faf82SSzymon Olewniczak * 83*164faf82SSzymon Olewniczak * @param $item 84*164faf82SSzymon Olewniczak * @return string 85*164faf82SSzymon Olewniczak */ 86*164faf82SSzymon Olewniczak protected function media_printfile($item) { 87*164faf82SSzymon Olewniczak ob_start(); 88*164faf82SSzymon Olewniczak media_printfile($item,$item['perm'],'',true); 89*164faf82SSzymon Olewniczak $out = ob_get_contents(); 90*164faf82SSzymon Olewniczak ob_end_clean(); 91*164faf82SSzymon Olewniczak 92*164faf82SSzymon Olewniczak return $out; 93*164faf82SSzymon Olewniczak } 94*164faf82SSzymon Olewniczak 95*164faf82SSzymon Olewniczak /** 96*164faf82SSzymon Olewniczak * Wrap around media_searchlist: return the result 97*164faf82SSzymon Olewniczak * Reset media_printfile static variables afterwards 98*164faf82SSzymon Olewniczak * 99*164faf82SSzymon Olewniczak * @param $query 100*164faf82SSzymon Olewniczak * @param $ns 101*164faf82SSzymon Olewniczak * @return string 102*164faf82SSzymon Olewniczak */ 103*164faf82SSzymon Olewniczak protected function media_searchlist($query, $ns) { 104*164faf82SSzymon Olewniczak ob_start(); 105*164faf82SSzymon Olewniczak media_searchlist($query, $ns); 106*164faf82SSzymon Olewniczak $out = ob_get_contents(); 107*164faf82SSzymon Olewniczak ob_end_clean(); 108*164faf82SSzymon Olewniczak 109*164faf82SSzymon Olewniczak //reset media_printfile static variables 110*164faf82SSzymon Olewniczak $this->reset_media_printfile(); 111*164faf82SSzymon Olewniczak 112*164faf82SSzymon Olewniczak return $out; 113*164faf82SSzymon Olewniczak } 114*164faf82SSzymon Olewniczak 115*164faf82SSzymon Olewniczak /** 116*164faf82SSzymon Olewniczak * 117*164faf82SSzymon Olewniczak * @param array[string] $rel_ids media ids relative to $this->upload_ns 118*164faf82SSzymon Olewniczak * @return array $items as required by media_printfile 119*164faf82SSzymon Olewniczak */ 120*164faf82SSzymon Olewniczak protected function create_media_items($rel_ids) { 121*164faf82SSzymon Olewniczak $items = array(); 122*164faf82SSzymon Olewniczak foreach ($rel_ids as $rel_id){ 123*164faf82SSzymon Olewniczak $file = mediaFN($this->upload_ns . ':' . $rel_id); 124*164faf82SSzymon Olewniczak $info = array(); 125*164faf82SSzymon Olewniczak $info['id'] = $this->upload_ns . ':' . $rel_id; 126*164faf82SSzymon Olewniczak $info['perm'] = auth_quickaclcheck(getNS($info['id']).':*'); 127*164faf82SSzymon Olewniczak $info['file'] = utf8_basename($file); 128*164faf82SSzymon Olewniczak $info['size'] = filesize($file); 129*164faf82SSzymon Olewniczak $info['mtime'] = filemtime($file); 130*164faf82SSzymon Olewniczak $info['writable'] = is_writable($file); 131*164faf82SSzymon Olewniczak if(preg_match("/\.(jpe?g|gif|png)$/",$file)){ 132*164faf82SSzymon Olewniczak $info['isimg'] = true; 133*164faf82SSzymon Olewniczak $info['meta'] = new JpegMeta($file); 134*164faf82SSzymon Olewniczak }else{ 135*164faf82SSzymon Olewniczak $info['isimg'] = false; 136*164faf82SSzymon Olewniczak } 137*164faf82SSzymon Olewniczak $info['hash'] = md5(io_readFile(mediaFN($info['id']),false)); 138*164faf82SSzymon Olewniczak 139*164faf82SSzymon Olewniczak $items[] = $info; 140*164faf82SSzymon Olewniczak } 141*164faf82SSzymon Olewniczak return $items; 142*164faf82SSzymon Olewniczak } 143*164faf82SSzymon Olewniczak 144*164faf82SSzymon Olewniczak /** 145*164faf82SSzymon Olewniczak * Output result as in 'media_searchlist' but use an arbitrary media IDs list instead of actual searching 146*164faf82SSzymon Olewniczak * Reset media_printfile static variables afterwards 147*164faf82SSzymon Olewniczak * 148*164faf82SSzymon Olewniczak * @param array[string] $rel_ids media ids relative to $this->upload_ns 149*164faf82SSzymon Olewniczak * @param string $query actual seqrch query (used for filling search filed input) 150*164faf82SSzymon Olewniczak * @param string $ns 151*164faf82SSzymon Olewniczak * @return string 152*164faf82SSzymon Olewniczak */ 153*164faf82SSzymon Olewniczak protected function media_searchlist_except($rel_ids, $query, $ns) { 154*164faf82SSzymon Olewniczak //build a search result header 155*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_header($query, $ns); 156*164faf82SSzymon Olewniczak 157*164faf82SSzymon Olewniczak //get the items list 158*164faf82SSzymon Olewniczak $items = $this->create_media_items($rel_ids); 159*164faf82SSzymon Olewniczak foreach ($items as $item) { 160*164faf82SSzymon Olewniczak $expect .= $this->media_printfile($item); 161*164faf82SSzymon Olewniczak } 162*164faf82SSzymon Olewniczak 163*164faf82SSzymon Olewniczak //reset media_printfile static variables 164*164faf82SSzymon Olewniczak $this->reset_media_printfile(); 165*164faf82SSzymon Olewniczak 166*164faf82SSzymon Olewniczak return $expect; 167*164faf82SSzymon Olewniczak } 168*164faf82SSzymon Olewniczak 169*164faf82SSzymon Olewniczak public function test_noglobbing(){ 170*164faf82SSzymon Olewniczak $query = 'a.png'; 171*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 172*164faf82SSzymon Olewniczak 173*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 174*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('a:a.png', 'b:a.png', 'a.png', 'aa.png'), $query, $ns); 175*164faf82SSzymon Olewniczak 176*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 177*164faf82SSzymon Olewniczak } 178*164faf82SSzymon Olewniczak 179*164faf82SSzymon Olewniczak public function test_globbing_asterisk(){ 180*164faf82SSzymon Olewniczak $query = 'a*.png'; 181*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 182*164faf82SSzymon Olewniczak 183*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 184*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('a:a.png', 'b:a.png', 'a.png', 'aa.png', 'ab.png'), $query, $ns); 185*164faf82SSzymon Olewniczak 186*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 187*164faf82SSzymon Olewniczak } 188*164faf82SSzymon Olewniczak 189*164faf82SSzymon Olewniczak public function test_globbing_find_by_ext(){ 190*164faf82SSzymon Olewniczak $query = '*.ogv'; 191*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 192*164faf82SSzymon Olewniczak 193*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 194*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('a.ogv', 'aa.ogv', 'ab.ogv'), $query, $ns); 195*164faf82SSzymon Olewniczak 196*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 197*164faf82SSzymon Olewniczak } 198*164faf82SSzymon Olewniczak 199*164faf82SSzymon Olewniczak public function test_globbing_question_mark(){ 200*164faf82SSzymon Olewniczak $query = 'a?.png'; 201*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 202*164faf82SSzymon Olewniczak 203*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 204*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('aa.png', 'ab.png'), $query, $ns); 205*164faf82SSzymon Olewniczak 206*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 207*164faf82SSzymon Olewniczak } 208*164faf82SSzymon Olewniczak 209*164faf82SSzymon Olewniczak public function test_globbing_question_mark_and_asterisk(){ 210*164faf82SSzymon Olewniczak $query = 'a?.*'; 211*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 212*164faf82SSzymon Olewniczak 213*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 214*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('aa.ogv', 'aa.png', 'ab.ogv', 'ab.png'), $query, $ns); 215*164faf82SSzymon Olewniczak 216*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 217*164faf82SSzymon Olewniczak } 218*164faf82SSzymon Olewniczak 219*164faf82SSzymon Olewniczak public function test_globbing_question_mark_on_the_begining(){ 220*164faf82SSzymon Olewniczak $query = '?.png'; 221*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 222*164faf82SSzymon Olewniczak 223*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 224*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('a:a.png', 'b:a.png', 'a.png'), $query, $ns); 225*164faf82SSzymon Olewniczak 226*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 227*164faf82SSzymon Olewniczak } 228*164faf82SSzymon Olewniczak 229*164faf82SSzymon Olewniczak public function test_globbing_two_question_marks_on_the_begining(){ 230*164faf82SSzymon Olewniczak $query = '??.png'; 231*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 232*164faf82SSzymon Olewniczak 233*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 234*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('aa.png', 'ab.png'), $query, $ns); 235*164faf82SSzymon Olewniczak 236*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 237*164faf82SSzymon Olewniczak } 238*164faf82SSzymon Olewniczak 239*164faf82SSzymon Olewniczak public function test_globbing_two_letter_file_names(){ 240*164faf82SSzymon Olewniczak $query = '??.*'; 241*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 242*164faf82SSzymon Olewniczak 243*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 244*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('aa.ogv', 'aa.png', 'ab.ogv', 'ab.png'), $query, $ns); 245*164faf82SSzymon Olewniczak 246*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 247*164faf82SSzymon Olewniczak } 248*164faf82SSzymon Olewniczak 249*164faf82SSzymon Olewniczak public function test_zero_search(){ 250*164faf82SSzymon Olewniczak $query = '0'; 251*164faf82SSzymon Olewniczak $ns = $this->upload_ns; 252*164faf82SSzymon Olewniczak 253*164faf82SSzymon Olewniczak $result = $this->media_searchlist($query, $ns); 254*164faf82SSzymon Olewniczak $expect = $this->media_searchlist_except(array('0.webm'), $query, $ns); 255*164faf82SSzymon Olewniczak 256*164faf82SSzymon Olewniczak $this->assertEquals($expect, $result); 257*164faf82SSzymon Olewniczak } 258*164faf82SSzymon Olewniczak} 259