/[LeafOK_CVS]/fenglin/manage/score_calculate.php
ViewVC logotype

Annotation of /fenglin/manage/score_calculate.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Wed Apr 16 01:50:41 2025 UTC (11 months ago) by sysadm
Branch: MAIN
Changes since 1.1: +2 -1 lines
Add DB lock

1 sysadm 1.1 <?
2     if (isset($_SERVER["argv"]) && strrpos($_SERVER["argv"][0], "/") !== false)
3     {
4     chdir(substr($_SERVER["argv"][0], 0, strrpos($_SERVER["argv"][0], "/")));
5     }
6    
7     require_once "../lib/common.inc.php";
8     require_once "../lib/db_open.inc.php";
9    
10     if (!isset($_SERVER["argc"]))
11     {
12     require_once "../bbs/session_init.inc.php";
13    
14     force_login();
15     }
16    
17     $result_set = array(
18     "return" => array(
19     "code" => 0,
20     "message" => "",
21     "errorFields" => array(),
22     )
23     );
24    
25     header("Content-Type:application/json; charset=utf-8");
26    
27     if (!(isset($_SESSION["BBS_priv"]) && $_SESSION["BBS_priv"]->checklevel(P_ADMIN_M | P_ADMIN_S))
28     && !isset($_SERVER["argc"]))
29     {
30     $result_set["return"]["code"] = -1;
31     $result_set["return"]["message"] = "没有权限";
32    
33     mysqli_close($db_conn);
34     exit(json_encode($result_set));
35     }
36    
37     // Begin transaction
38     $rs = mysqli_query($db_conn, "SET autocommit=0");
39     if ($rs == false)
40     {
41     $result_set["return"]["code"] = -2;
42     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
43    
44     mysqli_close($db_conn);
45     exit(json_encode($result_set));
46     }
47    
48     $rs = mysqli_query($db_conn, "BEGIN");
49     if ($rs == false)
50     {
51     $result_set["return"]["code"] = -2;
52     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
53    
54     mysqli_close($db_conn);
55     exit(json_encode($result_set));
56     }
57    
58     $sql = "SELECT user_list.UID, exp FROM user_list
59     INNER JOIN user_pubinfo ON user_list.UID = user_pubinfo.UID
60     WHERE enable";
61    
62     $rs = mysqli_query($db_conn, $sql);
63     if ($rs == false)
64     {
65     $result_set["return"]["code"] = -2;
66     $result_set["return"]["message"] = "Query exp error: " . mysqli_error($db_conn);
67    
68     mysqli_close($db_conn);
69     exit(json_encode($result_set));
70     }
71    
72     while ($row = mysqli_fetch_array($rs))
73     {
74 sysadm 1.2 $sql = "SELECT last_exp, exp_left FROM user_score WHERE UID = " .
75     $row["UID"] . " FOR UPDATE";
76 sysadm 1.1
77     $rs_score = mysqli_query($db_conn, $sql);
78     if ($rs_score == false)
79     {
80     $result_set["return"]["code"] = -2;
81     $result_set["return"]["message"] = "Query score error: " . mysqli_error($db_conn);
82    
83     mysqli_close($db_conn);
84     exit(json_encode($result_set));
85     }
86    
87     if ($row_score = mysqli_fetch_array($rs_score))
88     {
89     $exp_left = $row["exp"] - $row_score["last_exp"] + $row_score["exp_left"];
90    
91     $sql = "UPDATE user_score SET last_exp = " . $row["exp"] .
92     " WHERE UID = " . $row["UID"];
93    
94     $ret = mysqli_query($db_conn, $sql);
95     if ($ret == false)
96     {
97     $result_set["return"]["code"] = -2;
98     $result_set["return"]["message"] = "Update score error: " . mysqli_error($db_conn);
99    
100     mysqli_close($db_conn);
101     exit(json_encode($result_set));
102     }
103     }
104     else
105     {
106     $exp_left = $row["exp"];
107    
108     $sql = "INSERT INTO user_score(UID, last_exp) VALUES(" .
109     $row["UID"] . ", " . $row["exp"] . ")";
110    
111     $ret = mysqli_query($db_conn, $sql);
112     if ($ret == false)
113     {
114     $result_set["return"]["code"] = -2;
115     $result_set["return"]["message"] = "Insert score error: " . mysqli_error($db_conn);
116    
117     mysqli_close($db_conn);
118     exit(json_encode($result_set));
119     }
120     }
121    
122     mysqli_free_result($rs_score);
123    
124     $score_change = intdiv($exp_left, $BBS_exp_score_rate);
125     $exp_left %= $BBS_exp_score_rate;
126    
127     if ($score_change != 0)
128     {
129     $sql = "UPDATE user_score SET score = score + ($score_change), exp_left = $exp_left
130     WHERE UID = " . $row["UID"];
131    
132     $ret = mysqli_query($db_conn, $sql);
133     if ($ret == false)
134     {
135     $result_set["return"]["code"] = -2;
136     $result_set["return"]["message"] = "Update score error: " . mysqli_error($db_conn);
137    
138     mysqli_close($db_conn);
139     exit(json_encode($result_set));
140     }
141    
142     $sql = "INSERT INTO user_score_log(UID, score_change, reason, dt)
143     VALUES(" . $row["UID"] . ", $score_change, '积分计算', NOW())";
144     $ret = mysqli_query($db_conn, $sql);
145     if ($ret == false)
146     {
147     $result_set["return"]["code"] = -2;
148     $result_set["return"]["message"] = "Add log error: " . mysqli_error($db_conn);
149    
150     mysqli_close($db_conn);
151     exit(json_encode($result_set));
152     }
153     }
154     }
155    
156     mysqli_free_result($rs);
157    
158     // Commit transaction
159     $rs = mysqli_query($db_conn, "COMMIT");
160     if ($rs == false)
161     {
162     $result_set["return"]["code"] = -2;
163     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
164    
165     mysqli_close($db_conn);
166     exit(json_encode($result_set));
167     }
168    
169     mysqli_close($db_conn);
170     exit(json_encode($result_set));
171     ?>

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