/[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.4 - (show annotations)
Wed Apr 9 04:10:57 2025 UTC (11 months, 1 week ago) by sysadm
Branch: MAIN
Changes since 1.3: +95 -1 lines
Add section master operation

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 sid: <? echo $result_set["data"]["sid"]; ?>,
53 comment: f.textarea_comment.value,
54 announcement: f.textarea_announcement.value,
55 ex_update: (f.ex_update.checked ? "1" : "0"),
56 })
57 .then(function (response) {
58 var ret = response.data;
59 var errorFieldMap = new Map();
60 var updateFieldMap = new Map();
61 switch (ret.return.code)
62 {
63 case 0: // OK
64 errorFieldMap.set("err_msg_prompt", "更新成功");
65 refresh_err_msg(errorFieldMap);
66 break;
67 case -1: // Input validation failed
68 ret.return.errorFields.forEach(field => {
69 errorFieldMap.set("err_msg_" + field.id, field.errMsg + "<br />");
70 updateFieldMap.set("textarea_" + field.id, field.updateValue);
71 });
72 refresh_err_msg(errorFieldMap);
73 refresh_textarea(updateFieldMap);
74 break;
75 case -2: // Internal error
76 console.log(ret.return.message);
77 errorFieldMap.set("err_msg_prompt", "内部错误");
78 refresh_err_msg(errorFieldMap);
79 break;
80 default:
81 console.log(ret.return.code);
82 break;
83 }
84 })
85 .catch(function (error) {
86 console.log(error);
87 });
88
89 return false;
90 }
91
92 function ex_dir_op(f, op)
93 {
94 instance.post('ex_dir_service.php', {
95 sid: <? echo $result_set["data"]["sid"]; ?>,
96 current_dir: f.current_dir.value,
97 dir: f.dir.value,
98 dir_name: f.dir_name.value,
99 dir_op: op,
100 })
101 .then(function (response) {
102 var ret = response.data;
103 var errorFieldMap = new Map();
104 switch (ret.return.code)
105 {
106 case 0: // OK
107 if (op != 0)
108 {
109 errorFieldMap.set("err_msg_current_dir", "操作成功");
110 }
111 refresh_err_msg(errorFieldMap);
112 refresh_ex_dir(f.current_dir, ret.return.data.ex_dir);
113 break;
114 case -1: // Input validation failed
115 ret.return.errorFields.forEach(field => {
116 errorFieldMap.set("err_msg_" + field.id, field.errMsg + "<br />");
117 });
118 refresh_err_msg(errorFieldMap);
119 break;
120 case -2: // Internal error
121 console.log(ret.return.message);
122 errorFieldMap.set("err_msg_current_dir", "内部错误");
123 refresh_err_msg(errorFieldMap);
124 break;
125 default:
126 console.log(ret.return.code);
127 break;
128 }
129 })
130 .catch(function (error) {
131 console.log(error);
132 });
133
134 return false;
135 }
136
137 function master_op(f, op, username)
138 {
139 instance.post('section_master_service.php', {
140 sid: <? echo $result_set["data"]["sid"]; ?>,
141 op: op,
142 username: (username != null ? username : f.master_username.value),
143 type: f.master_type.value,
144 })
145 .then(function (response) {
146 var ret = response.data;
147 var errorFieldMap = new Map();
148 switch (ret.return.code)
149 {
150 case 0: // OK
151 refresh_err_msg(errorFieldMap);
152 document.location = "section_setting.php?sid=<? echo $result_set["data"]["sid"]; ?>&ts=" + Date.now();
153 break;
154 case -1: // Input validation failed
155 ret.return.errorFields.forEach(field => {
156 errorFieldMap.set("err_msg_" + field.id, field.errMsg + "<br />");
157 });
158 refresh_err_msg(errorFieldMap);
159 break;
160 case -2: // Internal error
161 console.log(ret.return.message);
162 errorFieldMap.set("err_msg_master", "内部错误");
163 refresh_err_msg(errorFieldMap);
164 break;
165 default:
166 console.log(ret.return.code);
167 break;
168 }
169 })
170 .catch(function (error) {
171 console.log(error);
172 });
173
174 return false;
175 }
176
177 const instance = axios.create({
178 withCredentials: true,
179 timeout: 3000,
180 baseURL: document.location.protocol + '//' + document.location.hostname + (document.location.port=='' ? '' : (':' + document.location.port)) + '/bbs/',
181 });
182
183 window.addEventListener("load", () => {
184 var f = document.getElementById("section_setting");
185 ex_dir_op(f, 0); // Load dir list
186 f.addEventListener("submit", (e) => {
187 e.preventDefault();
188 switch(e.submitter.name)
189 {
190 case "submit":
191 section_setting(f);
192 break;
193 case "master_appoint":
194 master_op(f, 1, null);
195 break;
196 case "dir_create":
197 ex_dir_op(f, 1);
198 break;
199 case "dir_update":
200 ex_dir_op(f, 2);
201 break;
202 case "dir_delete":
203 ex_dir_op(f, 3);
204 break;
205 default:
206 console.log(e.submitter.name);
207 break;
208 }
209 });
210
211 var s = document.getElementById("section_switch");
212 s.addEventListener("change", (e) => {
213 if (s.value != 0)
214 {
215 document.location = "section_setting.php?sid=" + s.value + "&ts=" + Date.now();
216 }
217 });
218 });
219
220 </script>
221 </head>
222 <body>
223 <center>
224 <p style="FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: red; FONT-FAMILY: 楷体">版块设定</p>
225 <p><span id="err_msg_prompt" name="err_msg" style="color: red"></span></p>
226 <form method="post" action="#" id="section_setting" name="section_setting" >
227 <table border="1" cellpadding="10" cellspacing="0" width="90%" bgcolor="#ffdead">
228 <tr>
229 <td width="30%" align="right">
230 版块名称
231 </td>
232 <td width="70%">
233 <select id="section_switch" name="section_switch" size="1">
234 <?
235 foreach ($result_set["data"]["section_hierachy"] as $c_index => $section_class)
236 {
237 ?>
238 <option value="0">==<? echo $section_class["title"]; ?>==</option>
239 <?
240 foreach ($section_class["sections"] as $s_index => $section)
241 {
242 ?>
243 <option value="<? echo $section["sid"]; ?>" <? echo ($section["sid"] == $result_set["data"]["sid"] ? "selected" : ""); ?>>&nbsp;&nbsp;├<? echo $section["title"]; ?></option>
244 <?
245 }
246 }
247 ?>
248 </select>
249 </td>
250 </tr>
251 <tr>
252 <td align="right">
253 版块介绍
254 </td>
255 <td>
256 <span id="err_msg_comment" name="err_msg" style="color: red;"></span>
257 <textarea id="textarea_comment" name="textarea" cols="80" rows="5"><? echo htmlspecialchars($result_set["data"]["comment"], ENT_HTML401, 'UTF-8'); ?></textarea>
258 限3行80列以内
259 </td>
260 </tr>
261 <tr>
262 <td align="right">
263 版块公告
264 </td>
265 <td>
266 <span id="err_msg_announcement" name="err_msg" style="color: red;"></span>
267 <textarea id="textarea_announcement" name="textarea" cols="80" rows="5"><? echo htmlspecialchars($result_set["data"]["announcement"], ENT_HTML401, 'UTF-8'); ?></textarea>
268 限3行以内,每行不超过150字符
269 </td>
270 </tr>
271 <?
272 if ($_SESSION["BBS_priv"]->checkpriv($sid, S_MAN_M))
273 {
274 ?>
275 <tr>
276 <td align="right">
277 版主任命
278 </td>
279 <td>
280 <p><span id="err_msg_master" name="err_msg" style="color: red;"></span></p>
281 <?
282 $has_major = false;
283 foreach ($result_set["data"]["masters"] as $m_index => $section_master)
284 {
285 if (!$has_major && $section_master["major"])
286 {
287 $has_major = true;
288 }
289 ?>
290 <p>
291 <? echo ($section_master["major"] ? "正版主" : "副版主"); ?>&nbsp;&nbsp;
292 <a class="s3" href="show_profile.php?uid=<? echo $section_master['uid']; ?>" target=_blank><? echo $section_master["username"]; ?></a>&nbsp;&nbsp;
293 <? 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;
294 <?
295 if ($section_master["username"] != $_SESSION["BBS_username"] &&
296 ($_SESSION["BBS_priv"]->checkpriv($sid, S_ADMIN) ||
297 ($section_master["major"] == 0 && $_SESSION["BBS_priv"]->checkpriv($sid, S_MAN_M))))
298 {
299 ?>
300 <a class="s2" href="#" onclick="return master_op(section_setting, 2, '<? echo $section_master["username"]; ?>');">撤销</a>&nbsp;&nbsp;
301 <a class="s2" href="#" onclick="return master_op(section_setting, 3, '<? echo $section_master["username"]; ?>');">延期</a>&nbsp;&nbsp;
302 <?
303 }
304 ?>
305 </p>
306 <?
307 }
308 ?>
309 <p>
310 用户名:
311 <input type="text" id="master_username" name="master_username" size="20">
312 <input type="radio" id="master_major" name="master_type" value="1" <? echo ($has_major ? "disabled" : "checked"); ?>>正版主
313 <input type="radio" id="master_minor" name="master_type" value="0" <? echo ($has_major ? "checked" : ""); ?>>副版主&nbsp;&nbsp;
314 <input type="submit" name="master_appoint" value="任命">&nbsp;&nbsp;
315 <span id="err_msg_username" name="err_msg" style="color: red;"></span>
316 </p>
317 </td>
318 </tr>
319 <?
320 }
321 ?>
322 <tr>
323 <td align="right">
324 精华更新
325 </td>
326 <td>
327 <span id="err_msg_ex_update" name="err_msg" style="color: red;"></span>
328 <input type="checkbox" name="ex_update" <? echo ($result_set["data"]["ex_update"] ? "checked" : ""); ?>>申请更新
329 </td>
330 </tr>
331 <tr>
332 <td align="right">
333 目录管理
334 </td>
335 <td>
336 <p><span id="err_msg_current_dir" name="err_msg" style="color: red;"></span></p>
337 <p>位置:<select id="current_dir" name="current_dir" size="1">
338 </select></p>
339 <p><span id="err_msg_dir" name="err_msg" style="color: red;"></span>
340 目录:<input id="dir" name="dir" value="" size="50">
341 大小写英文字母、数字和下划线的组合,长度不超过20</p>
342 <p><span id="err_msg_dir_name" name="err_msg" style="color: red;"></span>
343 名称:<input id="dir_name" name="dir_name" value="" size="50">
344 长度不超过15个全角字符</p>
345 <p><span id="err_msg_dir_op" name="err_msg" style="color: red;"></span>&nbsp;&nbsp;&nbsp;&nbsp;
346 <input type="submit" name="dir_create" value="新增">&nbsp;&nbsp;&nbsp;&nbsp;
347 <input type="submit" name="dir_update" value="改名">&nbsp;&nbsp;&nbsp;&nbsp;
348 <input type="submit" name="dir_delete" value="删除">
349 </p>
350 </td>
351 </tr>
352 </table>
353 <p align="center">
354 <input type="submit" value="提交" name="submit">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
355 <input type="reset" value="重填" name="reset">
356 </p>
357 </form>
358 </center>
359 </body>
360 </html>

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