/classes/resources/Material.php

https://github.com/VivekVish/Veda-Project-API · PHP · 243 lines · 221 code · 14 blank · 8 comment · 17 complexity · e800f1f1e1eaec8369660614d083a8ad MD5 · raw file

  1. <?php
  2. require_once('classes/Error.php');
  3. class Material
  4. {
  5. protected $path = null;
  6. protected $id = null;
  7. protected $parentId = null;
  8. protected $childIds = null;
  9. protected $childData = array();
  10. protected $json = null;
  11. protected $description = null;
  12. protected $name = null;
  13. protected $active = null;
  14. // DESC: Converts a URI to an id
  15. // PARAMETER: $uri is a URI string
  16. // PARAMETER: $level is the URI level to be checked
  17. // RETURNS: integer id if successful, null otherwise
  18. public static function URIToId($uri,$level=null,$dieOnFail=true)
  19. {
  20. $uri = trim($uri,"/");
  21. $uriArr = explode("/", $uri);
  22. foreach($uriArr as $key=>$value)
  23. {
  24. $uriArr[$key] = urldecode($value);
  25. }
  26. if(is_null($level))
  27. {
  28. switch(count($uriArr))
  29. {
  30. case 3:
  31. $level = "field";
  32. break;
  33. case 4:
  34. $level = "subject";
  35. break;
  36. case 5:
  37. $level = "course";
  38. break;
  39. case 6:
  40. $level = "section";
  41. break;
  42. case 7:
  43. $level = "lesson";
  44. break;
  45. case 9:
  46. $level = "discussion";
  47. break;
  48. }
  49. }
  50. switch($level)
  51. {
  52. case "field":
  53. $query = sprintf("SELECT id FROM field WHERE name='%s'",
  54. pg_escape_string($uriArr[FIELD_INDEX]));
  55. break;
  56. case "subject":
  57. $query = sprintf("SELECT id FROM subject WHERE name='%s' AND field_id=(SELECT id FROM field WHERE name='%s')",
  58. pg_escape_string($uriArr[SUBJECT_INDEX]),
  59. pg_escape_string($uriArr[FIELD_INDEX]));
  60. break;
  61. case "course":
  62. $query = sprintf("SELECT id FROM course WHERE name='%s' AND subject_id=(SELECT id FROM subject WHERE name='%s' AND field_id=(SELECT id FROM field WHERE name ='%s'))",
  63. pg_escape_string($uriArr[COURSE_INDEX]),
  64. pg_escape_string($uriArr[SUBJECT_INDEX]),
  65. pg_escape_string($uriArr[FIELD_INDEX]));
  66. break;
  67. case "section":
  68. $query = sprintf("SELECT id FROM section WHERE name='%s' AND course_id=(SELECT id FROM course WHERE name='%s' AND subject_id=(SELECT id FROM subject WHERE name='%s' AND field_id=(SELECT id FROM field WHERE name ='%s')))",
  69. pg_escape_string($uriArr[SECTION_INDEX]),
  70. pg_escape_string($uriArr[COURSE_INDEX]),
  71. pg_escape_string($uriArr[SUBJECT_INDEX]),
  72. pg_escape_string($uriArr[FIELD_INDEX]));
  73. break;
  74. case "lesson":
  75. $query = sprintf("SELECT id FROM lesson WHERE name='%s' AND section_id=(SELECT id FROM section WHERE name='%s' AND course_id=(SELECT id FROM course WHERE name='%s' AND subject_id=(SELECT id FROM subject WHERE name='%s' AND field_id=(SELECT id FROM field WHERE name ='%s'))))",
  76. pg_escape_string($uriArr[LESSON_INDEX]),
  77. pg_escape_string($uriArr[SECTION_INDEX]),
  78. pg_escape_string($uriArr[COURSE_INDEX]),
  79. pg_escape_string($uriArr[SUBJECT_INDEX]),
  80. pg_escape_string($uriArr[FIELD_INDEX]));
  81. break;
  82. case "discussion":
  83. if($uriArr[CONTENT_TYPE_INDEX] == "content")
  84. {
  85. $contentType = "lesson";
  86. }
  87. else if($uriArr[CONTENT_TYPE_INDEX] == "quiz")
  88. {
  89. $contentType = "quiz";
  90. }
  91. else
  92. {
  93. Error::generateError(99,"Content Type: {$uriArr[CONTENT_TYPE_INDEX]} and URI: $uri.");
  94. }
  95. $query = sprintf("SELECT id FROM discussion WHERE element_type='%s' AND element_id=(SELECT id FROM %s WHERE name='%s' AND section_id=(SELECT id FROM section WHERE name='%s' AND course_id=(SELECT id FROM course WHERE name='%s' AND subject_id=(SELECT id FROM subject WHERE name='%s' AND field_id=(SELECT id FROM field WHERE name ='%s')))))",
  96. pg_escape_string($contentType),
  97. pg_escape_string($contentType),
  98. pg_escape_string($uriArr[LESSON_INDEX]),
  99. pg_escape_string($uriArr[SECTION_INDEX]),
  100. pg_escape_string($uriArr[COURSE_INDEX]),
  101. pg_escape_string($uriArr[SUBJECT_INDEX]),
  102. pg_escape_string($uriArr[FIELD_INDEX]));
  103. break;
  104. case "additions":
  105. $query = sprintf("SELECT id FROM lesson_additions WHERE name='%s' AND lesson_id=(SELECT id FROM lesson WHERE name='%s' AND section_id=(SELECT id FROM section WHERE name='%s' AND course_id=(SELECT id FROM course WHERE name='%s' AND subject_id=(SELECT id FROM subject WHERE name='%s' AND field_id=(SELECT id FROM field WHERE name ='%s')))))",
  106. pg_escape_string($uriArr[LESSON_ADDITION_INDEX]),
  107. pg_escape_string($uriArr[LESSON_INDEX]),
  108. pg_escape_string($uriArr[SECTION_INDEX]),
  109. pg_escape_string($uriArr[COURSE_INDEX]),
  110. pg_escape_string($uriArr[SUBJECT_INDEX]),
  111. pg_escape_string($uriArr[FIELD_INDEX]));
  112. break;
  113. default:
  114. Error::generateError(62,"URI: $uri");
  115. break;
  116. }
  117. if($dieOnFail)
  118. {
  119. $result = $GLOBALS['transaction']->query($query);
  120. }
  121. else
  122. {
  123. $result = $GLOBALS['transaction']->query($query,35);
  124. }
  125. if($result&&$result!="none")
  126. {
  127. return $result[0]["id"];
  128. }
  129. else
  130. {
  131. return null;
  132. }
  133. }
  134. // DESC: Converts an id to a URI
  135. // PARAMETER: $id is a id number
  136. // PARAMETER: level is the URI level
  137. // RETURNS: string uri if successful, null otherwise
  138. public static function IdToURI($id,$level)
  139. {
  140. switch($level)
  141. {
  142. case "field":
  143. $query = sprintf("SELECT field.name AS field FROM field WHERE id=%s",
  144. pg_escape_string($id));
  145. break;
  146. case "subject":
  147. $query = sprintf("SELECT field.name AS field,
  148. subject.name AS subject
  149. FROM subject
  150. LEFT JOIN field ON subject.field_id=field.id
  151. WHERE subject.id=%s",
  152. pg_escape_string($id));
  153. break;
  154. case "course":
  155. $query = sprintf("SELECT field.name AS field,
  156. subject.name AS subject,
  157. course.name AS course
  158. FROM course
  159. LEFT JOIN subject on course.subject_id=subject.id
  160. LEFT JOIN field ON subject.field_id=field.id
  161. WHERE course.id=%s",
  162. pg_escape_string($id));
  163. break;
  164. case "section":
  165. $query = sprintf("SELECT field.name AS field,
  166. subject.name AS subject,
  167. course.name AS course,
  168. section.name AS section
  169. FROM section
  170. LEFT JOIN course on section.course_id=course.id
  171. LEFT JOIN subject on course.subject_id=subject.id
  172. LEFT JOIN field ON subject.field_id=field.id
  173. WHERE section.id=%s",
  174. pg_escape_string($id));
  175. break;
  176. case "lesson":
  177. $query = sprintf("SELECT field.name AS field,
  178. subject.name AS subject,
  179. course.name AS course,
  180. section.name AS section,
  181. lesson.name AS lesson
  182. FROM lesson
  183. LEFT JOIN section on lesson.section_id=section.id
  184. LEFT JOIN course on section.course_id=course.id
  185. LEFT JOIN subject on course.subject_id=subject.id
  186. LEFT JOIN field ON subject.field_id=field.id
  187. WHERE lesson.id=%s",
  188. pg_escape_string($id));
  189. break;
  190. default:
  191. Error::generateError(152,"ID: $id");
  192. break;
  193. }
  194. $result = $GLOBALS['transaction']->query($query);
  195. if(isset($result[0]["lesson"]))
  196. {
  197. return sprintf("/data/material/%s/%s/%s/%s/%s",$result[0]["field"],$result[0]["subject"],$result[0]["course"],$result[0]["section"],$result[0]["lesson"]);
  198. }
  199. else if(isset($result[0]["section"]))
  200. {
  201. return sprintf("/data/material/%s/%s/%s/%s",$result[0]["field"],$result[0]["subject"],$result[0]["course"],$result[0]["section"]);
  202. }
  203. else if(isset($result[0]["course"]))
  204. {
  205. return sprintf("/data/material/%s/%s/%s",$result[0]["field"],$result[0]["subject"],$result[0]["course"]);
  206. }
  207. else if(isset($result[0]["subject"]))
  208. {
  209. return sprintf("/data/material/%s/%s",$result[0]["field"],$result[0]["subject"]);
  210. }
  211. else if(isset($result[0]["field"]))
  212. {
  213. return sprintf("/data/material/%s",$result[0]["field"]);
  214. }
  215. else
  216. {
  217. return null;
  218. }
  219. }
  220. public function getJSON()
  221. {
  222. return $this->json;
  223. }
  224. public function getId()
  225. {
  226. return $this->id;
  227. }
  228. }
  229. ?>