User management for the world wide web

Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

Groups.php

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); // We need this for the events.
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     // Look at all the GID's we want to add.
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]); // This prevents duplicate gid's.
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     // Group exists, do an UPDATE.
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); // NOTE: fire BEFORE remove, so plugins can see who was a member.
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 ?>

DoxyGen Documentation generated by DoxyGen