result.class.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * Defines a gradebook Result object
  5. * @author Bert Steppé, Stijn Konings
  6. * @package chamilo.gradebook
  7. */
  8. /**
  9. * Class
  10. * @package chamilo.gradebook
  11. */
  12. class Result
  13. {
  14. private $id;
  15. private $user_id;
  16. private $evaluation;
  17. private $created_at;
  18. private $score;
  19. function Result()
  20. {
  21. $this->created_at = api_get_utc_datetime();
  22. }
  23. public function get_id()
  24. {
  25. return $this->id;
  26. }
  27. public function get_user_id()
  28. {
  29. return $this->user_id;
  30. }
  31. public function get_evaluation_id()
  32. {
  33. return $this->evaluation;
  34. }
  35. public function get_date()
  36. {
  37. return $this->created_at;
  38. }
  39. public function get_score()
  40. {
  41. return $this->score;
  42. }
  43. public function set_id($id)
  44. {
  45. $this->id = $id;
  46. }
  47. public function set_user_id($user_id)
  48. {
  49. $this->user_id = $user_id;
  50. }
  51. public function set_evaluation_id($evaluation_id)
  52. {
  53. $this->evaluation = $evaluation_id;
  54. }
  55. public function set_date($creation_date)
  56. {
  57. $this->created_at = $creation_date;
  58. }
  59. public function set_score($score)
  60. {
  61. $this->score = $score;
  62. }
  63. // CRUD FUNCTIONS
  64. /**
  65. * Retrieve results and return them as an array of Result objects
  66. * @param $id result id
  67. * @param $user_id user id (student)
  68. * @param $evaluation_id evaluation where this is a result for
  69. */
  70. public static function load($id = null, $user_id = null, $evaluation_id = null)
  71. {
  72. $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
  73. $tbl_grade_results = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_RESULT);
  74. $tbl_course_rel_course = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
  75. $tbl_session_rel_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
  76. if (is_null($id) && is_null($user_id) && !is_null($evaluation_id)) {
  77. $sql_verified_if_exist_evaluation = 'SELECT COUNT(*) AS count FROM ' . $tbl_grade_results . ' WHERE evaluation_id="' . Database::escape_string($evaluation_id) . '";';
  78. $res_verified_if_exist_evaluation = Database::query($sql_verified_if_exist_evaluation);
  79. $info_verified_if_exist_evaluation = Database::result($res_verified_if_exist_evaluation, 0, 0);
  80. if ($info_verified_if_exist_evaluation != 0) {
  81. $sql_course_rel_user = '';
  82. if (api_get_session_id()) {
  83. $sql_course_rel_user = 'SELECT course_code, id_user as user_id, status FROM ' . $tbl_session_rel_course_user . '
  84. WHERE status=0 AND course_code="' . api_get_course_id() . '" AND id_session=' . api_get_session_id();
  85. } else {
  86. $sql_course_rel_user = 'SELECT course_code,user_id,status FROM ' . $tbl_course_rel_course . ' WHERE status ="' . STUDENT . '" AND course_code="' . api_get_course_id() . '" ';
  87. }
  88. $res_course_rel_user = Database::query($sql_course_rel_user);
  89. $list_user_course_list = array();
  90. while ($row_course_rel_user = Database::fetch_array($res_course_rel_user, 'ASSOC')) {
  91. $list_user_course_list[] = $row_course_rel_user;
  92. }
  93. $current_date = api_get_utc_datetime();
  94. for ($i = 0; $i < count($list_user_course_list); $i++) {
  95. $sql_verified = 'SELECT COUNT(*) AS count FROM ' . $tbl_grade_results . ' WHERE user_id="' . intval($list_user_course_list[$i]['user_id']) . '" AND evaluation_id="' . intval($evaluation_id) . '";';
  96. $res_verified = Database::query($sql_verified);
  97. $info_verified = Database::result($res_verified, 0, 0);
  98. if ($info_verified == 0) {
  99. $sql_insert = 'INSERT INTO ' . $tbl_grade_results . '(user_id,evaluation_id,created_at,score)
  100. VALUES ("' . intval($list_user_course_list[$i]['user_id']) . '","' . intval($evaluation_id) . '","' . $current_date . '",0);';
  101. $res_insert = Database::query($sql_insert);
  102. }
  103. }
  104. $list_user_course_list = array();
  105. }
  106. }
  107. $sql = "SELECT gr.id, gr.user_id, gr.evaluation_id, gr.created_at, gr.score
  108. FROM $tbl_grade_results gr
  109. LEFT JOIN $tbl_user u ON gr.user_id = u.user_id ";
  110. $paramcount = 0;
  111. if (!empty($id)) {
  112. $sql.= ' WHERE gr.id = ' . Database::escape_string($id);
  113. $paramcount ++;
  114. }
  115. if (!empty($user_id)) {
  116. if ($paramcount != 0)
  117. $sql .= ' AND';
  118. else
  119. $sql .= ' WHERE';
  120. $sql .= ' gr.user_id = ' . Database::escape_string($user_id);
  121. $paramcount ++;
  122. }
  123. if (!empty($evaluation_id)) {
  124. if ($paramcount != 0) {
  125. $sql .= ' AND';
  126. } else {
  127. $sql .= ' WHERE';
  128. }
  129. $sql .= ' gr.evaluation_id = ' . Database::escape_string($evaluation_id);
  130. $paramcount ++;
  131. }
  132. $sql .= ' ORDER BY u.lastname, u.firstname';
  133. $result = Database::query($sql);
  134. $allres = array();
  135. while ($data = Database::fetch_array($result)) {
  136. $res = new Result();
  137. $res->set_id($data['id']);
  138. $res->set_user_id($data['user_id']);
  139. $res->set_evaluation_id($data['evaluation_id']);
  140. $res->set_date(api_get_local_time($data['created_at']));
  141. $res->set_score($data['score']);
  142. $allres[] = $res;
  143. }
  144. return $allres;
  145. }
  146. /**
  147. * Insert this result into the database
  148. */
  149. public function add()
  150. {
  151. if (isset($this->user_id) && isset($this->evaluation)) {
  152. $tbl_grade_results = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_RESULT);
  153. $sql = "INSERT INTO " . $tbl_grade_results
  154. . " (user_id, evaluation_id,
  155. created_at";
  156. if (isset($this->score)) {
  157. $sql .= ",score";
  158. }
  159. $sql .= ") VALUES
  160. (" . (int) $this->get_user_id() . ", " . (int) $this->get_evaluation_id()
  161. . ", '" . $this->get_date() . "' ";
  162. if (isset($this->score)) {
  163. $sql .= ", " . $this->get_score();
  164. }
  165. $sql .= ")";
  166. Database::query($sql);
  167. } else {
  168. die('Error in Result add: required field empty');
  169. }
  170. }
  171. /**
  172. * insert log result
  173. */
  174. public function add_result__log($userid, $evaluationid)
  175. {
  176. if (isset($userid) && isset($evaluationid)) {
  177. $tbl_grade_results_log = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_RESULT_LOG);
  178. $result = new Result();
  179. $arr_result = $result->load(null, $userid, $evaluationid);
  180. $arr = get_object_vars($arr_result[0]);
  181. $sql = 'INSERT INTO ' . $tbl_grade_results_log
  182. . ' (id_result,user_id, evaluation_id,created_at';
  183. if (isset($arr['score'])) {
  184. $sql .= ',score';
  185. }
  186. $sql .= ') VALUES
  187. (' . (int) $arr['id'] . ',' . (int) $arr['user_id'] . ', ' . (int) $arr['evaluation']
  188. . ", '" . api_get_utc_datetime() . "'";
  189. if (isset($arr['score'])) {
  190. $sql .= ', ' . $arr['score'];
  191. }
  192. $sql .= ')';
  193. Database::query($sql);
  194. } else {
  195. die('Error in Result add: required field empty');
  196. }
  197. }
  198. /**
  199. * Update the properties of this result in the database
  200. */
  201. public function save()
  202. {
  203. $tbl_grade_results = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_RESULT);
  204. $sql = 'UPDATE ' . $tbl_grade_results . '
  205. SET user_id = ' . $this->get_user_id()
  206. . ', evaluation_id = ' . $this->get_evaluation_id()
  207. . ', score = ';
  208. if (isset($this->score)) {
  209. $sql .= $this->get_score();
  210. } else {
  211. $sql .= 'null';
  212. }
  213. $sql .= ' WHERE id = ' . $this->id;
  214. // no need to update creation date
  215. Database::query($sql);
  216. }
  217. /**
  218. * Delete this result from the database
  219. */
  220. public function delete()
  221. {
  222. $tbl_grade_results = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_RESULT);
  223. $sql = 'DELETE FROM ' . $tbl_grade_results . ' WHERE id = ' . $this->id;
  224. Database::query($sql);
  225. }
  226. }