/[LeafOK_CVS]/fenglin/bbs/ex_dir_service.php
ViewVC logotype

Contents of /fenglin/bbs/ex_dir_service.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Tue Apr 8 09:29:17 2025 UTC (11 months, 1 week ago) by sysadm
Branch: MAIN
Refact set_section with theme and AJAX support

1 <?
2 require_once "../lib/db_open.inc.php";
3 require_once "../lib/str_process.inc.php";
4 require_once "./check_sub.inc.php";
5 require_once "./session_init.inc.php";
6
7 $data = json_decode(file_get_contents("php://input"), true);
8
9 $sid = (isset($data["sid"]) ? intval($data["sid"]) : 0);
10 $current_dir = (isset($data["current_dir"]) ? trim($data["current_dir"]) : "");
11 $dir = (isset($data["dir"]) ? trim($data["dir"]) : "");
12 $dir_name = (isset($data["dir_name"]) ? trim($data["dir_name"]) : "");
13 $dir_op = (isset($data["dir_op"]) ? intval($data["dir_op"]) : 0);
14
15 $result_set = array(
16 "return" => array(
17 "code" => 0,
18 "message" => "",
19 "errorFields" => array(),
20 )
21 );
22
23 header("Content-Type:application/json; charset=utf-8");
24
25 // Validate input data
26 if (!preg_match("/^[A-Za-z0-9_\/]{0,50}$/", $current_dir))
27 {
28 $result_set["return"]["code"] = -1;
29 array_push($result_set["return"]["errorFields"], array(
30 "id" => "current_dir",
31 "errMsg" => "格式不正确",
32 ));
33 }
34
35 if (!preg_match("/^[A-Za-z0-9_]{0,20}$/", $dir))
36 {
37 $result_set["return"]["code"] = -1;
38 array_push($result_set["return"]["errorFields"], array(
39 "id" => "dir",
40 "errMsg" => "格式不正确",
41 ));
42 }
43
44 $r_dir_name = check_badwords(split_line(htmlspecialchars($dir_name, ENT_HTML401, 'UTF-8'), "", 30, 1), "****");
45 if ($dir_name != $r_dir_name)
46 {
47 $result_set["return"]["code"] = -1;
48 array_push($result_set["return"]["errorFields"], array(
49 "id" => "dir_name",
50 "errMsg" => "格式不正确",
51 ));
52 }
53
54 if ($result_set["return"]["code"] != 0)
55 {
56 mysqli_close($db_conn);
57 exit(json_encode($result_set));
58 }
59
60 if (!$_SESSION["BBS_priv"]->checkpriv($sid, S_POST | S_MAN_S))
61 {
62 $result_set["return"]["code"] = -1;
63 array_push($result_set["return"]["errorFields"], array(
64 "id" => "prompt",
65 "errMsg" => "没有权限",
66 ));
67
68 mysqli_close($db_conn);
69 exit(json_encode($result_set));
70 }
71
72 // Secure SQL statement
73 $dir_name = mysqli_real_escape_string($db_conn, $dir_name);
74
75 // Begin transaction
76 $rs = mysqli_query($db_conn, "SET autocommit=0");
77 if ($rs == false)
78 {
79 $result_set["return"]["code"] = -2;
80 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
81
82 mysqli_close($db_conn);
83 exit(json_encode($result_set));
84 }
85
86 $rs = mysqli_query($db_conn, "BEGIN");
87 if ($rs == false)
88 {
89 $result_set["return"]["code"] = -2;
90 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
91
92 mysqli_close($db_conn);
93 exit(json_encode($result_set));
94 }
95
96 if ($current_dir != "") // Not root
97 {
98 $sql = "SELECT FID, name FROM ex_dir WHERE dir = '$current_dir' AND enable";
99
100 $rs = mysqli_query($db_conn, $sql);
101 if ($rs == false)
102 {
103 $result_set["return"]["code"] = -2;
104 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
105
106 mysqli_close($db_conn);
107 exit(json_encode($result_set));
108 }
109
110 if ($row = mysqli_fetch_array($rs))
111 {
112 $fid = $row["FID"];
113 $old_name = $row["name"];
114 }
115 else // Not exist
116 {
117 $result_set["return"]["code"] = -1;
118 array_push($result_set["return"]["errorFields"], array(
119 "id" => "current_dir",
120 "errMsg" => "目录不存在",
121 ));
122
123 mysqli_close($db_conn);
124 exit(json_encode($result_set));
125 }
126 mysqli_free_result($rs);
127 }
128 else
129 {
130 $fid = 0; // Root
131 }
132
133 // Operation of ex_dir
134 switch($dir_op)
135 {
136 case 1: // Create
137 if ($dir == "" || $dir_name == "")
138 {
139 $result_set["return"]["code"] = -1;
140 array_push($result_set["return"]["errorFields"], array(
141 "id" => "dir",
142 "errMsg" => "目录和名称都不能为空",
143 ));
144
145 mysqli_close($db_conn);
146 exit(json_encode($result_set));
147 }
148
149 $sql = "SELECT FID FROM ex_dir WHERE SID = $sid AND dir = '$current_dir$dir/'";
150
151 $rs = mysqli_query($db_conn, $sql);
152 if ($rs == false)
153 {
154 $result_set["return"]["code"] = -2;
155 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
156
157 mysqli_close($db_conn);
158 exit(json_encode($result_set));
159 }
160
161 if (mysqli_num_rows($rs) > 0)
162 {
163 $result_set["return"]["code"] = -1;
164 array_push($result_set["return"]["errorFields"], array(
165 "id" => "dir",
166 "errMsg" => "目录已存在",
167 ));
168
169 mysqli_close($db_conn);
170 exit(json_encode($result_set));
171 }
172 mysqli_free_result($rs);
173
174 $sql = "INSERT INTO ex_dir(dir, name, SID, enable, dt) VALUES
175 ('$current_dir$dir/', '$dir_name', $sid, 1, now())";
176
177 $rs = mysqli_query($db_conn, $sql);
178 if ($rs == false)
179 {
180 $result_set["return"]["code"] = -2;
181 $result_set["return"]["message"] = "Create ex_dir error: " . mysqli_error($db_conn);
182
183 mysqli_close($db_conn);
184 exit(json_encode($result_set));
185 }
186
187 break; // case 1: Create
188 case 2: // Update
189 if ($fid == 0) // if ($current_dir == "")
190 {
191 $result_set["return"]["code"] = -1;
192 array_push($result_set["return"]["errorFields"], array(
193 "id" => "current_dir",
194 "errMsg" => "根目录不能改名",
195 ));
196
197 mysqli_close($db_conn);
198 exit(json_encode($result_set));
199 }
200
201 if ($dir == "" && $dir_name == "")
202 {
203 $result_set["return"]["code"] = -1;
204 array_push($result_set["return"]["errorFields"], array(
205 "id" => "dir",
206 "errMsg" => "目录和名称不能同时为空",
207 ));
208
209 mysqli_close($db_conn);
210 exit(json_encode($result_set));
211 }
212
213 $old_dir = substr($current_dir, strrpos("/" . $current_dir, "/", -2));
214 $old_dir = substr($old_dir, 0, strlen($old_dir) - 1);
215 if ($dir == $old_dir && $dir_name == $old_name)
216 {
217 $result_set["return"]["code"] = -1;
218 array_push($result_set["return"]["errorFields"], array(
219 "id" => "dir",
220 "errMsg" => "没有更改",
221 ));
222
223 mysqli_close($db_conn);
224 exit(json_encode($result_set));
225 }
226
227 if ($dir != "" && $dir != $current_dir)
228 {
229 $parent_dir = substr($current_dir, 0, strrpos("/" . $current_dir, "/", -2));
230 $current_dir_len = strlen($current_dir);
231
232 $sql = "SELECT FID, dir FROM ex_dir WHERE SID = $sid AND dir LIKE '$current_dir%'";
233
234 $rs = mysqli_query($db_conn, $sql);
235 if ($rs == false)
236 {
237 $result_set["return"]["code"] = -2;
238 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
239
240 mysqli_close($db_conn);
241 exit(json_encode($result_set));
242 }
243
244 while ($row = mysqli_fetch_array($rs))
245 {
246 $child_dir = substr($row["dir"], $current_dir_len);
247
248 $sql = "UPDATE ex_dir SET dir = '$parent_dir$dir/$child_dir' WHERE FID = " . $row["FID"];
249
250 $rs_update = mysqli_query($db_conn, $sql);
251 if ($rs_update == false)
252 {
253 $result_set["return"]["code"] = -2;
254 $result_set["return"]["message"] = "Update ex_dir error: " . mysqli_error($db_conn);
255
256 mysqli_close($db_conn);
257 exit(json_encode($result_set));
258 }
259 }
260 mysqli_free_result($rs);
261 }
262
263 if ($dir_name != "" && $dir_name != $old_name)
264 {
265 $sql = "UPDATE ex_dir SET name = '$dir_name' WHERE FID = $fid";
266
267 $rs_update = mysqli_query($db_conn, $sql);
268 if ($rs_update == false)
269 {
270 $result_set["return"]["code"] = -2;
271 $result_set["return"]["message"] = "Update ex_dir error: " . mysqli_error($db_conn);
272
273 mysqli_close($db_conn);
274 exit(json_encode($result_set));
275 }
276 }
277
278 break; // case 2: Update
279 case 3: // Delete
280 if ($fid == 0) // if ($current_dir == "")
281 {
282 $result_set["return"]["code"] = -1;
283 array_push($result_set["return"]["errorFields"], array(
284 "id" => "current_dir",
285 "errMsg" => "根目录不能删除",
286 ));
287
288 mysqli_close($db_conn);
289 exit(json_encode($result_set));
290 }
291
292 if ($dir != "" || $dir_name != "")
293 {
294 $result_set["return"]["code"] = -1;
295 array_push($result_set["return"]["errorFields"], array(
296 "id" => "dir",
297 "errMsg" => "目录和名称必须都为空",
298 ));
299
300 mysqli_close($db_conn);
301 exit(json_encode($result_set));
302 }
303
304 $sql = "SELECT FID FROM ex_dir WHERE SID = $sid AND dir LIKE '$current_dir%'";
305
306 $rs = mysqli_query($db_conn, $sql);
307 if ($rs == false)
308 {
309 $result_set["return"]["code"] = -2;
310 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
311
312 mysqli_close($db_conn);
313 exit(json_encode($result_set));
314 }
315
316 if (mysqli_num_rows($rs) > 1)
317 {
318 $result_set["return"]["code"] = -1;
319 array_push($result_set["return"]["errorFields"], array(
320 "id" => "current_dir",
321 "errMsg" => "目录中有子目录存在",
322 ));
323
324 mysqli_close($db_conn);
325 exit(json_encode($result_set));
326 }
327 mysqli_free_result($rs);
328
329 $sql = "SELECT AID FROM ex_file WHERE FID = $fid";
330
331 $rs = mysqli_query($db_conn, $sql);
332 if ($rs == false)
333 {
334 $result_set["return"]["code"] = -2;
335 $result_set["return"]["message"] = "Query ex_file error: " . mysqli_error($db_conn);
336
337 mysqli_close($db_conn);
338 exit(json_encode($result_set));
339 }
340
341 if (mysqli_num_rows($rs) > 0)
342 {
343 $result_set["return"]["code"] = -1;
344 array_push($result_set["return"]["errorFields"], array(
345 "id" => "current_dir",
346 "errMsg" => "目录中有文章存在",
347 ));
348
349 mysqli_close($db_conn);
350 exit(json_encode($result_set));
351 }
352 mysqli_free_result($rs);
353
354 $sql = "DELETE FROM ex_dir WHERE FID = $fid";
355
356 $rs = mysqli_query($db_conn, $sql);
357 if ($rs == false)
358 {
359 $result_set["return"]["code"] = -2;
360 $result_set["return"]["message"] = "Delete ex_dir error: " . mysqli_error($db_conn);
361
362 mysqli_close($db_conn);
363 exit(json_encode($result_set));
364 }
365
366 break; // case 3: Delete
367 default: // Invalid Op
368 $result_set["return"]["code"] = -1;
369 array_push($result_set["return"]["errorFields"], array(
370 "id" => "dir_op",
371 "errMsg" => "非法操作",
372 ));
373
374 mysqli_close($db_conn);
375 exit(json_encode($result_set));
376
377 break; // default: Invalid Op
378 }
379
380 // Commit transaction
381 $rs = mysqli_query($db_conn, "COMMIT");
382 if ($rs == false)
383 {
384 $result_set["return"]["code"] = -2;
385 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
386
387 mysqli_close($db_conn);
388 exit(json_encode($result_set));
389 }
390
391 // No longer require explicit transaction
392 $rs = mysqli_query($db_conn, "SET autocommit=1");
393 if ($rs == false)
394 {
395 $result_set["return"]["code"] = -2;
396 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
397
398 mysqli_close($db_conn);
399 exit(json_encode($result_set));
400 }
401
402 $sql = "SELECT * FROM ex_dir WHERE SID = $sid AND enable ORDER BY dir";
403
404 $rs = mysqli_query($db_conn, $sql);
405 if ($rs == false)
406 {
407 $result_set["return"]["code"] = -2;
408 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
409
410 mysqli_close($db_conn);
411 exit(json_encode($result_set));
412 }
413
414 // Fill up ex_dir data
415 $result_set["return"]["data"] = array(
416 "ex_dir" => array(),
417 );
418
419 array_push($result_set["return"]["data"]["ex_dir"], array(
420 "dir" => "",
421 "name" => "根目录",
422 ));
423
424 while($row = mysqli_fetch_array($rs))
425 {
426 array_push($result_set["return"]["data"]["ex_dir"], array(
427 "dir" => $row["dir"],
428 "name" => $row["name"],
429 ));
430 }
431 mysqli_free_result($rs);
432
433 mysqli_close($db_conn);
434 exit(json_encode($result_set));
435 ?>

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