xref: /plugin/mediathumbnails/syntax.php (revision 3ac8d5b9571c6e03d99c516c21002da8e0cf71ff)
1bbf77476Sternite<?php
2bbf77476Sternite/**
3bbf77476Sternite * DokuWiki Plugin mediathumbnails (Syntax Component)
4bbf77476Sternite *
5bbf77476Sternite * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6bbf77476Sternite * @author  Thomas Schäfer <thomas.schaefer@itschert.net>
7bbf77476Sternite */
8bbf77476Sternite
9bbf77476Sternite// must be run within Dokuwiki
10bbf77476Sterniteif (!defined('DOKU_INC')) {
11bbf77476Sternite    die();
12bbf77476Sternite}
13bbf77476Sternite
14bbf77476Sterniteclass syntax_plugin_mediathumbnails extends DokuWiki_Syntax_Plugin {
15bbf77476Sternite
16bbf77476Sternite	/**
17bbf77476Sternite     * @return string Syntax mode type
18bbf77476Sternite     */
19bbf77476Sternite    public function getType()
20bbf77476Sternite    {
21bbf77476Sternite        return 'substition';
22bbf77476Sternite    }
23bbf77476Sternite
24bbf77476Sternite    /**
25bbf77476Sternite     * @return string Paragraph type
26bbf77476Sternite     */
27bbf77476Sternite    public function getPType()
28bbf77476Sternite    {
29bbf77476Sternite        return 'normal';
30bbf77476Sternite    }
31bbf77476Sternite
32bbf77476Sternite    /**
33bbf77476Sternite     * @return int Sort order - Low numbers go before high numbers
34bbf77476Sternite     */
35bbf77476Sternite    public function getSort()
36bbf77476Sternite    {
37bbf77476Sternite        return 1;
38bbf77476Sternite    }
39bbf77476Sternite
40bbf77476Sternite    /**
41bbf77476Sternite     * Connect lookup pattern to lexer.
42bbf77476Sternite     *
43bbf77476Sternite     * @param string $mode Parser mode
44bbf77476Sternite     */
45bbf77476Sternite    public function connectTo($mode)
46bbf77476Sternite    {
47bbf77476Sternite		$this->Lexer->addSpecialPattern("{{thumbnail>.+?}}", $mode, substr(get_class($this), 7));
48bbf77476Sternite	}
49bbf77476Sternite
50bbf77476Sternite    /**
51bbf77476Sternite     * Handle matches of the mediathumbnails syntax
52bbf77476Sternite     *
53bbf77476Sternite     * @param string       $match   The match of the syntax
54bbf77476Sternite     * @param int          $state   The state of the handler
55bbf77476Sternite     * @param int          $pos     The position in the document
56bbf77476Sternite     * @param Doku_Handler $handler The handler
57bbf77476Sternite     *
58bbf77476Sternite     * @return array Data for the renderer
59bbf77476Sternite     */
60bbf77476Sternite    public function handle($match, $state, $pos, Doku_Handler $handler)
61bbf77476Sternite    {
62bbf77476Sternite		$thumbnailpath = "Thumbnails/thumbnail.png";
63bbf77476Sternite
6432095c04Sternite		$mediapath_file = substr($match, 12, -2); //strip markup
6532095c04Sternite		$filepath = mediaFN($mediapath_file);
66bbf77476Sternite		//$filepath = str_replace('\\', DIRECTORY_SEPARATOR, $filepath);
67bbf77476Sternite
68bbf77476Sternite		$zip = new ZipArchive;
69bbf77476Sternite
70bbf77476Sternite		if ($zip->open($filepath) !== TRUE) {
71bbf77476Sternite			// odt file does not exist
72bbf77476Sternite			return array();
73bbf77476Sternite		}
74bbf77476Sternite
75bbf77476Sternite		if ($zip->locateName($thumbnailpath) !== false) {
76bbf77476Sternite			// thumbnail file exists
77bbf77476Sternite			$fp = $zip->getStream($thumbnailpath);
78bbf77476Sternite			if(!$fp) {
79bbf77476Sternite				return array();
80bbf77476Sternite			}
81bbf77476Sternite
82bbf77476Sternite			$thumbnaildata = '';
83bbf77476Sternite			while (!feof($fp)) {
84bbf77476Sternite				$thumbnaildata .= fread($fp, 8192);
85bbf77476Sternite			}
86bbf77476Sternite
87bbf77476Sternite			fclose($fp);
88bbf77476Sternite
89bbf77476Sternite			// write thumbnail file to media folder
90bbf77476Sternite			$filedir = dirname($filepath);
91bbf77476Sternite			$filename = basename($filepath);
92bbf77476Sternite			$extended_filename = substr($filename,0,strrpos($filename,'.')).".thumbnail".strrchr($thumbnailpath,'.');
93bbf77476Sternite
94bbf77476Sternite			$filepath_thumbnail = $filedir . DIRECTORY_SEPARATOR . $extended_filename;
95bbf77476Sternite			file_put_contents($filepath_thumbnail, $thumbnaildata);
96bbf77476Sternite
97bbf77476Sternite			// give media path to renderer
9832095c04Sternite			$mediapath_thumbnail = substr($mediapath_file,0,strrpos($mediapath_file,':')) . ":" . $extended_filename;
9932095c04Sternite			return array($mediapath_file, $mediapath_thumbnail);
100bbf77476Sternite		}
101bbf77476Sternite
102bbf77476Sternite		return array();
103bbf77476Sternite    }
104bbf77476Sternite
105bbf77476Sternite    /**
106bbf77476Sternite     * Render xhtml output or metadata
107bbf77476Sternite     *
108bbf77476Sternite     * @param string        $mode     Renderer mode (supported modes: xhtml)
109bbf77476Sternite     * @param Doku_Renderer $renderer The renderer
110bbf77476Sternite     * @param array         $data     The data from the handler() function
111bbf77476Sternite     *
112bbf77476Sternite     * @return bool If rendering was successful.
113bbf77476Sternite     */
114bbf77476Sternite    public function render($mode, Doku_Renderer $renderer, $data)
115bbf77476Sternite    {
11632095c04Sternite		$mediapath_file = $data[0];
11732095c04Sternite		$mediapath_thumbnail = $data[1];
118bbf77476Sternite
119bbf77476Sternite        if ($mode == 'xhtml') {
120bbf77476Sternite
121bbf77476Sternite			$src = ml($mediapath_thumbnail,array());
122bbf77476Sternite
123bbf77476Sternite			$i             = array();
124bbf77476Sternite			$i['width']    = '100px';
125*3ac8d5b9Sternite			//$i['height']   = '';
126*3ac8d5b9Sternite			$i['title']      = $mediapath_file;
127bbf77476Sternite			$i['class']    = 'tn';
128bbf77476Sternite			$iatt = buildAttributes($i);
129bbf77476Sternite
13032095c04Sternite			$renderer->doc .= 	'<a href="/lib/exe/fetch.php?media=' . $mediapath_file . '">' .
13132095c04Sternite								'<img src="'.$src.'" '.$iatt.' />' .
13232095c04Sternite								'</a>';
133bbf77476Sternite            return true;
134bbf77476Sternite
135bbf77476Sternite        } elseif ($mode == 'odt') {
136bbf77476Sternite
137bbf77476Sternite			// TODO: yet to implement
138bbf77476Sternite			$renderer->cdata("");
139bbf77476Sternite			return true;
140bbf77476Sternite
141bbf77476Sternite		}
142bbf77476Sternite
143bbf77476Sternite        return false;
144bbf77476Sternite    }
145bbf77476Sternite}
146bbf77476Sternite
147