fsf changes, meant to be rebased on upstream
[squirrelmail.git] / functions / template / general_util.php
1 <?php
2
3 /**
4 * general_util.php
5 *
6 * This file is intended to contain helper functions for template sets
7 * that would like to use them.
8 *
9 * @copyright 1999-2021 The SquirrelMail Project Team
10 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
11 * @version $Id$
12 * @package squirrelmail
13 */
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").
24 *
25 * @return string The full text of the stylesheet link.
26 *
27 */
28 function create_css_link($uri, $name='', $alt=TRUE, $mtype='screen') {
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
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
71 return '<link '.$media.$title.$rel.'type="text/css" '.$href." />\n";
72 }
73
74
75 /**
76 * Checks for an image icon and returns a complete image tag or a text
77 * string with the text icon based on what is found and user prefs.
78 *
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
82 * @param string $alt_text Text for alt/title attribute of image
83 * @param integer $w Optional. Width of requested image.
84 * @param integer $h Optional. Height of requested image.
85 *
86 * @return string $icon String containing icon that can be echo'ed
87 *
88 * @author Steve Brown
89 * @since 1.5.2
90 */
91 function getIcon($icon_theme_path, $icon_name, $text_icon, $alt_text, $w=NULL, $h=NULL) {
92 $icon = '';
93 if (is_null($icon_theme_path)) {
94 $icon = $text_icon;
95 } else {
96 $icon_path = getIconPath($icon_theme_path, $icon_name);
97
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.
100 if (!is_null($icon_path)) {
101 $icon = create_image($icon_path, $alt_text, $w, $h, '', '', '',
102 '', $alt_text, '', '', '', $text_icon);
103 } else {
104 $icon = $text_icon;
105 }
106 }
107 return $icon;
108 }
109
110
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.
115 *
116 * @param string $icon_theme_path User's chosen icon set
117 * @param string $icon_name File name of the desired icon
118 *
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.
121 *
122 * @author Steve Brown
123 * @since 1.5.2
124 *
125 */
126 function getIconPath ($icon_theme_path, $icon_name) {
127 global $fallback_icon_theme_path;
128
129 if (is_null($icon_theme_path))
130 return NULL;
131
132 // Desired icon exists in the current theme?
133 //FIXME: this assumes a URI path will be valid when used as a filesystem path - this will fail for some systems -- OTOH, if $icon_theme_path is meant as an internal filesystem path to the user's chosen theme directory, then the assumption that is wrong here is that this internal filesystem path is always correct for use as part of a URI. This really should be mapped to/from an internal path to a URI path -- or can we guarantee that the two are always the same?
134 if (is_file($icon_theme_path . $icon_name)) {
135 return $icon_theme_path . $icon_name;
136
137 // Icon not found, check for the admin-specified fallback
138 //FIXME: same problem here as above
139 } elseif (!is_null($fallback_icon_theme_path) && is_file($fallback_icon_theme_path . $icon_name)) {
140 return $fallback_icon_theme_path . $icon_name;
141
142 // Icon not found, return the SQM default icon
143 //FIXME: same problem here -- SM_PATH is *NOT* intended for use in URIs
144 } elseif (is_file(SM_PATH . 'images/themes/default/'.$icon_name)) {
145 return SM_PATH . 'images/themes/default/'.$icon_name;
146 }
147
148 return NULL;
149 }
150
151
152 /**
153 * Display error messages for use in footer.tpl
154 *
155 * @author Steve Brown
156 * @since 1.5.2
157 **/
158 function displayErrors () {
159 global $oErrorHandler;
160
161 if ($oErrorHandler) {
162 $oErrorHandler->displayErrors();
163 }
164 }
165
166
167 /**
168 * Make the internal show_readable_size() function available to templates.
169 //FIXME: I think this is needless since there is no reason templates cannot just call directly to show_readable_size
170 *
171 * @param int size to be converted to human-readable
172 * @param int filesize_divisor the divisor we'll use (OPTIONAL; default 1024)
173 * @return string human-readable form
174 * @since 1.5.2
175 **/
176 function humanReadableSize ($size, $filesize_divisor=1024) {
177 return show_readable_size($size, $filesize_divisor);
178 }