This is an old revision of the document!
Examiners have access to most procedures from the Exam Management and Grades section.
Parameter: Exam Identifier
changeAttributes(ident uid, ident id, string title, string date, string time, string location) { assume exists /account[uid]/admin || exists /account[uid]/examiner[id]; assume exists /exam[id]; # implicitly true in OO implementations update /exam[id]/title title; update /exam[id]/date date; update /exam[id]/time time; update /exam[id]/location location; }
createTask(ident uid, ident id, ident taskId, double maxPoints) { assume exists /account[uid]/examiner[id]; assume exists /exam[id]; # implicitly true in OO implementations assume not exists /exam[id]/task[taskId]; assume maxPoints >= 0; insert /exam[id] <task id=[taskId] maxPoints=[maxPoints] />; }
createGrade(ident uid, ident id, ident gradeId, string name, double value, double minPoints) { assume exists /account[uid]/examiner[id]; assume exists /exam[id]; # implicitly true in OO implementations assume not exists /exam[id]/grade[gradeId]; assume count(value, /exam[id]/grade/value) = 0; assume count(minPoints, /exam[id]/grade/minPoints) = 0; assume exists /exam[id]/grade[x] && /exam[id]/grade[x]/value < value -> /exam[id]/grade[x]/minPoints > minPoints; assume exists /exam[id]/grade[x] && value < /exam[id]/grade[x]/value -> minPoints > /exam[id]/grade[x]/minPoints; insert /exam[id] <grade id=[gradeId] name=[name] value=[value] minPoints=[minPoints] />; }
changeAttributes(ident uid, ident id, ident taskId, double maxPoints) { assume exists /account[uid]/examiner[id]; assume exists /exam[id]/task[taskId]; # implies the existence of the exam assume maxPoints >= 0; assume /exam[id]/participant[x]/result[taskId]/points <= maxPoints; update /exam[id]/task[taskId]/maxPoints maxPoints; }
deleteTask(ident uid, ident id, ident taskId) { assume exists /account[uid]/examiner[id]; assume exists /exam[id]/task[taskId]; # implies the exam exists, which is implicitly true anyway assume size(/exam[id]/participant/result[taskId]) = 0; remove /exam[id]/task[taskId]; }
deleteGrade(ident uid, ident id, ident gradeId) { assume exists /account[uid]/examiner[id]; assume exists /exam[id]/grade[gradeId]; # implies the exam exists, which is implicitly true anyway remove /exam[id]/grade[gradeId]; }
addResult(ident uid, ident id, ident studentId, ident taskId, double points) { assume exists /account[uid]/examiner[id]; assume exists /exam[id]/participant[studentId]; # can also be implicitly true in an OO language assume exists /exam[id]/task[taskId]; assume not exists /exam[id]/participant[studentId]/result[taskId]; assume points >= 0 && points <= /exam[id]/task[taskId]/maxPoints; insert /exam[id]/participant[studentId] <result task=[taskId] points=[points] />; }
removeResult(ident uid, ident id, ident studentId, ident taskId) { assume exists /account[uid]/examiner[id]; assume exists /exam[id]/participant[studentId]/result[taskId]; # implies the exam, account, student role and task exist by integrity remove /exam[id]/participant[studentId]/result[taskId]; }