PageRenderTime 44ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/Incognito/students/scripts/studentfeed_lookup_questions.php

https://code.google.com/p/classroom-presenter/
PHP | 345 lines | 263 code | 31 blank | 51 comment | 62 complexity | 6ca13c5b7dce696526ea584efea595c3 MD5 | raw file
Possible License(s): Apache-2.0, IPL-1.0
  1. <?php
  2. function connectToDB()
  3. {
  4. // Connect to the database
  5. include '../../db_credentials.php';
  6. $db_conn = mysql_connect("cubist.cs.washington.edu", $username, $password);
  7. if (!$db_conn) {
  8. die("Failed to connect to the mysql server");
  9. }
  10. mysql_select_db($db_name, $db_conn);
  11. return $db_conn;
  12. }
  13. function hasVoted($type, $id, $uid, $db_conn)
  14. {
  15. $voted = 0;
  16. $votequery = null;
  17. if ($type == 'Q')
  18. {
  19. // Query QuestionVotedOn to see if the user has voted for this question
  20. $votequery = sprintf("SELECT * FROM QuestionVotedOn WHERE qid = %d AND uid = %d", $id, $uid);
  21. }
  22. else
  23. {
  24. // Query FeedbackVotedOn to see if the user has voted for this feedback
  25. $votequery = sprintf("SELECT * FROM FeedbackVotedOn WHERE fid = %d AND uid = %d", $id, $uid);
  26. }
  27. $voteresults = mysql_query($votequery, $db_conn);
  28. if (!$voteresults)
  29. {
  30. die("Error: " . mysql_error($db_conn));
  31. }
  32. if ($vr = mysql_fetch_assoc($voteresults))
  33. {
  34. // If the query returns anything, the user has voted for this question or feedback
  35. $voted = 1;
  36. }
  37. return $voted;
  38. }
  39. function sortResults($feed, $sort)
  40. {
  41. if ($sort == "Newest")
  42. {
  43. foreach ($feed as $key => $row)
  44. {
  45. $time[$key] = $row['time'];
  46. }
  47. array_multisort($time, SORT_DESC, $feed);
  48. }
  49. elseif ($sort == "Priority")
  50. {
  51. foreach ($feed as $key => $row)
  52. {
  53. $numvotes[$key] = $row['numvotes'];
  54. }
  55. array_multisort($numvotes, SORT_DESC, $feed);
  56. }
  57. return $feed;
  58. }
  59. function getQuestions($sid, $filter, $sort, $uid)
  60. {
  61. $db_conn = connectToDB();
  62. $uid;
  63. if(isset($_POST['sid']))
  64. $uid = $_POST['uid'];
  65. $feed = array();
  66. $query = null;
  67. // There are seven filtering options and three sorting options. Each combination
  68. // of these options needs to be handled differently.
  69. if ( $filter == "None" || $filter == "All Questions" ) // for both of these options, we need to query Question
  70. {
  71. $query = null;
  72. if ( $sort == "Newest" )
  73. {
  74. $query = sprintf("SELECT * FROM Question WHERE sid = %d ORDER BY time DESC", $sid);
  75. }
  76. elseif ( $sort == "Priority" )
  77. {
  78. $query = sprintf("SELECT * FROM Question WHERE sid = %d ORDER BY numvotes DESC", $sid);
  79. }
  80. else
  81. {
  82. $query = sprintf("SELECT * FROM Question WHERE sid = %d", $sid);
  83. }
  84. $results = mysql_query($query, $db_conn);
  85. if (!$results)
  86. {
  87. die("Error: " . mysql_error($db_conn));
  88. }
  89. while($r = mysql_fetch_assoc($results))
  90. {
  91. $qid = (int)$r["qid"];
  92. $voted = hasVoted('Q', $qid, $uid, $db_conn);
  93. $feed[] = array('voted'=>$voted,'text'=>$r["text"],'answered'=>$r["answered"],'type'=>'Q','id'=>$r["qid"],'numvotes'=>$r["numvotes"],'time'=>$r["time"]);
  94. }
  95. }
  96. if ( $filter == "None" || $filter == "All Feedback" ) // for both of these options, we need to query Feedback
  97. {
  98. $query = null;
  99. // echo "Filter By: All Feedback</br>";
  100. if ( $sort == "Newest" )
  101. {
  102. // Get results sorted by timestamp in descending order
  103. // echo "Sort By: Newest</br>";
  104. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d ORDER BY time DESC", $sid);
  105. }
  106. elseif ( $sort == "Priority" )
  107. {
  108. // Get results sorted by the number of votes in descending order
  109. // echo "Sort By: Priority</br>";
  110. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d ORDER BY numvotes DESC", $sid);
  111. }
  112. else
  113. {
  114. // No sorting specified
  115. // echo "Sort By: None</br>";
  116. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d", $sid);
  117. }
  118. // Run the query and fetch the results
  119. $results = mysql_query($query, $db_conn);
  120. if (!$results)
  121. {
  122. die("Error: " . mysql_error($db_conn));
  123. }
  124. while($r = mysql_fetch_assoc($results))
  125. {
  126. $fid = (int)$r["fid"];
  127. $voted = hasVoted('F', $fid, $uid, $db_conn);
  128. $feed[] = array('voted'=>$voted,'text'=>$r["text"],'isread'=>$r["isread"],'type'=>'F','id'=>$r["fid"],'numvotes'=>$r["numvotes"],'time'=>$r["time"]);
  129. }
  130. // If filter is None, there will be results from the Questions query in $feed already, so
  131. // we need to sort the array to make sure the sorting is properly applied. If filter is All Feedback,
  132. // we don't need to sort the array again, but it won't hurt to do so, and it saves a bit of control
  133. // flow logic.
  134. $feed = sortResults($feed, $sort);
  135. }
  136. elseif ( $filter == "Answered" ) // we only want answered questions
  137. {
  138. // echo "Filter By: Answered</br>";
  139. if ( $sort == "Newest" )
  140. {
  141. // Get results sorted by timestamp in descending order
  142. // echo "Sort By: Answered</br>";
  143. $query = sprintf("SELECT * FROM Question WHERE sid = %d AND answered = 1 ORDER BY time DESC", $sid);
  144. }
  145. elseif ( $sort == "Priority" )
  146. {
  147. // Get results sorted by the number of votes in descending order
  148. // echo "Sort By: Priority</br>";
  149. $query = sprintf("SELECT * FROM Question WHERE sid = %d AND answered = 1 ORDER BY numvotes DESC", $sid);
  150. }
  151. else
  152. {
  153. // No sorting specified
  154. // echo "Sort By: None</br>";
  155. $query = sprintf("SELECT * FROM Question WHERE sid = %d AND answered = 1", $sid);
  156. }
  157. // Run the query and fetch the results
  158. $results = mysql_query($query, $db_conn);
  159. if (!$results)
  160. {
  161. die("Error: " . mysql_error($db_conn));
  162. }
  163. while($r = mysql_fetch_assoc($results))
  164. {
  165. $qid = (int)$r["qid"];
  166. $voted = hasVoted('Q', $qid, $uid, $db_conn);
  167. $feed[] = array('voted'=>$voted,'text'=>$r["text"],'answered'=>$r["answered"],'type'=>'Q','id'=>$r["qid"]);
  168. }
  169. }
  170. elseif ( $filter == "Unanswered" ) // we only want unanswered questions
  171. {
  172. // echo "Filter By: Unanswered</br>";
  173. if ( $sort == "Newest" )
  174. {
  175. // Get results sorted by timestamp in descending order
  176. // echo "Sort By: Newest</br>";
  177. $query = sprintf("SELECT * FROM Question WHERE sid = %d AND answered = 0 ORDER BY time DESC", $sid);
  178. }
  179. elseif ( $sort == "Priority" )
  180. {
  181. // Get results sorted by the number of votes in descending order
  182. // echo "Sort By: Priority</br>";
  183. $query = sprintf("SELECT * FROM Question WHERE sid = %d AND answered = 0 ORDER BY numvotes DESC", $sid);
  184. }
  185. else
  186. {
  187. // No sorting specified
  188. // echo "Sort By: None</br>";
  189. $query = sprintf("SELECT * FROM Question WHERE sid = %d AND answered = 0", $sid);
  190. }
  191. // Run the query and fetch the results
  192. $results = mysql_query($query, $db_conn);
  193. if (!$results)
  194. {
  195. die("Error: " . mysql_error($db_conn));
  196. }
  197. while($r = mysql_fetch_assoc($results))
  198. {
  199. $qid = (int)$r["qid"];
  200. $voted = hasVoted('Q', $qid, $uid, $db_conn);
  201. $feed[] = array('voted'=>$voted,'text'=>$r["text"],'answered'=>$r["answered"],'type'=>'Q','id'=>$r["qid"]);
  202. }
  203. }
  204. elseif ( $filter == "Unread" ) // we only want unread feedback
  205. {
  206. // echo "Filter By: Unread</br>";
  207. if ( $sort == "Newest" )
  208. {
  209. // Get results sorted by timestamp in descending order
  210. // echo "Sort By: Newest</br>";
  211. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d AND isread = 0 ORDER BY time DESC", $sid);
  212. }
  213. elseif ( $sort == "Priority" )
  214. {
  215. // Get results sorted by the number of votes in descending order
  216. // echo "Sort By: Priority</br>";
  217. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d AND isread = 0 ORDER BY numvotes DESC", $sid);
  218. }
  219. else
  220. {
  221. // No sorting specified
  222. // echo "Sort By: None</br>";
  223. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d AND isread = 0", $sid);
  224. }
  225. $results = mysql_query($query, $db_conn);
  226. if (!$results)
  227. {
  228. die("Error: " . mysql_error($db_conn));
  229. }
  230. while($r = mysql_fetch_assoc($results))
  231. {
  232. $fid = (int)$r["fid"];
  233. $voted = hasVoted('F', $fid, $uid, $db_conn);
  234. $feed[] = array('voted'=>$voted,'text'=>$r["text"],'isread'=>$r["isread"],'type'=>'F','id'=>$r["fid"]);
  235. }
  236. }
  237. elseif ( $filter == "Read" ) // we only want read feedback
  238. {
  239. // echo "Filter By: Read</br>";
  240. if ( $sort == "Newest" )
  241. {
  242. // Get results sorted by timestamp in descending order
  243. // echo "Sort By: Newest</br>";
  244. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d AND isread = 1 ORDER BY time DESC", $sid);
  245. }
  246. elseif ( $sort == "Priority" )
  247. {
  248. // Get results sorted by the number of votes in descending order
  249. // echo "Sort By: Priority</br>";
  250. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d AND isread = 1 ORDER BY numvotes DESC", $sid);
  251. }
  252. else
  253. {
  254. // No sorting specified
  255. // echo "Sort By: None</br>";
  256. $query = sprintf("SELECT * FROM Feedback WHERE sid = %d AND isread = 1", $sid);
  257. }
  258. // Run the query and fetch the results
  259. $results = mysql_query($query, $db_conn);
  260. if (!$results)
  261. {
  262. die("Error: " . mysql_error($db_conn));
  263. }
  264. while($r = mysql_fetch_assoc($results))
  265. {
  266. $fid = (int)$r["fid"];
  267. $voted = hasVoted('F', $fid, $uid, $db_conn);
  268. $feed[] = array('voted'=>$voted,'text'=>$r["text"],'isread'=>$r["isread"],'type'=>'F','id'=>$r["fid"]);
  269. }
  270. }
  271. mysql_close($db_conn);
  272. return $feed;
  273. }
  274. function echoTable($feed)
  275. {
  276. echo $feed[0][0];
  277. // Prints the feed data in a nice html format
  278. echo "<table id=feedTable>";
  279. for($row = 0; $row < 200; $row++) {
  280. if(!empty($feed[$row])) {
  281. if($feed[$row]["type"] == 'Q')
  282. echo "<tr class=alt>";
  283. else
  284. echo "<tr>";
  285. if($feed[$row]["voted"] == 1)
  286. echo "<td class=checked><input class=check type=checkbox id=check_".$feed[$row]["type"].$feed[$row]["id"]." checked=true /></td>";
  287. else
  288. echo "<td class=checked><input class=check type=checkbox id=check_".$feed[$row]["type"].$feed[$row]["id"]." /></td>";
  289. echo "<td class=feed>".$feed[$row]["text"]."</td>";
  290. if(($feed[$row]["type"] == 'Q' && $feed[$row]["answered"] == 1) ||
  291. ($feed[$row]["type"] == 'F' && $feed[$row]["isread"] == 1))
  292. {
  293. echo "<td class=answered>Yes</td>";
  294. }
  295. else
  296. {
  297. echo "<td class=answered>No</td>";
  298. }
  299. //echo "<td class=answered>".$feed[$row]["answered"]."</td>";
  300. echo "</tr>";
  301. }
  302. }
  303. echo "</table>";
  304. }
  305. if (isset($_POST['sid']) && isset($_POST['filter']) && isset($_POST['sort']) && isset($_POST['uid']))
  306. {
  307. $sid = $_POST['sid'];
  308. $filter = $_POST['filter'];
  309. $sort = $_POST['sort'];
  310. $uid = $_POST['uid'];
  311. $feed = getQuestions($sid, $filter, $sort, $uid);
  312. echoTable($feed);
  313. }
  314. ?>