let print_student_html hpr gl (paddl:paddress list) (s:student) =
hpr "<center>\n<table width='80%'><tr><td valign='top' align='left'>\n\n";
hpr "<table frame='hsides' rules='groups' border='3' summary='Etudiant' \nstyle='font-size:small;'>\n";
hpr (Printf.sprintf "<tr><td width='100'>Nom : </td><td>%s</td></tr>\n\n" s.name);
hpr (Printf.sprintf "<tr><td>Pr\233nom : </td><td>%s</td></tr>\n\n" s.pren);
hpr (Printf.sprintf "<tr><td>Login : </td><td>%s</td></tr>\n\n" s.login);
hpr "</table>\n\n";
hpr "</td><td align='right'>\n";
hpr "\n\n<table frame='hsides' rules='groups' border='3' summary='Etudiant' \nstyle='font-size:small;'>\n<colgroup align=\"left\" span='1'/>\n<colgroup align=\"center\" span='1'/>\n<colgroup align=\"center\" span='1'/>\n<colgroup align=\"center\" span='1'/>\n<colgroup align=\"center\" span='1'/>\n\n<tbody> <tr> <th></th>\n<th width='80' align='center'>Equipe</th>\n<th width='80' align='center'>Resp.</th>\n<th width='100'>Note</th>\n<th width='130'>Compagnons</th>\n</tr> </tbody>\n\n";
List.iter (fun padd -> try
let team = H.get_assoc s.teams padd in
let resp = if (!do_assign_resp) then (resp_to_full_string team.r) else "" in
let timstr = (if (team.n<0) then "_" else (string_of_int team.n)) in
let gradstu = student_grade s padd in
let gradtim = get_group_project_team_grade (s.group) padd team.n in
let gradstr = (if (gradstu < 0.) then "-" else
if (gradstu = gradtim) then Printf.sprintf "%.1f" gradstu
else Printf.sprintf "%.1f (<font color=\"#FF0000\">%.1f</font>)" gradstu gradtim) in
let caps = List.map (fun s -> (s,Capt)) (get_captains gl s.group padd team.n) in
let secs = List.map (fun s -> (s,Secr)) (get_secretaries gl s.group padd team.n) in
let prgs = List.map (fun s -> (s,Prog)) (get_progs gl s.group padd team.n) in
let loglist = String.concat ", \n" (remove (List.map
(fun (stu,resp) -> if ((String.compare stu.login s.login) = 0)
then "" else Printf.sprintf
"<a href='student.html?login=%s'>%s</a> (%s)"
stu.login stu.login (resp_to_string resp)) (caps@secs@prgs)) "") in
hpr "<tbody>\n<tr>\n";
hpr (Printf.sprintf
"<td width='120'><a href='project.html?projnum=%s'>Projet n\176%s</a> : </td>\n"
(pa_to_string padd) (pa_to_string padd));
hpr (Printf.sprintf "<td align='center'>%s</td><td align='center'>%s</td>" timstr resp);
hpr (Printf.sprintf "<td align='center'>%s</td>" gradstr);
hpr (Printf.sprintf "<td>%s</td>" loglist);
if (!export_type = HtmlJscpt) && (!allow_grading) then begin
hpr (Printf.sprintf "<td><form method='post' action=''>\n<input type='text' name='grade' size='5' value=''/>\n<input type='hidden' name='login' value='%s'/>\n<input type='hidden' name='projnum' value='%s'/></form></td>\n" s.login (pa_to_string padd));
end;
hpr "</tr>\n</tbody>\n\n";
with _ -> begin
let gradstu = student_grade s padd in
let gradstr = (if (gradstu < 0.) then "-" else
Printf.sprintf "%.1f" gradstu) in
hpr (Printf.sprintf "<tbody>\n<tr><td width='120' height='40'><a href='project.html?projnum=%s'>Projet n\176%s</a> : </td>\n<td/><td/><td align='center'>%s</td><td/>\n" (pa_to_string padd) (pa_to_string padd) gradstr);
if (!export_type = HtmlJscpt) && (!allow_grading) then begin
hpr (Printf.sprintf "<td><form method='post' action=''>\n<input type='text' name='grade' size='5' value=''/>\n<input type='hidden' name='login' value='%s'/>\n<input type='hidden' name='projnum' value='%s'/></form></td>\n" s.login (pa_to_string padd));
end;
hpr "</tr></tbody>\n\n";
end) (List.sort compare paddl);
hpr (Printf.sprintf "<tbody>\n<tr><td>Moyenne : </td><td/><td/><td align='center'>%.1f</td><td/>\n\n" (student_mean s));
hpr (Printf.sprintf "<td><form method='post' action=''>\n<input type='text' name='grade' size='5' value=''/>\n<input type='hidden' name='login' value='%s'/>\n<input type='hidden' name='projnum' value='%s'/></form></td>\n" s.login "");
hpr "</tr>\n</tbody></table>\n\n";
hpr "</td></tr></table></center>\n"