2024-10-10
This commit is contained in:
69
install/moodle.sql
Executable file
69
install/moodle.sql
Executable 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 ;
|
||||
Reference in New Issue
Block a user