abd7a3f8 |
1 | <?php |
2 | |
3 | /** |
4 | * Administrator Plugin |
5 | * |
6 | * Copyright (c) 1999-2002 The SquirrelMail Project Team |
7 | * Licensed under the GNU GPL. For full terms see the file COPYING. |
8 | * |
9 | * Philippe Mingo |
10 | * |
11 | * $Id$ |
12 | */ |
13 | |
14 | chdir('..'); |
15 | require_once('../src/validate.php'); |
16 | require_once('../functions/page_header.php'); |
17 | require_once('../functions/imap.php'); |
18 | require_once('../src/load_prefs.php'); |
19 | require_once('../plugins/administrator/defines.php'); |
20 | |
dcd6f144 |
21 | $auth = FALSE; |
22 | if ( $adm_id = fileowner('../config/config.php') ) { |
23 | $adm = posix_getpwuid( $adm_id ); |
24 | if ( $username == $adm['name'] ) { |
25 | $auth = TRUE; |
26 | } |
27 | } |
28 | |
29 | if ( !auth ) { |
30 | header("Location: ../../src/options.php") ; |
31 | exit; |
32 | } |
33 | |
abd7a3f8 |
34 | displayPageHeader($color, 'None'); |
35 | |
36 | $cfgfile = '../config/config.php'; |
37 | $cfg_defaultfile = '../config/config_default.php'; |
38 | $cfg = file( $cfg_defaultfile ); |
0e66bc84 |
39 | $newcfg = $dfncfg = array( ); |
abd7a3f8 |
40 | $cm = FALSE; |
0e66bc84 |
41 | |
42 | foreach ( $defcfg as $key => $def ) { |
43 | $newcfg[$key] = ''; |
44 | } |
45 | |
abd7a3f8 |
46 | foreach ( $cfg as $l ) { |
0e66bc84 |
47 | // Remove inline /* */ Blocks |
abd7a3f8 |
48 | $l = preg_replace( '/\/\*.*\*\//', '', $l ); |
49 | $l = preg_replace( '/#.*$/', '', $l ); |
50 | $l = preg_replace( '/\/\/.*$/', '', $l ); |
51 | $v = $s = trim( $l ); |
52 | if ( $cm ) { |
53 | if( substr( $v, -2 ) == '*/' ) { |
54 | $v = ''; |
55 | $cm = FALSE; |
56 | } else if( $i = strpos( $v, '*/' ) ) { |
57 | $v = substr( $v, $i ); |
58 | $cm = FALSE; |
59 | } else { |
60 | $v = ''; |
61 | } |
62 | } else { |
63 | if( $v{0}.$v{1} == '/*' ) { |
64 | $v = ''; |
65 | $cm = TRUE; |
66 | } else if ( $i = strpos( $v, '/*' ) ) { |
67 | $v = substr( $v, 0, $i ); |
68 | $cm = TRUE; |
69 | } |
70 | } |
71 | |
72 | if ( $i = strpos( $v, '=' ) ) { |
73 | $key = trim( substr( $v, 0, $i - 1 ) ); |
74 | $val = str_replace( ';', '', trim( substr( $v, $i + 1 ) ) ); |
75 | $newcfg[$key] = $val; |
0e66bc84 |
76 | $dfncfg[$key] = $val; |
abd7a3f8 |
77 | } |
78 | |
79 | } |
80 | |
81 | $cfg = file( $cfgfile ); |
abd7a3f8 |
82 | |
83 | $cm = FALSE; |
84 | foreach ( $cfg as $l ) { |
85 | $l = preg_replace( '/\/\*.*\*\//', '', $l ); |
86 | $l = preg_replace( '/#.*$/', '', $l ); |
87 | $l = preg_replace( '/\/\/.*$/', '', $l ); |
88 | $v = $s = trim( $l ); |
89 | if ( $cm ) { |
90 | if( substr( $v, -2 ) == '*/' ) { |
91 | $v = ''; |
92 | $cm = FALSE; |
93 | } else if( $i = strpos( $v, '*/' ) ) { |
94 | $v = substr( $v, $i ); |
95 | $cm = FALSE; |
96 | } else { |
97 | $v = ''; |
98 | } |
99 | } else { |
100 | if( $v{0}.$v{1} == '/*' ) { |
101 | $v = ''; |
102 | $cm = TRUE; |
103 | } else if ( $i = strpos( $v, '/*' ) ) { |
104 | $v = substr( $v, 0, $i ); |
105 | $cm = TRUE; |
106 | } |
107 | } |
108 | |
109 | if ( $i = strpos( $v, '=' ) ) { |
110 | $key = trim( substr( $v, 0, $i - 1 ) ); |
111 | $val = str_replace( ';', '', trim( substr( $v, $i + 1 ) ) ); |
112 | $newcfg[$key] = $val; |
113 | } |
114 | |
115 | } |
116 | |
117 | echo "<form action=$PHP_SELF method=post>" . |
0e66bc84 |
118 | "<br><center><table width=95% bgcolor=\"$color[5]\"><tr><td>". |
119 | "<table width=100% cellspacing=0 bgcolor=\"$color[4]\">" , |
abd7a3f8 |
120 | "<tr bgcolor=\"$color[5]\"><th colspan=2>" . _("Configuration Administrator") . "</th></tr>"; |
121 | foreach ( $newcfg as $k => $v ) { |
122 | $l = strtolower( $v ); |
123 | $type = SMOPT_TYPE_UNDEFINED; |
124 | $n = substr( $k, 1 ); |
125 | $n = str_replace( '[', '_', $n ); |
126 | $n = str_replace( ']', '_', $n ); |
127 | $e = 'adm_' . $n; |
128 | $name = $k; |
129 | $size = 50; |
0e66bc84 |
130 | if ( isset( $defcfg[$k] ) ) { |
131 | $name = $defcfg[$k]['name']; |
132 | $type = $defcfg[$k]['type']; |
133 | $size = $defcfg[$k]['size']; |
abd7a3f8 |
134 | } else if ( $l == 'true' ) { |
135 | $v = 'TRUE'; |
136 | $type = SMOPT_TYPE_BOOLEAN; |
137 | } else if ( $l == 'false' ) { |
138 | $v = 'FALSE'; |
139 | $type = SMOPT_TYPE_BOOLEAN; |
140 | } else if ( $v{0} == "'" ) { |
141 | $type = SMOPT_TYPE_STRING; |
142 | } else if ( $v{0} == '"' ) { |
143 | $type = SMOPT_TYPE_STRING; |
144 | } |
145 | |
abd7a3f8 |
146 | switch ( $type ) { |
0e66bc84 |
147 | case SMOPT_TYPE_TITLE: |
dcd6f144 |
148 | echo "<tr bgcolor=\"$color[0]\"><th colspan=2>$name</th></tr>"; |
0e66bc84 |
149 | break; |
150 | case SMOPT_TYPE_COMMENT: |
151 | $v = substr( $v, 1, strlen( $v ) - 2 ); |
152 | echo "<tr><td>$name</td><td>"; |
153 | echo "<b>$v</b>"; |
154 | $newcfg[$k] = "'$v'"; |
155 | break; |
abd7a3f8 |
156 | case SMOPT_TYPE_INTEGER: |
157 | if ( isset( $HTTP_POST_VARS[$e] ) ) { |
158 | $v = intval( $HTTP_POST_VARS[$e] ); |
159 | $newcfg[$k] = $v; |
160 | } |
0e66bc84 |
161 | echo "<tr><td>$name</td><td>"; |
abd7a3f8 |
162 | echo "<input size=10 name=\"adm_$n\" value=\"$v\">"; |
163 | break; |
dcd6f144 |
164 | case SMOPT_TYPE_NUMLIST: |
165 | if ( isset( $HTTP_POST_VARS[$e] ) ) { |
166 | $v = $HTTP_POST_VARS[$e]; |
167 | $newcfg[$k] = $v; |
168 | } |
169 | echo "<tr><td>$name</td><td>"; |
170 | echo "<select name=\"adm_$n\">"; |
171 | foreach ( $defcfg[$k]['posvals'] as $kp => $vp ) { |
172 | echo "<option value=\"$kp\""; |
173 | if ( $kp == $v ) { |
174 | echo ' selected'; |
175 | } |
176 | echo ">$vp</option>"; |
177 | } |
178 | echo '</select>'; |
179 | break; |
abd7a3f8 |
180 | case SMOPT_TYPE_STRLIST: |
181 | if ( isset( $HTTP_POST_VARS[$e] ) ) { |
182 | $v = '"' . $HTTP_POST_VARS[$e] . '"'; |
183 | $newcfg[$k] = $v; |
184 | } |
0e66bc84 |
185 | echo "<tr><td>$name</td><td>"; |
abd7a3f8 |
186 | echo "<select name=\"adm_$n\">"; |
0e66bc84 |
187 | foreach ( $defcfg[$k]['posvals'] as $kp => $vp ) { |
abd7a3f8 |
188 | echo "<option value=\"$kp\""; |
189 | if ( $kp == substr( $v, 1, strlen( $v ) - 2 ) ) { |
190 | echo ' selected'; |
191 | } |
192 | echo ">$vp</option>"; |
193 | } |
194 | echo '</select>'; |
195 | break; |
196 | |
197 | case SMOPT_TYPE_STRING: |
198 | if ( isset( $HTTP_POST_VARS[$e] ) ) { |
199 | $v = '"' . $HTTP_POST_VARS[$e] . '"'; |
200 | $newcfg[$k] = $v; |
201 | } |
0e66bc84 |
202 | echo "<tr><td>$name</td><td>"; |
abd7a3f8 |
203 | echo "<input size=\"$size\" name=\"adm_$n\" value=\"" . substr( $v, 1, strlen( $v ) - 2 ) . "\">"; |
204 | break; |
205 | case SMOPT_TYPE_BOOLEAN: |
206 | if ( isset( $HTTP_POST_VARS[$e] ) ) { |
207 | $v = $HTTP_POST_VARS[$e]; |
208 | $newcfg[$k] = $v; |
209 | } |
210 | if ( $v == 'TRUE' ) { |
211 | $ct = ' checked'; |
212 | $cf = ''; |
213 | } else { |
214 | $ct = ''; |
215 | $cf = ' checked'; |
216 | } |
0e66bc84 |
217 | echo "<tr><td>$name</td><td>"; |
abd7a3f8 |
218 | echo "<INPUT$ct type=radio NAME=\"adm_$n\" value=\"TRUE\">" . _("Yes") . |
219 | "<INPUT$cf type=radio NAME=\"adm_$n\" value=\"FALSE\">" . _("No"); |
220 | break; |
221 | default: |
0e66bc84 |
222 | echo "<tr><td>$name</td><td>"; |
abd7a3f8 |
223 | echo "<b><i>$v</i></b>"; |
224 | } |
225 | echo "</td></tr>\n"; |
226 | } |
227 | echo "<tr bgcolor=\"$color[5]\"><th colspan=2><input value=\"" . |
228 | _("Change Settings") . "\" type=submit></th></tr>" , |
0e66bc84 |
229 | '</table></td></tr></table></form>'; |
abd7a3f8 |
230 | |
231 | /* |
232 | Write the options to the file. |
233 | */ |
234 | $fp = fopen( $cfgfile, 'w' ); |
235 | fwrite( $fp, "<?PHP\n". |
236 | "/**\n". |
237 | " * SquirrelMail Configuration File\n". |
238 | " * Created using the Administrator Plugin\n". |
239 | " */\n\n" ); |
240 | |
241 | fwrite( $fp, 'GLOBAL ' ); |
242 | $not_first = FALSE; |
243 | foreach ( $newcfg as $k => $v ) { |
0e66bc84 |
244 | if ( $k{0} == '$' ) { |
245 | if( $i = strpos( $k, '[' ) ) { |
246 | if( strpos( $k, '[0]' ) ) { |
247 | if( $not_first ) { |
248 | fwrite( $fp, ', ' ); |
249 | } |
250 | fwrite( $fp, substr( $k, 0, $i) ); |
251 | $not_first = TRUE; |
252 | } |
253 | } else { |
abd7a3f8 |
254 | if( $not_first ) { |
255 | fwrite( $fp, ', ' ); |
256 | } |
0e66bc84 |
257 | fwrite( $fp, $k ); |
abd7a3f8 |
258 | $not_first = TRUE; |
259 | } |
abd7a3f8 |
260 | } |
261 | } |
262 | fwrite( $fp, ";\n" ); |
263 | foreach ( $newcfg as $k => $v ) { |
0e66bc84 |
264 | if ( $k{0} == '$' ) { |
265 | fwrite( $fp, "$k = $v;\n" ); |
266 | } |
abd7a3f8 |
267 | } |
268 | fwrite( $fp, '?>' ); |
269 | fclose( $fp ); |
270 | ?> |