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

Annotation of /fenglin/bbs/section_service_master.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations)
Tue Nov 4 11:13:39 2025 UTC (4 months, 1 week ago) by sysadm
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +1 -1 lines
Update username check criteria to keep compatible with some special username (length = 3)

1 sysadm 1.1 <?php
2     require_once "../lib/db_open.inc.php";
3     require_once "../lib/str_process.inc.php";
4     require_once "./session_init.inc.php";
5     require_once "./check_sub.inc.php";
6    
7     $data = json_decode(file_get_contents("php://input"), true);
8    
9     $sid = (isset($data["sid"]) ? intval($data["sid"]) : 0);
10     $op = (isset($data["op"]) ? intval($data["op"]) : 0);
11     $username = (isset($data["username"]) ? trim($data["username"]) : "");
12     $type = (isset($data["type"]) && $data["type"] == "1" ? 1 : 0);
13 sysadm 1.2
14 sysadm 1.1 $result_set = array(
15     "return" => array(
16     "code" => 0,
17     "message" => "",
18     "errorFields" => array(),
19     )
20     );
21    
22     header("Content-Type:application/json; charset=utf-8");
23    
24     // Validate input data
25 sysadm 1.5 if (!preg_match("/^[A-Za-z][A-Za-z0-9_]{2,11}$/", $username))
26 sysadm 1.1 {
27     $result_set["return"]["code"] = -1;
28     array_push($result_set["return"]["errorFields"], array(
29     "id" => "username",
30     "errMsg" => "用户名不符合格式要求",
31     ));
32     }
33    
34     if ($result_set["return"]["code"] != 0)
35     {
36     mysqli_close($db_conn);
37     exit(json_encode($result_set));
38     }
39    
40     if (!$_SESSION["BBS_priv"]->checkpriv($sid, S_MAN_M)
41     || ($type == 1 && (!$_SESSION["BBS_priv"]->checkpriv($sid, S_ADMIN))))
42     {
43     $result_set["return"]["code"] = -1;
44     array_push($result_set["return"]["errorFields"], array(
45     "id" => "master",
46     "errMsg" => "没有权限",
47     ));
48    
49     mysqli_close($db_conn);
50     exit(json_encode($result_set));
51     }
52    
53     // Begin transaction
54     $rs = mysqli_query($db_conn, "SET autocommit=0");
55     if ($rs == false)
56     {
57     $result_set["return"]["code"] = -2;
58     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
59    
60     mysqli_close($db_conn);
61     exit(json_encode($result_set));
62     }
63 sysadm 1.2
64 sysadm 1.1 $rs = mysqli_query($db_conn, "BEGIN");
65     if ($rs == false)
66     {
67     $result_set["return"]["code"] = -2;
68     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
69    
70     mysqli_close($db_conn);
71     exit(json_encode($result_set));
72     }
73    
74     // Check user status
75     $sql = "SELECT UID FROM user_list WHERE username = '$username' AND verified";
76    
77     $rs = mysqli_query($db_conn, $sql);
78     if ($rs == false)
79     {
80     $result_set["return"]["code"] = -2;
81     $result_set["return"]["message"] = "Query user error: " . mysqli_error($db_conn);
82    
83     mysqli_close($db_conn);
84     exit(json_encode($result_set));
85     }
86    
87     if ($row = mysqli_fetch_array($rs))
88     {
89     $uid = $row["UID"];
90     }
91     else
92     {
93     $result_set["return"]["code"] = -1;
94     array_push($result_set["return"]["errorFields"], array(
95     "id" => "username",
96     "errMsg" => "用户不存在或尚未验证",
97     ));
98    
99     mysqli_close($db_conn);
100     exit(json_encode($result_set));
101     }
102     mysqli_free_result($rs);
103    
104     // Check section status
105     $sql = "SELECT SID FROM section_config INNER JOIN section_class
106     WHERE SID = $sid AND section_config.enable AND section_class.enable";
107    
108     $rs = mysqli_query($db_conn, $sql);
109     if ($rs == false)
110     {
111     $result_set["return"]["code"] = -2;
112     $result_set["return"]["message"] = "Query section master error: " . mysqli_error($db_conn);
113    
114     mysqli_close($db_conn);
115     exit(json_encode($result_set));
116     }
117    
118     if (mysqli_num_rows($rs) == 0)
119     {
120     $result_set["return"]["code"] = -1;
121     array_push($result_set["return"]["errorFields"], array(
122     "id" => "master",
123     "errMsg" => "版块不存在",
124     ));
125    
126     mysqli_close($db_conn);
127     exit(json_encode($result_set));
128     }
129     mysqli_free_result($rs);
130    
131     // Check existing section master
132     $has_major = false;
133     $user_found = false;
134     $user_type = 0;
135    
136     $sql = "SELECT UID, major FROM section_master
137     WHERE SID = $sid AND enable AND (NOW() BETWEEN begin_dt AND end_dt)
138     FOR UPDATE";
139 sysadm 1.2
140 sysadm 1.1 $rs = mysqli_query($db_conn, $sql);
141     if ($rs == false)
142     {
143     $result_set["return"]["code"] = -2;
144     $result_set["return"]["message"] = "Query section master error: " . mysqli_error($db_conn);
145 sysadm 1.2
146 sysadm 1.1 mysqli_close($db_conn);
147     exit(json_encode($result_set));
148     }
149 sysadm 1.2
150 sysadm 1.1 while ($row = mysqli_fetch_array($rs))
151     {
152     if ($uid == $row["UID"])
153     {
154     $user_found = true;
155     $user_type = $row["major"];
156     }
157 sysadm 1.2
158 sysadm 1.1 if (!$has_major && $row["major"])
159     {
160     $has_major = true;
161     }
162     }
163     mysqli_free_result($rs);
164 sysadm 1.2
165 sysadm 1.1 if ($user_found && $op == 1)
166     {
167     $result_set["return"]["code"] = -1;
168     array_push($result_set["return"]["errorFields"], array(
169     "id" => "master",
170     "errMsg" => "用户已经是版主",
171     ));
172 sysadm 1.2
173 sysadm 1.1 mysqli_close($db_conn);
174     exit(json_encode($result_set));
175     }
176    
177     if ($op == 2 || $op == 3)
178     {
179     if (!$user_found)
180     {
181     $result_set["return"]["code"] = -1;
182     array_push($result_set["return"]["errorFields"], array(
183     "id" => "master",
184     "errMsg" => "未找到记录",
185     ));
186 sysadm 1.2
187 sysadm 1.1 mysqli_close($db_conn);
188     exit(json_encode($result_set));
189     }
190    
191     if ($user_type == 1 && (!$_SESSION["BBS_priv"]->checkpriv($sid, S_ADMIN)))
192     {
193     $result_set["return"]["code"] = -1;
194     array_push($result_set["return"]["errorFields"], array(
195     "id" => "master",
196     "errMsg" => "没有管理员权限",
197     ));
198 sysadm 1.2
199 sysadm 1.1 mysqli_close($db_conn);
200     exit(json_encode($result_set));
201     }
202     }
203    
204     switch($op)
205     {
206     case 1: // Appoint
207     if ($type == 1 && $has_major)
208     {
209     $result_set["return"]["code"] = -1;
210     array_push($result_set["return"]["errorFields"], array(
211     "id" => "master",
212     "errMsg" => "只能有一位正版主",
213     ));
214    
215     mysqli_close($db_conn);
216     exit(json_encode($result_set));
217     }
218    
219     $sql = "INSERT INTO section_master(UID, SID, begin_dt, end_dt, enable, major)
220     VALUES($uid, $sid, NOW(), ADDDATE(NOW(), INTERVAL 6 MONTH), 1, $type)";
221    
222     $rs = mysqli_query($db_conn, $sql);
223     if ($rs == false)
224     {
225     $result_set["return"]["code"] = -2;
226     $result_set["return"]["message"] = "Add section master error: " . mysqli_error($db_conn);
227    
228     mysqli_close($db_conn);
229     exit(json_encode($result_set));
230     }
231    
232     break; // case 1: Appoint
233     case 2: // Dismiss
234     $sql = "UPDATE section_master SET enable = 0, end_dt = NOW()
235     WHERE UID = $uid AND SID = $sid AND enable
236     AND (NOW() BETWEEN begin_dt AND end_dt)";
237    
238     $rs = mysqli_query($db_conn, $sql);
239     if ($rs == false)
240     {
241     $result_set["return"]["code"] = -2;
242     $result_set["return"]["message"] = "Update section master error: " . mysqli_error($db_conn);
243    
244     mysqli_close($db_conn);
245     exit(json_encode($result_set));
246     }
247    
248     break; // case 2: Dismiss
249     case 3: // Renew
250     $sql = "UPDATE section_master SET end_dt = ADDDATE(end_dt, INTERVAL 6 MONTH)
251     WHERE UID = $uid AND SID = $sid AND enable
252     AND (NOW() BETWEEN begin_dt AND end_dt)";
253    
254     $rs = mysqli_query($db_conn, $sql);
255     if ($rs == false)
256     {
257     $result_set["return"]["code"] = -2;
258     $result_set["return"]["message"] = "Update section master error: " . mysqli_error($db_conn);
259    
260     mysqli_close($db_conn);
261     exit(json_encode($result_set));
262     }
263    
264     break; // case 3 : Renew
265     default: // Invalid Op
266     $result_set["return"]["code"] = -1;
267     array_push($result_set["return"]["errorFields"], array(
268     "id" => "master",
269     "errMsg" => "非法操作",
270     ));
271    
272     mysqli_close($db_conn);
273     exit(json_encode($result_set));
274    
275     break; // default: Invalid Op
276     }
277    
278     // Commit transaction
279     $rs = mysqli_query($db_conn, "COMMIT");
280     if ($rs == false)
281     {
282     $result_set["return"]["code"] = -2;
283     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
284    
285     mysqli_close($db_conn);
286     exit(json_encode($result_set));
287     }
288 sysadm 1.2
289 sysadm 1.1 mysqli_close($db_conn);
290     exit(json_encode($result_set));

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