PageRenderTime 52ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/3.2/src/grades_fac_menu.c

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