Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

Role.class.php

Go to the documentation of this file.
00001 <?php
00006 include_once("core/system/JBaseObject.class.php");
00007 include_once("core/db/dbjames.class.php");
00008 include_once("core/system/JSystemError.class.php");
00009 include_once("core/system/JUgrSystem.class.php");
00010 
00014 class Role extends JBaseObject
00015 {
00016         var $data;      
00017         var $perms;     
00018 
00019 
00026         function Role ($idR)
00027         {
00028                 $dbObj = new DBJames();
00029 
00030                 $query = "SELECT * FROM Roles ";
00031                 $query .= "WHERE idR = " . $idR;
00032     
00033                 $dbObj->Query($query);
00034                         
00035                 if ($dbObj->numRows == 1)
00036                 {
00037                         $this->data = $dbObj->row;
00038                         $this->perms =& $this->_GetAllPermissions();
00039                 }
00040                 else
00041                 {
00042                         $this->data = null;
00043                         $this->RaiseConstructorError(new JSystemError(ERROR_ROLE_NOT_FOUND));
00044                 }
00045         }
00046         
00047         
00052         function &_GetAllPermissions()
00053         {
00054                 $dbObj = new DBJames();
00055                 
00056                 $query =  " SELECT Permissions.* ";
00057                 $query .= " FROM Permissions, RelRolesPermissions";
00058                 $query .= " WHERE RelRolesPermissions.idR = ".$this->GetId();
00059                 $query .= " AND Permissions.idP = RelRolesPermissions.idP";
00060                 $query .= " ORDER BY Permissions.idM";
00061                 
00062                 $dbObj->Query($query);
00063         
00064                 $result = array();
00065                 
00066                 while (! $dbObj->EOF)
00067                 {
00068                         $result[$dbObj->row["idM"]][$dbObj->row["name"]] = true;
00069                         $dbObj->Next();
00070                 }
00071                 
00072                 return $result;
00073         }
00074         
00075         
00081         function _NumUsers($idR)
00082         {
00083                 $dbObj = new DBJames();
00084                 
00085                 $query  = " SELECT DISTINCT RelUsersGroups.idU ";
00086                 $query .= " FROM RelUsersGroups ";
00087                 $query .= " WHERE idR = ". $idR;
00088                 
00089                 $dbObj->Query($query);
00090                 
00091                 return $dbObj->numRows;
00092         }
00093 
00098         function GetId()
00099         {
00100                 return $this->data["idR"];
00101         }
00102         
00107         function GetName()
00108         {
00109                 return $this->data["name"];
00110         }
00111         
00119         function SetName($name)
00120         {
00121                 $this->data["name"] = $name;
00122         }
00123         
00127         function Commit()
00128         {
00129                 $dbObj = new DBJames();
00130                 
00131                 $query  = " UPDATE Roles SET ";
00132                 $query .= " name = '".$this->GetName()."'";
00133                 $query .= " WHERE idR = ".$this->GetId();
00134                 
00135                 $dbObj->Execute($query);
00136         }       
00137 
00143         function GetPermissions($idM)
00144         {
00145                 if($this->data == null)
00146                 {
00147                         return JSystem::RaiseError(
00148                                                 new JSystemError(ERROR_NOT_INITIALIZED));
00149                 }
00150                 
00151                 return $this->perms[$idM];
00152         }
00153         
00154         
00161         function HasPermission($name, $idM)
00162         {
00163                 if($this->data == null)
00164                 {
00165                         return JSystem::RaiseError(
00166                                                 new JSystemError(ERROR_NOT_INITIALIZED));
00167                 }
00168                 
00169                 return $this->perms[$idM][$name];
00170         }               
00171 
00172 
00178         function AddPermission($name, $idM)
00179         {
00180                 $modulesobj =& Modules::GetInstance();
00181                 
00182                 $mod =&  $modulesobj->GetModule($idM);
00183                 if (JSystem::IsError($mod))
00184                         return $mod;
00185                 else
00186                 {
00187                         $this->perms =& $this->_GetAllPermissions();
00188                         if (! $this->perms[$idM][$name])
00189                         {                       
00190                                 // First, we need the id of the permission
00191                                 $module =& $modulesobj->GetModule($idM);                        
00192                                 $idP = $module->GetPermissionId($name);
00193                                 
00194                                 // Then, we store it in RelRolesPermissions
00195                                 $dbObj = new DBJames(); 
00196                                 $query  = "INSERT INTO RelRolesPermissions ";
00197                                 $query .= " (idP, idR) VALUES ";
00198                                 $query .= " (".$idP.", ".$this->GetId().") ";                           
00199                                 $dbObj->Execute($query);
00200                                 $this->perms[$idM][$name] = true;
00201                         }
00202                 }
00203         }
00204         
00205         
00211         function RemovePermission($name, $idM)
00212         {
00213                 $modulesobj =& Modules::GetInstance();
00214                 
00215                 $module =& $modulesobj->GetModule($idM);
00216                 
00217                 if (JSystem::IsError($module))
00218                         return $module;
00219                 else
00220                 {
00221                         $this->perms =& $this->_GetAllPermissions();
00222                         if ($this->perms[$idM][$name])
00223                         {                       
00224                                 // We get the id of the permission
00225                                 $idP = $module->GetPermissionId($name);
00226                                 
00227                                 // Finally, we remove it from this role         
00228                                 $dbObj = new DBJames();         
00229                                 $query  = " DELETE FROM RelRolesPermissions ";
00230                                 $query .= " WHERE idP = ".$idP;
00231                                 $query .= " AND idR = ".$this->GetId();         
00232                                 $dbObj->Execute($query);
00233                                 $this->perms[$idM][$name] = false;
00234                         }
00235                 }
00236         }
00237         
00238         
00244         function &Create($name)
00245         {
00246                 $dbObj = new DBJames();
00247                 
00248                 $query  = " INSERT INTO Roles ";
00249                 $query .= " (name) VALUES ";
00250                 $query .= " ('".$name."') ";
00251                 
00252                 $dbObj->Execute($query);
00253                 
00254                 $dbObj->SetInsertId();
00255                 
00256                 $role =& new Role($dbObj->newID);
00257                 if (JSystem::IsError($role))
00258                         return JSystem::GetLastError();
00259                 else
00260                         return $role;
00261         }
00262         
00263         
00268         function Remove($idR)
00269         {
00270                 $ugrsystem =& JugrSystem::GetInstance();
00271                 
00272                 if (JSystem::IsError($ugrsystem->GetRole($idR)))
00273                 {
00274                         return JSystem::RaiseError(
00275                                                 new JSystemError(ERROR_ROLE_NOT_FOUND));
00276                 }
00277                 else if (Role::_NumUsers($idR) > 0)
00278                 {
00279                         return JSystem::RaiseError(
00280                                                 new JSystemError(ERROR_STILL_USERS_WITH_ROLE));
00281                 }
00282                 else
00283                 {
00284                         $dbObj = new DBJames();
00285                         
00286                         // First we remove all permissions from this role.
00287                         $query  = " DELETE FROM RelRolesPermissions ";
00288                         $query .= " WHERE idR=".$idR;
00289                         $dbObj->Execute($query);
00290                         
00291                         // Then, we remove the role.
00292                         $query  = " DELETE FROM Roles ";
00293                         $query .= " WHERE idR = ". $idR;
00294                         $dbObj->Execute($query);
00295                 }
00296         }
00297         
00302         function GetAllRolesId()
00303         {
00304                 $dbObj = new DBJames();         
00305                 $query  = " SELECT * FROM Roles ";
00306                 $dbObj->Query($query);
00307                 
00308                 return $dbObj;
00309         }                               
00310 }
00311 ?>

Generated on Wed Nov 19 20:29:35 2003 for James by doxygen 1.3.4