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

Annotation of /fenglin/bbs/ex_dir_service.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide 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 sysadm 1.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