xref: /plugin/mediathumbnails/syntax.php (revision a99f150968d94c1d45e20e5e1fcfb35c280afe95)
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
1447d2d32aSterniterequire('thumbnail.php');
1547d2d32aSternite
16bbf77476Sterniteclass syntax_plugin_mediathumbnails extends DokuWiki_Syntax_Plugin {
17bbf77476Sternite
18bbf77476Sternite	/**
19bbf77476Sternite     * @return string Syntax mode type
20bbf77476Sternite     */
21bbf77476Sternite    public function getType()
22bbf77476Sternite    {
23bbf77476Sternite        return 'substition';
24bbf77476Sternite    }
25bbf77476Sternite
26bbf77476Sternite    /**
27bbf77476Sternite     * @return string Paragraph type
28bbf77476Sternite     */
29bbf77476Sternite    public function getPType()
30bbf77476Sternite    {
31bbf77476Sternite        return 'normal';
32bbf77476Sternite    }
33bbf77476Sternite
34bbf77476Sternite    /**
35bbf77476Sternite     * @return int Sort order - Low numbers go before high numbers
36bbf77476Sternite     */
37bbf77476Sternite    public function getSort()
38bbf77476Sternite    {
39bbf77476Sternite        return 1;
40bbf77476Sternite    }
41bbf77476Sternite
42bbf77476Sternite    /**
43bbf77476Sternite     * Connect lookup pattern to lexer.
44bbf77476Sternite     *
45bbf77476Sternite     * @param string $mode Parser mode
46bbf77476Sternite     */
47bbf77476Sternite    public function connectTo($mode)
48bbf77476Sternite    {
49bbf77476Sternite		$this->Lexer->addSpecialPattern("{{thumbnail>.+?}}", $mode, substr(get_class($this), 7));
50bbf77476Sternite	}
51bbf77476Sternite
52bbf77476Sternite    /**
53bbf77476Sternite     * Handle matches of the mediathumbnails syntax
54bbf77476Sternite     *
55bbf77476Sternite     * @param string       $match   The match of the syntax
56bbf77476Sternite     * @param int          $state   The state of the handler
57bbf77476Sternite     * @param int          $pos     The position in the document
58bbf77476Sternite     * @param Doku_Handler $handler The handler
59bbf77476Sternite     *
60bbf77476Sternite     * @return array Data for the renderer
61bbf77476Sternite     */
62bbf77476Sternite    public function handle($match, $state, $pos, Doku_Handler $handler)
63bbf77476Sternite    {
64da77d72dSternite		// Locate the given media file and check if it can be opened as zip
652b9233e2Sternite		$documenttype_command = substr($match, 12, -2); //strip markup
662b9233e2Sternite
672b9233e2Sternite        // if the command is using a pipe separator, the mediapath file must be extracted. As of now, the text behind the pipe will be ignored!
682b9233e2Sternite        $params = explode("|", $documenttype_command);
692b9233e2Sternite
702b9233e2Sternite        $mediapath_file = $params[0];
71bbf77476Sternite
72120df342Sternite        $caption = $mediapath_file;
73120df342Sternite
74120df342Sternite        if (sizeof($params) > 1) {
75120df342Sternite            $caption = $params[1];
76120df342Sternite        }
77120df342Sternite
78a2549de1Sternite		$thumb = new thumbnail($mediapath_file,$this);
79*a99f1509Sternite
80*a99f1509Sternite        // if source file does not exist, return an array with the first element being null
81*a99f1509Sternite        if (!$thumb->getSourceFileExists()) {
82*a99f1509Sternite            return array(null,$mediapath_file,null);
83*a99f1509Sternite        }
84*a99f1509Sternite
85a2549de1Sternite		if ($thumb->create()) {
86120df342Sternite			return array($mediapath_file,$thumb->getMediapath(),$caption);
87da77d72dSternite		}
88bbf77476Sternite
89*a99f1509Sternite		return array($mediapath_file,null,null);
90bbf77476Sternite    }
91bbf77476Sternite
92bbf77476Sternite    /**
93bbf77476Sternite     * Render xhtml output or metadata
94bbf77476Sternite     *
95bbf77476Sternite     * @param string        $mode     Renderer mode (supported modes: xhtml)
96bbf77476Sternite     * @param Doku_Renderer $renderer The renderer
97bbf77476Sternite     * @param array         $data     The data from the handler() function
98bbf77476Sternite     *
99bbf77476Sternite     * @return bool If rendering was successful.
100bbf77476Sternite     */
101bbf77476Sternite    public function render($mode, Doku_Renderer $renderer, $data)
102bbf77476Sternite    {
103120df342Sternite		list ($mediapath_file, $mediapath_thumbnail, $caption) = $data;
104bbf77476Sternite
105bbf77476Sternite        if ($mode == 'xhtml') {
106bbf77476Sternite
107*a99f1509Sternite            // check if media source file exists
108*a99f1509Sternite			if (is_null($mediapath_file)) {
109*a99f1509Sternite				if ($this->getConf('show_missing_thumb_error')) {
110*a99f1509Sternite					$renderer->doc .= trim($this->getConf('no_media_error_message')) . " " . $mediapath_thumbnail;
111*a99f1509Sternite					return true;
112*a99f1509Sternite				} else {
113*a99f1509Sternite					return false;
114*a99f1509Sternite				}
115*a99f1509Sternite			}
116*a99f1509Sternite
117da77d72dSternite			// check if a thumbnail file was found
118da77d72dSternite			if (!$mediapath_thumbnail) {
1192f64379eSternite				if ($this->getConf('show_missing_thumb_error')) {
120da77d72dSternite					$renderer->doc .= trim($this->getConf('no_thumb_error_message')) . " " . $mediapath_file;
121da77d72dSternite					return true;
122da77d72dSternite				} else {
123da77d72dSternite					return false;
124da77d72dSternite				}
125da77d72dSternite			}
126da77d72dSternite
127bbf77476Sternite			$src = ml($mediapath_thumbnail,array());
128bbf77476Sternite
129bbf77476Sternite			$i          = array();
130086d90eeSternite
1313ac8d5b9Sternite			$i['title'] = $mediapath_file;
132086d90eeSternite			$i['style'] = "max-width:".$this->getConf('thumb_max_dimension')."px;max-height:".$this->getConf('thumb_max_dimension')."px";
133086d90eeSternite
134bbf77476Sternite			$iatt = buildAttributes($i);
135bbf77476Sternite
1366bc8b42dSternite			$renderer->doc .= 	($this->getConf('link_to_media_file') ? '<a href="/lib/exe/fetch.php?media=' . $mediapath_file . '">' : '') .
137120df342Sternite								'<img src="'.$src.'" title="'.$caption.'" '.$iatt.' />' .
1386bc8b42dSternite								($this->getConf('link_to_media_file') ? '</a>' : '');
139bbf77476Sternite            return true;
140bbf77476Sternite
141bbf77476Sternite        } elseif ($mode == 'odt') {
142bbf77476Sternite
143bbf77476Sternite			// TODO: yet to implement
144bbf77476Sternite			$renderer->cdata("");
145bbf77476Sternite			return true;
146bbf77476Sternite
147bbf77476Sternite		}
148bbf77476Sternite
149bbf77476Sternite        return false;
150bbf77476Sternite    }
151bbf77476Sternite}