storageapi.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. // Storage API
  3. // PHP Backend
  4. // CBlue SPRL, Jean-Karim Bockstael, <jeankarim@cblue.be>
  5. require_once('../inc/global.inc.php');
  6. switch ($_REQUEST['action']) {
  7. case "get":
  8. print storage_get($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco'], $_REQUEST['svkey']);
  9. break;
  10. case "set":
  11. if (storage_can_set($_REQUEST['svuser'])) {
  12. print storage_set($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco'], $_REQUEST['svkey'], $_REQUEST['svvalue']);
  13. }
  14. break;
  15. case "getall":
  16. print storage_getall($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco']);
  17. break;
  18. case "stackpush":
  19. if (storage_can_set($_REQUEST['svuser'])) {
  20. print storage_stack_push($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco'], $_REQUEST['svkey'], $_REQUEST['svvalue']);
  21. }
  22. break;
  23. case "stackpop":
  24. if (storage_can_set($_REQUEST['svuser'])) {
  25. print storage_stack_pop($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco'], $_REQUEST['svkey']);
  26. }
  27. break;
  28. case "stacklength":
  29. print storage_stack_length($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco'], $_REQUEST['svkey']);
  30. break;
  31. case "stackclear":
  32. if (storage_can_set($_REQUEST['svuser'])) {
  33. print storage_stack_clear($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco'], $_REQUEST['svkey']);
  34. }
  35. break;
  36. case "stackgetall":
  37. print storage_stack_getall($_REQUEST['svuser'], $_REQUEST['svcourse'], $_REQUEST['svsco'], $_REQUEST['svkey']);
  38. break;
  39. case "usersgetall":
  40. print storage_get_all_users();
  41. break;
  42. default:
  43. // Do nothing
  44. }
  45. function storage_can_set($sv_user) {
  46. // platform admin can change any user's stored values, other users can only change their own values
  47. $allowed = ((api_is_platform_admin()) || ($sv_user == api_get_user_id()));
  48. if (!$allowed) {
  49. print "ERROR : Not allowed";
  50. }
  51. return $allowed;
  52. }
  53. function storage_get($sv_user, $sv_course, $sv_sco, $sv_key) {
  54. $sql = "select sv_value
  55. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES)."
  56. where user_id= '$sv_user'
  57. and sco_id = '$sv_sco'
  58. and course_id = '$sv_course'
  59. and sv_key = '$sv_key'";
  60. $res = Database::query($sql);
  61. if (mysql_num_rows($res) > 0) {
  62. $row = Database::fetch_assoc($res);
  63. if (get_magic_quotes_gpc()) {
  64. return stripslashes($row['sv_value']);
  65. }
  66. else {
  67. return $row['sv_value'];
  68. }
  69. }
  70. else {
  71. return null;
  72. }
  73. }
  74. function storage_set($sv_user, $sv_course, $sv_sco, $sv_key, $sv_value) {
  75. $sv_value = mysql_real_escape_string($sv_value);
  76. $sql = "replace into ".Database::get_main_table(TABLE_MAIN_STORED_VALUES)."
  77. (user_id, sco_id, course_id, sv_key, sv_value)
  78. values
  79. ('$sv_user','$sv_sco','$sv_course','$sv_key','$sv_value')";
  80. $res = Database::query($sql);
  81. return mysql_affected_rows();
  82. }
  83. function storage_getall($sv_user, $sv_course, $sv_sco) {
  84. $sql = "select sv_key, sv_value
  85. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES)."
  86. where user_id= '$sv_user'
  87. and sco_id = '$sv_sco'
  88. and course_id = '$sv_course'";
  89. $res = Database::query($sql);
  90. $data = array();
  91. while ($row = Database::fetch_assoc($res)) {
  92. if (get_magic_quotes_gpc()) {
  93. $row['sv_value'] = stripslashes($row['sv_value']);
  94. }
  95. $data[] = $row;
  96. }
  97. return json_encode($data);
  98. }
  99. function storage_stack_push($sv_user, $sv_course, $sv_sco, $sv_key, $sv_value) {
  100. $sv_value = mysql_real_escape_string($sv_value);
  101. Database::query("start transaction");
  102. $sqlorder = "select ifnull((select max(stack_order)
  103. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES_STACK)."
  104. where user_id= '$sv_user'
  105. and sco_id='$sv_sco'
  106. and course_id='$sv_course'
  107. and sv_key='$sv_key'
  108. ), 0) as stack_order";
  109. $resorder = Database::query($sqlorder);
  110. $row = Database::fetch_assoc($resorder);
  111. $stack_order = (1 + $row['stack_order']);
  112. $sqlinsert = "insert into ".Database::get_main_table(TABLE_MAIN_STORED_VALUES_STACK)."
  113. (user_id, sco_id, course_id, sv_key, stack_order, sv_value)
  114. values
  115. ('$sv_user', '$sv_sco', '$sv_course', '$sv_key', '$stack_order', '$sv_value')";
  116. $resinsert = Database::query($sqlinsert);
  117. if ($resorder && $resinsert) {
  118. Database::query("commit");
  119. return 1;
  120. }
  121. else {
  122. Database::query("rollback");
  123. return 0;
  124. }
  125. }
  126. function storage_stack_pop($sv_user, $sv_course, $sv_sco, $sv_key) {
  127. Database::query("start transaction");
  128. $sqlselect = "select sv_value, stack_order
  129. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES_STACK)."
  130. where user_id= '$sv_user'
  131. and sco_id='$sv_sco'
  132. and course_id='$sv_course'
  133. and sv_key='$sv_key'
  134. order by stack_order desc
  135. limit 1";
  136. $resselect = Database::query($sqlselect);
  137. $rowselect = Database::fetch_assoc($resselect);
  138. $stack_order = $rowselect['stack_order'];
  139. $sqldelete = "delete
  140. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES_STACK)."
  141. where user_id= '$sv_user'
  142. and sco_id='$sv_sco'
  143. and course_id='$sv_course'
  144. and sv_key='$sv_key'
  145. and stack_order='$stack_order'";
  146. $resdelete = Database::query($sqldelete);
  147. if ($resselect && $resdelete) {
  148. Database::query("commit");
  149. if (get_magic_quotes_gpc()) {
  150. return stripslashes($rowselect['sv_value']);
  151. }
  152. else {
  153. return $rowselect['sv_value'];
  154. }
  155. }
  156. else {
  157. Database::query("rollback");
  158. return null;
  159. }
  160. }
  161. function storage_stack_length($sv_user, $sv_course, $sv_sco, $sv_key) {
  162. $sql = "select count(*) as length
  163. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES_STACK)."
  164. where user_id= '$sv_user'
  165. and sco_id='$sv_sco'
  166. and course_id='$sv_course'
  167. and sv_key='$sv_key'";
  168. $res = Database::query($sql);
  169. $row = Database::fetch_assoc($res);
  170. return $row['length'];
  171. }
  172. function storage_stack_clear($sv_user, $sv_course, $sv_sco, $sv_key) {
  173. $sql = "delete
  174. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES_STACK)."
  175. where user_id= '$sv_user'
  176. and sco_id='$sv_sco'
  177. and course_id='$sv_course'
  178. and sv_key='$sv_key'";
  179. $res = Database::query($sql);
  180. return mysql_num_rows($res);
  181. }
  182. function storage_stack_getall($sv_user, $sv_course, $sv_sco, $sv_key) {
  183. $sql = "select stack_order as stack_order, sv_value as value
  184. from ".Database::get_main_table(TABLE_MAIN_STORED_VALUES_STACK)."
  185. where user_id= '$sv_user'
  186. and sco_id='$sv_sco'
  187. and course_id='$sv_course'
  188. and sv_key='$sv_key'";
  189. $res = Database::query($sql);
  190. $results = array();
  191. while ($row = Database::fetch_assoc($res)) {
  192. if (get_magic_quotes_gpc()) {
  193. $row['value'] = stripslashes($row['value']);
  194. }
  195. $results[] = $row;
  196. }
  197. return json_encode($results);
  198. }
  199. function storage_get_all_users() {
  200. $sql = "select user_id, username, firstname, lastname
  201. from ".Database::get_main_table(TABLE_MAIN_USER)."
  202. order by user_id asc";
  203. $res = Database::query($sql);
  204. $results = array();
  205. while ($row = Database::fetch_assoc($res)) {
  206. $results[] = $row;
  207. }
  208. return json_encode($results);
  209. }
  210. ?>