#include #include #include #include #include "ClearSilver.h" #include "global.h" #include "grade.h" #include "manhat-lib/shared_util.h" #include "manhat-lib/shared_grades_util.h" #include "manhat-lib/shared_person_list.h" #include "manhat-lib/shared_access.h" #include "manhat-lib/shared_cs_util.h" #include "manhat-lib/shared_file_util.h" static void delete_files (const char *username, CONFIG_STRUCT *conf) { char fname[MAX_PATH + 1]; snprintf (fname, MAX_PATH + 1, "%speople/%s/grades/%s", conf->course_path, username, GRADES_NEW_FNAME); unlink (fname); } static void delete_student_files (CONFIG_STRUCT *conf, P_NODE *head) { P_NODE *ptr; for (ptr = head; ptr; ptr = ptr->next) if(ptr->data.group == STUDENT) delete_files (ptr->data.username, conf); } static void delete_teacher_files (CONFIG_STRUCT *conf, P_NODE *head, const char *course, const char *key) { char fname[MAX_PATH + 1]; char url[MAX_PATH + 1]; P_NODE *ptr; for(ptr=head; ptr; ptr=ptr->next) if(ptr->data.group == FACULTY) { update_grades_inf (conf, ptr->data.username); /* shared_grades_util.c */ if(conf->grades == 1) { snprintf (fname, MAX_PATH + 1, "%s%s/%s", conf->course_path,"grade_book", GRADES_TAB_FNAME); snprintf (url, MAX_PATH + 1, "%s?crs=%s&id=%s", "grades_fac_menu", course, key); cs_set_value("back_url", url); } else if(conf->grades == 3) { snprintf (fname, MAX_PATH + 1, "%s%s/%s", conf->course_path,"grade_book", "gradequick"); snprintf (url, MAX_PATH + 1, "%s?crs=%s&id=%s", "grades_fac_menu", course, key); cs_set_value("back_url", url); } else snprintf (fname, MAX_PATH + 1, "%s%s/%s", conf->course_path,"grade_book", GRADE_BOOK_STUDENT_DB); if(conf->grades == 1 || conf->grades == 2) unlink (fname); else kill_directory(fname); snprintf (fname, MAX_PATH + 1, "%speople/%s/grades/%s", conf->course_path, ptr->data.username, GRADES_INF_FNAME); unlink (fname); snprintf (fname, MAX_PATH + 1, "%speople/%s/grades/%s", conf->course_path, ptr->data.username, GRADES_TAB_FNAME); unlink (fname); } } int delete_action ( CONFIG_STRUCT *conf, SESSION *user, const char *course, const char *key) { P_NODE *person_head; char *check1 =0; check1 = hdf_get_value(global_cgi->hdf, "Query.val", 0); if( check1 ) { person_head = build_option_person_list(conf); /* shared_person_list.c */ delete_student_files (conf, person_head); delete_teacher_files (conf, person_head, course, key); free_option_person_list(person_head); /* shared_person_list.c */ return 1; } return 0; } void read_parameters ( char *course, char *key) { cs_get_required_parameter("crs", course, MAX_PATH); cs_get_required_parameter("id", key, MAX_KEY); } int main () { char course[MAX_PATH +1]; char key[MAX_KEY +1]; SESSION user; CONFIG_STRUCT conf; cs_cgi_init(); /* shared_cs_util.c */ read_parameters (course, key); read_configuration_file (course, &conf); validate_key (key, &user, &conf); if(user.group != FACULTY) cs_critical_error(ERR_REQUEST_DENIED, ""); if(!has_write_permission(&user, &conf)) /* shared_access.c */ cs_critical_error(ERR_REQUEST_DENIED, ""); if(!delete_action( &conf, &user, course, key)) cs_critical_error(ERR_MISS_CHECKBOXES, "grades_delete"); if(conf.grades == 1) printf("Location: %s?crs=%s&id=%s\n\n", "grades_fac_menu", course, key); else { cs_set_course_info(&conf); cs_set_int_value("success_delete", 1); cs_cgi_display("grades_delete_form", 1); } cs_cgi_destroy(); return 0; /* exit successfully */ }