- Fix disabling password encryption in mail_fetch (#1738001).
[squirrelmail.git] / plugins / mail_fetch / options.php
1 <?php
2
3 /**
4 * mail_fetch/options.php
5 *
6 * Setup of the mailfetch plugin.
7 *
8 * @copyright &copy; 1999-2007 The SquirrelMail Project Team
9 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
10 * @version $Id$
11 * @package plugins
12 * @subpackage mail_fetch
13 */
14
15 /**
16 * Include the SquirrelMail initialization file.
17 */
18 require('../../include/init.php');
19 include_once(SM_PATH . 'plugins/mail_fetch/functions.php' );
20 include_once(SM_PATH . 'functions/imap_general.php');
21 include_once(SM_PATH . 'functions/forms.php');
22
23 /* globals */
24 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
25
26 if(!sqgetGlobalVar('mf_cypher', $mf_cypher, SQ_POST)) {
27 $mf_cypher = '';
28 }
29 if(! sqgetGlobalVar('mf_action', $mf_action, SQ_POST) ) {
30 if (sqgetGlobalVar('mf_action_mod', $mf_action_mod, SQ_POST)) {
31 $mf_action = 'Modify';
32 }
33 elseif (sqgetGlobalVar('mf_action_del', $mf_action_del, SQ_POST)) {
34 $mf_action = 'Delete';
35 }
36 else {
37 $mf_action = 'config';
38 }
39 }
40
41 sqgetGlobalVar('mf_sn', $mf_sn, SQ_POST);
42 sqgetGlobalVar('mf_server', $mf_server, SQ_POST);
43 sqgetGlobalVar('mf_port', $mf_port, SQ_POST);
44 sqgetGlobalVar('mf_alias', $mf_alias, SQ_POST);
45 sqgetGlobalVar('mf_user', $mf_user, SQ_POST);
46 sqgetGlobalVar('mf_pass', $mf_pass, SQ_POST);
47 sqgetGlobalVar('mf_subfolder', $mf_subfolder, SQ_POST);
48 sqgetGlobalVar('mf_login', $mf_login, SQ_POST);
49 sqgetGlobalVar('mf_fref', $mf_fref, SQ_POST);
50 sqgetGlobalVar('mf_lmos', $mf_lmos, SQ_POST);
51 sqgetGlobalVar('mf_auth', $mf_auth, SQ_POST);
52 sqgetGlobalVar('mf_type', $mf_type, SQ_POST);
53 sqgetGlobalVar('submit_mailfetch', $submit_mailfetch, SQ_POST);
54
55
56 /* end globals */
57
58 displayPageHeader( $color );
59
60 switch( $mf_action ) {
61 case 'add':
62 if ($mf_sn<1) $mf_sn=0;
63 if (!isset($mf_server)) return;
64 setPref($data_dir,$username,"mailfetch_server_$mf_sn", (isset($mf_server)?$mf_server:""));
65 setPref($data_dir,$username,"mailfetch_port_$mf_sn", (isset($mf_port)?$mf_port:110));
66 setPref($data_dir,$username,"mailfetch_alias_$mf_sn", (isset($mf_alias)?$mf_alias:""));
67 setPref($data_dir,$username,"mailfetch_user_$mf_sn",(isset($mf_user)?$mf_user:""));
68 $pass = "";
69 if ( isset($mf_pass) ) {
70 if ( isset($mf_cypher) && $mf_cypher == 'on' ) {
71 setPref($data_dir,$username,"mailfetch_cypher", ($mf_cypher == 'on' ? 'on' : ''));
72 $pass = encrypt($mf_pass);
73 } else {
74 $pass = $mf_pass;
75 }
76 }
77 setPref($data_dir,$username,"mailfetch_pass_$mf_sn",$pass);
78 setPref($data_dir,$username,"mailfetch_lmos_$mf_sn",(isset($mf_lmos)?$mf_lmos:""));
79 setPref($data_dir,$username,"mailfetch_login_$mf_sn",(isset($mf_login)?$mf_login:""));
80 setPref($data_dir,$username,"mailfetch_fref_$mf_sn",(isset($mf_fref)?$mf_fref:""));
81 setPref($data_dir,$username,"mailfetch_subfolder_$mf_sn",(isset($mf_subfolder)?$mf_subfolder:""));
82 setPref($data_dir,$username,"mailfetch_auth_$mf_sn",(isset($mf_auth)?$mf_auth:MAIL_FETCH_AUTH_USER));
83 setPref($data_dir,$username,"mailfetch_type_$mf_sn",(isset($mf_type)?$mf_type:MAIL_FETCH_USE_PLAIN));
84 $mf_sn++;
85 setPref($data_dir,$username,'mailfetch_server_number', $mf_sn);
86 $mf_action = 'config';
87 break;
88 case 'confirm_modify':
89 //modify a server
90 if (!isset($mf_server)) return;
91 setPref($data_dir,$username,"mailfetch_server_$mf_sn", (isset($mf_server)?$mf_server:""));
92 setPref($data_dir,$username,"mailfetch_port_$mf_sn", (isset($mf_port)?$mf_port:110));
93 setPref($data_dir,$username,"mailfetch_alias_$mf_sn", (isset($mf_alias)?$mf_alias:""));
94 setPref($data_dir,$username,"mailfetch_user_$mf_sn",(isset($mf_user)?$mf_user:""));
95 $pass = "";
96 if ( isset($mf_pass) ) {
97 if ( isset($mf_cypher) && $mf_cypher == 'on' ) {
98 setPref($data_dir,$username,"mailfetch_cypher", 'on');
99 $pass = encrypt($mf_pass);
100 } else {
101 setPref($data_dir,$username,"mailfetch_cypher", '');
102 $pass = $mf_pass;
103 }
104 }
105 setPref($data_dir,$username,"mailfetch_pass_$mf_sn",$pass);
106 setPref($data_dir,$username,"mailfetch_lmos_$mf_sn",(isset($mf_lmos)?$mf_lmos:""));
107 setPref($data_dir,$username,"mailfetch_login_$mf_sn",(isset($mf_login)?$mf_login:""));
108 setPref($data_dir,$username,"mailfetch_fref_$mf_sn",(isset($mf_fref)?$mf_fref:""));
109 setPref($data_dir,$username,"mailfetch_subfolder_$mf_sn",(isset($mf_subfolder)?$mf_subfolder:""));
110 setPref($data_dir,$username,"mailfetch_auth_$mf_sn",(isset($mf_auth)?$mf_auth:MAIL_FETCH_AUTH_USER));
111 setPref($data_dir,$username,"mailfetch_type_$mf_sn",(isset($mf_type)?$mf_type:MAIL_FETCH_USE_PLAIN));
112 $mf_action = 'config';
113 break;
114 case 'confirm_delete':
115 //delete a server
116 $mailfetch_server_number = getPref($data_dir, $username, "mailfetch_server_number");
117 if ($mf_sn+1==$mailfetch_server_number) {
118 //is the last server, whe can only decrase $mailfetch_server_number
119 $mailfetch_server_number--;
120 setPref($data_dir,$username,"mailfetch_server_number", $mailfetch_server_number);
121 } else {
122 //if not the last, all the sequel server come up one step
123 //then whe decrase $mailfetch_server_number
124 $mailfetch_server_number--;
125 for ($i=$mf_sn;$i<$mailfetch_server_number;$i++) {
126 $tmp=$i+1;
127 setPref($data_dir,$username,'mailfetch_server_'.$i,
128 getPref($data_dir,$username, 'mailfetch_server_'.$tmp));
129 setPref($data_dir,$username,'mailfetch_port_'.$i,
130 getPref($data_dir,$username, 'mailfetch_port_'.$tmp));
131 setPref($data_dir,$username,'mailfetch_alias_'.$i,
132 getPref($data_dir,$username, 'mailfetch_alias_'.$tmp));
133 setPref($data_dir,$username,'mailfetch_user_'.$i,
134 getPref($data_dir,$username, 'mailfetch_user_'.$tmp));
135 setPref($data_dir,$username,'mailfetch_pass_'.$i,
136 getPref($data_dir,$username, 'mailfetch_pass_'.$tmp));
137 setPref($data_dir,$username,'mailfetch_lmos_'.$i,
138 getPref($data_dir,$username, 'mailfetch_lmos_'.$tmp));
139 setPref($data_dir,$username,'mailfetch_login_'.$i,
140 getPref($data_dir,$username, 'mailfetch_login_'.$tmp));
141 setPref($data_dir,$username,'mailfetch_fref_'.$i,
142 getPref($data_dir,$username, 'mailfetch_fref_'.$tmp));
143 setPref($data_dir,$username,'mailfetch_subfolder_'.$i,
144 getPref($data_dir,$username, 'mailfetch_subfolder_'.$tmp));
145 setPref($data_dir,$username,'mailfetch_auth_'.$i,
146 getPref($data_dir,$username, 'mailfetch_auth_'.$tmp,MAIL_FETCH_AUTH_USER));
147 setPref($data_dir,$username,'mailfetch_type_'.$i,
148 getPref($data_dir,$username, 'mailfetch_type_'.$tmp,MAIL_FETCH_USE_PLAIN));
149 setPref($data_dir,$username,'mailfetch_uidl_'.$i,
150 getPref($data_dir,$username, 'mailfetch_uidl_'.$tmp));
151 }
152 setPref($data_dir,$username,"mailfetch_server_number", $mailfetch_server_number);
153 }
154 $mf_action = 'config';
155 break;
156 }
157
158 $mailfetch_server_number = getPref($data_dir, $username, 'mailfetch_server_number', 0);
159 $mailfetch_cypher = getPref( $data_dir, $username, 'mailfetch_cypher' );
160 if ($mailfetch_server_number<1) {
161 $mailfetch_server_number=0;
162 }
163 for ($i=0;$i<$mailfetch_server_number;$i++) {
164 $mailfetch_server_[$i] = getPref($data_dir, $username, "mailfetch_server_$i");
165 $mailfetch_port_[$i] = getPref($data_dir, $username, "mailfetch_port_$i");
166 $mailfetch_alias_[$i] = getPref($data_dir, $username, "mailfetch_alias_$i");
167 $mailfetch_user_[$i] = getPref($data_dir, $username, "mailfetch_user_$i");
168 $mailfetch_pass_[$i] = getPref($data_dir, $username, "mailfetch_pass_$i");
169 $mailfetch_lmos_[$i] = getPref($data_dir, $username, "mailfetch_lmos_$i");
170 $mailfetch_login_[$i] = getPref($data_dir, $username, "mailfetch_login_$i");
171 $mailfetch_fref_[$i] = getPref($data_dir, $username, "mailfetch_fref_$i");
172 $mailfetch_uidl_[$i] = getPref($data_dir, $username, "mailfetch_uidl_$i");
173 $mailfetch_subfolder_[$i] = getPref($data_dir, $username, "mailfetch_subfolder_$i");
174 $mailfetch_auth_[$i] = getPref($data_dir, $username, "mailfetch_auth_$i",MAIL_FETCH_AUTH_USER);
175 $mailfetch_type_[$i] = getPref($data_dir, $username, "mailfetch_type_$i",MAIL_FETCH_USE_PLAIN);
176 if( $mailfetch_cypher == 'on' ) $mailfetch_pass_[$i] = decrypt( $mailfetch_pass_[$i] );
177 }
178
179 echo '<br /><form method="post" action="'.$PHP_SELF.'">' .
180 html_tag( 'table',
181 html_tag( 'tr',
182 html_tag('td',
183 '<b>' . _("Remote POP server settings") . '</b>',
184 'center', $color[0] )
185 ),
186 'center', '', 'width="95%"' ) .
187 html_tag( 'table',
188 html_tag( 'tr',
189 html_tag( 'td',
190 _("You should be aware that the encryption used to store your password is not perfectly secure. However, if you are using pop, there is inherently no encryption anyway. Additionally, the encryption that we do to save it on the server can be undone by a hacker reading the source to this file.") ,
191 'left' )
192 ) .
193 html_tag( 'tr',
194 html_tag( 'td',
195 _("If you leave password empty, it will be asked when you fetch mail.") ,
196 'left' )
197 ) .
198 html_tag( 'tr',
199 html_tag( 'td',
200 '<input type="checkbox" name="mf_cypher" ' .
201 (($mailfetch_cypher=='on')?'checked="checked" />':' />') .
202 _("Encrypt passwords (informative only)") ,
203 'right' )
204 ) ,
205 'center', '', 'width="95%"' );
206
207 switch( $mf_action ) {
208 case 'config':
209 echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ) .
210 html_tag( 'tr',
211 html_tag( 'td', '<b>' . _("Add Server") . '</b>', 'center', $color[9] )
212 ) .
213 html_tag( 'tr' ) .
214 html_tag( 'td', '', 'center', $color[0] ) .
215
216 "<input type=\"hidden\" name=\"mf_sn\" value=\"$mailfetch_server_number\" />" .
217 '<input type="hidden" name="mf_action" value="add" />' .
218 html_tag( 'table' ) .
219 html_tag( 'tr',
220 html_tag( 'th', _("Server:"), 'right' ) .
221 html_tag( 'td', '<input type="text" name="mf_server" value="" size="40" />', 'left' )
222 ) .
223 html_tag( 'tr',
224 html_tag( 'th', _("Port:"), 'right') .
225 html_tag( 'td', '<input type="text" name="mf_port" value="110" size="20" />', 'left')
226 ) .
227 html_tag( 'tr',
228 html_tag( 'th', _("Alias:"), 'right' ) .
229 html_tag( 'td', '<input type="text" name="mf_alias" value="" size="20" />', 'left' )
230 ) .
231 html_tag( 'tr',
232 html_tag( 'th', _("Username:"), 'right' ) .
233 html_tag( 'td', '<input type="text" name="mf_user" value="" size="20" />', 'left' )
234 ) .
235 html_tag( 'tr',
236 html_tag( 'th', _("Password:"), 'right' ) .
237 html_tag( 'td', '<input type="password" name="mf_pass" value="" size="20" />', 'left' )
238 ) .
239 html_tag( 'tr',
240 html_tag( 'th', _("Authentication type:"), 'right' ) .
241 html_tag( 'td', addSelect('mf_auth',
242 array(MAIL_FETCH_AUTH_USER => _("USER"),
243 MAIL_FETCH_AUTH_APOP => _("APOP"),
244 MAIL_FETCH_AUTH_RFC1939 => _("APOP or USER")),
245 MAIL_FETCH_AUTH_USER,true), 'left' )
246 ) .
247 html_tag( 'tr',
248 html_tag( 'th', _("Connection type:"), 'right' ) .
249 html_tag( 'td', addSelect('mf_type',
250 array(MAIL_FETCH_USE_PLAIN => _("Plain text"),
251 MAIL_FETCH_USE_TLS => _("Use TLS"),
252 MAIL_FETCH_USE_STLS => _("Use StartTLS")),
253 MAIL_FETCH_USE_PLAIN,true), 'left' )
254 ) .
255 html_tag( 'tr' ) .
256 html_tag( 'th', _("Store in Folder:"), 'right' ) .
257 html_tag( 'td', '', 'left' );
258 $imapConnection = sqimap_login ($username, false, $imapServerAddress, $imapPort, 0);
259 $boxes = sqimap_mailbox_list($imapConnection);
260 echo '<select name="mf_subfolder">';
261
262 $selected = 0;
263 if ( isset($mf_subfolder) )
264 $selected = array(strtolower($mf_subfolder));
265 echo sqimap_mailbox_option_list($imapConnection, $selected);
266 echo '</select></td></tr>' .
267 html_tag( 'tr',
268 html_tag( 'th', '&nbsp;', 'right' ) .
269 html_tag( 'td', '<input type="checkbox" name="mf_lmos" checked="checked" />' . _("Leave Mail on Server"), 'left' )
270 ) .
271 html_tag( 'tr',
272 html_tag( 'th', '&nbsp;', 'right' ) .
273 html_tag( 'td', '<input type="checkbox" name="mf_login" />' . _("Check mail at login"), 'left' )
274 ) .
275 html_tag( 'tr',
276 html_tag( 'th', '&nbsp;', 'right' ) .
277 html_tag( 'td', '<input type="checkbox" name="mf_fref" />' . _("Check mail at folder refresh"), 'left' )
278 ) .
279 html_tag( 'tr',
280 html_tag( 'td',
281 '<input type="submit" name="submit_mailfetch" value="' . _("Add Server") . '" />',
282 'center', '', 'colspan="2"' )
283 ) .
284 '</table></td></tr></table></form>';
285
286 // Modify Server
287 echo '<font size="-5"><br /></font>' .
288 html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ) .
289 html_tag( 'tr',
290 html_tag( 'td', '<b>' . _("Modify Server") . '</b>', 'center', $color[9] )
291 ) .
292 html_tag( 'tr' ) .
293 html_tag( 'td', '', 'center', $color[0] );
294 if ($mailfetch_server_number>0) {
295 echo "<form action=\"$PHP_SELF\" method=\"post\" target=\"_self\">";
296 echo '<b>' . _("Server Name:") . '</b> <select name="mf_sn">';
297 for ($i=0;$i<$mailfetch_server_number;$i++) {
298 echo "<option value=\"$i\">" .
299 htmlspecialchars( (($mailfetch_alias_[$i]=='')?$mailfetch_server_[$i]:$mailfetch_alias_[$i])) . "</option>";
300 }
301 echo '</select>'.
302 '&nbsp;&nbsp;<input type="submit" name="mf_action_mod" value="' . _("Modify") . '" />'.
303 '&nbsp;&nbsp;<input type="submit" name="mf_action_del" value="' . _("Delete") . '" />'.
304 '</form>';
305 } else {
306 echo _("No servers known.");
307 }
308 echo '</td></tr></table>';
309 break;
310 case 'Delete': //erase confirmation about a server
311 echo html_tag( 'table',
312 html_tag( 'tr',
313 html_tag( 'td', '<b>' . _("Fetching Servers") . '</b>', 'center', $color[0] )
314 ) ,
315 'center', '', 'width="95%" cellpadding="5" cellspacing="1"' ) .
316 '<br />' .
317 html_tag( 'table',
318 html_tag( 'tr',
319 html_tag( 'td', '<b>' . _("Confirm Deletion of a Server") . '</b>', 'center', $color[9] )
320 ) .
321 html_tag( 'tr',
322 html_tag( 'td',
323 "<input type=\"hidden\" name=\"mf_sn\" value=\"$mf_sn\" />" .
324 '<input type="hidden" name="mf_action" value="confirm_delete" />' .
325 '<br />' . _("Selected Server:") . " <b>" . htmlspecialchars($mailfetch_server_[$mf_sn]) . "</b><br />" .
326 _("Confirm delete of selected server?") . '<br /><br />' .
327 '<input type="submit" name="submit_mailfetch" value="' . _("Confirm Delete") . '" />' .
328 '<br /></form>' ,
329 'center', $color[9] )
330 ) ,
331 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' );
332 break; //modify a server
333 case 'Modify':
334 echo html_tag( 'table',
335 html_tag( 'tr',
336 html_tag( 'td', '<b>' . _("Fetching Servers") . '</b>', 'center', $color[0] )
337 ) ,
338 'center', '', 'width="95%" cellpadding="5" cellspacing="1"' ) .
339 '<br />' .
340 html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="5" cellspacing="1"' ) .
341 html_tag( 'tr',
342 html_tag( 'td', '<b>' . _("Modify Server") . '</b>', 'center', $color[9] )
343 ) .
344 html_tag( 'tr' ) .
345 html_tag( 'td', '', 'center', $color[0] ) .
346
347 "<input type=\"hidden\" name=\"mf_sn\" value=\"$mf_sn\" />" .
348 '<input type="hidden" name="mf_action" value="confirm_modify" />' .
349 html_tag( 'table' ) .
350 html_tag( 'tr',
351 html_tag( 'th', _("Server:"), 'right' ) .
352 html_tag( 'td', '<input type="text" name="mf_server" value="' .
353 htmlspecialchars($mailfetch_server_[$mf_sn]) . '" size="40" />', 'left' )
354 ) .
355 html_tag( 'tr',
356 html_tag( 'th', _("Port:"), 'right' ) .
357 html_tag( 'td', '<input type="text" name="mf_port" value="' .
358 htmlspecialchars($mailfetch_port_[$mf_sn]) . '" size="40" />', 'left' )
359 ) .
360 html_tag( 'tr',
361 html_tag( 'th', _("Alias:"), 'right' ) .
362 html_tag( 'td', '<input type="text" name="mf_alias" value="' .
363 htmlspecialchars($mailfetch_alias_[$mf_sn]) . '" size="40" />', 'left' )
364 ) .
365 html_tag( 'tr',
366 html_tag( 'th', _("Username:"), 'right' ) .
367 html_tag( 'td', '<input type="text" name="mf_user" value="' .
368 htmlspecialchars($mailfetch_user_[$mf_sn]) . '" size="20" />', 'left' )
369 ) .
370 html_tag( 'tr',
371 html_tag( 'th', _("Password:"), 'right' ) .
372 html_tag( 'td', '<input type="password" name="mf_pass" value="' .
373 htmlspecialchars($mailfetch_pass_[$mf_sn]) . '" size="20" />', 'left' )
374 ) .
375 html_tag( 'tr',
376 html_tag( 'th', _("Authentication type:"), 'right' ) .
377 html_tag( 'td', addSelect('mf_auth',array(MAIL_FETCH_AUTH_USER => _("USER"),
378 MAIL_FETCH_AUTH_APOP => _("APOP"),
379 MAIL_FETCH_AUTH_RFC1939 => _("APOP or USER")),
380 $mailfetch_auth_[$mf_sn],true), 'left' )
381 ) .
382 html_tag( 'tr',
383 html_tag( 'th', _("Connection type:"), 'right' ) .
384 html_tag( 'td', addSelect('mf_type',array(MAIL_FETCH_USE_PLAIN => _("Plain text"),
385 MAIL_FETCH_USE_TLS => _("Use TLS"),
386 MAIL_FETCH_USE_STLS => _("Use StartTLS")),
387 $mailfetch_type_[$mf_sn],true), 'left' )
388 ) .
389 html_tag( 'tr' ) .
390 html_tag( 'th', _("Store in Folder:"), 'right' ) .
391 html_tag( 'td', '', 'left' );
392
393 $imapConnection = sqimap_login ($username, false, $imapServerAddress, $imapPort, 0);
394 $boxes = sqimap_mailbox_list($imapConnection);
395 echo '<select name="mf_subfolder">';
396 $selected = 0;
397 if ( isset($mailfetch_subfolder_[$mf_sn]) ) {
398 $selected = array(strtolower($mailfetch_subfolder_[$mf_sn]));
399 }
400 echo sqimap_mailbox_option_list($imapConnection, $selected) .
401 '</select></td></tr>' .
402 html_tag( 'tr',
403 html_tag( 'th', '&nbsp;', 'right' ) .
404 html_tag( 'td',
405 '<input type="checkbox" name="mf_lmos" ' . (($mailfetch_lmos_[$mf_sn] == 'on')?'checked="checked"':'') .
406 ' />' . _("Leave Mail on Server") ,
407 'left' )
408 ) .
409 html_tag( 'tr',
410 html_tag( 'th', '&nbsp;', 'right' ) .
411 html_tag( 'td',
412 '<input type="checkbox" name="mf_login" ' . ( ($mailfetch_login_[$mf_sn] == 'on')?'checked="checked"':'') .
413 ' />' . _("Check mail at login"),
414 'left' )
415 ) .
416 html_tag( 'tr',
417 html_tag( 'th', '&nbsp;', 'right' ) .
418 html_tag( 'td',
419 '<input type="checkbox" name="mf_fref" ' . ( ($mailfetch_fref_[$mf_sn] == 'on')?'checked="checked"':'') .
420 ' />' . _("Check mail at folder refresh") ,
421 'left' )
422 ) .
423 html_tag( 'tr',
424 html_tag( 'td',
425 '<input type="submit" name="submit_mailfetch" value="' . _("Modify Server") . '" />',
426 'center', '', 'colspan="2"' )
427 ) .
428 '</table></form></td></tr></table>';
429 break;
430 default: //unsupported action
431 echo '</form>' .
432 html_tag( 'table',
433 html_tag( 'tr',
434 html_tag( 'td', '<b>' . _("Fetching Servers") . '</b>', 'center', $color[0] )
435 ) ,
436 'center', '', 'width="95%"' ) .
437 '<br />' .
438 html_tag( 'table',
439 html_tag( 'tr',
440 html_tag( 'td', '<b>' . _("Undefined Function") . '</b>', 'center', $color[9] ) .
441 html_tag( 'td', '<b>' . _("The function you requested is unknown.") . '</b>', 'center', $color[0] )
442 ) ,
443 'center', '', 'width="70%"' );
444 }
445
446 $oTemplate->display('footer.tpl');