<?php
define('PERMISSION_ERROR_FILENOTFOUND', 1);
define('PERMISSION_ERROR_CLASSNOTFOUND', 2);
/**
* Options
*
* Mit dieser Klasse können Optionen aus der Datenbank abgefragt werden
*
* @package CB Media Management
* @access public
* @author Jörg Stöber <hide@address.com>
* @author Sascha Dückers <hide@address.com>
* @version 0.1 ($Id: CB_permission2.class.php,v 1.5 2004/09/29 00:35:53 cb_fog Exp $)
*/
class CB_permission {
var $permissions = array();
var $userID = "";
var $type = "";
var $parameter = "";
var $name = "";
var $groupArr = array();
/**
* CB_permission::CB_permission()
*
* @param boolean $restrictOption
* @return
**/
function CB_permission($restrictOption = false) {
if(is_array($restrictOption)) {
if($restrictOption[userID] != false) {
$userGroupSelect = mysql_query("SELECT * FROM ".TABLE."_user_group_relation WHERE userID = '".$restrictOption[userID]."'");
if(mysql_num_rows($userGroupSelect) > 0) {
while($userGroupRow = mysql_fetch_assoc($userGroupSelect)) {
$groupArr[] = $userGroupRow[groupID];
}
$this->groupArr = $groupArr;
}
$this->userID = $restrictOption['userID'];
}
if($restrictOption[parameter]) {
$this->parameter = $restrictOption[parameter];
}
} else {
if($restrictParam) {
$this->parameter = $restrictParam;
}
}
}
/**
* CB_permission::factory()
*
* @param $objType
* @param $optionArr
* @return
**/
function factory($objType, $optionArr) {
$file = dirname(__FILE__)."/permission/perm.".$objType.".class.php";
if(is_file($file)) {
require_once($file);
$classname = "CB_permission_".$objType;
if (!class_exists($classname)) {
$tmp = PEAR::raiseError(null, PERMISSION_ERROR_CLASSNOTFOUND, null, null, "Class $classname not found", 'CB_permission_error', true);
return $tmp;
}
$result =& new $classname($optionArr);
return $result;
} else {
$tmp = PEAR::raiseError(null, PERMISSION_ERROR_FILENOTFOUND, null, null, "Unable to include the $file file", 'CB_permission_error', true);
return $tmp;
}
}
/**
* Limitierung der Permissions auf einen bestimmten Palettentyp
*
* @access public
* @param string $type Permission Typ
*/
function setType($type) {
$this->type = $type;
}
/**
* Limitierung der Permissions auf einen bestimmten Paletten Namen
*
* @access public
* @param string $name Permission Paletten Name
*/
function setRestrictName($name) {
$this->name = $name;
}
/**
* Permissions aus der Datenbank abrufen
* @access public
*/
function getPermissionList() {
$this->permission = array();
/*
* Limitierung auf den gesetzten Permission Typ
*/
if($this->type != "") {
$limitByType = "type = '$this->type'";
}
/*
* Limitierung auf den gesetzten Permission Typ
*/
if($this->name != "") {
$limitByName = "name = '$this->name'";
}
/*
* Mit $restrictParam kann man die Datensätze auf einen bestimmten
* gespeicherten Parameter einschränken. Reduziert die Abfragen
*/
if($this->parameter != "") {
$limitByParam = "parameter = '".$this->parameter."'";
}
/*
* Mit $userID beim Konstruktor kann man die Datensätze auf bestimmte
* gespeicherte Parameter einschränken. Reduziert die Abfragen
*/
if(count($this->groupArr) > 0) {
foreach($this->groupArr as $v) {
$_tempParamArr[] = "parameter = '".$v."'";
}
$limitByParam .= "(".implode(" OR ", $_tempParamArr).")";
}
/*
* Zusammenbau des Where Statements für die SQL Optionen Abfrage
*/
if($limitByParam || $limitByType) {
$limitWhere = "WHERE ";
/*
* $_tempSet gibt an, ob schon Where Statements abgegeben wurden, so dass
* bei $limitByName & $limitByParam ggf. ein AND hinzugefügt werden kann
*/
$_tempSet = false;
if($limitByType) {
$limitWhere .= $limitByType;
$_tempSet = true;
}
if($limitByName) {
if($_tempSet) {
$limitWhere .= " AND ";
}
$limitWhere .= $limitByName;
$_tempSet = true;
}
if($limitByParam) {
if($_tempSet) {
$limitWhere .= " AND ";
}
$limitWhere .= $limitByParam;
}
}
/*
* Abfrage der Daten
*/
$this->permissions = array();
$permissionQuery = mysql_query("SELECT * FROM ".TABLE."_permission $limitWhere");
while($permissionRow = mysql_fetch_object($permissionQuery)) {
/*
* wenn $restrictParam angegeben wurde, ist es, als ob kein
* Parameter gesetzt wurde
*/
if($this->parameter) {
$permissionRow->parameter = $this->parameter;
}
if($permissionRow->parameter == "") {
$this->permission[$permissionRow->name]['empty'] = $permissionRow->value;
} else {
$this->permission[$permissionRow->name][$permissionRow->parameter] = $permissionRow->value;
}
}
}
/**
* Abrufen einer bestimmten Rechte Palette
*
* @access public
* @param string $key Schlüsselname der Rechtepalette
* @return string $value
*/
function getPermissionSet($key, $parameter = "") {
if($this->parameter != "") {
$parameter = $this->parameter;
}
$returnValue = false;
if($parameter != "") {
if(isset($this->permission[$key][$parameter])) {
$returnValue = $this->permission[$key][$parameter];
}
} else {
if(isset($this->permission[$key]['empty'])) {
$returnValue = $this->permission[$key]['empty'];
}
}
return $returnValue;
}
/**
* Holt alle Permission Sets eines bestimmten Namens ab. (durch Parameter könnten es mehrere sein)
*
* @access public
* @param string $key Schlüsselname der Option
* @param boolean $concat sollen mehrere Rechte Paletten zu einer zusammengefasst werden?
* @return mixed $value
*/
function getMultiplePermissionSet($key, $concat = false) {
$returnValue = 0;
if( is_array($this->permission[$key]) ) {
if($concat == false) {
/*
* Aufbau eines Assoziativen Arrays für die Rechte
*/
foreach($this->permission[$key] as $k => $v) {
$returnValue[$k] = $v;
}
if(!is_array($returnValue)) {
$returnValue = 0;
}
} else {
/*
* Jede Palette wird mit dem inklusiv ODER Operator mit der bestehenden verschmolzen
* Heraus kommt eine Palette die alle gesetzten Bits der anderen Paletten enthält
*/
foreach($this->permission[$key] as $v) {
$returnValue |= $v;
}
}
}
return $returnValue;
}
/**
* Holt alle Permission Sets eines bestimmten Namens ab. (durch Parameter könnten es mehrere sein)
*
* @access public
* @param string $key Schlüsselname der Option
* @param boolean $concat sollen mehrere Rechte Paletten zu einer zusammengefasst werden?
* @return mixed $value
*/
function getAllPermissionSet($concat = false) {
$returnValue = 0;
if( is_array($this->permission) ) {
if($concat == false) {
$returnValue = $this->permission;
} else {
/*
* Jede Palette wird mit dem inklusiv ODER Operator mit der bestehenden verschmolzen
* Heraus kommt eine Palette die alle gesetzten Bits der anderen Paletten enthält
*/
foreach($this->permission as $value) {
foreach($value as $v) {
$returnValue |= $v;
}
}
}
}
return $returnValue;
}
/**
* Aktualisieren einer bestimmten Option in die Datenbank.
* Es wird das aktuell gesetzte Modul genommen
*
* @access public
* @param string $name Schlüsselname der Option
* @param string $value Wert der Option
*/
function updatePermission($name, $value, $parameter = "") {
$type = $this->type;
if($this->checkPermission($name, $parameter) == false) {
$result = $this->insertPermission($name, $value, $parameter);
} else {
if($parameter != "") {
$result = mysql_query("UPDATE ".TABLE."_permission SET value = '$value' WHERE name = '$name' AND type = '$type' AND parameter = '$parameter'");
} else {
$result = mysql_query("UPDATE ".TABLE."_permission SET value = '$value' WHERE name = '$name' AND type = '$type'");
}
}
return $result;
}
/**
* Screiben einer bestimmten Option in die Datenbank.
* Es wird das aktuell gesetzte Modul genommen
*
* @access public
* @param string $name Schlüsselname der Option
* @param string $value Wert der Option
*/
function insertPermission($name, $value, $parameter = "") {
$type = $this->type;
if($parameter != "") {
$result = mysql_query("INSERT INTO ".TABLE."_permission (name, value, type, parameter) VALUES ('$name', '$value', '$type', '$parameter')");
} else {
$result = mysql_query("INSERT INTO ".TABLE."_permission (name, value, type) VALUES ('$name', '$value', '$type')");
}
return $result;
}
/**
* Check ob Option gesetzt ist. Optinen Liste muss vorher abgerufen
* worden sein
*
* @access public
* @param string $name Schlüsselname der Option
* @param string $parameter Parameter der Option
* @return boolean $result
*/
function checkPermission($name, $parameter = "") {
$type = $this->type;
$result = false;
if($parameter == "") {
if($this->getPermissionSet($name) !== false) {
$result = true;
}
} else {
if($this->getPermissionSet($name, $parameter) !== false) {
$result = true;
}
}
return $result;
}
}
?>