1*a0cd8c78SSzymon Olewniczak<?php 2*a0cd8c78SSzymon Olewniczak 3*a0cd8c78SSzymon Olewniczakclass renderer_plugin_bez_xhtmlmail extends Doku_Renderer_xhtml { 4*a0cd8c78SSzymon Olewniczak 5*a0cd8c78SSzymon Olewniczak /** @var array Settings, control the behavior of the renderer */ 6*a0cd8c78SSzymon Olewniczak public $info = array( 7*a0cd8c78SSzymon Olewniczak 'cache' => true, // may the rendered result cached? 8*a0cd8c78SSzymon Olewniczak 'toc' => true, // render the TOC? 9*a0cd8c78SSzymon Olewniczak 'img' => array(), //images to attach in mail 10*a0cd8c78SSzymon Olewniczak ); 11*a0cd8c78SSzymon Olewniczak 12*a0cd8c78SSzymon Olewniczak /** 13*a0cd8c78SSzymon Olewniczak * Our own format 14*a0cd8c78SSzymon Olewniczak * 15*a0cd8c78SSzymon Olewniczak * @return string 16*a0cd8c78SSzymon Olewniczak */ 17*a0cd8c78SSzymon Olewniczak function getFormat() { 18*a0cd8c78SSzymon Olewniczak return 'bez_xhtmlmail'; 19*a0cd8c78SSzymon Olewniczak } 20*a0cd8c78SSzymon Olewniczak 21*a0cd8c78SSzymon Olewniczak /** 22*a0cd8c78SSzymon Olewniczak * Unique media file cid used by Mailer to identify images 23*a0cd8c78SSzymon Olewniczak * 24*a0cd8c78SSzymon Olewniczak * @param string $mediaId 25*a0cd8c78SSzymon Olewniczak * @param string $rev 26*a0cd8c78SSzymon Olewniczak * @param bool $delimiters wrap emded with '%%' 27*a0cd8c78SSzymon Olewniczak * @return string 28*a0cd8c78SSzymon Olewniczak */ 29*a0cd8c78SSzymon Olewniczak private function embed($mediaId, $rev='', $delimiters=false) { 30*a0cd8c78SSzymon Olewniczak $embed = $mediaId . $rev; 31*a0cd8c78SSzymon Olewniczak if ($delimiters) $embed = '%%' . $embed . '%%'; 32*a0cd8c78SSzymon Olewniczak return $embed; 33*a0cd8c78SSzymon Olewniczak } 34*a0cd8c78SSzymon Olewniczak 35*a0cd8c78SSzymon Olewniczak /** 36*a0cd8c78SSzymon Olewniczak * Render an internal media file 37*a0cd8c78SSzymon Olewniczak * 38*a0cd8c78SSzymon Olewniczak * @param string $src media ID 39*a0cd8c78SSzymon Olewniczak * @param string $title descriptive text 40*a0cd8c78SSzymon Olewniczak * @param string $align left|center|right 41*a0cd8c78SSzymon Olewniczak * @param int $width width of media in pixel 42*a0cd8c78SSzymon Olewniczak * @param int $height height of media in pixel 43*a0cd8c78SSzymon Olewniczak * @param string $cache cache|recache|nocache 44*a0cd8c78SSzymon Olewniczak * @param string $linking linkonly|detail|nolink 45*a0cd8c78SSzymon Olewniczak * @param bool $return return HTML instead of adding to $doc 46*a0cd8c78SSzymon Olewniczak * @return void|string writes to doc attribute or returns html depends on $return 47*a0cd8c78SSzymon Olewniczak */ 48*a0cd8c78SSzymon Olewniczak function internalmedia($src, $title = null, $align = null, $width = null, 49*a0cd8c78SSzymon Olewniczak $height = null, $cache = null, $linking = null, $return = false) { 50*a0cd8c78SSzymon Olewniczak global $ID; 51*a0cd8c78SSzymon Olewniczak list($src, $hash) = explode('#', $src, 2); 52*a0cd8c78SSzymon Olewniczak resolve_mediaid(getNS($ID), $src, $exists, $this->date_at, true); 53*a0cd8c78SSzymon Olewniczak 54*a0cd8c78SSzymon Olewniczak $noLink = false; 55*a0cd8c78SSzymon Olewniczak $render = ($linking == 'linkonly') ? false : true; 56*a0cd8c78SSzymon Olewniczak $link = $this->_getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render); 57*a0cd8c78SSzymon Olewniczak if ($exists) { 58*a0cd8c78SSzymon Olewniczak $rev = $this->_getLastMediaRevisionAt($src); 59*a0cd8c78SSzymon Olewniczak $path = mediaFN($src, $rev); 60*a0cd8c78SSzymon Olewniczak list($ext, $mime) = mimetype($src); 61*a0cd8c78SSzymon Olewniczak 62*a0cd8c78SSzymon Olewniczak $this->info['img'][] = array( 63*a0cd8c78SSzymon Olewniczak 'path' => $path, 64*a0cd8c78SSzymon Olewniczak 'mime' => $mime, 65*a0cd8c78SSzymon Olewniczak 'name' => $title, 66*a0cd8c78SSzymon Olewniczak 'embed' => $this->embed($src, $rev) 67*a0cd8c78SSzymon Olewniczak ); 68*a0cd8c78SSzymon Olewniczak } 69*a0cd8c78SSzymon Olewniczak 70*a0cd8c78SSzymon Olewniczak list($ext, $mime) = mimetype($src, false); 71*a0cd8c78SSzymon Olewniczak if(substr($mime, 0, 5) == 'image' && $render) { 72*a0cd8c78SSzymon Olewniczak $link['url'] = ml($src, array('id' => $ID, 'cache' => $cache, 'rev'=>$this->_getLastMediaRevisionAt($src)), 73*a0cd8c78SSzymon Olewniczak ($linking == 'direct'), '&', true); 74*a0cd8c78SSzymon Olewniczak } elseif(($mime == 'application/x-shockwave-flash' || media_supportedav($mime)) && $render) { 75*a0cd8c78SSzymon Olewniczak // don't link movies 76*a0cd8c78SSzymon Olewniczak $noLink = true; 77*a0cd8c78SSzymon Olewniczak } else { 78*a0cd8c78SSzymon Olewniczak // add file icons 79*a0cd8c78SSzymon Olewniczak $class = preg_replace('/[^_\-a-z0-9]+/i', '_', $ext); 80*a0cd8c78SSzymon Olewniczak $link['class'] .= ' mediafile mf_'.$class; 81*a0cd8c78SSzymon Olewniczak $link['url'] = ml($src, array('id' => $ID, 'cache' => $cache , 'rev'=>$this->_getLastMediaRevisionAt($src)), 82*a0cd8c78SSzymon Olewniczak true, '&', true); 83*a0cd8c78SSzymon Olewniczak if($exists) $link['title'] .= ' ('.filesize_h(filesize(mediaFN($src))).')'; 84*a0cd8c78SSzymon Olewniczak } 85*a0cd8c78SSzymon Olewniczak 86*a0cd8c78SSzymon Olewniczak if($hash) $link['url'] .= '#'.$hash; 87*a0cd8c78SSzymon Olewniczak 88*a0cd8c78SSzymon Olewniczak //markup non existing files 89*a0cd8c78SSzymon Olewniczak if(!$exists) { 90*a0cd8c78SSzymon Olewniczak $link['class'] .= ' wikilink2'; 91*a0cd8c78SSzymon Olewniczak } 92*a0cd8c78SSzymon Olewniczak 93*a0cd8c78SSzymon Olewniczak //output formatted 94*a0cd8c78SSzymon Olewniczak if($return) { 95*a0cd8c78SSzymon Olewniczak if($linking == 'nolink' || $noLink) return $link['name']; 96*a0cd8c78SSzymon Olewniczak else return $this->_formatLink($link); 97*a0cd8c78SSzymon Olewniczak } else { 98*a0cd8c78SSzymon Olewniczak if($linking == 'nolink' || $noLink) $this->doc .= $link['name']; 99*a0cd8c78SSzymon Olewniczak else $this->doc .= $this->_formatLink($link); 100*a0cd8c78SSzymon Olewniczak } 101*a0cd8c78SSzymon Olewniczak } 102*a0cd8c78SSzymon Olewniczak 103*a0cd8c78SSzymon Olewniczak /** 104*a0cd8c78SSzymon Olewniczak * Renders internal and external media 105*a0cd8c78SSzymon Olewniczak * 106*a0cd8c78SSzymon Olewniczak * @author Andreas Gohr <andi@splitbrain.org> 107*a0cd8c78SSzymon Olewniczak * @param string $src media ID 108*a0cd8c78SSzymon Olewniczak * @param string $title descriptive text 109*a0cd8c78SSzymon Olewniczak * @param string $align left|center|right 110*a0cd8c78SSzymon Olewniczak * @param int $width width of media in pixel 111*a0cd8c78SSzymon Olewniczak * @param int $height height of media in pixel 112*a0cd8c78SSzymon Olewniczak * @param string $cache cache|recache|nocache 113*a0cd8c78SSzymon Olewniczak * @param bool $render should the media be embedded inline or just linked 114*a0cd8c78SSzymon Olewniczak * @return string 115*a0cd8c78SSzymon Olewniczak */ 116*a0cd8c78SSzymon Olewniczak function _media($src, $title = null, $align = null, $width = null, 117*a0cd8c78SSzymon Olewniczak $height = null, $cache = null, $render = true) { 118*a0cd8c78SSzymon Olewniczak 119*a0cd8c78SSzymon Olewniczak $ret = ''; 120*a0cd8c78SSzymon Olewniczak 121*a0cd8c78SSzymon Olewniczak list($ext, $mime) = mimetype($src); 122*a0cd8c78SSzymon Olewniczak if(substr($mime, 0, 5) == 'image') { 123*a0cd8c78SSzymon Olewniczak // first get the $title 124*a0cd8c78SSzymon Olewniczak if(!is_null($title)) { 125*a0cd8c78SSzymon Olewniczak $title = $this->_xmlEntities($title); 126*a0cd8c78SSzymon Olewniczak } elseif($ext == 'jpg' || $ext == 'jpeg') { 127*a0cd8c78SSzymon Olewniczak //try to use the caption from IPTC/EXIF 128*a0cd8c78SSzymon Olewniczak require_once(DOKU_INC.'inc/JpegMeta.php'); 129*a0cd8c78SSzymon Olewniczak $jpeg = new JpegMeta(mediaFN($src)); 130*a0cd8c78SSzymon Olewniczak if($jpeg !== false) $cap = $jpeg->getTitle(); 131*a0cd8c78SSzymon Olewniczak if(!empty($cap)) { 132*a0cd8c78SSzymon Olewniczak $title = $this->_xmlEntities($cap); 133*a0cd8c78SSzymon Olewniczak } 134*a0cd8c78SSzymon Olewniczak } 135*a0cd8c78SSzymon Olewniczak if(!$render) { 136*a0cd8c78SSzymon Olewniczak // if the picture is not supposed to be rendered 137*a0cd8c78SSzymon Olewniczak // return the title of the picture 138*a0cd8c78SSzymon Olewniczak if(!$title) { 139*a0cd8c78SSzymon Olewniczak // just show the sourcename 140*a0cd8c78SSzymon Olewniczak $title = $this->_xmlEntities(utf8_basename(noNS($src))); 141*a0cd8c78SSzymon Olewniczak } 142*a0cd8c78SSzymon Olewniczak return $title; 143*a0cd8c78SSzymon Olewniczak } 144*a0cd8c78SSzymon Olewniczak //add image tag 145*a0cd8c78SSzymon Olewniczak $rev = $this->_getLastMediaRevisionAt($src); 146*a0cd8c78SSzymon Olewniczak $ret .= '<img src="' . $this->embed($src, $rev, true) . '"'; 147*a0cd8c78SSzymon Olewniczak $ret .= ' class="media'.$align.'"'; 148*a0cd8c78SSzymon Olewniczak 149*a0cd8c78SSzymon Olewniczak if($title) { 150*a0cd8c78SSzymon Olewniczak $ret .= ' title="'.$title.'"'; 151*a0cd8c78SSzymon Olewniczak $ret .= ' alt="'.$title.'"'; 152*a0cd8c78SSzymon Olewniczak } else { 153*a0cd8c78SSzymon Olewniczak $ret .= ' alt=""'; 154*a0cd8c78SSzymon Olewniczak } 155*a0cd8c78SSzymon Olewniczak 156*a0cd8c78SSzymon Olewniczak if(!is_null($width)) 157*a0cd8c78SSzymon Olewniczak $ret .= ' width="'.$this->_xmlEntities($width).'"'; 158*a0cd8c78SSzymon Olewniczak 159*a0cd8c78SSzymon Olewniczak if(!is_null($height)) 160*a0cd8c78SSzymon Olewniczak $ret .= ' height="'.$this->_xmlEntities($height).'"'; 161*a0cd8c78SSzymon Olewniczak 162*a0cd8c78SSzymon Olewniczak $ret .= ' />'; 163*a0cd8c78SSzymon Olewniczak 164*a0cd8c78SSzymon Olewniczak } elseif(media_supportedav($mime, 'video') || media_supportedav($mime, 'audio')) { 165*a0cd8c78SSzymon Olewniczak // first get the $title 166*a0cd8c78SSzymon Olewniczak $title = !is_null($title) ? $this->_xmlEntities($title) : false; 167*a0cd8c78SSzymon Olewniczak if(!$render) { 168*a0cd8c78SSzymon Olewniczak // if the file is not supposed to be rendered 169*a0cd8c78SSzymon Olewniczak // return the title of the file (just the sourcename if there is no title) 170*a0cd8c78SSzymon Olewniczak return $title ? $title : $this->_xmlEntities(utf8_basename(noNS($src))); 171*a0cd8c78SSzymon Olewniczak } 172*a0cd8c78SSzymon Olewniczak 173*a0cd8c78SSzymon Olewniczak $att = array(); 174*a0cd8c78SSzymon Olewniczak $att['class'] = "media$align"; 175*a0cd8c78SSzymon Olewniczak if($title) { 176*a0cd8c78SSzymon Olewniczak $att['title'] = $title; 177*a0cd8c78SSzymon Olewniczak } 178*a0cd8c78SSzymon Olewniczak 179*a0cd8c78SSzymon Olewniczak if(media_supportedav($mime, 'video')) { 180*a0cd8c78SSzymon Olewniczak //add video 181*a0cd8c78SSzymon Olewniczak $ret .= $this->_video($src, $width, $height, $att); 182*a0cd8c78SSzymon Olewniczak } 183*a0cd8c78SSzymon Olewniczak if(media_supportedav($mime, 'audio')) { 184*a0cd8c78SSzymon Olewniczak //add audio 185*a0cd8c78SSzymon Olewniczak $ret .= $this->_audio($src, $att); 186*a0cd8c78SSzymon Olewniczak } 187*a0cd8c78SSzymon Olewniczak 188*a0cd8c78SSzymon Olewniczak } elseif($mime == 'application/x-shockwave-flash') { 189*a0cd8c78SSzymon Olewniczak if(!$render) { 190*a0cd8c78SSzymon Olewniczak // if the flash is not supposed to be rendered 191*a0cd8c78SSzymon Olewniczak // return the title of the flash 192*a0cd8c78SSzymon Olewniczak if(!$title) { 193*a0cd8c78SSzymon Olewniczak // just show the sourcename 194*a0cd8c78SSzymon Olewniczak $title = utf8_basename(noNS($src)); 195*a0cd8c78SSzymon Olewniczak } 196*a0cd8c78SSzymon Olewniczak return $this->_xmlEntities($title); 197*a0cd8c78SSzymon Olewniczak } 198*a0cd8c78SSzymon Olewniczak 199*a0cd8c78SSzymon Olewniczak $att = array(); 200*a0cd8c78SSzymon Olewniczak $att['class'] = "media$align"; 201*a0cd8c78SSzymon Olewniczak if($align == 'right') $att['align'] = 'right'; 202*a0cd8c78SSzymon Olewniczak if($align == 'left') $att['align'] = 'left'; 203*a0cd8c78SSzymon Olewniczak $ret .= html_flashobject( 204*a0cd8c78SSzymon Olewniczak ml($src, array('cache' => $cache), true, '&'), $width, $height, 205*a0cd8c78SSzymon Olewniczak array('quality' => 'high'), 206*a0cd8c78SSzymon Olewniczak null, 207*a0cd8c78SSzymon Olewniczak $att, 208*a0cd8c78SSzymon Olewniczak $this->_xmlEntities($title) 209*a0cd8c78SSzymon Olewniczak ); 210*a0cd8c78SSzymon Olewniczak } elseif($title) { 211*a0cd8c78SSzymon Olewniczak // well at least we have a title to display 212*a0cd8c78SSzymon Olewniczak $ret .= $this->_xmlEntities($title); 213*a0cd8c78SSzymon Olewniczak } else { 214*a0cd8c78SSzymon Olewniczak // just show the sourcename 215*a0cd8c78SSzymon Olewniczak $ret .= $this->_xmlEntities(utf8_basename(noNS($src))); 216*a0cd8c78SSzymon Olewniczak } 217*a0cd8c78SSzymon Olewniczak 218*a0cd8c78SSzymon Olewniczak return $ret; 219*a0cd8c78SSzymon Olewniczak } 220*a0cd8c78SSzymon Olewniczak}