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

176 lines
5.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
require_once(dirname(__FILE__)."/pdo.php");
require_once(dirname(__FILE__)."/memcache.php");
//自动切换夜间模式
//if(date('H')<5||date('H')>21||isset($_GET['dark'])) $OJ_CSS="dark.css";
//允许用参数tp临时切换皮肤
/*
if(in_array($_GET['tp'],$OJ_TP)){
$OJ_TEMPLATE=$_GET['tp'];
setcookie("tp", $_GET['tp'], time()+3600);
}else if (in_array($_COOKIE['tp'],$OJ_TP)){
$OJ_TEMPLATE=$_COOKIE['tp'];
}
*/
//自动识别语言
if (isset($_SESSION[$OJ_NAME . '_' . 'OJ_LANG'])) {
$OJ_LANG=$_SESSION[$OJ_NAME . '_' . 'OJ_LANG'];
} else if (isset($_COOKIE['lang']) && in_array($_COOKIE['lang'], array("cn", "ug", "en", 'fa', 'ko', 'th'))) {
$OJ_LANG=$_COOKIE['lang'];
} else if (isset($_GET['lang']) && in_array($_GET['lang'], array("cn", "ug", "en", 'fa', 'ko', 'th'))) {
$OJ_LANG=$_GET['lang'];
} else if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && $OJ_LANG != "cn") {
$userLanguages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($userLanguages as $userLang) {
$langParts = explode(';', $userLang);
$lang = strtolower(substr($langParts[0], 0, 2));
if (in_array($lang, array("zh", "ug", "en", 'fa', 'ko', 'th'))) {
$OJ_LANG = $lang;
if($lang=="zh") $OJ_LANG="cn";
break;
}
}
}
require(dirname(__FILE__)."/../lang/$OJ_LANG.php");
$domain=basename($_SERVER["HTTP_HOST"]);
if($OJ_SaaS_ENABLE){
$DOMAIN="my.hustoj.com"; // 如启用需要替换为SaaS服务的主域名。
$OJ_SaaS_CONF=realpath(dirname(__FILE__)."/..")."/SaaS/".basename($_SERVER["HTTP_HOST"]).".php";
if(file_exists($OJ_SaaS_CONF)){
require_once($OJ_SaaS_CONF);
}else{
// echo $OJ_SaaS_CONF;
}
if($domain==$DOMAIN) $MSG_REG_INFO.="/初始化MyOJ";
}else{
$DOMAIN=$domain;
}
if(isset($_SERVER["HTTP_USER_AGENT"])&&strpos($_SERVER["HTTP_USER_AGENT"],"MSIE")){ // 360 or IE use bs3 instead
$OJ_TEMPLATE="bs3";
}
if(isset($_SESSION[$OJ_NAME.'_user_id'])&&isset($OJ_LIMIT_TO_1_IP)&& $OJ_LIMIT_TO_1_IP){
$ip = ($_SERVER['REMOTE_ADDR']);
if( isset($_SERVER['HTTP_X_FORWARDED_FOR'] )&&!empty( trim( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ){
$REMOTE_ADDR = $_SERVER['HTTP_X_FORWARDED_FOR'];
$tmp_ip=explode(',',$REMOTE_ADDR);
$ip =(htmlentities($tmp_ip[0],ENT_QUOTES,"UTF-8"));
} else if(isset($_SERVER['HTTP_X_REAL_IP'])&& !empty( trim( $_SERVER['HTTP_X_REAL_IP'] ) ) ){
$REMOTE_ADDR = $_SERVER['HTTP_X_REAL_IP'];
$tmp_ip=explode(',',$REMOTE_ADDR);
$ip =(htmlentities($tmp_ip[0],ENT_QUOTES,"UTF-8"));
}
$sql="select ip from loginlog where user_id=? order by time desc";
$rows=pdo_query($sql,$_SESSION[$OJ_NAME.'_user_id'] );
$lastip=$rows[0][0];
if($ip!=$lastip){
unset($_SESSION[$OJ_NAME.'_'.'user_id']);
setcookie($OJ_NAME."_user","");
setcookie($OJ_NAME."_check","");
session_destroy();
$view_errors="Logged in another ip address:$lastip, auto logout!";
require("template/$OJ_TEMPLATE/error.php");
exit(0);
}
}
$OJ_LOG_FILE="/var/log/hustoj/{$OJ_NAME}.log";
require_once(dirname(__FILE__) . "/logger.php");
$logger=new Logger(isset($_SESSION[$OJ_NAME . '_' . 'user_id'])?$_SESSION[$OJ_NAME . '_' . 'user_id']:"guest",
$OJ_LOG_FILE,
$OJ_LOG_DATETIME_FORMAT,
$OJ_LOG_ENABLED,
$OJ_LOG_PID_ENABLED,
$OJ_LOG_USER_ENABLED,
$OJ_LOG_URL_ENABLED,
$OJ_LOG_URL_HOST_ENABLED,
$OJ_LOG_URL_PARAM_ENABLED,
$OJ_LOG_TRACE_ENABLED);
$logger->info();
// these lines can help you make a SaaS platform of HUSTOJ with the help of JudgeHub
// 傻瓜级保姆配置系统
switch($OJ_FRIENDLY_LEVEL) {
case 9:
$OJ_GUEST=true;
case 8:
$OJ_DOWNLOAD=true;
case 7:
$OJ_BBS="discuss3";
$OJ_FREE_PRACTICE=true;
case 6:
$OJ_LONG_LOGIN=true;
case 5:
$OJ_TEST_RUN=true;
case 4:
$OJ_MAIL=true;
$OJ_AUTO_SHARE=true;
case 3:
$OJ_SHOW_DIFF=true;
$OJ_VCODE=false;
case 2:
$OJ_LANG="cn";
case 1:
date_default_timezone_set("Asia/Shanghai");
pdo_query("SET time_zone ='+8:00'");
case 0:
break;
case -1:
$OJ_NEED_LOGIN=true;
$OJ_REGISTER=false;
}
if(!isset($OJ_SUBMIT_COOLDOWN_TIME)) $OJ_SUBMIT_COOLDOWN_TIME=3;
// if using EXAM or ON site auto turn off free practice
if(isset($OJ_ON_SITE_CONTEST_ID) || isset($OJ_EXAM_CONTEST_ID)) $OJ_FREE_PRACTICE=false;
// $OJ_BG="/image/bg".date('H').".jpg"; //每个整点更换壁纸需要准备bg[0~23].jpg在image目录
// if OJ_BG==bing ,using bing.com for daily change background
if(isset($OJ_BG)&&$OJ_BG=="bing"){
$logfile="/dev/shm/bing.log";
$history=@file_get_contents($logfile);
if($history!=""){
$history=json_decode($history);
}else{
$history=array();
}
$bg_file=dirname(dirname(__FILE__))."/image/bg.url";
if(!file_exists($bg_file)) touch($bg_file);
if(time()-fileatime($bg_file)>3600*24){
require_once(dirname(__FILE__)."/curl.php");
$data=curl_get("https://cn.bing.com/");
$OJ_BG=getPartByMark($data,"<link rel=\"preload\" href=\"","\" as=\"image\" id=\"preloadBg\"");
if(strpos($OJ_BG,"http")!=0)$OJ_BG="https://cn.bing.com/".$OJ_BG;
//echo $OJ_BG;
if($OJ_BG){
file_put_contents($bg_file,$OJ_BG);
if(!in_array($OJ_BG,$history)){
array_push($history,$OJ_BG);
if(count($history)>30) array_shift($history);
file_put_contents($logfile,json_encode($history));
}
}
else touch($bg_file);
}else{
$OJ_BG=file_get_contents($bg_file);
if(!empty($history)){
$OJ_BG=$history[rand(0,count($history)-1)];
}
}
}
if (!empty($OJ_CDN_URL)) {
header('Access-Control-Allow-Origin:'.$OJ_CDN_URL);
}