00001 <?php
00005 class GenieGate_Groups {
00009 var $DBH;
00010
00014 var $LISTENERS = array();
00015
00021 function GenieGate_Groups(&$dbh){
00022 $this->DBH = $dbh;
00023 }
00024
00032 function getMemberGroups($uid){
00033 $groups = array();
00034
00035 $sql = sprintf("SELECT m.gid,n.name FROM ua_group AS n, ua_members as m WHERE m.gid=n.gid AND m.uid='%s'",
00036 mysql_escape_string($uid));
00037
00038 $result = mysql_query($sql,$this->DBH) or die(mysql_error($this->DBH));
00039 if($result){
00040 while( list($gid,$name) = mysql_fetch_row($result)){
00041 $groups[$gid] = $name;
00042 }
00043 }
00044 mysql_free_result($result);
00045 return($groups);
00046 }
00047
00052 function getMemberGids($uid){
00053 $uid = mysql_escape_string($uid);
00054 $sql = "SELECT gid FROM ua_members WHERE uid='$uid'";
00055 $result = mysql_query($sql,$this->DBH) or die(mysql_error($this->DBH));
00056 $groups = array();
00057 if($result){
00058 while( list($gid) = mysql_fetch_row($result)){
00059 array_push($groups,$gid);
00060 }
00061 }
00062 return($groups);
00063 }
00064
00074 function setMember($uid,$gids){
00075 $uid = mysql_escape_string($uid);
00076
00077 $old = $this->getMemberGids($uid);
00078
00079 mysql_query("DELETE FROM ua_members WHERE uid='$uid'",$this->DBH) or die(mysql_error($this->DBH));
00080
00081 $sql = "INSERT INTO ua_members (uid,gid) VALUES('$uid','%s')";
00082 $all = $this->getAllGroups();
00083 $new_groups = array();
00084
00085
00086 foreach($gids as $gid){
00087 if($all[$gid]){
00088 mysql_query(sprintf($sql,mysql_escape_string($gid)),$this->DBH) or die(mysql_error($this->DBH));
00089 array_push($new_groups,$gid);
00090 unset($all[$gid]);
00091 }
00092 }
00093 $this->fireUserGroupChange($uid,$old,$new_groups);
00094 return($new_groups);
00095 }
00096
00100 function getMembers($gid){
00101 $users = array();
00102 $gid = mysql_escape_string($gid);
00103 $sql = "select u.uid AS uid,created,confirm,email,name from ua_users as u, ua_members as m ";
00104 $sql .= "where u.uid=m.uid AND m.gid='$gid'";
00105 $result = mysql_query($sql,$this->DBH) or die(mysql_error($this->DBH));
00106 if($result){
00107 while( $inf = mysql_fetch_assoc($result)){
00108 array_push($users,$inf);
00109 }
00110 }
00111 mysql_free_result($result);
00112 return($users);
00113 }
00114
00123 function setGroup($gid,$name,$can_signup){
00124 if(preg_match("/\W/",$gid)){
00125 die("Group ID must be alphanumeric");
00126 }
00127 if($can_signup){
00128 $flag = "Y";
00129 }else{
00130 $flag = "N";
00131 }
00132
00133 if($this->getGroupName($gid)) {
00134 $sql = sprintf("UPDATE ua_group SET name='%s',signup='$flag' WHERE gid='%s'",
00135 mysql_escape_string($name),
00136 mysql_escape_string($gid));
00137 mysql_query($sql,$this->DBH) or die("Database error: " . mysql_error($this->DBH));
00138 $this->fireGroupNameChange($gid,$name,$can_signup,FALSE);
00139 }else{
00140 $sql = sprintf("INSERT INTO ua_group (name,gid,signup) VALUES('%s','%s','$flag')",
00141 mysql_escape_string($name),
00142 mysql_escape_string($gid));
00143 mysql_query($sql,$this->DBH) or die("Database error: " . mysql_error($this->DBH));
00144 $this->fireGroupNameChange($gid,$name,$can_signup,TRUE);
00145 }
00146 }
00147
00153 function getGroupName($gid){
00154 $sql = sprintf("SELECT gid,name,signup FROM ua_group WHERE gid='%s'",
00155 mysql_escape_string($gid));
00156 $result = mysql_query($sql,$this->DBH) or die(mysql_error($this->DBH));
00157 if($result){
00158 $group = mysql_fetch_assoc($result);
00159 mysql_free_result($result);
00160 return($group);
00161 }
00162 return(FALSE);
00163 }
00164
00172 function getAllGroups($show = TRUE){
00173 $all = array();
00174 if($show) {
00175 $sql = "SELECT gid,name,signup FROM ua_group";
00176 }else{
00177 $sql = "SELECT gid,name,signup FROM ua_group WHERE signup='Y'";
00178 }
00179 $result = mysql_query($sql,$this->DBH);
00180 if($result){
00181 while($group = mysql_fetch_assoc($result)){
00182 $k = $group[gid];
00183 $all[$k] = $group;
00184 }
00185 }
00186 mysql_free_result($result);
00187 return($all);
00188 }
00189
00195 function removeGroup($gid){
00196 $info = $this->getGroupName($gid);
00197 if($info){
00198 $this->fireGroupNameDelete($gid,&$info);
00199 $gid = mysql_escape_string($gid);
00200 $sql = "DELETE FROM ua_members WHERE gid='$gid'";
00201 mysql_query($sql,$this->DBH) or die(mysql_error($this->DBH));
00202 $sql = "DELETE FROM ua_group WHERE gid='$gid'";
00203 mysql_query($sql,$this->DBH) or die(mysql_error($this->DBH));
00204 }
00205 }
00206
00210 function addListener(&$listener){
00211 array_push($this->LISTENERS,$listener);
00212 }
00213
00215 function fireGroupNameChange($gid,$name,$sign_ok,$is_new){
00216 foreach($this->LISTENERS as $l){
00217 $l->groupNameChange($this,$gid,$name,$sign_ok,$is_new);
00218 }
00219 }
00221 function fireGroupNameDelete($gid,&$info){
00222 foreach($this->LISTENERS as $l){
00223 $l->groupNameDelete($this,$gid,&$info);
00224 }
00225 }
00226
00228 function fireUserGroupChange($uid,&$old_groups,&$new_groups){
00229 foreach($this->LISTENERS as $l){
00230 $l->userGroupsChanged($this,$uid,$old_groups,$new_groups);
00231 }
00232 }
00233
00234 }
00235 ?>