29997535 |
1 | <?php |
62f9cbcc |
2 | |
29997535 |
3 | /** |
7695c5e2 |
4 | * general_util.php |
29997535 |
5 | * |
62f9cbcc |
6 | * This file is intended to contain helper functions for template sets |
7 | * that would like to use them. |
29997535 |
8 | * |
9 | * @copyright © 1999-2006 The SquirrelMail Project Team |
10 | * @license http://opensource.org/licenses/gpl-license.php GNU Public License |
11 | * @version $Id$ |
12 | * @package squirrelmail |
29997535 |
13 | */ |
62f9cbcc |
14 | |
15 | |
16 | /** |
17 | * Create stylesheet links that will work for multiple browsers |
18 | * |
19 | * @param string $uri The URI to the linked stylesheet. |
20 | * @param string $name The title of the stylesheet (optional; default empty). |
21 | * @param boolean $alt Whether or not this is an alternate |
22 | * stylesheet (optional; default TRUE). |
23 | * @param string $mtype The target media display type (optional; default "screen"). |
62f9cbcc |
24 | * |
25 | * @return string The full text of the stylesheet link. |
26 | * |
27 | */ |
b116fd78 |
28 | function create_css_link($uri, $name='', $alt=TRUE, $mtype='screen') { |
62f9cbcc |
29 | // FIXME: Add closing / to link and meta elements only after |
30 | // switching to xhtml 1.0 Transitional. |
31 | // It is not compatible with html 4.01 Transitional |
62f9cbcc |
32 | if (empty($uri)) { |
33 | return ''; |
34 | } |
35 | |
36 | // set to lower case to avoid errors |
37 | // |
38 | sqGetGlobalVar('HTTP_USER_AGENT', $browser_user_agent, SQ_SERVER); |
39 | $browser_user_agent = strtolower($browser_user_agent); |
40 | |
41 | if (stristr($browser_user_agent, "msie 4")) { |
42 | $browser = 'msie4'; |
43 | $dom_browser = false; |
44 | $is_IE = true; |
45 | } elseif (stristr($browser_user_agent, "msie") |
46 | && stristr($browser_user_agent, 'opera') === FALSE) { |
47 | $browser = 'msie'; |
48 | $dom_browser = true; |
49 | $is_IE = true; |
50 | } |
51 | |
52 | if ((strpos($uri, '-ie')!== false) and !$is_IE) { |
53 | //not IE, so don't render this sheet |
54 | return; |
55 | } |
56 | |
57 | if ( strpos($uri, 'print') !== false ) |
58 | $mtype = 'print'; |
59 | |
60 | $href = 'href="'.$uri.'" '; |
61 | $media = 'media="'.$mtype.'" '; |
62 | |
63 | if ( empty($name) ) { |
64 | $title = ''; |
65 | $rel = 'rel="stylesheet" '; |
66 | } else { |
67 | $title = 'title="'.$name.'" '; |
68 | $rel = 'rel="'.( $alt ? 'alternate ' : '' ).'stylesheet" '; |
69 | } |
70 | |
b116fd78 |
71 | return '<link '.$media.$title.$rel.'type="text/css" '.$href." />\n"; |
62f9cbcc |
72 | } |
73 | |
74 | |
29997535 |
75 | /** |
efb5bde8 |
76 | * Checks for an image icon and returns a complete image tag or a text |
29997535 |
77 | * string with the text icon based on what is found and user prefs. |
62f9cbcc |
78 | * |
29997535 |
79 | * @param string $icon_theme_path User's chosen icon set |
80 | * @param string $icon_name File name of the desired icon |
81 | * @param string $text_icon Text-based icon to display if desired |
6a2f6835 |
82 | * @param string $alt_text Text for alt/title attribute of image |
29997535 |
83 | * @param integer $w Optional. Width of requested image. |
84 | * @param integer $h Optional. Height of requested image. |
0173ad29 |
85 | * |
29997535 |
86 | * @return string $icon String containing icon that can be echo'ed |
0173ad29 |
87 | * |
29997535 |
88 | * @author Steve Brown |
89 | * @since 1.5.2 |
90 | */ |
6a2f6835 |
91 | function getIcon($icon_theme_path, $icon_name, $text_icon, $alt_text, $w=NULL, $h=NULL) { |
29997535 |
92 | $icon = ''; |
93 | if (is_null($icon_theme_path)) { |
94 | $icon = $text_icon; |
95 | } else { |
7c8f16f3 |
96 | $icon_path = getIconPath($icon_theme_path, $icon_name); |
29997535 |
97 | |
29997535 |
98 | // If we found an icon, build an img tag to display it. If we didn't |
99 | // find an image, we will revert back to the text icon. |
7c8f16f3 |
100 | if (!is_null($icon_path)) { |
bcc55e4b |
101 | $icon = create_image($icon_path, $alt_text, $w, $h, '', '', '', |
102 | '', $alt_text, '', '', '', $text_icon); |
29997535 |
103 | } else { |
104 | $icon = $text_icon; |
105 | } |
106 | } |
62f9cbcc |
107 | return $icon; |
29997535 |
108 | } |
7c8f16f3 |
109 | |
62f9cbcc |
110 | |
7c8f16f3 |
111 | /** |
112 | * Gets the path to the specified icon or returns NULL if the image is not |
113 | * found. This has been separated from getIcon to allow the path to be fetched |
114 | * for use w/ third party packages, e.g. dTree. |
62f9cbcc |
115 | * |
7c8f16f3 |
116 | * @param string $icon_theme_path User's chosen icon set |
117 | * @param string $icon_name File name of the desired icon |
0173ad29 |
118 | * |
7c8f16f3 |
119 | * @return string $icon String containing path to icon that can be used in |
120 | * an IMG tag, or NULL if the image is not found. |
0173ad29 |
121 | * |
7c8f16f3 |
122 | * @author Steve Brown |
123 | * @since 1.5.2 |
0173ad29 |
124 | * |
7c8f16f3 |
125 | */ |
126 | function getIconPath ($icon_theme_path, $icon_name) { |
341fd984 |
127 | global $fallback_icon_theme_path; |
74db4ed2 |
128 | |
7c8f16f3 |
129 | if (is_null($icon_theme_path)) |
130 | return NULL; |
62f9cbcc |
131 | |
7c8f16f3 |
132 | // Desired icon exists in the current theme? |
133 | if (is_file($icon_theme_path . $icon_name)) { |
134 | return $icon_theme_path . $icon_name; |
62f9cbcc |
135 | |
341fd984 |
136 | // Icon not found, check for the admin-specified fallback |
137 | } elseif (!is_null($fallback_icon_theme_path) && is_file($fallback_icon_theme_path . $icon_name)) { |
138 | return $fallback_icon_theme_path . $icon_name; |
62f9cbcc |
139 | |
7c8f16f3 |
140 | // Icon not found, return the SQM default icon |
141 | } elseif (is_file(SM_PATH . 'images/themes/default/'.$icon_name)) { |
142 | return SM_PATH . 'images/themes/default/'.$icon_name; |
62f9cbcc |
143 | } |
144 | |
7c8f16f3 |
145 | return NULL; |
146 | } |
f6dccc95 |
147 | |
62f9cbcc |
148 | |
f6dccc95 |
149 | /** |
150 | * Display error messages for use in footer.tpl |
62f9cbcc |
151 | * |
f6dccc95 |
152 | * @author Steve Brown |
153 | * @since 1.5.2 |
154 | **/ |
155 | function displayErrors () { |
156 | global $oErrorHandler; |
62f9cbcc |
157 | |
e1603e71 |
158 | if ($oErrorHandler) { |
159 | $oErrorHandler->displayErrors(); |
160 | } |
161 | } |
162 | |
62f9cbcc |
163 | |
e1603e71 |
164 | /** |
165 | * Make the internal show_readable_size() function available to templates. |
62f9cbcc |
166 | //FIXME: I think this is needless since there is no reason templates cannot just call directly to show_readable_size |
167 | * |
e1603e71 |
168 | * @param int size to be converted to human-readable |
169 | * @return string human-readable form |
170 | * @since 1.5.2 |
171 | **/ |
172 | function humanReadableSize ($size) { |
173 | return show_readable_size($size); |
f6dccc95 |
174 | } |