xref: /dokuwiki/_test/tests/inc/media_searchlist.test.php (revision 164faf82164d7d71cd35b8a27dc260cd00d04f8a)
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