parent
a1476164d5
commit
f8205cf3ae
|
@ -19,7 +19,7 @@ from projects.models import File,Method
|
||||||
from projects.models import Language, Project, FileSummary
|
from projects.models import Language, Project, FileSummary
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
import base64
|
import base64
|
||||||
|
import redis
|
||||||
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
@ -29,13 +29,42 @@ logging.basicConfig(level=logging.DEBUG,
|
||||||
filename='/test.log',
|
filename='/test.log',
|
||||||
filemode='w')
|
filemode='w')
|
||||||
|
|
||||||
|
def set_init_rank(redis_db):
|
||||||
|
# 1.获取当前的比赛项目id
|
||||||
|
# competition_projects=Project.objects.filter(is_competition_project=1)
|
||||||
|
competition_files = File.objects.filter(is_competition_file=1)
|
||||||
|
# 2.获取所有的组id
|
||||||
|
symbol = "gcc-dev-2018"
|
||||||
|
private_token="hriEn3UwXfJs3PmyXnSG"
|
||||||
|
url="https://www.educoder.net/api/v1/sources/"+str(symbol)+"/get_team_ids?private_token="+private_token
|
||||||
|
response = requests.get(url)
|
||||||
|
team_ids = list(json.loads(response.text)['team_ids'])
|
||||||
|
for team in team_ids:
|
||||||
|
# 3.获取当前组对应的组成员
|
||||||
|
url = "https://www.educoder.net/api/v1/sources/"+str(symbol)+"/get_team_user_ids?team_id="+str(team)+"&private_token="+private_token
|
||||||
|
response = requests.get(url)
|
||||||
|
user_ids = json.loads(response.text)['user_ids']
|
||||||
|
users = User.objects.filter(educoder_userid__in=user_ids)
|
||||||
|
# add the user into user_team_map
|
||||||
|
for user in users:
|
||||||
|
user_team_map[user.id]=team
|
||||||
|
if len(users)>0:
|
||||||
|
# 4.获取每个组的分数
|
||||||
|
score = len(Annotation.objects.filter(user__in=users,file__in=competition_files))
|
||||||
|
redis_db.zadd("gcc",score,team)
|
||||||
|
print("init rank success")
|
||||||
|
|
||||||
|
redis_db = redis.StrictRedis(host='localhost', port=6379, db=0)
|
||||||
|
user_team_map ={}
|
||||||
|
set_init_rank(redis_db)
|
||||||
|
|
||||||
|
|
||||||
def get_educoder_group_userlist_by_educoder_userid(userid,file_id):
|
def get_educoder_group_userlist_by_educoder_userid(userid,file_id):
|
||||||
# 根据file_id查询project再查询到对应的比赛
|
# 根据file_id查询project再查询到对应的比赛
|
||||||
project = File.objects.get(id=file_id).project
|
project = File.objects.get(id=file_id).project
|
||||||
try:
|
try:
|
||||||
symbol = Competition.objects.get(project=project).symbol
|
# symbol = Competition.objects.get(project=project).symbol
|
||||||
|
symbol = "gcc-dev-2018"
|
||||||
private_token="hriEn3UwXfJs3PmyXnSG"
|
private_token="hriEn3UwXfJs3PmyXnSG"
|
||||||
url="https://www.educoder.net/api/v1/sources/"+str(symbol)+"/get_competition_members?user_id="+str(userid)+"&private_token="+private_token
|
url="https://www.educoder.net/api/v1/sources/"+str(symbol)+"/get_competition_members?user_id="+str(userid)+"&private_token="+private_token
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
|
@ -389,7 +418,14 @@ class AddAnnotationView(View):
|
||||||
# print(anno_content)
|
# print(anno_content)
|
||||||
if file.project.is_competition_project and not file.is_competition_file:
|
if file.project.is_competition_project and not file.is_competition_file:
|
||||||
return HttpResponse('{"status":"success_but_not_correct_file","msg":"注释成功,但请注意您标注的不是比赛模块","anno_content":"'+anno_content+'"}', content_type='application/json')
|
return HttpResponse('{"status":"success_but_not_correct_file","msg":"注释成功,但请注意您标注的不是比赛模块","anno_content":"'+anno_content+'"}', content_type='application/json')
|
||||||
return HttpResponse('{"status":"success","msg":"注释成功","anno_content":"'+anno_content+'"}', content_type='application/json')
|
# update LeaderBoard
|
||||||
|
if request.user.educoder_userid is not None:
|
||||||
|
team_id = user_team_map[request.user.id]
|
||||||
|
redis_db.zincrby("gcc",team_id,1)
|
||||||
|
rank = int(redis_db.zrevrank("gcc",team_id))+1
|
||||||
|
return HttpResponse(json.dumps({"status": "success", "msg":"注释成功","anno_content":anno_content,"rank":rank}), content_type='application/json')
|
||||||
|
else:
|
||||||
|
return HttpResponse(json.dumps({"status": "success", "msg":"注释成功","anno_content":anno_content,}), content_type='application/json')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return HttpResponse('{"status":"fail","msg":"参数传递错误,注释失败"}', content_type='application/json')
|
return HttpResponse('{"status":"fail","msg":"参数传递错误,注释失败"}', content_type='application/json')
|
||||||
else:
|
else:
|
||||||
|
@ -455,11 +491,19 @@ def get_currentfile_language(file):
|
||||||
class DeleteView(View):
|
class DeleteView(View):
|
||||||
def post(self,request):
|
def post(self,request):
|
||||||
try:
|
try:
|
||||||
|
remove_anno_icon = False
|
||||||
object_id = request.POST.get("object_id","")
|
object_id = request.POST.get("object_id","")
|
||||||
object_type = request.POST.get("object_type","")
|
object_type = request.POST.get("object_type","")
|
||||||
if object_type=="Annotation":
|
if object_type=="Annotation":
|
||||||
annotation = Annotation.objects.get(id=object_id,is_latest=1)
|
annotation = Annotation.objects.get(id=object_id,is_latest=1)
|
||||||
Annotation.objects.filter(linenum=annotation.linenum,file=annotation.file).delete()
|
linenum = annotation.linenum
|
||||||
|
file = annotation.file
|
||||||
|
Annotation.objects.filter(user=request.user,linenum=linenum,file=file).delete()
|
||||||
|
if request.user.educoder_userid is not None:
|
||||||
|
team_id = user_team_map[request.user.id]
|
||||||
|
redis_db.zincrby("gcc",team_id,-1)
|
||||||
|
if len(Annotation.objects.filter(linenum=linenum,file=file))==0:
|
||||||
|
remove_anno_icon = True
|
||||||
elif object_type == "Question":
|
elif object_type == "Question":
|
||||||
Question.objects.filter(id=object_id).delete()
|
Question.objects.filter(id=object_id).delete()
|
||||||
elif object_type == "QuestionAnswer":
|
elif object_type == "QuestionAnswer":
|
||||||
|
@ -470,8 +514,9 @@ class DeleteView(View):
|
||||||
IssueComment.objects.filter(id=object_id).delete()
|
IssueComment.objects.filter(id=object_id).delete()
|
||||||
elif object_type == 'QuestionAnswerComment':
|
elif object_type == 'QuestionAnswerComment':
|
||||||
QuestionAnswerComment.objects.filter(id=object_id).delete()
|
QuestionAnswerComment.objects.filter(id=object_id).delete()
|
||||||
return HttpResponse('{"status":"success","msg":"删除成功"}', content_type='application/json')
|
return HttpResponse(json.dumps({"status": "success", "msg":"删除成功","remove_anno_icon":remove_anno_icon}), content_type='application/json')
|
||||||
except:
|
except Exception as e:
|
||||||
|
# print(str(e))
|
||||||
return HttpResponse('{"status":"fail","msg":"删除失败"}', content_type='application/json')
|
return HttpResponse('{"status":"fail","msg":"删除失败"}', content_type='application/json')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1384,6 +1429,7 @@ class RightView(View):
|
||||||
filelinenum = current_file_summary.line_num
|
filelinenum = current_file_summary.line_num
|
||||||
create_time = file.create_time
|
create_time = file.create_time
|
||||||
file_num = current_file_summary.file_num
|
file_num = current_file_summary.file_num
|
||||||
|
project_url = file.project.github
|
||||||
html_str = render_to_string('projects/filesub/file-right.html', locals())
|
html_str = render_to_string('projects/filesub/file-right.html', locals())
|
||||||
return html_str
|
return html_str
|
||||||
|
|
||||||
|
@ -1420,6 +1466,7 @@ class RightView(View):
|
||||||
path = file.path
|
path = file.path
|
||||||
|
|
||||||
# 观看数应该放在File_id中
|
# 观看数应该放在File_id中
|
||||||
|
project_url = file.project.github
|
||||||
html_str = render_to_string('projects/filesub/file-right.html', locals())
|
html_str = render_to_string('projects/filesub/file-right.html', locals())
|
||||||
return html_str
|
return html_str
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
redis
|
||||||
alabaster==0.7.10
|
alabaster==0.7.10
|
||||||
amqp==1.4.9
|
amqp==1.4.9
|
||||||
anyjson==0.3.3
|
anyjson==0.3.3
|
||||||
|
|
|
@ -248,7 +248,7 @@ function modify_anno(file_id,line_num,anno_id){
|
||||||
if (data.status === "success") {
|
if (data.status === "success") {
|
||||||
alert(data.msg)
|
alert(data.msg)
|
||||||
$("#ItemcommentPanel").remove()
|
$("#ItemcommentPanel").remove()
|
||||||
$("."+file_id+line_num).text(data.anno_content)
|
$("."+file_id+"_"+line_num).text(data.anno_content)
|
||||||
show_annotation(file_id,line_num);
|
show_annotation(file_id,line_num);
|
||||||
|
|
||||||
deletelocalStorage("modifyAnno_id");
|
deletelocalStorage("modifyAnno_id");
|
||||||
|
@ -485,8 +485,10 @@ function delete_anno(file_id,line_num,anno_id){
|
||||||
if (data.status == 'success') {
|
if (data.status == 'success') {
|
||||||
$("#ItemcommentPanel").remove()
|
$("#ItemcommentPanel").remove()
|
||||||
$("."+file_id+line_num).remove()
|
$("."+file_id+line_num).remove()
|
||||||
$("#codeopration_anno_"+file_id+"_"+line_num).remove();
|
if(data.remove_anno_icon){
|
||||||
show_annotation(file_id,line_num);
|
$("#codeopration_anno_"+file_id+"_"+line_num).remove();
|
||||||
|
}
|
||||||
|
// show_annotation(file_id,line_num);
|
||||||
layer.msg(data.msg);
|
layer.msg(data.msg);
|
||||||
}else{
|
}else{
|
||||||
layer.msg(data.msg);
|
layer.msg(data.msg);
|
||||||
|
@ -537,18 +539,6 @@ function add_annotation(item,file_id, line_num) {
|
||||||
function submit_annotation(file_id, line_num, content) {
|
function submit_annotation(file_id, line_num, content) {
|
||||||
// 因为可能注释或问题没有值的时候,不会为该代码块添加html代码,所以首先判断
|
// 因为可能注释或问题没有值的时候,不会为该代码块添加html代码,所以首先判断
|
||||||
// 然后将注释数+1
|
// 然后将注释数+1
|
||||||
var codeopration_anno_div = $("#codeopration_anno_"+file_id+"_" + line_num).html()
|
|
||||||
var str = '<span id="annonums_' + line_num + '" class="annonums" onclick="show_annotation(' + file_id + ',' + line_num + ')">';
|
|
||||||
str +='</span>';
|
|
||||||
$("#codeopration_anno_" + +file_id + "_" + line_num).html(str);
|
|
||||||
$(".addno-panel").hide();
|
|
||||||
$(".source-addno-panel").remove();
|
|
||||||
// show_annotation(file_id,line_num);
|
|
||||||
//将注释添加到当前行的上一行
|
|
||||||
var contenthtml ='<div class="linenum"></div>'+'<div class="sourcecode">'+'<div class="mypre newaddmypre hljs-comment ' + file_id+line_num + '">'+"//"+ content+'</div>'+'</div>'+'<div class="linestatus"></div>';
|
|
||||||
var html = '<div class="newcodeline newcodelinebox">'+contenthtml+'</div>';
|
|
||||||
var id=file_id+'_'+"L"+line_num;
|
|
||||||
$("#"+id).before(html);
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
cache: false,
|
cache: false,
|
||||||
type: "POST",
|
type: "POST",
|
||||||
|
@ -561,7 +551,21 @@ function submit_annotation(file_id, line_num, content) {
|
||||||
},
|
},
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (data.status == 'success') {
|
if (data.status == 'success') {
|
||||||
layer.msg('提交成功');
|
var codeopration_anno_div = $("#codeopration_anno_"+file_id+"_" + line_num).html()
|
||||||
|
var str = '<span id="annonums_' + line_num + '" class="annonums" onclick="show_annotation(' + file_id + ',' + line_num + ')">';
|
||||||
|
str +='</span>';
|
||||||
|
$("#codeopration_anno_" + +file_id + "_" + line_num).html(str);
|
||||||
|
$(".addno-panel").hide();
|
||||||
|
$(".source-addno-panel").remove();
|
||||||
|
// show_annotation(file_id,line_num);
|
||||||
|
//将注释添加到当前行的上一行
|
||||||
|
var contenthtml ='<div class="linenum"></div>'+'<div class="sourcecode">'+'<div class="mypre newaddmypre hljs-comment ' + file_id+"_"+line_num + '">'+"//"+ content+'</div>'+'</div>'+'<div class="linestatus"></div>';
|
||||||
|
var html = '<div class="newcodeline newcodelinebox">'+contenthtml+'</div>';
|
||||||
|
var id=file_id+'_'+"L"+line_num;
|
||||||
|
$("#"+id).before(html);
|
||||||
|
if(data.rank){
|
||||||
|
layer.msg('标注提交成功,当前小组排名为:'+data.rank);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
layer.msg(data.msg);
|
layer.msg(data.msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,22 @@
|
||||||
<div class="middle-right-item">
|
<div class="middle-right-item">
|
||||||
{% if isdir %}
|
{% if isdir %}
|
||||||
<p class="right-item-title">Module Summary</p>
|
<p class="right-item-title">Module Summary</p>
|
||||||
|
|
||||||
|
<p class="clearfix">
|
||||||
|
<span class="panel-leftfontnew">Project Url:</span>
|
||||||
|
<span class="panel-right newpanel-right" title="{{project_url}}"><a style="color:white" href="{{project_url}}" target="_blank">{{project_url}}</a></span>
|
||||||
|
</p>
|
||||||
<p class="clearfix">
|
<p class="clearfix">
|
||||||
<span class="panel-leftfontnew">Module Path:</span>
|
<span class="panel-leftfontnew">Module Path:</span>
|
||||||
<span class="panel-right newpanel-right" title="{{path}}">{{path}}</span>
|
<span class="panel-right newpanel-right" title="{{path}}">{{path}}</span>
|
||||||
</p>
|
</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p class="right-item-title">File Summary</p>
|
<p class="right-item-title">File Summary</p>
|
||||||
|
|
||||||
|
<p class="clearfix">
|
||||||
|
<span class="panel-leftfontnew">Project Url:</span>
|
||||||
|
<span class="panel-right newpanel-right" title="{{project_url}}"><a style="color:white" href="{{project_url}}" target="_blank">{{project_url}}</a></span>
|
||||||
|
</p>
|
||||||
<p class="clearfix">
|
<p class="clearfix">
|
||||||
<span class="panel-leftfontnew">File Path:</span>
|
<span class="panel-leftfontnew">File Path:</span>
|
||||||
<span class="panel-right newpanel-right" title="{{path}}">{{path}}</span>
|
<span class="panel-right newpanel-right" title="{{path}}">{{path}}</span>
|
||||||
|
|
Loading…
Reference in New Issue