/[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.5 - (hide annotations)
Wed Apr 23 05:40:11 2025 UTC (10 months, 3 weeks ago) by sysadm
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +0 -0 lines
FILE REMOVED
Rename ex_dir_service.php to section_service_dir.php

1 sysadm 1.4 <?php
2 sysadm 1.1 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 sysadm 1.3 $sql = "SELECT FID, name FROM ex_dir WHERE dir = '$current_dir' AND enable FOR SHARE";
99 sysadm 1.1
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 sysadm 1.2 case 0: // List
137     break;
138 sysadm 1.1 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 sysadm 1.3 $sql = "SELECT FID FROM ex_dir WHERE SID = $sid AND dir = '$current_dir$dir/' FOR UPDATE";
152 sysadm 1.1
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 sysadm 1.3 $sql = "SELECT FID, dir FROM ex_dir WHERE SID = $sid AND dir LIKE '$current_dir%' FOR UPDATE";
235 sysadm 1.1
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 sysadm 1.3 $sql = "SELECT FID FROM ex_dir WHERE SID = $sid AND dir LIKE '$current_dir%' FOR UPDATE";
307 sysadm 1.1
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));
426     ?>

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