-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsharecodepage.php
254 lines (224 loc) · 7 KB
/
sharecodepage.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
<?php
$OJ_CACHE_SHARE = true;
$cache_time = 10;
require_once('./include/cache_start.php');
require_once('./include/db_info.inc.php');
require_once('./include/setlang.php');
$view_title = $MSG_CONTEST . $MSG_RANKLIST;
$title = "";
require_once("./include/const.inc.php");
require_once("./include/my_func.inc.php");
// 当前用户的user_id
$user_id=$_SESSION[$OJ_NAME.'_'.'user_id'];
/************************ 数据库 *******************************/
/**
* 存储用户分享的代码
* @param $title
* @param $code
* @param $user_id
* @param $language
* @return mixed
*/
function saveShareCode($title,$code,$language,$user_id){
$sql = "INSERT INTO share_code(`user_id`,`title`,`share_code`,`language`,`share_time`) VALUES (?,?,?,?,NOW());";
$rows = pdo_query($sql, $user_id, $title, $code, $language);
return $rows;
}
/**
* 查询某一sid 的详情
* @param $OJ_MEMCACHE
* @param $sid
* @return mixed
*/
function getShareCodeBySid($OJ_MEMCACHE,$sid){
if ($OJ_MEMCACHE) {
$sql = "SELECT * FROM share_code where share_id = '$sid';";
require("./include/memcache.php");
$share_info = mysql_query_cache($sql);
} else {
$sql = "SELECT * FROM share_code where share_id = ?";
$share_info = pdo_query($sql, $sid);
}
return $share_info;
}
/**
* 验证某个share_id 的 代码 是不是某个用户的
* @param $sid
* @param $user_id
* @return bool
*/
function checkCodeOwner($sid, $user_id){
$sql = "SELECT share_id FROM share_code WHERE user_id = ? AND share_id = ?";
$result = pdo_query($sql, $user_id, $sid);
if(count($result)==0){
return false;
}else {
return true;
}
}
/**
* 删除某一个sid的代码
* @param $sid
* @param $user_id
*/
function deleteShareCodeBySid($sid, $user_id){
$sql = "DELETE FROM share_code WHERE user_id = ? AND share_id = ?";
pdo_query($sql, $user_id, $sid);
}
/**
* 更新某一sid 的代码
* @param $sid
* @param $code
* @param $language
* @param $user_id
* @return mixed
*/
function updateShareCodeBySid($sid, $title,$code, $language, $user_id) {
$sql = "UPDATE share_code SET title=?,share_code = ?,`language` = ? WHERE share_id = ? AND user_id = ?";
pdo_query($sql,$title, $code, $language, $sid, $user_id);
return $sid;
}
/***************************** 路由 *******************************/
// 如果有比赛正在进行,则不可用
if(
(isset($OJ_EXAM_CONTEST_ID)&&$OJ_EXAM_CONTEST_ID>0)||
(isset($OJ_ON_SITE_CONTEST_ID)&&$OJ_ON_SITE_CONTEST_ID>0)||
(isset($OJ_SHARE_CODE)&&!$OJ_SHARE_CODE)
){
$view_errors= "代码分享功能当前不可用!";
require("template/".$OJ_TEMPLATE."/error.php");
exit (0);
}
// 删除某一个分享的代码
if(isset($_POST['delete'])) {
$sid = $_POST['delete'];
header('Content-Type:application/json');
if (!isset($_SESSION[$OJ_NAME.'_'.'user_id'])){
echo '{
"status": "error",
"msg": "请先登录!"
}';
}else {
if(!checkCodeOwner($sid, $user_id)){
echo '{
"status": "error",
"msg": "您没有权限删除!"
}';
}else {
deleteShareCodeBySid($sid, $user_id);
echo '{
"status": "success",
"msg": "删除成功!"
}';
}
}
exit(0);
}
// 查看分享的代码
if(isset($_GET['sid'])){
// share_id
$sid = intval($_GET['sid']);
$share_info = getShareCodeBySid($OJ_MEMCACHE,$sid);
// 代码不存在
if(count($share_info)==0){
$view_errors= "该代码不存在!";
require("template/".$OJ_TEMPLATE."/error.php");
}else {
//echo array_column($share_info,"user_id")[0] ;
$sid = array_column($share_info,"share_id")[0];
$author = array_column($share_info,"user_id")[0];
$title = array_column($share_info,"title")[0];
$language = array_column($share_info,"language")[0];
$share_time = array_column($share_info,"share_time")[0];
$view_src = array_column($share_info,"share_code")[0];
if($author==$user_id){
$readOnly = false;
$isOwner = true;
}else {
$readOnly = true;
}
require("template/" . $OJ_TEMPLATE . "/sharecodepage.php");
}
exit(0);
}
// 存储提交代码,包括新提交以及修改提交
if(isset($_POST['code'])) {
if (!isset($_SESSION[$OJ_NAME.'_'.'user_id'])){
$view_errors= "<a href=loginpage.php>$MSG_Login</a>";
require("template/".$OJ_TEMPLATE."/error.php");
}else {
header('Content-Type:application/json');
$vcode = $_POST['vcode'];
if($_SESSION[$OJ_NAME.'_'."vcode"]==null||$vcode!= $_SESSION[$OJ_NAME.'_'."vcode"]||$vcode==""||$vcode==null){
$_SESSION[$OJ_NAME.'_'."vcode"]=null;
echo '{
"status": "error",
"msg": "验证码错误"
}';
}else {
if(isset($_POST['sid'])) {
$sid = $_POST['sid'];
}
$title = $_POST['title'];
$code = $_POST['code'];
$language = $_POST['language'];
try {
if(isset($_POST['sid'])) {
$new_id = updateShareCodeBySid($sid,$title, $code, $language, $user_id);
}else {
$new_id = saveShareCode($title,$code, $language, $user_id);
}
}catch (Exception $e) {
echo '{
"status": "error",
"msg": "系统繁忙"
}';
exit(0);
}
echo '{
"status": "success",
"msg": "添加成功!",
"data": {
"sid":'.$new_id.'
}
}';
}
}
exit(0);
}
// 请求未带参数,直接进入代码提交页面
if (!is_array($_GET)||count($_GET)==0) {
if (!isset($_SESSION[$OJ_NAME.'_'.'user_id'])){
$view_errors= "<a href=loginpage.php>$MSG_Login</a>";
require("template/".$OJ_TEMPLATE."/error.php");
}else {
$readOnly = false;
require("template/" . $OJ_TEMPLATE . "/sharecodepage.php");
}
exit(0);
}
// json 请求时
if (isset($_GET['type'])&&$_GET['type']=='json') {
header('Content-Type:application/json');
if(isset($_GET['list'])&&$_GET['list']=='submit'){
$subList = getSubmitByCid($OJ_MEMCACHE,$cid);
$problemMap = getProblemMapByCid($OJ_MEMCACHE,$cid);
$arr = array();
for($i=0;$i<count($subList);$i++){
$arr[$i] = submit2Array($subList[$i],$problemMap);
}
echo json_encode($arr);
}else if(isset($_GET['list'])&&$_GET['list']=='team'){
$teamList = getTeamByCid($OJ_MEMCACHE,$cid);
$arr = array();
for($i=0;$i<count($teamList);$i++){
$arr[$i] = team2Array($teamList[$i]);
}
echo json_encode($arr);
}
exit(0);
}
/////////////////////////Common foot
if (file_exists('./include/cache_end.php'))
require_once('./include/cache_end.php');
?>