xref: /plugin/bez/renderer/xhtmlmail.php (revision 17e5ba2e368ec05e910550acf2c6f8a4e66b7bb2)
1a0cd8c78SSzymon Olewniczak<?php
2a0cd8c78SSzymon Olewniczak
3a0cd8c78SSzymon Olewniczakclass renderer_plugin_bez_xhtmlmail extends Doku_Renderer_xhtml {
4a0cd8c78SSzymon Olewniczak
5a0cd8c78SSzymon Olewniczak    /** @var array Settings, control the behavior of the renderer */
6a0cd8c78SSzymon Olewniczak    public $info = array(
7a0cd8c78SSzymon Olewniczak        'cache' => true, // may the rendered result cached?
8a0cd8c78SSzymon Olewniczak        'toc'   => true, // render the TOC?
9a0cd8c78SSzymon Olewniczak        'img'   => array(), //images to attach in mail
10a0cd8c78SSzymon Olewniczak    );
11a0cd8c78SSzymon Olewniczak
12a0cd8c78SSzymon Olewniczak    /**
13a0cd8c78SSzymon Olewniczak     * Our own format
14a0cd8c78SSzymon Olewniczak     *
15a0cd8c78SSzymon Olewniczak     * @return string
16a0cd8c78SSzymon Olewniczak     */
17a0cd8c78SSzymon Olewniczak    function getFormat() {
18a0cd8c78SSzymon Olewniczak        return 'bez_xhtmlmail';
19a0cd8c78SSzymon Olewniczak    }
20a0cd8c78SSzymon Olewniczak
21a0cd8c78SSzymon Olewniczak    /**
22a0cd8c78SSzymon Olewniczak     * Renders internal and external media
23a0cd8c78SSzymon Olewniczak     *
24a0cd8c78SSzymon Olewniczak     * @author Andreas Gohr <andi@splitbrain.org>
25a0cd8c78SSzymon Olewniczak     * @param string $src       media ID
26a0cd8c78SSzymon Olewniczak     * @param string $title     descriptive text
27a0cd8c78SSzymon Olewniczak     * @param string $align     left|center|right
28a0cd8c78SSzymon Olewniczak     * @param int    $width     width of media in pixel
29a0cd8c78SSzymon Olewniczak     * @param int    $height    height of media in pixel
30a0cd8c78SSzymon Olewniczak     * @param string $cache     cache|recache|nocache
31a0cd8c78SSzymon Olewniczak     * @param bool   $render    should the media be embedded inline or just linked
32a0cd8c78SSzymon Olewniczak     * @return string
33a0cd8c78SSzymon Olewniczak     */
34*17e5ba2eSSzymon Olewniczak    public function _media($src, $title = null, $align = null, $width = null,
35a0cd8c78SSzymon Olewniczak                           $height = null, $cache = null, $render = true) {
36a0cd8c78SSzymon Olewniczak
37a0cd8c78SSzymon Olewniczak        $ret = '';
38a0cd8c78SSzymon Olewniczak
39a0cd8c78SSzymon Olewniczak        list($ext, $mime) = mimetype($src);
40a0cd8c78SSzymon Olewniczak        if(substr($mime, 0, 5) == 'image') {
41a0cd8c78SSzymon Olewniczak            // first get the $title
42a0cd8c78SSzymon Olewniczak            if(!is_null($title)) {
43a0cd8c78SSzymon Olewniczak                $title = $this->_xmlEntities($title);
44a0cd8c78SSzymon Olewniczak            } elseif($ext == 'jpg' || $ext == 'jpeg') {
45a0cd8c78SSzymon Olewniczak                //try to use the caption from IPTC/EXIF
46a0cd8c78SSzymon Olewniczak                require_once(DOKU_INC.'inc/JpegMeta.php');
47a0cd8c78SSzymon Olewniczak                $jpeg = new JpegMeta(mediaFN($src));
48a0cd8c78SSzymon Olewniczak                if($jpeg !== false) $cap = $jpeg->getTitle();
49a0cd8c78SSzymon Olewniczak                if(!empty($cap)) {
50a0cd8c78SSzymon Olewniczak                    $title = $this->_xmlEntities($cap);
51a0cd8c78SSzymon Olewniczak                }
52a0cd8c78SSzymon Olewniczak            }
53a0cd8c78SSzymon Olewniczak            if(!$render) {
54a0cd8c78SSzymon Olewniczak                // if the picture is not supposed to be rendered
55a0cd8c78SSzymon Olewniczak                // return the title of the picture
56*17e5ba2eSSzymon Olewniczak                if($title === null || $title === "") {
57a0cd8c78SSzymon Olewniczak                    // just show the sourcename
58*17e5ba2eSSzymon Olewniczak                    $title = $this->_xmlEntities(\dokuwiki\Utf8\PhpString::basename(noNS($src)));
59a0cd8c78SSzymon Olewniczak                }
60a0cd8c78SSzymon Olewniczak                return $title;
61a0cd8c78SSzymon Olewniczak            }
62a0cd8c78SSzymon Olewniczak            //add image tag
63*17e5ba2eSSzymon Olewniczak            $ret .= '<img src="@MEDIA(' . $src . ')@"';
64a0cd8c78SSzymon Olewniczak            $ret .= ' class="media'.$align.'"';
65a0cd8c78SSzymon Olewniczak
66a0cd8c78SSzymon Olewniczak            if($title) {
67a0cd8c78SSzymon Olewniczak                $ret .= ' title="'.$title.'"';
68a0cd8c78SSzymon Olewniczak                $ret .= ' alt="'.$title.'"';
69a0cd8c78SSzymon Olewniczak            } else {
70a0cd8c78SSzymon Olewniczak                $ret .= ' alt=""';
71a0cd8c78SSzymon Olewniczak            }
72a0cd8c78SSzymon Olewniczak
73a0cd8c78SSzymon Olewniczak            if(!is_null($width))
74a0cd8c78SSzymon Olewniczak                $ret .= ' width="'.$this->_xmlEntities($width).'"';
75a0cd8c78SSzymon Olewniczak
76a0cd8c78SSzymon Olewniczak            if(!is_null($height))
77a0cd8c78SSzymon Olewniczak                $ret .= ' height="'.$this->_xmlEntities($height).'"';
78a0cd8c78SSzymon Olewniczak
79a0cd8c78SSzymon Olewniczak            $ret .= ' />';
80a0cd8c78SSzymon Olewniczak
81a0cd8c78SSzymon Olewniczak        } elseif(media_supportedav($mime, 'video') || media_supportedav($mime, 'audio')) {
82a0cd8c78SSzymon Olewniczak            // first get the $title
83*17e5ba2eSSzymon Olewniczak            $title = !is_null($title) ? $title : false;
84a0cd8c78SSzymon Olewniczak            if(!$render) {
85a0cd8c78SSzymon Olewniczak                // if the file is not supposed to be rendered
86a0cd8c78SSzymon Olewniczak                // return the title of the file (just the sourcename if there is no title)
87*17e5ba2eSSzymon Olewniczak                return $this->_xmlEntities($title ? $title : \dokuwiki\Utf8\PhpString::basename(noNS($src)));
88a0cd8c78SSzymon Olewniczak            }
89a0cd8c78SSzymon Olewniczak
90a0cd8c78SSzymon Olewniczak            $att          = array();
91a0cd8c78SSzymon Olewniczak            $att['class'] = "media$align";
92a0cd8c78SSzymon Olewniczak            if($title) {
93a0cd8c78SSzymon Olewniczak                $att['title'] = $title;
94a0cd8c78SSzymon Olewniczak            }
95a0cd8c78SSzymon Olewniczak
96a0cd8c78SSzymon Olewniczak            if(media_supportedav($mime, 'video')) {
97a0cd8c78SSzymon Olewniczak                //add video
98a0cd8c78SSzymon Olewniczak                $ret .= $this->_video($src, $width, $height, $att);
99a0cd8c78SSzymon Olewniczak            }
100a0cd8c78SSzymon Olewniczak            if(media_supportedav($mime, 'audio')) {
101a0cd8c78SSzymon Olewniczak                //add audio
102a0cd8c78SSzymon Olewniczak                $ret .= $this->_audio($src, $att);
103a0cd8c78SSzymon Olewniczak            }
104a0cd8c78SSzymon Olewniczak
105a0cd8c78SSzymon Olewniczak        } elseif($mime == 'application/x-shockwave-flash') {
106a0cd8c78SSzymon Olewniczak            if(!$render) {
107a0cd8c78SSzymon Olewniczak                // if the flash is not supposed to be rendered
108a0cd8c78SSzymon Olewniczak                // return the title of the flash
109a0cd8c78SSzymon Olewniczak                if(!$title) {
110a0cd8c78SSzymon Olewniczak                    // just show the sourcename
111*17e5ba2eSSzymon Olewniczak                    $title = \dokuwiki\Utf8\PhpString::basename(noNS($src));
112a0cd8c78SSzymon Olewniczak                }
113a0cd8c78SSzymon Olewniczak                return $this->_xmlEntities($title);
114a0cd8c78SSzymon Olewniczak            }
115a0cd8c78SSzymon Olewniczak
116a0cd8c78SSzymon Olewniczak            $att          = array();
117a0cd8c78SSzymon Olewniczak            $att['class'] = "media$align";
118a0cd8c78SSzymon Olewniczak            if($align == 'right') $att['align'] = 'right';
119a0cd8c78SSzymon Olewniczak            if($align == 'left') $att['align'] = 'left';
120a0cd8c78SSzymon Olewniczak            $ret .= html_flashobject(
121a0cd8c78SSzymon Olewniczak                ml($src, array('cache' => $cache), true, '&'), $width, $height,
122a0cd8c78SSzymon Olewniczak                array('quality' => 'high'),
123a0cd8c78SSzymon Olewniczak                null,
124a0cd8c78SSzymon Olewniczak                $att,
125a0cd8c78SSzymon Olewniczak                $this->_xmlEntities($title)
126a0cd8c78SSzymon Olewniczak            );
127a0cd8c78SSzymon Olewniczak        } elseif($title) {
128a0cd8c78SSzymon Olewniczak            // well at least we have a title to display
129a0cd8c78SSzymon Olewniczak            $ret .= $this->_xmlEntities($title);
130a0cd8c78SSzymon Olewniczak        } else {
131a0cd8c78SSzymon Olewniczak            // just show the sourcename
132*17e5ba2eSSzymon Olewniczak            $ret .= $this->_xmlEntities(\dokuwiki\Utf8\PhpString::basename(noNS($src)));
133a0cd8c78SSzymon Olewniczak        }
134a0cd8c78SSzymon Olewniczak
135a0cd8c78SSzymon Olewniczak        return $ret;
136a0cd8c78SSzymon Olewniczak    }
137a0cd8c78SSzymon Olewniczak}