Subversion Repositories Applications.papyrus

Rev

Rev 1371 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
248 jpm 1
<?php
2
class Text_Wiki_Render_Xhtml_Image extends Text_Wiki_Render {
3
 
4
    var $conf = array(
5
        'base' => '/',
6
        'css'  => null,
7
        'css_link' => null
8
    );
9
 
10
 
11
    /**
12
    *
13
    * Renders a token into text matching the requested format.
14
    *
15
    * @access public
16
    *
17
    * @param array $options The "options" portion of the token (second
18
    * element).
19
    *
20
    * @return string The text rendered from the token options.
21
    *
22
    */
23
 
24
    function token($options)
25
    {
26
        // note the image source
27
        $src = $options['src'];
28
 
29
        // is the source a local file or URL?
30
        if (strpos($src, '://') === false) {
31
            // the source refers to a local file.
32
            // add the URL base to it.
33
            $src = $this->getConf('base', '/') . $src;
34
        }
35
 
36
        // stephane@metacites.net
37
        // is the image clickable?
38
        if (isset($options['attr']['link'])) {
39
            // yes, the image is clickable.
40
            // are we linked to a URL or a wiki page?
41
            if (strpos($options['attr']['link'], '://')) {
42
                // it's a URL
43
                $href = $options['attr']['link'];
44
            } else {
45
                // it's a WikiPage; assume it exists.
46
                /** @todo This needs to honor sprintf wikilinks (pmjones) */
47
                /** @todo This needs to honor interwiki (pmjones) */
48
                /** @todo This needs to honor freelinks (pmjones) */
49
                $href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') .
50
                    $options['attr']['link'];
51
            }
52
        } else {
53
            // image is not clickable.
54
            $href = null;
55
        }
56
        // unset so it won't show up as an attribute
57
        unset($options['attr']['link']);
58
 
59
        // stephane@metacites.net -- 25/07/2004
60
        // we make up an align="center" value for the <img> tag.
61
        if (isset($options['attr']['align']) &&
62
            $options['attr']['align'] == 'center') {
63
 
64
            // unset so it won't show up as an attribute
65
            unset($options['attr']['align']);
66
 
67
            // make sure we have a style attribute
68
            if (! isset($options['attr']['style'])) {
69
                // no style, set up a blank one
70
                $options['attr']['style'] = '';
71
            } else {
72
                // style exists, add a space
73
                $options['attr']['style'] .= ' ';
74
            }
75
 
76
            // add a "center" style to the existing style.
77
            $options['attr']['style'] .=
78
                'display: block; margin-left: auto; margin-right: auto;';
79
        }
80
 
81
        // stephane@metacites.net -- 25/07/2004
82
        // try to guess width and height
83
        if (! isset($options['attr']['width']) &&
84
            ! isset($options['attr']['height'])) {
85
 
86
            // does the source refer to a local file or a URL?
87
            if (strpos($src,'://')) {
88
                // is a URL link
89
                $imageFile = $src;
90
            } else {
91
                // is a local file
92
                $imageFile = $_SERVER['DOCUMENT_ROOT'] . $src;
93
            }
94
 
95
            // attempt to get the image size
96
            $imageSize = @getimagesize($imageFile);
97
 
98
            if (is_array($imageSize)) {
99
                $options['attr']['width'] = $imageSize[0];
100
                $options['attr']['height'] = $imageSize[1];
101
            }
102
 
103
        }
104
 
105
        // start the HTML output
106
        $output = '<img src="' . htmlspecialchars($src) . '"';
107
 
108
        // get the CSS class but don't add it yet
109
        $css = $this->formatConf(' class="%s"', 'css');
110
 
111
        // add the attributes to the output, and be sure to
112
        // track whether or not we find an "alt" attribute
113
        $alt = false;
114
        foreach ($options['attr'] as $key => $val) {
115
 
116
            // track the 'alt' attribute
117
            if (strtolower($key) == 'alt') {
118
                $alt = true;
119
            }
120
 
121
            // the 'class' attribute overrides the CSS class conf
122
            if (strtolower($key) == 'class') {
123
                $css = null;
124
            }
125
 
126
            $key = htmlspecialchars($key);
127
            $val = htmlspecialchars($val);
128
            $output .= " $key=\"$val\"";
129
        }
130
 
131
        // always add an "alt" attribute per Stephane Solliec
132
        if (! $alt) {
133
            $alt = htmlspecialchars(basename($options['src']));
134
            $output .= " alt=\"$alt\"";
135
        }
136
 
137
        // end the image tag with the automatic CSS class (if any)
138
        $output .= "$css />";
139
 
140
        // was the image clickable?
141
        if ($href) {
142
            // yes, add the href and return
143
            $href = htmlspecialchars($href);
144
            $css = $this->formatConf(' class="%s"', 'css_link');
145
            $output = "<a$css href=\"$href\">$output</a>";
146
        }
147
 
148
        return $output;
149
    }
150
}
151
?>