Renaming "config_sample.php" to "config_default.php".
[squirrelmail.git] / plugins / administrator / options.php
CommitLineData
abd7a3f8 1<?php
2
3/**
fd521778 4 * Administrator Plugin - Options Page
abd7a3f8 5 *
fd521778 6 * This script creates separate page, that allows to review and modify
7 * SquirrelMail configuration file.
abd7a3f8 8 *
fd521778 9 * @author Philippe Mingo
47ccfad4 10 * @copyright &copy; 1999-2006 The SquirrelMail Project Team
fd521778 11 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
4b4abf93 12 * @version $Id$
ea5f4b8e 13 * @package plugins
14 * @subpackage administrator
abd7a3f8 15 */
16
ea5f4b8e 17/**
18 * parse the config file
0df03ce7 19 *
20 * @param string $cfg_file
21 * @access private
ea5f4b8e 22 */
37d90494 23function parseConfig( $cfg_file ) {
24
25 global $newcfg;
26
27 $cfg = file( $cfg_file );
71e5c245 28 $mode = '';
29 $l = count( $cfg );
30 $modifier = FALSE;
0b5eb034 31 $arraykey = 0;
37d90494 32
71e5c245 33 for ($i=0;$i<$l;$i++) {
34 $line = trim( $cfg[$i] );
35 $s = strlen( $line );
36 for ($j=0;$j<$s;$j++) {
37 switch ( $mode ) {
38 case '=':
39 if ( $line{$j} == '=' ) {
40 // Ok, we've got a right value, lets detect what type
41 $mode = 'D';
42 } else if ( $line{$j} == ';' ) {
43 // hu! end of command
44 $key = $mode = '';
45 }
46 break;
47 case 'K':
48 // Key detect
ab3fe577 49 if ( $line{$j} == ' ' ) {
71e5c245 50 $mode = '=';
37d90494 51 } else {
71e5c245 52 $key .= $line{$j};
0b5eb034 53 // FIXME: this is only pour workaround for plugins[] array.
54 if ($line{$j}=='[' && $line{($j+1)}==']') {
55 $key .= $arraykey;
56 $arraykey++;
57 }
37d90494 58 }
71e5c245 59 break;
60 case ';':
61 // Skip until next ;
62 if ( $line{$j} == ';' ) {
63 $mode = '';
64 }
65 break;
66 case 'S':
67 if ( $line{$j} == '\\' ) {
68 $value .= $line{$j};
69 $modifier = TRUE;
70 } else if ( $line{$j} == $delimiter && $modifier === FALSE ) {
71 // End of string;
72 $newcfg[$key] = $value . $delimiter;
73 $key = $value = '';
74 $mode = ';';
75 } else {
76 $value .= $line{$j};
77 $modifier = FALSE;
78 }
79 break;
80 case 'N':
81 if ( $line{$j} == ';' ) {
82 $newcfg{$key} = $value;
83 $key = $mode = '';
84 } else {
85 $value .= $line{$j};
86 }
87 break;
88 case 'C':
89 // Comments
88cb1b4d 90 if ( $s > $j + 1 &&
91 $line{$j}.$line{$j+1} == '*/' ) {
71e5c245 92 $mode = '';
93 $j++;
94 }
95 break;
96 case 'D':
97 // Delimiter detect
98 switch ( $line{$j} ) {
99 case '"':
100 case "'":
101 // Double quote string
102 $delimiter = $value = $line{$j};
103 $mode = 'S';
104 break;
105 case ' ':
106 // Nothing yet
107 break;
108 default:
109 if ( strtoupper( substr( $line, $j, 4 ) ) == 'TRUE' ) {
110 // Boolean TRUE
111 $newcfg{$key} = 'TRUE';
112 $key = '';
113 $mode = ';';
114 } else if ( strtoupper( substr( $line, $j, 5 ) ) == 'FALSE' ) {
115 $newcfg{$key} = 'FALSE';
116 $key = '';
117 $mode = ';';
118 } else {
119 // Number or function call
120 $mode = 'N';
121 $value = $line{$j};
122 }
123 }
124 break;
125 default:
88cb1b4d 126 if ( $line{$j} == '$' ) {
127 // We must detect $key name
128 $mode = 'K';
129 $key = '$';
130 } else if ( $s < $j + 2 ) {
131 } else if ( strtoupper( substr( $line, $j, 7 ) ) == 'GLOBAL ' ) {
71e5c245 132 // Skip untill next ;
133 $mode = ';';
134 $j += 6;
135 } else if ( $line{$j}.$line{$j+1} == '/*' ) {
136 $mode = 'C';
137 $j++;
138 } else if ( $line{$j} == '#' || $line{$j}.$line{$j+1} == '//' ) {
139 // Delete till the end of the line
140 $j = $s;
37d90494 141 }
37d90494 142 }
143 }
37d90494 144 }
a28a56da 145}
146
0df03ce7 147/**
148 * Change paths containing SM_PATH to admin-friendly paths
149 * relative to the config dir, i.e.:
150 * '' --> <empty string>
151 * SM_PATH . 'images/logo.gif' --> ../images/logo.gif
152 * '/absolute/path/logo.gif' --> /absolute/path/logo.gif
153 * 'http://whatever/' --> http://whatever
154 * Note removal of quotes in returned value
91e0dccc 155 *
0df03ce7 156 * @param string $old_path path that has to be converted
157 * @return string new path
158 * @access private
159 */
a28a56da 160function change_to_rel_path($old_path) {
91e0dccc 161 $new_path = str_replace("SM_PATH . '", "../", $old_path);
a28a56da 162 $new_path = str_replace("../config/","", $new_path);
163 $new_path = str_replace("'","", $new_path);
164 return $new_path;
165}
37d90494 166
0df03ce7 167/**
91e0dccc 168 * Change relative path (relative to config dir) to
0df03ce7 169 * internal SM_PATH, i.e.:
170 * empty_string --> ''
171 * ../images/logo.gif --> SM_PATH . 'images/logo.gif'
172 * images/logo.gif --> SM_PATH . 'config/images/logo.gif'
173 * /absolute/path/logo.gif --> '/absolute/path/logo.gif'
174 * http://whatever/ --> 'http://whatever'
91e0dccc 175 *
0df03ce7 176 * @param string $old_path path that has to be converted
177 * @return string new path
178 * @access private
91e0dccc 179*/
a28a56da 180function change_to_sm_path($old_path) {
ab3fe577 181 if ( $old_path === '' || $old_path == "''" ) {
182 return "''";
183 } elseif ( preg_match("/^(\/|http)/", $old_path) ) {
184 return "'" . $old_path . "'";
185 } elseif ( preg_match("/^(\$|SM_PATH)/", $old_path) ) {
186 return $old_path;
187 }
91e0dccc 188
ab3fe577 189 $new_path = '';
190 $rel_path = explode("../", $old_path);
191 if ( count($rel_path) > 2 ) {
91e0dccc 192 // Since we're relative to the config dir,
ab3fe577 193 // more than 1 ../ puts us OUTSIDE the SM tree.
194 // get full path to config.php, then pop the filename
195 $abs_path = explode('/', realpath (SM_PATH . 'config/config.php'));
91e0dccc 196 array_pop ($abs_path);
ab3fe577 197 foreach ( $rel_path as $subdir ) {
198 if ( $subdir === '' ) {
199 array_pop ($abs_path);
200 } else {
201 array_push($abs_path, $subdir);
202 }
203 }
204 foreach ($abs_path as $subdir) {
205 $new_path .= $subdir . '/';
206 }
207 $new_path = "'$new_path'";
208 } elseif ( count($rel_path) > 1 ) {
209 // we're within the SM tree, prepend SM_PATH
210 $new_path = str_replace('../',"SM_PATH . '", $old_path . "'");
211 } else {
91e0dccc 212 // Last, if it's a relative path without a .. prefix,
ab3fe577 213 // we're somewhere within the config dir, so prepend
91e0dccc 214 // SM_PATH . 'config/
ab3fe577 215 $new_path = "SM_PATH . 'config/" . $old_path . "'";
216 }
217 return $new_path;
37d90494 218}
71e5c245 219
a28a56da 220
37d90494 221/* ---------------------- main -------------------------- */
71e5c245 222
ea5f4b8e 223/** @ignore */
8d6a115b 224define('SM_PATH','../../');
cf1efdce 225
226/* SquirrelMail required files. */
227require_once(SM_PATH . 'include/validate.php');
cf1efdce 228require_once(SM_PATH . 'functions/imap.php');
cf1efdce 229require_once(SM_PATH . 'plugins/administrator/defines.php');
230require_once(SM_PATH . 'plugins/administrator/auth.php');
abd7a3f8 231
fd521778 232global $data_dir, $username;
a3fab7e3 233
7004cc32 234if ( !adm_check_user() ) {
a28a56da 235 header('Location: ' . SM_PATH . 'src/options.php') ;
dcd6f144 236 exit;
237}
238
abd7a3f8 239displayPageHeader($color, 'None');
240
37d90494 241$newcfg = array( );
0e66bc84 242
243foreach ( $defcfg as $key => $def ) {
244 $newcfg[$key] = '';
245}
246
b59d1a7d 247$cfgfile = SM_PATH . 'config/config.php';
248parseConfig( SM_PATH . 'config/config_default.php' );
37d90494 249parseConfig( $cfgfile );
abd7a3f8 250
88cb1b4d 251$colapse = array( 'Titles' => 'off',
252 'Group1' => getPref($data_dir, $username, 'adm_Group1', 'off' ),
253 'Group2' => getPref($data_dir, $username, 'adm_Group2', 'on' ),
254 'Group3' => getPref($data_dir, $username, 'adm_Group3', 'on' ),
255 'Group4' => getPref($data_dir, $username, 'adm_Group4', 'on' ),
256 'Group5' => getPref($data_dir, $username, 'adm_Group5', 'on' ),
257 'Group6' => getPref($data_dir, $username, 'adm_Group6', 'on' ),
258 'Group7' => getPref($data_dir, $username, 'adm_Group7', 'on' ),
39d3ec89 259 'Group8' => getPref($data_dir, $username, 'adm_Group8', 'on' ),
260 'Group9' => getPref($data_dir, $username, 'adm_Group9', 'on' ),
0f610dca 261 'Group10' => getPref($data_dir, $username, 'adm_Group10', 'on' ),
0b5eb034 262 'Group11' => getPref($data_dir, $username, 'adm_Group11', 'on' ) );
a3fab7e3 263
4cd8ae7d 264/* look in $_GET array for 'switch' */
265if ( sqgetGlobalVar('switch', $switch, SQ_GET) ) {
88cb1b4d 266 if ( $colapse[$switch] == 'on' ) {
ab3fe577 267 $colapse[$switch] = 'off';
88cb1b4d 268 } else {
ab3fe577 269 $colapse[$switch] = 'on';
88cb1b4d 270 }
a3fab7e3 271 setPref($data_dir, $username, "adm_$switch", $colapse[$switch] );
272}
273
78154473 274echo '<form action="options.php" method="post" name="options">' .
0d53a854 275 '<table width="95%" align="center" bgcolor="'.$color[5].'"><tr><td>'.
ab3fe577 276 '<table width="100%" cellspacing="0" bgcolor="'.$color[4].'">'.
277 '<tr bgcolor="'.$color[5].'"><th colspan="2">'.
278 _("Configuration Administrator").'</th></tr>'.
279 '<tr bgcolor="'.$color[5].'"><td colspan="2" align="center"><small>'.
280 _("Note: it is recommended that you configure your system using conf.pl, and not this plugin. conf.pl contains additional information regarding the purpose of variables and appropriate values, as well as additional verification steps.").
281 '<br />'.
282 _("Run or consult conf.pl should you run into difficulty with your configuration.").
283 '</small></td></tr>';
39d3ec89 284
a3fab7e3 285
286$act_grp = 'Titles'; /* Active group */
c83b38c1 287
abd7a3f8 288foreach ( $newcfg as $k => $v ) {
289 $l = strtolower( $v );
290 $type = SMOPT_TYPE_UNDEFINED;
291 $n = substr( $k, 1 );
292 $n = str_replace( '[', '_', $n );
293 $n = str_replace( ']', '_', $n );
294 $e = 'adm_' . $n;
295 $name = $k;
296 $size = 50;
0e66bc84 297 if ( isset( $defcfg[$k] ) ) {
298 $name = $defcfg[$k]['name'];
299 $type = $defcfg[$k]['type'];
88cb1b4d 300 if ( isset( $defcfg[$k]['size'] ) ) {
301 $size = $defcfg[$k]['size'];
302 } else {
303 $size = 40;
304 }
abd7a3f8 305 } else if ( $l == 'true' ) {
306 $v = 'TRUE';
307 $type = SMOPT_TYPE_BOOLEAN;
308 } else if ( $l == 'false' ) {
309 $v = 'FALSE';
310 $type = SMOPT_TYPE_BOOLEAN;
311 } else if ( $v{0} == "'" ) {
312 $type = SMOPT_TYPE_STRING;
313 } else if ( $v{0} == '"' ) {
314 $type = SMOPT_TYPE_STRING;
315 }
316
edd4a552 317 if ( substr( $k, 0, 7 ) == '$theme[' ) {
318 $type = SMOPT_TYPE_THEME;
319 } else if ( substr( $k, 0, 9 ) == '$plugins[' ) {
320 $type = SMOPT_TYPE_PLUGINS;
65a5bae6 321 } else if ( substr( $k, 0, 13 ) == '$ldap_server[' ) {
322 $type = SMOPT_TYPE_LDAP;
439538dc 323 } else if ( substr( $k, 0, 9 ) == '$fontsets' ||
324 substr( $k, 0, 13 ) == '$aTemplateSet' ) {
325 $type = SMOPT_TYPE_CUSTOM;
edd4a552 326 }
327
ab3fe577 328 if ( $type == SMOPT_TYPE_TITLE || $colapse[$act_grp] == 'off' ) {
a3fab7e3 329
330 switch ( $type ) {
331 case SMOPT_TYPE_LDAP:
439538dc 332 case SMOPT_TYPE_CUSTOM:
a3fab7e3 333 case SMOPT_TYPE_PLUGINS:
334 case SMOPT_TYPE_THEME:
335 case SMOPT_TYPE_HIDDEN:
336 break;
88cb1b4d 337 case SMOPT_TYPE_EXTERNAL:
338 echo "<tr><td>$name</td><td><b>" .
339 $defcfg[$k]['value'] .
ab3fe577 340 '</b></td></tr>';
88cb1b4d 341 break;
a3fab7e3 342 case SMOPT_TYPE_TITLE:
88cb1b4d 343 if ( $colapse[$k] == 'on' ) {
a3fab7e3 344 $sw = '(+)';
345 } else {
346 $sw = '(-)';
dcd6f144 347 }
ab3fe577 348 echo '<tr bgcolor="'.$color[0].'"><th colspan="2">'.
349 "<a href=\"options.php?switch=$k\" style=\"text-decoration:none\">".
350 '<b>'.$sw.'</b></a> '.$name.'</th></tr>';
a3fab7e3 351 $act_grp = $k;
352 break;
353 case SMOPT_TYPE_COMMENT:
354 $v = substr( $v, 1, strlen( $v ) - 2 );
355 echo "<tr><td>$name</td><td>".
356 "<b>$v</b>";
357 $newcfg[$k] = "'$v'";
358 if ( isset( $defcfg[$k]['comment'] ) ) {
359 echo ' &nbsp; ' . $defcfg[$k]['comment'];
abd7a3f8 360 }
a3fab7e3 361 echo "</td></tr>\n";
362 break;
363 case SMOPT_TYPE_INTEGER:
ab3fe577 364 /* look for variable $e in POST, fill into $v */
0b5eb034 365 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
366 $v = intval( $new_v );
a3fab7e3 367 $newcfg[$k] = $v;
368 }
369 echo "<tr><td>$name</td><td>".
ab3fe577 370 "<input size=\"10\" name=\"adm_$n\" value=\"$v\" />";
a3fab7e3 371 if ( isset( $defcfg[$k]['comment'] ) ) {
372 echo ' &nbsp; ' . $defcfg[$k]['comment'];
373 }
374 echo "</td></tr>\n";
375 break;
376 case SMOPT_TYPE_NUMLIST:
0b5eb034 377 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
378 $v = $new_v;
a3fab7e3 379 $newcfg[$k] = $v;
380 }
381 echo "<tr><td>$name</td><td>";
382 echo "<select name=\"adm_$n\">";
383 foreach ( $defcfg[$k]['posvals'] as $kp => $vp ) {
384 echo "<option value=\"$kp\"";
385 if ( $kp == $v ) {
ab3fe577 386 echo ' selected="selected"';
a3fab7e3 387 }
388 echo ">$vp</option>";
389 }
390 echo '</select>';
391 if ( isset( $defcfg[$k]['comment'] ) ) {
392 echo ' &nbsp; ' . $defcfg[$k]['comment'];
393 }
394 echo "</td></tr>\n";
395 break;
396 case SMOPT_TYPE_STRLIST:
0b5eb034 397 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
398 $v = '"' . $new_v . '"';
a3fab7e3 399 $newcfg[$k] = $v;
400 }
401 echo "<tr><td>$name</td><td>".
402 "<select name=\"adm_$n\">";
403 foreach ( $defcfg[$k]['posvals'] as $kp => $vp ) {
404 echo "<option value=\"$kp\"";
405 if ( $kp == substr( $v, 1, strlen( $v ) - 2 ) ) {
ab3fe577 406 echo ' selected="selected"';
a3fab7e3 407 }
408 echo ">$vp</option>";
409 }
410 echo '</select>';
411 if ( isset( $defcfg[$k]['comment'] ) ) {
412 echo ' &nbsp; ' . $defcfg[$k]['comment'];
413 }
414 echo "</td></tr>\n";
415 break;
c83b38c1 416
a3fab7e3 417 case SMOPT_TYPE_TEXTAREA:
0b5eb034 418 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
419 $v = '"' . $new_v . '"';
a3fab7e3 420 $newcfg[$k] = str_replace( "\n", '', $v );
421 }
78154473 422 echo "<tr><td valign=\"top\">$name</td><td>".
423 "<textarea cols=\"$size\" rows=\"4\" name=\"adm_$n\">" . substr( $v, 1, strlen( $v ) - 2 ) . "</textarea>";
a3fab7e3 424 if ( isset( $defcfg[$k]['comment'] ) ) {
425 echo ' &nbsp; ' . $defcfg[$k]['comment'];
426 }
427 echo "</td></tr>\n";
428 break;
429 case SMOPT_TYPE_STRING:
0b5eb034 430 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
431 $v = '"' . $new_v . '"';
a3fab7e3 432 $newcfg[$k] = $v;
433 }
feba1a41 434 if ( $v == '""' && isset( $defcfg[$k]['default'] ) ) {
435 $v = "'" . $defcfg[$k]['default'] . "'";
436 $newcfg[$k] = $v;
437 }
a3fab7e3 438 echo "<tr><td>$name</td><td>".
ab3fe577 439 "<input size=\"$size\" name=\"adm_$n\" value=\"" . substr( $v, 1, strlen( $v ) - 2 ) . '" />';
a3fab7e3 440 if ( isset( $defcfg[$k]['comment'] ) ) {
441 echo ' &nbsp; ' . $defcfg[$k]['comment'];
442 }
443 echo "</td></tr>\n";
444 break;
445 case SMOPT_TYPE_BOOLEAN:
0b5eb034 446 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
447 $v = $new_v;
a3fab7e3 448 $newcfg[$k] = $v;
449 } else {
450 $v = strtoupper( $v );
451 }
452 if ( $v == 'TRUE' ) {
ab3fe577 453 $ct = ' checked="checked"';
a3fab7e3 454 $cf = '';
455 } else {
456 $ct = '';
ab3fe577 457 $cf = ' checked="checked"';
a3fab7e3 458 }
459 echo "<tr><td>$name</td><td>" .
ab3fe577 460 "<input$ct type=\"radio\" name=\"adm_$n\" value=\"TRUE\" />" . _("Yes") .
461 "<input$cf type=\"radio\" name=\"adm_$n\" value=\"FALSE\" />" . _("No");
a3fab7e3 462 if ( isset( $defcfg[$k]['comment'] ) ) {
463 echo ' &nbsp; ' . $defcfg[$k]['comment'];
464 }
465 echo "</td></tr>\n";
466 break;
ab3fe577 467 case SMOPT_TYPE_PATH:
0b5eb034 468 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
f8a1ed5a 469 // FIXME: fix use of $data_dir in $attachment_dir
0b5eb034 470 $v = change_to_sm_path($new_v);
471 $newcfg[$k] = $v;
a28a56da 472 }
473 if ( $v == "''" && isset( $defcfg[$k]['default'] ) ) {
474 $v = change_to_sm_path($defcfg[$k]['default']);
475 $newcfg[$k] = $v;
476 }
ab3fe577 477 echo "<tr><td>$name</td><td>".
478 "<input size=\"$size\" name=\"adm_$n\" value=\"" . change_to_rel_path($v) . '" />';
a28a56da 479 if ( isset( $defcfg[$k]['comment'] ) ) {
480 echo ' &nbsp; ' . $defcfg[$k]['comment'];
481 }
ab3fe577 482 echo "</td></tr>\n";
483 break;
a3fab7e3 484 default:
485 echo "<tr><td>$name</td><td>" .
486 "<b><i>$v</i></b>";
487 if ( isset( $defcfg[$k]['comment'] ) ) {
488 echo ' &nbsp; ' . $defcfg[$k]['comment'];
489 }
490 echo "</td></tr>\n";
6a9acbca 491 }
a3fab7e3 492 }
a3fab7e3 493}
494
1fa5ece1 495/* Special Themes Block */
88cb1b4d 496if ( $colapse['Group7'] == 'off' ) {
a3fab7e3 497 $i = 0;
498 echo '<tr><th>' . _("Theme Name") .
499 '</th><th>' . _("Theme Path") .
500 '</th></tr>';
501 while ( isset( $newcfg["\$theme[$i]['NAME']"] ) ) {
502 $k1 = "\$theme[$i]['NAME']";
503 $e1 = "theme_name_$i";
4cd8ae7d 504 if ( sqgetGlobalVar($e, $v1, SQ_POST) ) {
505 $v1 = '"' . str_replace( '\"', '"', $v1 ) . '"';
b5a29535 506 $v1 = '"' . str_replace( '"', '\"', $v1 ) . '"';
a3fab7e3 507 $newcfg[$k1] = $v1;
a55bb207 508 } else {
a3fab7e3 509 $v1 = $newcfg[$k1];
abd7a3f8 510 }
a3fab7e3 511 $k2 = "\$theme[$i]['PATH']";
512 $e2 = "theme_path_$i";
4cd8ae7d 513 if ( sqgetGlobalVar($e, $v2, SQ_POST) ) {
514 $v2 = change_to_sm_path($v2);
ab3fe577 515 $newcfg[$k2] = $v2;
abd7a3f8 516 } else {
a3fab7e3 517 $v2 = $newcfg[$k2];
abd7a3f8 518 }
a3fab7e3 519 $name = substr( $v1, 1, strlen( $v1 ) - 2 );
a28a56da 520 $path = change_to_rel_path($v2);
a3fab7e3 521 echo '<tr>'.
ab3fe577 522 "<td align=\"right\">$i. <input name=\"$e1\" value=\"$name\" size=\"30\" /></td>".
523 "<td><input name=\"$e2\" value=\"$path\" size=\"40\" /></td>".
a3fab7e3 524 "</tr>\n";
525 $i++;
c83b38c1 526
6a9acbca 527 }
6a9acbca 528}
529
1fa5ece1 530/* Special Plugins Block */
88cb1b4d 531if ( $colapse['Group8'] == 'on' ) {
a3fab7e3 532 $sw = '(+)';
533} else {
534 $sw = '(-)';
6a9acbca 535}
ab3fe577 536echo '<tr bgcolor="'.$color[0].'"><th colspan="2">'.
537 '<a href="options.php?switch=Group8" style="text-decoration:none"><b>'.
538 $sw.'</b></a> '._("Plugins").'</th></tr>';
539
540if ( $colapse['Group8'] == 'off' ) {
541
542 $plugpath = SM_PATH . 'plugins/';
543 if ( file_exists($plugpath) ) {
544 $fd = opendir( $plugpath );
545 $op_plugin = array();
546 $p_count = 0;
547 while (false !== ($file = readdir($fd))) {
548 if ($file != '.' && $file != '..' && $file != 'CVS' && is_dir($plugpath . $file) ) {
549 $op_plugin[] = $file;
550 $p_count++;
c83b38c1 551 }
552 }
ab3fe577 553 closedir($fd);
554 asort( $op_plugin );
555
556 /* Lets get the plugins that are active */
557 $plugins = array();
0b5eb034 558 if ( sqgetGlobalVar('plg', $v, SQ_POST) ) {
ab3fe577 559 foreach ( $op_plugin as $plg ) {
0b5eb034 560 if ( sqgetGlobalVar("plgs_$plg", $v2, SQ_POST) && $v2 == 'on' ) {
ab3fe577 561 $plugins[] = $plg;
562 }
563 }
564 $i = 0;
565 foreach ( $plugins as $plg ) {
566 $k = "\$plugins[$i]";
567 $newcfg[$k] = "'$plg'";
568 $i++;
569 }
570 while ( isset( $newcfg["\$plugins[$i]"] ) ) {
571 $k = "\$plugins[$i]";
572 $newcfg[$k] = '';
573 $i++;
574 }
c83b38c1 575 } else {
ab3fe577 576 $i = 0;
577 while ( isset( $newcfg["\$plugins[$i]"] ) ) {
578 $k = "\$plugins[$i]";
579 $v = $newcfg[$k];
580 $plugins[] = substr( $v, 1, strlen( $v ) - 2 );
581 $i++;
582 }
a3fab7e3 583 }
0d53a854 584 echo '<tr><td colspan="2"><input type="hidden" name="plg" value="on" /><table align="center">';
ab3fe577 585 foreach ( $op_plugin as $plg ) {
586 if ( in_array( $plg, $plugins ) ) {
587 $sw = ' checked="checked"';
588 } else {
589 $sw = '';
590 }
591 echo '<tr><td>';
592 if (file_exists(SM_PATH . "plugins/$plg/README")) {
593 echo "<a href=\"../$plg/README\" target=\"_blank\">$plg</a>";
594 } else {
595 echo $plg;
596 }
597 echo "</td>\n".
598 "<td><input$sw type=\"checkbox\" name=\"plgs_$plg\" /></td>".
599 "</tr>\n";
600 }
0d53a854 601 echo '</table></td></tr>';
ab3fe577 602 } else {
603 echo '<tr><td colspan="2" align="center">'.
604 sprintf(_("Plugin directory could not be found: %s"), $plugpath).
605 "</td></tr>\n";
606 }
6a9acbca 607}
ab3fe577 608echo '<tr bgcolor="'.$color[5].'"><th colspan="2"><input value="'.
609 _("Change Settings").'" type="submit" /><br />'.
610 '<a href="'.SM_PATH.'src/configtest.php" target="_blank">'.
611 _("Test Configuration")."</a></th></tr>\n".
0d53a854 612 '</table></td></tr></table></form>';
abd7a3f8 613
614/*
615 Write the options to the file.
616*/
71e5c245 617
ab3fe577 618if ( $fp = @fopen( $cfgfile, 'w' ) ) {
619 fwrite( $fp, "<?php\n".
b5a29535 620 "/**\n".
621 " * SquirrelMail Configuration File\n".
622 " * Created using the Administrator Plugin\n".
39d3ec89 623 " */\n".
624 "\n".
625 "global \$version;\n" );
b5a29535 626
c05c489a 627 foreach ( $newcfg as $k => $v ) {
781da5d4 628 if ( $k{0} == '$' && $v <> '' || is_int($v)) {
c05c489a 629 if ( substr( $k, 1, 11 ) == 'ldap_server' ) {
b5a29535 630 $v = substr( $v, 0, strlen( $v ) - 1 ) . "\n)";
631 $v = str_replace( 'array(', "array(\n\t", $v );
632 $v = str_replace( "',", "',\n\t", $v );
c05c489a 633 }
0b5eb034 634 /* FIXME: add elseif that reverts plugins[#] to plugins[] */
c05c489a 635 fwrite( $fp, "$k = $v;\n" );
ab3fe577 636 }
0e66bc84 637 }
0b5eb034 638 // add local config support
639 fwrite( $fp, "@include SM_PATH . 'config/config_local.php';\n" );
640 // close php
c05c489a 641 fwrite( $fp, '?>' );
642 fclose( $fp );
643} else {
78154473 644 echo '<br /><p align="center"><big>'.
c05c489a 645 _("Config file can't be opened. Please check config.php.").
78154473 646 '</big></p>';
abd7a3f8 647}
dcc1cc82 648?>
78154473 649</body></html>