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

Contents of /fenglin/bbs/section_service_dir.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Tue Apr 29 11:55:32 2025 UTC (10 months, 2 weeks ago) by sysadm
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +0 -1 lines
Remove redundant PHP closing tag

1 <?php
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 FOR SHARE";
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 0: // List
137 break;
138 case 1: // Create
139 if ($dir == "" || $dir_name == "")
140 {
141 $result_set["return"]["code"] = -1;
142 array_push($result_set["return"]["errorFields"], array(
143 "id" => "dir",
144 "errMsg" => "目录和名称都不能为空",
145 ));
146
147 mysqli_close($db_conn);
148 exit(json_encode($result_set));
149 }
150
151 $sql = "SELECT FID FROM ex_dir WHERE SID = $sid AND dir = '$current_dir$dir/' FOR UPDATE";
152
153 $rs = mysqli_query($db_conn, $sql);
154 if ($rs == false)
155 {
156 $result_set["return"]["code"] = -2;
157 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
158
159 mysqli_close($db_conn);
160 exit(json_encode($result_set));
161 }
162
163 if (mysqli_num_rows($rs) > 0)
164 {
165 $result_set["return"]["code"] = -1;
166 array_push($result_set["return"]["errorFields"], array(
167 "id" => "dir",
168 "errMsg" => "目录已存在",
169 ));
170
171 mysqli_close($db_conn);
172 exit(json_encode($result_set));
173 }
174 mysqli_free_result($rs);
175
176 $sql = "INSERT INTO ex_dir(dir, name, SID, enable, dt) VALUES
177 ('$current_dir$dir/', '$dir_name', $sid, 1, now())";
178
179 $rs = mysqli_query($db_conn, $sql);
180 if ($rs == false)
181 {
182 $result_set["return"]["code"] = -2;
183 $result_set["return"]["message"] = "Create ex_dir error: " . mysqli_error($db_conn);
184
185 mysqli_close($db_conn);
186 exit(json_encode($result_set));
187 }
188
189 break; // case 1: Create
190 case 2: // Update
191 if ($fid == 0) // if ($current_dir == "")
192 {
193 $result_set["return"]["code"] = -1;
194 array_push($result_set["return"]["errorFields"], array(
195 "id" => "current_dir",
196 "errMsg" => "根目录不能改名",
197 ));
198
199 mysqli_close($db_conn);
200 exit(json_encode($result_set));
201 }
202
203 if ($dir == "" && $dir_name == "")
204 {
205 $result_set["return"]["code"] = -1;
206 array_push($result_set["return"]["errorFields"], array(
207 "id" => "dir",
208 "errMsg" => "目录和名称不能同时为空",
209 ));
210
211 mysqli_close($db_conn);
212 exit(json_encode($result_set));
213 }
214
215 $old_dir = substr($current_dir, strrpos("/" . $current_dir, "/", -2));
216 $old_dir = substr($old_dir, 0, strlen($old_dir) - 1);
217 if ($dir == $old_dir && $dir_name == $old_name)
218 {
219 $result_set["return"]["code"] = -1;
220 array_push($result_set["return"]["errorFields"], array(
221 "id" => "dir",
222 "errMsg" => "没有更改",
223 ));
224
225 mysqli_close($db_conn);
226 exit(json_encode($result_set));
227 }
228
229 if ($dir != "" && $dir != $current_dir)
230 {
231 $parent_dir = substr($current_dir, 0, strrpos("/" . $current_dir, "/", -2));
232 $current_dir_len = strlen($current_dir);
233
234 $sql = "SELECT FID, dir FROM ex_dir WHERE SID = $sid AND dir LIKE '$current_dir%' FOR UPDATE";
235
236 $rs = mysqli_query($db_conn, $sql);
237 if ($rs == false)
238 {
239 $result_set["return"]["code"] = -2;
240 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
241
242 mysqli_close($db_conn);
243 exit(json_encode($result_set));
244 }
245
246 while ($row = mysqli_fetch_array($rs))
247 {
248 $child_dir = substr($row["dir"], $current_dir_len);
249
250 $sql = "UPDATE ex_dir SET dir = '$parent_dir$dir/$child_dir' WHERE FID = " . $row["FID"];
251
252 $rs_update = mysqli_query($db_conn, $sql);
253 if ($rs_update == false)
254 {
255 $result_set["return"]["code"] = -2;
256 $result_set["return"]["message"] = "Update ex_dir error: " . mysqli_error($db_conn);
257
258 mysqli_close($db_conn);
259 exit(json_encode($result_set));
260 }
261 }
262 mysqli_free_result($rs);
263 }
264
265 if ($dir_name != "" && $dir_name != $old_name)
266 {
267 $sql = "UPDATE ex_dir SET name = '$dir_name' WHERE FID = $fid";
268
269 $rs_update = mysqli_query($db_conn, $sql);
270 if ($rs_update == false)
271 {
272 $result_set["return"]["code"] = -2;
273 $result_set["return"]["message"] = "Update ex_dir error: " . mysqli_error($db_conn);
274
275 mysqli_close($db_conn);
276 exit(json_encode($result_set));
277 }
278 }
279
280 break; // case 2: Update
281 case 3: // Delete
282 if ($fid == 0) // if ($current_dir == "")
283 {
284 $result_set["return"]["code"] = -1;
285 array_push($result_set["return"]["errorFields"], array(
286 "id" => "current_dir",
287 "errMsg" => "根目录不能删除",
288 ));
289
290 mysqli_close($db_conn);
291 exit(json_encode($result_set));
292 }
293
294 if ($dir != "" || $dir_name != "")
295 {
296 $result_set["return"]["code"] = -1;
297 array_push($result_set["return"]["errorFields"], array(
298 "id" => "dir",
299 "errMsg" => "目录和名称必须都为空",
300 ));
301
302 mysqli_close($db_conn);
303 exit(json_encode($result_set));
304 }
305
306 $sql = "SELECT FID FROM ex_dir WHERE SID = $sid AND dir LIKE '$current_dir%' FOR UPDATE";
307
308 $rs = mysqli_query($db_conn, $sql);
309 if ($rs == false)
310 {
311 $result_set["return"]["code"] = -2;
312 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
313
314 mysqli_close($db_conn);
315 exit(json_encode($result_set));
316 }
317
318 if (mysqli_num_rows($rs) > 1)
319 {
320 $result_set["return"]["code"] = -1;
321 array_push($result_set["return"]["errorFields"], array(
322 "id" => "current_dir",
323 "errMsg" => "目录中有子目录存在",
324 ));
325
326 mysqli_close($db_conn);
327 exit(json_encode($result_set));
328 }
329 mysqli_free_result($rs);
330
331 $sql = "SELECT AID FROM ex_file WHERE FID = $fid";
332
333 $rs = mysqli_query($db_conn, $sql);
334 if ($rs == false)
335 {
336 $result_set["return"]["code"] = -2;
337 $result_set["return"]["message"] = "Query ex_file error: " . mysqli_error($db_conn);
338
339 mysqli_close($db_conn);
340 exit(json_encode($result_set));
341 }
342
343 if (mysqli_num_rows($rs) > 0)
344 {
345 $result_set["return"]["code"] = -1;
346 array_push($result_set["return"]["errorFields"], array(
347 "id" => "current_dir",
348 "errMsg" => "目录中有文章存在",
349 ));
350
351 mysqli_close($db_conn);
352 exit(json_encode($result_set));
353 }
354 mysqli_free_result($rs);
355
356 $sql = "DELETE FROM ex_dir WHERE FID = $fid";
357
358 $rs = mysqli_query($db_conn, $sql);
359 if ($rs == false)
360 {
361 $result_set["return"]["code"] = -2;
362 $result_set["return"]["message"] = "Delete ex_dir error: " . mysqli_error($db_conn);
363
364 mysqli_close($db_conn);
365 exit(json_encode($result_set));
366 }
367
368 break; // case 3: Delete
369 default: // Invalid Op
370 $result_set["return"]["code"] = -1;
371 array_push($result_set["return"]["errorFields"], array(
372 "id" => "dir_op",
373 "errMsg" => "非法操作",
374 ));
375
376 mysqli_close($db_conn);
377 exit(json_encode($result_set));
378
379 break; // default: Invalid Op
380 }
381
382 // Commit transaction
383 $rs = mysqli_query($db_conn, "COMMIT");
384 if ($rs == false)
385 {
386 $result_set["return"]["code"] = -2;
387 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
388
389 mysqli_close($db_conn);
390 exit(json_encode($result_set));
391 }
392
393 $sql = "SELECT * FROM ex_dir WHERE SID = $sid AND enable ORDER BY dir";
394
395 $rs = mysqli_query($db_conn, $sql);
396 if ($rs == false)
397 {
398 $result_set["return"]["code"] = -2;
399 $result_set["return"]["message"] = "Query ex_dir error: " . mysqli_error($db_conn);
400
401 mysqli_close($db_conn);
402 exit(json_encode($result_set));
403 }
404
405 // Fill up ex_dir data
406 $result_set["return"]["data"] = array(
407 "ex_dir" => array(),
408 );
409
410 array_push($result_set["return"]["data"]["ex_dir"], array(
411 "dir" => "",
412 "name" => "根目录",
413 ));
414
415 while($row = mysqli_fetch_array($rs))
416 {
417 array_push($result_set["return"]["data"]["ex_dir"], array(
418 "dir" => $row["dir"],
419 "name" => $row["name"],
420 ));
421 }
422 mysqli_free_result($rs);
423
424 mysqli_close($db_conn);
425 exit(json_encode($result_set));

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