PageRenderTime 45ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/src/grades_fac_menu.c

#
C | 255 lines | 168 code | 87 blank | 0 comment | 37 complexity | de3ace5feb0112af54f37860ea7f52ab MD5 | raw file
Possible License(s): 0BSD, Apache-2.0, GPL-2.0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <time.h>
  6. #include <ClearSilver.h>
  7. #include "global.h"
  8. #include "grade.h"
  9. #include "manhat-lib/shared_util.h"
  10. #include "manhat-lib/shared_cs_util.h"
  11. #include "manhat-lib/shared_file_util.h"
  12. #include "manhat-lib/shared_copy_tab_file.h"
  13. #include "manhat-lib/shared_access.h"
  14. #include "manhat-lib/shared_person_list.h"
  15. void
  16. read_parameters (char *course, char *key)
  17. {
  18. cs_get_required_parameter("crs", course, MAX_PATH);
  19. cs_get_required_parameter("id", key, MAX_KEY);
  20. }
  21. void
  22. set_one_entry(int i, char* value, char *url)
  23. {
  24. #define MAX_TEMP_LEN 30
  25. char name[MAX_TEMP_LEN +1];
  26. snprintf(name, MAX_TEMP_LEN +1, "item.%d.name", i);
  27. cs_set_value( name, value); /* shared_cs_util.h */
  28. if(strlen(url))
  29. {
  30. snprintf(name, MAX_TEMP_LEN +1, "item.%d.url", i);
  31. cs_set_value(name, url); /* shared_cs_util.h */
  32. }
  33. #undef MAX_TEMP_LEN
  34. }
  35. int
  36. has_released_grades(CONFIG_STRUCT *conf)
  37. {
  38. char db_path[MAX_PATH+1];
  39. if(conf->grades == EXCEL_TAB_FILE_METHOD) /* grade.h */
  40. snprintf(db_path, MAX_PATH +1, "%s%s/%s", conf->course_path, "grade_book", GRADES_TAB_FNAME);
  41. else if(conf->grades == 3) /* grade.h */
  42. snprintf(db_path, MAX_PATH +1, "%s%s/%s", conf->course_path, "grade_book", "gradequick");
  43. if(!file_exists(db_path)) /* shared_file_util.c */
  44. {
  45. if(conf->grades == EXCEL_TAB_FILE_METHOD) /* grade.h */
  46. {
  47. if(!copy_tab_file(conf))
  48. return 0;
  49. if(!file_exists(db_path))
  50. return 0;
  51. else
  52. return 1;
  53. }
  54. return 0;
  55. }
  56. return 1;
  57. }
  58. void
  59. set_menu(const char *course, const char *key, CONFIG_STRUCT *conf, int can_write)
  60. {
  61. int i = 0;
  62. char url[MAX_PATH + 1];
  63. int released;
  64. cs_set_back_url(course, key, "main_menu"); /* shared_cs_util.c */
  65. released = has_released_grades(conf);
  66. if(conf->grades == EXCEL_TAB_FILE_METHOD) /* #defined in grade.h */
  67. {
  68. cs_set_int_value("using_excel_method", 1);
  69. if(can_write)
  70. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "grades_upload_form", course, key);
  71. else
  72. url[0] = '\0';
  73. set_one_entry( i,"grades_upload_form", url);
  74. i++;
  75. }
  76. else
  77. {
  78. cs_set_int_value("using_excel_method", 0);
  79. if(can_write)
  80. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "gradequick_upload_form", course, key);
  81. else
  82. url[0] = '\0';
  83. set_one_entry( i,"gradequick_upload_form", url);
  84. i++;
  85. }
  86. if(can_write && released)
  87. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "grades_delete_form", course, key);
  88. else
  89. url[0] = '\0';
  90. set_one_entry( i, "grades_delete_form", url);
  91. i++;
  92. if(can_write && released)
  93. {
  94. if(conf->grades == EXCEL_TAB_FILE_METHOD) /* defined in grade.h */
  95. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "grades_download", course, key);
  96. else
  97. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "grade_csv", course, key);
  98. }
  99. else
  100. url[0] = '\0';
  101. if(conf->grades == EXCEL_TAB_FILE_METHOD) /* defined in grade.h */
  102. set_one_entry( i, "grades_download", url);
  103. i++;
  104. if( released)
  105. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "grades_info", course, key);
  106. else
  107. url[0] = '\0';
  108. set_one_entry( i,"grades_info", url);
  109. i++;
  110. if( released)
  111. {
  112. if(conf->grades == EXCEL_TAB_FILE_METHOD) /* defined in grade.h */
  113. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "grades_view", course, key);
  114. else
  115. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "gradequick_view", course, key);
  116. }
  117. else
  118. url[0] = '\0';
  119. set_one_entry( i, "grades_view", url);
  120. i++;
  121. if(released)
  122. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s", "grades_view_form", course, key);
  123. else
  124. url[0] = '\0';
  125. set_one_entry( i, "grades_view_form", url);
  126. i++;
  127. if(conf->grades == EXCEL_TAB_FILE_METHOD) /* #defined in grade.h */
  128. {
  129. if(can_write)
  130. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s&amp;go=yes", "admin_download_passwd", course, key);
  131. else
  132. url[0] = '\0';
  133. set_one_entry( i, "admin_download_passwd" ,url);
  134. }
  135. else /* #defined in grade.h */
  136. {
  137. if(can_write)
  138. snprintf(url, MAX_PATH +1, "%s?crs=%s&amp;id=%s&amp;go=yes&amp;csv=2", "admin_download_passwd", course, key);
  139. else
  140. url[0] = '\0';
  141. set_one_entry( i, "gradequick_fixlength" ,url);
  142. }
  143. }
  144. int
  145. main ()
  146. {
  147. char course[MAX_PATH +1];
  148. char key[MAX_KEY +1];
  149. int can_write;
  150. SESSION user;
  151. CONFIG_STRUCT conf;
  152. cs_cgi_init(); /* shared_cs_util.c */
  153. read_parameters ( course, key);
  154. read_configuration_file (course, &conf);
  155. cs_set_course_info(&conf); /* shared_cs_util.c */
  156. cs_set_current_time(); /* shared_cs_util.c */
  157. validate_key (key, &user, &conf);
  158. if( (user.group != FACULTY) || (conf.grades == 0) )
  159. cs_critical_error(ERR_REQUEST_DENIED, ""); /* shared_cs_util.h */
  160. else
  161. {
  162. can_write = has_write_permission(&user, &conf); /* shared_access.h */
  163. set_menu(course, key, &conf, can_write);
  164. cs_cgi_display ("grades_fac_menu", 1); /* shared_cs_util.h */
  165. cs_cgi_destroy(); /* shared_cs_util.h */
  166. }
  167. return 0; /* exit successfully */
  168. }