PageRenderTime 60ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/objects/group.inc.php

https://github.com/adamfranco/segue-1.x
PHP | 252 lines | 197 code | 31 blank | 24 comment | 27 complexity | 00f7cac4cb6553cccac71bf9491f84ec MD5 | raw file
  1. <? /* $Id$ */
  2. class group {
  3. var $owner;
  4. var $classes=array();
  5. var $name;
  6. var $id=0;
  7. function group($name,$owner='',$classes='') {
  8. global $dbuser, $dbpass, $dbdb, $dbhost;
  9. // find if this classgroup exists in the db, if yes, get the id
  10. db_connect($dbhost,$dbuser,$dbpass, $dbdb);
  11. $q = "
  12. SELECT
  13. classgroup_id
  14. FROM
  15. classgroup
  16. WHERE
  17. classgroup_name = '".addslashes($name)."'
  18. ";
  19. /* echo $q."<br />"; */
  20. $r = db_query($q);
  21. if (db_num_rows($r)) {
  22. $a = db_fetch_assoc($r);
  23. $this->id = $a[classgroup_id];
  24. }
  25. else $this->id = 0;
  26. $this->name=$name;
  27. $this->owner=$owner;
  28. if ($classes!='') $this->classes=$classes;
  29. }
  30. function fetchFromDB() {
  31. // get id
  32. $query = "
  33. SELECT
  34. classgroup_id AS id,
  35. classgroup_name AS name
  36. FROM
  37. classgroup
  38. WHERE
  39. classgroup_id='".addslashes($this->id)."'
  40. ";
  41. // echo $query."<br />";
  42. $r = db_query($query);
  43. if (db_num_rows($r)) {
  44. $a = db_fetch_assoc($r);
  45. $this->id=$a[id];
  46. } else return false;
  47. // get owner
  48. $query = "
  49. SELECT
  50. user_uname
  51. FROM
  52. classgroup
  53. INNER JOIN
  54. user ON FK_owner = user_id
  55. AND
  56. classgroup_id = '".addslashes($this->id)."'
  57. ";
  58. // echo $query."<br />";
  59. $r = db_query($query);
  60. if (db_num_rows($r)) {
  61. $a = db_fetch_assoc($r);
  62. $this->owner=$a[user_uname];
  63. } else return false;
  64. // get classes for that group<br />
  65. $query = "
  66. SELECT class_id
  67. FROM
  68. class
  69. INNER JOIN
  70. classgroup ON FK_classgroup = classgroup_id
  71. AND
  72. classgroup_id='".addslashes($this->id)."'
  73. ";
  74. // echo $query."<br />";
  75. $r = db_query($query);
  76. if (db_num_rows($r)) {
  77. $this->classes=array();
  78. while ($a = db_fetch_assoc($r))
  79. $this->classes[] = generateCourseCode($a[class_id]);
  80. } else return false;
  81. return true;
  82. }
  83. function updateDB() {
  84. // get owner id
  85. $query = "SELECT user_id FROM user WHERE user_uname = '".addslashes($this->owner)."'";
  86. // echo $query."<br />";
  87. $r = db_query($query);
  88. if (db_num_rows($r)==0) return false;
  89. else {
  90. $a = db_fetch_assoc($r);
  91. $owner_id = $a[user_id];
  92. }
  93. // if this classgroup has not been inserted into the db yet, do it!
  94. if (!$this->exists($this->name)) {
  95. $query = "
  96. INSERT INTO
  97. classgroup
  98. SET
  99. FK_owner = '".addslashes($owner_id)."',
  100. classgroup_name = '".addslashes($this->name)."'
  101. ";
  102. // echo $query."<br />";
  103. $r = db_query($query);
  104. $this->id = lastid();
  105. }
  106. // else just update it
  107. else {
  108. $query = "
  109. UPDATE
  110. classgroup
  111. SET
  112. FK_owner = '".addslashes($owner_id)."',
  113. classgroup_name = '".addslashes($this->name)."'
  114. ";
  115. // echo $query."<br />";
  116. }
  117. // now that the group is in the db, update the foreign key for the classes
  118. // first, reset classes that used to be part of this classgroup
  119. $query = "
  120. UPDATE
  121. class
  122. SET
  123. FK_classgroup = NULL
  124. WHERE
  125. FK_classgroup = '".addslashes($this->id)."'
  126. ";
  127. // echo $query."<br />";
  128. $r = db_query($query);
  129. // then, set new forign key
  130. if (count($this->classes)>0) {
  131. // $classes = "'".implode("','",$this->classes)."'";
  132. // $query = "UPDATE class SET FK_classgroup = ".$this->id." WHERE class_code IN ($classes)";
  133. foreach ($this->classes as $class_code) {
  134. $query = "
  135. UPDATE
  136. class
  137. SET
  138. FK_classgroup = '".addslashes($this->id)."'
  139. WHERE
  140. ".generateTermsFromCode($class_code)."
  141. ";
  142. // echo $query."<br />";
  143. $r = db_query($query);
  144. }
  145. }
  146. }
  147. function exists($name) {
  148. $query = "SELECT classgroup_id FROM classgroup WHERE classgroup_name='".addslashes($name)."'";
  149. /* echo $query."<br />"; */
  150. if (db_num_rows(db_query($query))) return true;
  151. return false;
  152. }
  153. function getClassesFromName($name) {
  154. if (group::exists($name)) {
  155. $query = "SELECT class_id FROM class INNER JOIN classgroup ON FK_classgroup = classgroup_id AND classgroup_name='".addslashes($name)."'";
  156. // echo $query."<br />";
  157. $r = db_query($query);
  158. $classes = array();
  159. while ($a = db_fetch_assoc($r))
  160. $classes[] = generateCourseCode($a[class_id]);
  161. return $classes;
  162. }
  163. return false;
  164. }
  165. function getNameFromClass($class) {
  166. $query = "SELECT classgroup_name FROM class INNER JOIN classgroup ON FK_classgroup = classgroup_id AND ".generateTermsFromCode($class);
  167. // echo $query."<br />";
  168. $r = db_query($query);
  169. if (db_num_rows($r)) {
  170. $a = db_fetch_assoc($r);
  171. return $a[classgroup_name];
  172. }
  173. return false;
  174. }
  175. function getGroupsOwnedBy($owner) {
  176. $query = "SELECT user_id FROM user WHERE user_uname = '".addslashes($owner)."'";
  177. $r = db_query($query);
  178. $a = db_fetch_assoc($r);
  179. $owner_id = $a[user_id];
  180. $query = "SELECT classgroup_name FROM classgroup WHERE FK_owner='".addslashes($owner_id)."'";
  181. $a = array();
  182. $r = db_query($query);
  183. while ($x = db_fetch_assoc($r)) {
  184. $a[] = $x[classgroup_name];
  185. }
  186. return $a;
  187. }
  188. function addClasses($classes) {
  189. if (is_array($classes)) {
  190. $classes2 = array();
  191. foreach ($classes as $n=>$class) {
  192. if (segue::siteExists($class)) {
  193. if (!segue::siteExists($this->name)) {
  194. $siteObj =& new site ($class);
  195. $siteObj->fetchDown(1);
  196. $siteObj->copySite($this->name, FALSE, TRUE);
  197. $siteObj =& new site ($class);
  198. $siteObj->fetchDown(1);
  199. $siteObj->delete();
  200. $classes2[] = $class;
  201. } else {
  202. error("You can not add an existing site to a group that already has a site created");
  203. }
  204. } else {
  205. $classes2[] = $class;
  206. }
  207. }
  208. $this->classes = array_unique(array_merge($this->classes,$classes2));
  209. }
  210. }
  211. function delClass($class) {
  212. $c = array();
  213. foreach ($this->classes as $cl) {
  214. if ($cl != $class) $c[] = $cl;
  215. }
  216. $this->classes = $c;
  217. }
  218. function delete() {
  219. db_query("DELETE FROM classgroup WHERE classgroup_name='".addslashes($this->name)."'");
  220. }
  221. }