2024-10-10

This commit is contained in:
2024-10-10 12:56:56 +08:00
commit 7b347c848a
2648 changed files with 643965 additions and 0 deletions

69
install/moodle.sql Executable file
View File

@@ -0,0 +1,69 @@
DELIMITER $$
DROP trigger IF EXISTS `jol`.`tri_moodle` $$
create trigger tri_moodle
after update on solution
for each row
begin
declare mark int;
declare total int;
select count(1) into total from contest_problem where contest_id=new.contest_id;
if total>0 then
select sum(ac)/total*100 into mark
from (select max(pass_rate) ac from solution where user_id=new.user_id and contest_id=new.contest_id and problem_id>0 group by problem_id) s;
call update_moodle(new.contest_id,new.user_id,mark);
end if;
end $$
CREATE PROCEDURE `update_moodle`(IN `cid` INT, IN `user_id` VARCHAR(20), IN `mark` INT)
top:BEGIN
declare as_id int;
declare u_id int;
declare nowtime int;
declare oldid int;
set nowtime=UNIX_TIMESTAMP(now());
set as_id=0;
select m.id into as_id from
moodle.mdl_assign m
where m.name = concat('[OJ]-C',cid);
if as_id=0 then
leave top;
end if;
set u_id =-1;
select m.id into u_id from moodle.mdl_user m where username=user_id;
select mag.grade into oldid from moodle.mdl_assign_grades mag
where assignment=as_id and userid=u_id;
set oldid=-1;
select id into oldid from moodle.mdl_assign_submission m
where assignment=as_id and userid=u_id;
if oldid =-1 then
insert into moodle.mdl_assign_submission
(assignment,userid,timecreated,timemodified,status,attemptnumber)
values( as_id ,u_id ,nowtime ,nowtime ,'new' ,0);
insert into moodle.mdl_assign_grades(assignment,userid,timecreated,timemodified,grader,grade,attemptnumber)
select ma.id,mas.userid,UNIX_TIMESTAMP( NOW( ) ),UNIX_TIMESTAMP( NOW( ) ),2,mark,mas.attemptnumber
from moodle.mdl_assign ma
inner join moodle.mdl_assign_submission mas on
mas.assignment=ma.id and mas.status='new'
where concat(ma.id,',',mas.userid) not in (select concat(assignment,',',userid) from moodle.mdl_assign_grades);
else
update moodle.mdl_assign_grades
set grade=mark,timemodified=nowtime where
assignment=as_id and userid=u_id;
end if;
END$$
DELIMITER ;