Files
hustoj/web/sharecodepage.php
2024-10-10 12:56:56 +08:00

256 lines
7.0 KiB
PHP

<?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');
require_once("./include/memcache.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';";
$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 (empty($_GET)) {
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');
?>