/[LeafOK_CVS]/fenglin/bbs/themes/default/section_setting.view.php
ViewVC logotype

Contents of /fenglin/bbs/themes/default/section_setting.view.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (show annotations)
Wed Apr 23 05:13:57 2025 UTC (10 months, 3 weeks ago) by sysadm
Branch: MAIN
Changes since 1.7: +54 -54 lines
Refine deprecated PHP short tags

1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>版块设定</title>
5 <link rel="stylesheet" href="<?= get_theme_file('css/default'); ?>" type="text/css">
6 <script src="../js/polyfill.min.js"></script>
7 <script src="../js/axios.min.js"></script>
8 <script type="text/javascript">
9 function refresh_ex_dir(s, dirList)
10 {
11 for (i = dirList.length - s.options.length; i > 0 ; i--)
12 {
13 s.options.add(new Option());
14 }
15
16 i = 0;
17 for (var dirItem of dirList)
18 {
19 s.options[i].value = dirItem.dir;
20 s.options[i].text = dirItem.dir + '(' + dirItem.name + ')';
21 i++;
22 }
23
24 for (j = s.options.length; j >= i ; j--)
25 {
26 s.options.remove(j);
27 }
28
29 return false;
30 }
31
32 function refresh_err_msg(errorFieldMap)
33 {
34 document.getElementsByName("err_msg").forEach(element => {
35 element.innerHTML = (errorFieldMap.has(element.id) ? errorFieldMap.get(element.id) : "");
36 });
37 }
38
39 function refresh_textarea(updateFieldMap)
40 {
41 document.getElementsByName("textarea").forEach(element => {
42 if (updateFieldMap.has(element.id))
43 {
44 element.value = updateFieldMap.get(element.id);
45 }
46 });
47 }
48
49 function section_setting(f)
50 {
51 instance.post('section_setting_service.php', {
52 sid: <?= $result_set["data"]["sid"]; ?>,
53 sname: f.sname.value,
54 title: f.title.value,
55 comment: f.textarea_comment.value,
56 announcement: f.textarea_announcement.value,
57 exp_get: (f.exp_get.checked ? "1" : "0"),
58 recommend: (f.recommend.checked ? "1" : "0"),
59 read_user_level: f.read_user_level.value,
60 write_user_level: f.write_user_level.value,
61 sort_order: f.sort_order.value,
62 ex_update: (f.ex_update.checked ? "1" : "0"),
63 })
64 .then(function (response) {
65 var ret = response.data;
66 var errorFieldMap = new Map();
67 var updateFieldMap = new Map();
68 switch (ret.return.code)
69 {
70 case 0: // OK
71 errorFieldMap.set("err_msg_prompt", "更新成功");
72 refresh_err_msg(errorFieldMap);
73 break;
74 case -1: // Input validation failed
75 ret.return.errorFields.forEach(field => {
76 errorFieldMap.set("err_msg_" + field.id, field.errMsg + "<br />");
77 updateFieldMap.set("textarea_" + field.id, field.updateValue);
78 });
79 refresh_err_msg(errorFieldMap);
80 refresh_textarea(updateFieldMap);
81 break;
82 case -2: // Internal error
83 console.log(ret.return.message);
84 errorFieldMap.set("err_msg_prompt", "内部错误");
85 refresh_err_msg(errorFieldMap);
86 break;
87 default:
88 console.log(ret.return.code);
89 break;
90 }
91 })
92 .catch(function (error) {
93 console.log(error);
94 });
95
96 return false;
97 }
98
99 function ex_dir_op(f, op)
100 {
101 instance.post('ex_dir_service.php', {
102 sid: <?= $result_set["data"]["sid"]; ?>,
103 current_dir: f.current_dir.value,
104 dir: f.dir.value,
105 dir_name: f.dir_name.value,
106 dir_op: op,
107 })
108 .then(function (response) {
109 var ret = response.data;
110 var errorFieldMap = new Map();
111 switch (ret.return.code)
112 {
113 case 0: // OK
114 if (op != 0)
115 {
116 errorFieldMap.set("err_msg_current_dir", "操作成功");
117 }
118 refresh_err_msg(errorFieldMap);
119 refresh_ex_dir(f.current_dir, ret.return.data.ex_dir);
120 break;
121 case -1: // Input validation failed
122 ret.return.errorFields.forEach(field => {
123 errorFieldMap.set("err_msg_" + field.id, field.errMsg + "<br />");
124 });
125 refresh_err_msg(errorFieldMap);
126 break;
127 case -2: // Internal error
128 console.log(ret.return.message);
129 errorFieldMap.set("err_msg_current_dir", "内部错误");
130 refresh_err_msg(errorFieldMap);
131 break;
132 default:
133 console.log(ret.return.code);
134 break;
135 }
136 })
137 .catch(function (error) {
138 console.log(error);
139 });
140
141 return false;
142 }
143
144 function master_op(f, op, username)
145 {
146 instance.post('section_master_service.php', {
147 sid: <?= $result_set["data"]["sid"]; ?>,
148 op: op,
149 username: (username != null ? username : f.master_username.value),
150 type: f.master_type.value,
151 })
152 .then(function (response) {
153 var ret = response.data;
154 var errorFieldMap = new Map();
155 switch (ret.return.code)
156 {
157 case 0: // OK
158 refresh_err_msg(errorFieldMap);
159 document.location = "section_setting.php?sid=<?= $result_set["data"]["sid"]; ?>&ts=" + Date.now();
160 break;
161 case -1: // Input validation failed
162 ret.return.errorFields.forEach(field => {
163 errorFieldMap.set("err_msg_" + field.id, field.errMsg + "<br />");
164 });
165 refresh_err_msg(errorFieldMap);
166 break;
167 case -2: // Internal error
168 console.log(ret.return.message);
169 errorFieldMap.set("err_msg_master", "内部错误");
170 refresh_err_msg(errorFieldMap);
171 break;
172 default:
173 console.log(ret.return.code);
174 break;
175 }
176 })
177 .catch(function (error) {
178 console.log(error);
179 });
180
181 return false;
182 }
183
184 const instance = axios.create({
185 withCredentials: true,
186 timeout: 3000,
187 baseURL: document.location.protocol + '//' + document.location.hostname + (document.location.port=='' ? '' : (':' + document.location.port)) + '/bbs/',
188 });
189
190 window.addEventListener("load", () => {
191 var f = document.getElementById("section_setting");
192 ex_dir_op(f, 0); // Load dir list
193 f.addEventListener("submit", (e) => {
194 e.preventDefault();
195 switch(e.submitter.name)
196 {
197 case "submit":
198 section_setting(f);
199 break;
200 case "master_appoint":
201 master_op(f, 1, null);
202 break;
203 case "dir_create":
204 ex_dir_op(f, 1);
205 break;
206 case "dir_update":
207 ex_dir_op(f, 2);
208 break;
209 case "dir_delete":
210 ex_dir_op(f, 3);
211 break;
212 default:
213 console.log(e.submitter.name);
214 break;
215 }
216 });
217
218 var s = document.getElementById("section_switch");
219 s.addEventListener("change", (e) => {
220 if (s.value != 0)
221 {
222 document.location = "section_setting.php?sid=" + s.value + "&ts=" + Date.now();
223 }
224 });
225
226 <?php
227 $user_level_types = array("read_user_level", "write_user_level");
228
229 foreach ($user_level_types as $t)
230 {
231 ?>
232 var l = document.getElementById("<?= $t; ?>");
233 var found = false;
234 for (i = 0; !found && i < l.options.length; i++)
235 {
236 if (l.options[i].value == <?= $result_set["data"][$t]; ?>)
237 {
238 l.selectedIndex = i;
239 found = true;
240 }
241 }
242
243 for (i = 0; !found && i < l.options.length; i++)
244 {
245 if (l.options[i].value >= <?= $result_set["data"][$t]; ?>)
246 {
247 l.selectedIndex = i;
248 found = true;
249 }
250 }
251 <?php
252 }
253 ?>
254
255 var s_sort = document.getElementById("sort_order");
256 for (i = 0; i < s_sort.options.length; i++)
257 {
258 if (s_sort.options[i].value == <?= $result_set["data"]["sort_order"]; ?>)
259 {
260 s_sort.selectedIndex = i;
261 break;
262 }
263 }
264 });
265
266 </script>
267 </head>
268 <body>
269 <center>
270 <p style="FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: red; FONT-FAMILY: 楷体">版块设定</p>
271 <p><span id="err_msg_prompt" name="err_msg" style="color: red"></span></p>
272 <form method="post" action="#" id="section_setting" name="section_setting" >
273 <table border="1" cellpadding="10" cellspacing="0" width="1050" bgcolor="#ffdead">
274 <tr>
275 <td width="25%" align="right">
276 操作版块
277 </td>
278 <td width="75%">
279 <select id="section_switch" name="section_switch" size="1">
280 <?php
281 foreach ($result_set["data"]["section_hierachy"] as $c_index => $section_class)
282 {
283 ?>
284 <option value="0">==<?= $section_class["title"]; ?>==</option>
285 <?php
286 foreach ($section_class["sections"] as $s_index => $section)
287 {
288 ?>
289 <option value="<?= $section["sid"]; ?>" <?= ($section["sid"] == $result_set["data"]["sid"] ? "selected" : ""); ?>>&nbsp;&nbsp;├<?= $section["title"]; ?></option>
290 <?php
291 }
292 }
293 ?>
294 </select>
295 </td>
296 </tr>
297 <tr>
298 <td width="25%" align="right">
299 版块名称
300 </td>
301 <td width="75%">
302 <span id="err_msg_sname" name="err_msg" style="color: red;"></span>
303 <input id="sname" name="sname" size="20" value="<?= htmlspecialchars($result_set["data"]["sname"], ENT_QUOTES | ENT_HTML401, 'UTF-8'); ?>"
304 <?= ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>
305 <br />1-20位大小写字母、数字、下划线的组合,必须以字母开头
306 </td>
307 </tr>
308 <tr>
309 <td width="25%" align="right">
310 版块标题
311 </td>
312 <td width="75%">
313 <span id="err_msg_title" name="err_msg" style="color: red;"></span>
314 <input id="title" name="title" size="20" value="<?= htmlspecialchars($result_set["data"]["title"], ENT_QUOTES | ENT_HTML401, 'UTF-8'); ?>"
315 <?= ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>
316 <br />长度不超过10个全角字符,不能包含空格和HTML特殊语义字符
317 </td>
318 </tr>
319 <tr>
320 <td align="right">
321 版块介绍
322 </td>
323 <td>
324 <span id="err_msg_comment" name="err_msg" style="color: red;"></span>
325 <textarea id="textarea_comment" name="textarea" cols="80" rows="5"><?= htmlspecialchars($result_set["data"]["comment"], ENT_HTML401, 'UTF-8'); ?></textarea>
326 <br />限3行80列以内
327 </td>
328 </tr>
329 <tr>
330 <td align="right">
331 版块公告
332 </td>
333 <td>
334 <span id="err_msg_announcement" name="err_msg" style="color: red;"></span>
335 <textarea id="textarea_announcement" name="textarea" cols="80" rows="5"><?= htmlspecialchars($result_set["data"]["announcement"], ENT_HTML401, 'UTF-8'); ?></textarea>
336 <br />限3行以内,每行不超过150字符
337 </td>
338 </tr>
339 <tr>
340 <td width="25%" align="right">
341 版块属性
342 </td>
343 <td width="75%">
344 <span id="err_msg_flag" name="err_msg" style="color: red;"></span>
345 <input type="checkbox" id="exp_get" name="exp_get" <?= ($result_set["data"]["exp_get"] ? "checked" : ""); ?>
346 <?= ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>经验&nbsp;&nbsp;&nbsp;
347 <input type="checkbox" id="recommend" name="recommend" <?= ($result_set["data"]["recommend"] ? "checked" : ""); ?>
348 <?= ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>推荐&nbsp;&nbsp;&nbsp;
349 <select id="read_user_level" name="read_user_level" size="1"
350 <?= ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>
351 <?php
352 foreach (user_priv::$user_level_list as $level)
353 {
354 ?>
355 <option value="<?= $level; ?>"><?= user_priv::s_levelname($level); ?></option>
356 <?php
357 }
358 ?>
359 </select>可读&nbsp;&nbsp;&nbsp;
360 <select id="write_user_level" name="write_user_level" size="1"
361 <?= ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>
362 <?php
363 foreach (user_priv::$user_level_list as $level)
364 {
365 if ($level < P_USER) // Guests are not allowed to write
366 {
367 continue;
368 }
369 ?>
370 <option value="<?= $level; ?>"><?= user_priv::s_levelname($level); ?></option>
371 <?php
372 }
373 ?>
374 </select>可写&nbsp;&nbsp;&nbsp;
375 位于
376 <select id="sort_order" name="sort_order" size="1"
377 <?= ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>
378 <?php
379 $class_sections = $result_set["data"]["class_sections"];
380 for ($i = 0; $i < count($class_sections); $i++)
381 {
382 ?>
383 <option value="<?= ($i + 1); ?>">
384 <?= $class_sections[$i]["title"]; ?>
385 <?= ($i + 1 < $result_set["data"]["sort_order"] ? "之前" : ($i + 1 > $result_set["data"]["sort_order"] ? "之后" : "")); ?>
386
387 </option>
388 <?php
389 }
390 ?>
391 </select><br />
392 </td>
393 </tr>
394 <?php
395 if ($_SESSION["BBS_priv"]->checkpriv($sid, S_MAN_M))
396 {
397 ?>
398 <tr>
399 <td align="right">
400 版主任命
401 </td>
402 <td>
403 <p><span id="err_msg_master" name="err_msg" style="color: red;"></span></p>
404 <?php
405 $has_major = false;
406 foreach ($result_set["data"]["masters"] as $m_index => $section_master)
407 {
408 if (!$has_major && $section_master["major"])
409 {
410 $has_major = true;
411 }
412 ?>
413 <p>
414 <?= ($section_master["major"] ? "正版主" : "副版主"); ?>&nbsp;&nbsp;
415 <a class="s3" href="show_profile.php?uid=<?= $section_master['uid']; ?>" target=_blank><?= $section_master["username"]; ?></a>&nbsp;&nbsp;
416 <?= (new DateTimeImmutable($section_master["begin_dt"]))->setTimezone($_SESSION["BBS_user_tz"])->format("y年m月d日"); ?>--<?= (new DateTimeImmutable($section_master["end_dt"]))->setTimezone($_SESSION["BBS_user_tz"])->format("y年m月d日"); ?>&nbsp;&nbsp;
417 <?php
418 if ($_SESSION["BBS_priv"]->checkpriv($sid, S_ADMIN) || $section_master["major"] == 0)
419 {
420 ?>
421 <a class="s2" href="#" onclick="return master_op(section_setting, 2, '<?= $section_master["username"]; ?>');">撤销</a>&nbsp;&nbsp;
422 <a class="s2" href="#" onclick="return master_op(section_setting, 3, '<?= $section_master["username"]; ?>');">延期</a>&nbsp;&nbsp;
423 <?php
424 }
425 ?>
426 </p>
427 <?php
428 }
429 ?>
430 <p>
431 用户名:
432 <input type="text" id="master_username" name="master_username" size="20">
433 <input type="radio" id="master_major" name="master_type" value="1" <?= ($has_major ? "disabled" : "checked"); ?>>正版主
434 <input type="radio" id="master_minor" name="master_type" value="0" <?= ($has_major ? "checked" : ""); ?>>副版主&nbsp;&nbsp;
435 <input type="submit" name="master_appoint" value="任命">&nbsp;&nbsp;
436 <span id="err_msg_username" name="err_msg" style="color: red;"></span>
437 </p>
438 </td>
439 </tr>
440 <?php
441 }
442 ?>
443 <tr>
444 <td align="right">
445 精华更新
446 </td>
447 <td>
448 <span id="err_msg_ex_update" name="err_msg" style="color: red;"></span>
449 <input type="checkbox" name="ex_update" <?= ($result_set["data"]["ex_update"] ? "checked" : ""); ?>>申请更新
450 </td>
451 </tr>
452 <tr>
453 <td align="right">
454 目录管理
455 </td>
456 <td>
457 <p><span id="err_msg_current_dir" name="err_msg" style="color: red;"></span></p>
458 <p>位置:<select id="current_dir" name="current_dir" size="1">
459 </select></p>
460 <p><span id="err_msg_dir" name="err_msg" style="color: red;"></span>
461 目录:<input id="dir" name="dir" value="" size="50">
462 大小写英文字母、数字和下划线的组合,长度不超过20</p>
463 <p><span id="err_msg_dir_name" name="err_msg" style="color: red;"></span>
464 名称:<input id="dir_name" name="dir_name" value="" size="50">
465 长度不超过15个全角字符</p>
466 <p><span id="err_msg_dir_op" name="err_msg" style="color: red;"></span>&nbsp;&nbsp;&nbsp;&nbsp;
467 <input type="submit" name="dir_create" value="新增">&nbsp;&nbsp;&nbsp;&nbsp;
468 <input type="submit" name="dir_update" value="改名">&nbsp;&nbsp;&nbsp;&nbsp;
469 <input type="submit" name="dir_delete" value="删除">
470 </p>
471 </td>
472 </tr>
473 </table>
474 <p align="center">
475 <input type="submit" value="提交" name="submit">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
476 <input type="reset" value="重填" name="reset">
477 </p>
478 </form>
479 </center>
480 </body>
481 </html>

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1