Centralized init
[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' ||
c3d7aa6e 324 substr( $k, 0, 13 ) == '$aTemplateSet' ) {
439538dc 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) ) {
c3d7aa6e 419 $v = '"' . addslashes($new_v) . '"';
a3fab7e3 420 $newcfg[$k] = str_replace( "\n", '', $v );
421 }
c3d7aa6e 422 echo "<tr><td valign=\"top\">$name</td><td>"
423 ."<textarea cols=\"$size\" rows=\"4\" name=\"adm_$n\">"
424 .htmlspecialchars(stripslashes(substr( $v, 1, strlen( $v ) - 2 )))
425 ."</textarea>";
a3fab7e3 426 if ( isset( $defcfg[$k]['comment'] ) ) {
427 echo ' &nbsp; ' . $defcfg[$k]['comment'];
428 }
429 echo "</td></tr>\n";
430 break;
431 case SMOPT_TYPE_STRING:
0b5eb034 432 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
c3d7aa6e 433 $v = '"' . addslashes($new_v) . '"';
a3fab7e3 434 $newcfg[$k] = $v;
435 }
feba1a41 436 if ( $v == '""' && isset( $defcfg[$k]['default'] ) ) {
437 $v = "'" . $defcfg[$k]['default'] . "'";
438 $newcfg[$k] = $v;
439 }
c3d7aa6e 440 echo "<tr><td>$name</td><td>"
441 ."<input size=\"$size\" name=\"adm_$n\" value=\""
442 .htmlspecialchars(stripslashes(substr( $v, 1, strlen( $v ) - 2 )))
443 .'" />';
a3fab7e3 444 if ( isset( $defcfg[$k]['comment'] ) ) {
445 echo ' &nbsp; ' . $defcfg[$k]['comment'];
446 }
447 echo "</td></tr>\n";
448 break;
449 case SMOPT_TYPE_BOOLEAN:
0b5eb034 450 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
451 $v = $new_v;
a3fab7e3 452 $newcfg[$k] = $v;
453 } else {
454 $v = strtoupper( $v );
455 }
456 if ( $v == 'TRUE' ) {
ab3fe577 457 $ct = ' checked="checked"';
a3fab7e3 458 $cf = '';
459 } else {
460 $ct = '';
ab3fe577 461 $cf = ' checked="checked"';
a3fab7e3 462 }
463 echo "<tr><td>$name</td><td>" .
ab3fe577 464 "<input$ct type=\"radio\" name=\"adm_$n\" value=\"TRUE\" />" . _("Yes") .
465 "<input$cf type=\"radio\" name=\"adm_$n\" value=\"FALSE\" />" . _("No");
a3fab7e3 466 if ( isset( $defcfg[$k]['comment'] ) ) {
467 echo ' &nbsp; ' . $defcfg[$k]['comment'];
468 }
469 echo "</td></tr>\n";
470 break;
ab3fe577 471 case SMOPT_TYPE_PATH:
0b5eb034 472 if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) {
f8a1ed5a 473 // FIXME: fix use of $data_dir in $attachment_dir
0b5eb034 474 $v = change_to_sm_path($new_v);
475 $newcfg[$k] = $v;
a28a56da 476 }
477 if ( $v == "''" && isset( $defcfg[$k]['default'] ) ) {
478 $v = change_to_sm_path($defcfg[$k]['default']);
479 $newcfg[$k] = $v;
480 }
ab3fe577 481 echo "<tr><td>$name</td><td>".
482 "<input size=\"$size\" name=\"adm_$n\" value=\"" . change_to_rel_path($v) . '" />';
a28a56da 483 if ( isset( $defcfg[$k]['comment'] ) ) {
484 echo ' &nbsp; ' . $defcfg[$k]['comment'];
485 }
ab3fe577 486 echo "</td></tr>\n";
487 break;
a3fab7e3 488 default:
489 echo "<tr><td>$name</td><td>" .
490 "<b><i>$v</i></b>";
491 if ( isset( $defcfg[$k]['comment'] ) ) {
492 echo ' &nbsp; ' . $defcfg[$k]['comment'];
493 }
494 echo "</td></tr>\n";
6a9acbca 495 }
a3fab7e3 496 }
a3fab7e3 497}
498
1fa5ece1 499/* Special Themes Block */
88cb1b4d 500if ( $colapse['Group7'] == 'off' ) {
a3fab7e3 501 $i = 0;
502 echo '<tr><th>' . _("Theme Name") .
503 '</th><th>' . _("Theme Path") .
504 '</th></tr>';
505 while ( isset( $newcfg["\$theme[$i]['NAME']"] ) ) {
506 $k1 = "\$theme[$i]['NAME']";
507 $e1 = "theme_name_$i";
4cd8ae7d 508 if ( sqgetGlobalVar($e, $v1, SQ_POST) ) {
509 $v1 = '"' . str_replace( '\"', '"', $v1 ) . '"';
b5a29535 510 $v1 = '"' . str_replace( '"', '\"', $v1 ) . '"';
a3fab7e3 511 $newcfg[$k1] = $v1;
a55bb207 512 } else {
a3fab7e3 513 $v1 = $newcfg[$k1];
abd7a3f8 514 }
a3fab7e3 515 $k2 = "\$theme[$i]['PATH']";
516 $e2 = "theme_path_$i";
4cd8ae7d 517 if ( sqgetGlobalVar($e, $v2, SQ_POST) ) {
518 $v2 = change_to_sm_path($v2);
ab3fe577 519 $newcfg[$k2] = $v2;
abd7a3f8 520 } else {
a3fab7e3 521 $v2 = $newcfg[$k2];
abd7a3f8 522 }
a3fab7e3 523 $name = substr( $v1, 1, strlen( $v1 ) - 2 );
a28a56da 524 $path = change_to_rel_path($v2);
a3fab7e3 525 echo '<tr>'.
ab3fe577 526 "<td align=\"right\">$i. <input name=\"$e1\" value=\"$name\" size=\"30\" /></td>".
527 "<td><input name=\"$e2\" value=\"$path\" size=\"40\" /></td>".
a3fab7e3 528 "</tr>\n";
529 $i++;
c83b38c1 530
6a9acbca 531 }
6a9acbca 532}
533
1fa5ece1 534/* Special Plugins Block */
88cb1b4d 535if ( $colapse['Group8'] == 'on' ) {
a3fab7e3 536 $sw = '(+)';
537} else {
538 $sw = '(-)';
6a9acbca 539}
ab3fe577 540echo '<tr bgcolor="'.$color[0].'"><th colspan="2">'.
541 '<a href="options.php?switch=Group8" style="text-decoration:none"><b>'.
542 $sw.'</b></a> '._("Plugins").'</th></tr>';
543
544if ( $colapse['Group8'] == 'off' ) {
545
546 $plugpath = SM_PATH . 'plugins/';
547 if ( file_exists($plugpath) ) {
548 $fd = opendir( $plugpath );
549 $op_plugin = array();
550 $p_count = 0;
551 while (false !== ($file = readdir($fd))) {
552 if ($file != '.' && $file != '..' && $file != 'CVS' && is_dir($plugpath . $file) ) {
553 $op_plugin[] = $file;
554 $p_count++;
c83b38c1 555 }
556 }
ab3fe577 557 closedir($fd);
558 asort( $op_plugin );
559
560 /* Lets get the plugins that are active */
561 $plugins = array();
0b5eb034 562 if ( sqgetGlobalVar('plg', $v, SQ_POST) ) {
ab3fe577 563 foreach ( $op_plugin as $plg ) {
0b5eb034 564 if ( sqgetGlobalVar("plgs_$plg", $v2, SQ_POST) && $v2 == 'on' ) {
ab3fe577 565 $plugins[] = $plg;
566 }
567 }
568 $i = 0;
569 foreach ( $plugins as $plg ) {
570 $k = "\$plugins[$i]";
571 $newcfg[$k] = "'$plg'";
572 $i++;
573 }
574 while ( isset( $newcfg["\$plugins[$i]"] ) ) {
575 $k = "\$plugins[$i]";
576 $newcfg[$k] = '';
577 $i++;
578 }
c83b38c1 579 } else {
ab3fe577 580 $i = 0;
581 while ( isset( $newcfg["\$plugins[$i]"] ) ) {
582 $k = "\$plugins[$i]";
583 $v = $newcfg[$k];
584 $plugins[] = substr( $v, 1, strlen( $v ) - 2 );
585 $i++;
586 }
a3fab7e3 587 }
0d53a854 588 echo '<tr><td colspan="2"><input type="hidden" name="plg" value="on" /><table align="center">';
ab3fe577 589 foreach ( $op_plugin as $plg ) {
590 if ( in_array( $plg, $plugins ) ) {
591 $sw = ' checked="checked"';
592 } else {
593 $sw = '';
594 }
595 echo '<tr><td>';
596 if (file_exists(SM_PATH . "plugins/$plg/README")) {
597 echo "<a href=\"../$plg/README\" target=\"_blank\">$plg</a>";
598 } else {
599 echo $plg;
600 }
601 echo "</td>\n".
602 "<td><input$sw type=\"checkbox\" name=\"plgs_$plg\" /></td>".
603 "</tr>\n";
604 }
0d53a854 605 echo '</table></td></tr>';
ab3fe577 606 } else {
607 echo '<tr><td colspan="2" align="center">'.
608 sprintf(_("Plugin directory could not be found: %s"), $plugpath).
609 "</td></tr>\n";
610 }
6a9acbca 611}
ab3fe577 612echo '<tr bgcolor="'.$color[5].'"><th colspan="2"><input value="'.
613 _("Change Settings").'" type="submit" /><br />'.
614 '<a href="'.SM_PATH.'src/configtest.php" target="_blank">'.
615 _("Test Configuration")."</a></th></tr>\n".
0d53a854 616 '</table></td></tr></table></form>';
abd7a3f8 617
618/*
619 Write the options to the file.
620*/
71e5c245 621
ab3fe577 622if ( $fp = @fopen( $cfgfile, 'w' ) ) {
623 fwrite( $fp, "<?php\n".
b5a29535 624 "/**\n".
625 " * SquirrelMail Configuration File\n".
626 " * Created using the Administrator Plugin\n".
39d3ec89 627 " */\n".
628 "\n".
629 "global \$version;\n" );
b5a29535 630
c05c489a 631 foreach ( $newcfg as $k => $v ) {
781da5d4 632 if ( $k{0} == '$' && $v <> '' || is_int($v)) {
c05c489a 633 if ( substr( $k, 1, 11 ) == 'ldap_server' ) {
b5a29535 634 $v = substr( $v, 0, strlen( $v ) - 1 ) . "\n)";
635 $v = str_replace( 'array(', "array(\n\t", $v );
636 $v = str_replace( "',", "',\n\t", $v );
c05c489a 637 }
0b5eb034 638 /* FIXME: add elseif that reverts plugins[#] to plugins[] */
c05c489a 639 fwrite( $fp, "$k = $v;\n" );
ab3fe577 640 }
0e66bc84 641 }
0b5eb034 642 // add local config support
643 fwrite( $fp, "@include SM_PATH . 'config/config_local.php';\n" );
644 // close php
c05c489a 645 fwrite( $fp, '?>' );
646 fclose( $fp );
647} else {
78154473 648 echo '<br /><p align="center"><big>'.
c05c489a 649 _("Config file can't be opened. Please check config.php.").
78154473 650 '</big></p>';
abd7a3f8 651}
c3d7aa6e 652
dcc1cc82 653?>
78154473 654</body></html>