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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (hide annotations)
Wed Apr 16 08:38:44 2025 UTC (11 months ago) by sysadm
Branch: MAIN
Changes since 1.6: +124 -1 lines
Merge section config feature from admin portal to section_setting page

1 sysadm 1.1 <html>
2     <head>
3     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4     <title>版块设定</title>
5     <link rel="stylesheet" href="<? echo 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 sysadm 1.2 sid: <? echo $result_set["data"]["sid"]; ?>,
53 sysadm 1.7 sname: f.sname.value,
54     title: f.title.value,
55 sysadm 1.1 comment: f.textarea_comment.value,
56     announcement: f.textarea_announcement.value,
57 sysadm 1.7 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 sysadm 1.1 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 sysadm 1.2 sid: <? echo $result_set["data"]["sid"]; ?>,
103 sysadm 1.1 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 sysadm 1.3 if (op != 0)
115     {
116     errorFieldMap.set("err_msg_current_dir", "操作成功");
117     }
118 sysadm 1.1 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 sysadm 1.4 function master_op(f, op, username)
145     {
146     instance.post('section_master_service.php', {
147     sid: <? echo $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=<? echo $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 sysadm 1.1 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 sysadm 1.2 ex_dir_op(f, 0); // Load dir list
193 sysadm 1.1 f.addEventListener("submit", (e) => {
194     e.preventDefault();
195     switch(e.submitter.name)
196     {
197     case "submit":
198     section_setting(f);
199     break;
200 sysadm 1.4 case "master_appoint":
201     master_op(f, 1, null);
202     break;
203 sysadm 1.1 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 sysadm 1.2
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 sysadm 1.7
226     <?
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("<? echo $t; ?>");
233     var found = false;
234     for (i = 0; !found && i < l.options.length; i++)
235     {
236     if (l.options[i].value == <? echo $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 >= <? echo $result_set["data"][$t]; ?>)
246     {
247     l.selectedIndex = i;
248     found = true;
249     }
250     }
251     <?
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 == <? echo $result_set["data"]["sort_order"]; ?>)
259     {
260     s_sort.selectedIndex = i;
261     break;
262     }
263     }
264 sysadm 1.1 });
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 sysadm 1.6 <table border="1" cellpadding="10" cellspacing="0" width="1050" bgcolor="#ffdead">
274 sysadm 1.1 <tr>
275 sysadm 1.6 <td width="25%" align="right">
276 sysadm 1.7 操作版块
277 sysadm 1.1 </td>
278 sysadm 1.6 <td width="75%">
279 sysadm 1.2 <select id="section_switch" name="section_switch" size="1">
280     <?
281     foreach ($result_set["data"]["section_hierachy"] as $c_index => $section_class)
282     {
283     ?>
284     <option value="0">==<? echo $section_class["title"]; ?>==</option>
285     <?
286     foreach ($section_class["sections"] as $s_index => $section)
287     {
288     ?>
289     <option value="<? echo $section["sid"]; ?>" <? echo ($section["sid"] == $result_set["data"]["sid"] ? "selected" : ""); ?>>&nbsp;&nbsp;├<? echo $section["title"]; ?></option>
290     <?
291     }
292     }
293     ?>
294     </select>
295 sysadm 1.1 </td>
296     </tr>
297     <tr>
298 sysadm 1.7 <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="<? echo htmlspecialchars($result_set["data"]["sname"], ENT_QUOTES | ENT_HTML401, 'UTF-8'); ?>"
304     <? echo ($_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="<? echo htmlspecialchars($result_set["data"]["title"], ENT_QUOTES | ENT_HTML401, 'UTF-8'); ?>"
315     <? echo ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>
316     <br />长度不超过10个全角字符,不能包含空格和HTML特殊语义字符
317     </td>
318     </tr>
319     <tr>
320 sysadm 1.1 <td align="right">
321     版块介绍
322     </td>
323     <td>
324 sysadm 1.2 <span id="err_msg_comment" name="err_msg" style="color: red;"></span>
325     <textarea id="textarea_comment" name="textarea" cols="80" rows="5"><? echo htmlspecialchars($result_set["data"]["comment"], ENT_HTML401, 'UTF-8'); ?></textarea>
326 sysadm 1.6 <br />限3行80列以内
327 sysadm 1.1 </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 sysadm 1.2 <textarea id="textarea_announcement" name="textarea" cols="80" rows="5"><? echo htmlspecialchars($result_set["data"]["announcement"], ENT_HTML401, 'UTF-8'); ?></textarea>
336 sysadm 1.6 <br />限3行以内,每行不超过150字符
337 sysadm 1.1 </td>
338     </tr>
339 sysadm 1.7 <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" <? echo ($result_set["data"]["exp_get"] ? "checked" : ""); ?>
346     <? echo ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>经验&nbsp;&nbsp;&nbsp;
347     <input type="checkbox" id="recommend" name="recommend" <? echo ($result_set["data"]["recommend"] ? "checked" : ""); ?>
348     <? echo ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>推荐&nbsp;&nbsp;&nbsp;
349     <select id="read_user_level" name="read_user_level" size="1"
350     <? echo ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>
351     <?
352     foreach (user_priv::$user_level_list as $level)
353     {
354     ?>
355     <option value="<? echo $level; ?>"><? echo user_priv::s_levelname($level); ?></option>
356     <?
357     }
358     ?>
359     </select>可读&nbsp;&nbsp;&nbsp;
360     <select id="write_user_level" name="write_user_level" size="1"
361     <? echo ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>
362     <?
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="<? echo $level; ?>"><? echo user_priv::s_levelname($level); ?></option>
371     <?
372     }
373     ?>
374     </select>可写&nbsp;&nbsp;&nbsp;
375     位于
376     <select id="sort_order" name="sort_order" size="1"
377     <? echo ($_SESSION["BBS_priv"]->checklevel(P_ADMIN_M) ? "" : "disabled"); ?>>
378     <?
379     $class_sections = $result_set["data"]["class_sections"];
380     for ($i = 0; $i < count($class_sections); $i++)
381     {
382     ?>
383     <option value="<? echo ($i + 1); ?>">
384     <? echo $class_sections[$i]["title"]; ?>
385     <? echo ($i + 1 < $result_set["data"]["sort_order"] ? "之前" : ($i + 1 > $result_set["data"]["sort_order"] ? "之后" : "")); ?>
386    
387     </option>
388     <?
389     }
390     ?>
391     </select><br />
392     </td>
393     </tr>
394 sysadm 1.4 <?
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     <?
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     <? echo ($section_master["major"] ? "正版主" : "副版主"); ?>&nbsp;&nbsp;
415     <a class="s3" href="show_profile.php?uid=<? echo $section_master['uid']; ?>" target=_blank><? echo $section_master["username"]; ?></a>&nbsp;&nbsp;
416     <? echo (new DateTimeImmutable($section_master["begin_dt"]))->setTimezone($_SESSION["BBS_user_tz"])->format("y年m月d日"); ?>--<? echo (new DateTimeImmutable($section_master["end_dt"]))->setTimezone($_SESSION["BBS_user_tz"])->format("y年m月d日"); ?>&nbsp;&nbsp;
417     <?
418 sysadm 1.5 if ($_SESSION["BBS_priv"]->checkpriv($sid, S_ADMIN) || $section_master["major"] == 0)
419 sysadm 1.4 {
420     ?>
421     <a class="s2" href="#" onclick="return master_op(section_setting, 2, '<? echo $section_master["username"]; ?>');">撤销</a>&nbsp;&nbsp;
422     <a class="s2" href="#" onclick="return master_op(section_setting, 3, '<? echo $section_master["username"]; ?>');">延期</a>&nbsp;&nbsp;
423     <?
424     }
425     ?>
426     </p>
427     <?
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" <? echo ($has_major ? "disabled" : "checked"); ?>>正版主
434     <input type="radio" id="master_minor" name="master_type" value="0" <? echo ($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     <?
441     }
442     ?>
443 sysadm 1.1 <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 sysadm 1.2 <input type="checkbox" name="ex_update" <? echo ($result_set["data"]["ex_update"] ? "checked" : ""); ?>>申请更新
450 sysadm 1.1 </td>
451     </tr>
452     <tr>
453     <td align="right">
454     目录管理
455     </td>
456     <td>
457 sysadm 1.4 <p><span id="err_msg_current_dir" name="err_msg" style="color: red;"></span></p>
458 sysadm 1.1 <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