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