classes are in the newer format. Still some cleanup to do but the concept is at least in progress

This commit is contained in:
seek3r 2001-02-03 10:48:41 +00:00
parent ef7c988605
commit 3ac75481c1
6 changed files with 387 additions and 266 deletions

View File

@ -118,7 +118,7 @@
//echo "check point 1 - $last_loginid<br>\n"; //echo "check point 1 - $last_loginid<br>\n";
$prefs = CreateObject("phpgwapi.preferences", $last_loginid); $prefs = CreateObject("phpgwapi.preferences", $last_loginid);
//echo "check point 2<br>\n"; //echo "check point 2<br>\n";
$phpgw_info["user"]["preferences"] = $prefs->get_saved_preferences(); $phpgw_info["user"]["preferences"] = $prefs->read_repository();
//echo "check point 3<br>\n"; //echo "check point 3<br>\n";
#print "LANG:".$phpgw_info["user"]["preferences"]["common"]["lang"]."<br>"; #print "LANG:".$phpgw_info["user"]["preferences"]["common"]["lang"]."<br>";
$phpgw->translation->add_app("login"); $phpgw->translation->add_app("login");

View File

@ -95,9 +95,9 @@
{ {
global $phpgw_info, $phpgw; global $phpgw_info, $phpgw;
if (gettype($id) == "string") { $id = $this->username2userid($id); } if (gettype($id) == "string") { $id = $this->name2id($id); }
$groups = Array(); $groups = Array();
$group_memberships = $phpgw->acl->get_location_list_for_id("phpgw_group", 1, "u", intval($id)); $group_memberships = $phpgw->acl->get_location_list_for_id("phpgw_group", 1, intval($id));
if ($group_memberships) { if ($group_memberships) {
for ($idx=0; $idx<count($group_memberships); $idx++){ for ($idx=0; $idx<count($group_memberships); $idx++){
$groups[$group_memberships[$idx]] = 1; $groups[$group_memberships[$idx]] = 1;
@ -108,7 +108,11 @@
} }
} }
function read_group_names($lid = "") function read_group_names($lid = ""){
return $this->security_equals($lid);
}
function security_equals($lid = "")
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
@ -163,24 +167,25 @@
return $accounts; return $accounts;
} }
function username2userid($user_name) function name2id($account_name)
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$this->db->query("SELECT account_id FROM accounts WHERE account_lid='".$user_name."'",__LINE__,__FILE__); $this->db->query("SELECT account_id FROM accounts WHERE account_lid='".$account_name."'",__LINE__,__FILE__);
if($this->db->num_rows()) { if($this->db->num_rows()) {
$this->db->next_record(); $this->db->next_record();
return $this->db->f("account_id"); return $this->db->f("account_id");
}else{ }else{
return False; return False;
} }
} }
function userid2username($user_id) function id2name($account_id)
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$this->db->query("SELECT account_lid FROM accounts WHERE account_id='".$user_id."'",__LINE__,__FILE__); $this->db->query("SELECT account_lid FROM accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__);
if($this->db->num_rows()) { if($this->db->num_rows()) {
$this->db->next_record(); $this->db->next_record();
return $this->db->f("account_lid"); return $this->db->f("account_lid");
@ -189,30 +194,20 @@
} }
} }
function groupname2groupid($group_name) function get_type($account_id)
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$this->db->query("SELECT group_id FROM groups WHERE group_name='".$group_name."'",__LINE__,__FILE__); /*
$this->db->query("SELECT account_type FROM accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__);
if($this->db->num_rows()) { if($this->db->num_rows()) {
$this->db->next_record(); $this->db->next_record();
return $this->db->f("group_id"); return $this->db->f("account_type");
}else{
return False;
}
}
function groupid2groupname($group_id)
{
global $phpgw, $phpgw_info;
$this->db->query("SELECT group_name FROM groups WHERE group_id='".$group_id."'",__LINE__,__FILE__);
if($this->db->num_rows()) {
$this->db->next_record();
return $this->db->f("group_name");
}else{ }else{
return False; return False;
} }
*/
return "u";
} }
function exists($accountname){ function exists($accountname){

View File

@ -25,147 +25,183 @@
class acl class acl
{ {
var $account_id;
var $account_type;
var $data = Array();
var $db; var $db;
function acl() /**************************************************************************\
* Standard constructor for setting $this->account_id *
\**************************************************************************/
function acl($account_id = False)
{ {
global $phpgw; global $phpgw, $phpgw_info;
$this->db = $phpgw->db; $this->db = $phpgw->db;
if ($account_id == False){
$this->account_id = $phpgw_info["user"]["account_id"];
} elseif (is_long($account_id)) {
$this->account_id = $account_id;
} elseif(is_string($account_id)) {
$this->account_id = $phpgw->accounts->name2id($account_id);
}
} }
/* This is a new class. These are sample table entries /**************************************************************************\
insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) * These are the standard $this->account_id specific functions *
values('filemanager', 'create', 1, 'u', 4); \**************************************************************************/
insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights)
values('filemanager', 'create', 1, 'g', 2);
insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights)
values('filemanager', 'create', 2, 'u', 1);
insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights)
values('filemanager', 'create', 2, 'g', 2);
*/
function get_rights($location,$appname = False, $user_id = ""){ function read_repository()
{
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$sql = "select * from phpgw_acl where (acl_account in (".$this->account_id.", 0";
$equalto = $phpgw->accounts->security_equals($this->account_id);
if (is_array($equalto) && count($equalto) > 0){
for ($idx = 0; $idx < count($equalto); ++$idx){
$sql .= ",".$equalto[$idx][0];
}
}
$sql .= "))";
$this->db->query($sql ,__LINE__,__FILE__);
$count = $this->db->num_rows();
$this->data = Array();
for ($idx = 0; $idx < $count; ++$idx){
//reset ($this->data);
//while(list($idx,$value) = each($this->data)){
$this->db->next_record();
$this->data[] = array("appname" => $this->db->f("acl_appname"),
"location" => $this->db->f("acl_location"),
"account" => $this->db->f("acl_account"),
"rights" => $this->db->f("acl_rights")
);
}
reset ($this->data);
return $this->data;
}
function read()
{
if (count($this->data) == 0){ $this->read_repository(); }
reset ($this->data);
return $this->data;
}
function add($appname = False, $location, $rights)
{
if ($appname == False){ if ($appname == False){
$appname = $phpgw_info["flags"]["currentapp"]; $appname = $phpgw_info["flags"]["currentapp"];
} }
if($user_id == "") { $this->data[] = array("appname" => $appname, "location" => $location, "account" => $this->account_id, "rights" => $rights);
$user_id = $phpgw_info["user"]["account_id"]; reset($this->data);
return $this->data;
} }
// User piece
$sql = "select acl_rights from phpgw_acl where acl_appname='$appname'";
$sql .= " and (acl_location in ('$location','everywhere')) and ";
$sql .= "((acl_account_type = 'u' and acl_account = ".$user_id.")";
// Group piece function delete($appname = False, $location)
$sql .= " or (acl_account_type='g' and acl_account in (0"; // group 0 covers all users {
$memberships = $phpgw->accounts->read_group_names($user_id); if ($appname == False){
if (is_array($memberships) && count($memberships) > 0){ $appname = $phpgw_info["flags"]["currentapp"];
for ($idx = 0; $idx < count($memberships); ++$idx){ }
$sql .= ",".$memberships[$idx][0]; $count = count($this->data);
reset ($this->data);
while(list($idx,$value) = each($this->data)){
if ($this->data[$idx]["appname"] == $appname && $this->data[$idx]["location"] == $location && $this->data[$idx]["account"] == $this->account_id){
$this->data[$idx] = Array();
} }
} }
$sql .= ")))"; reset($this->data);
$rights = 0; return $this->data;
}
function save_repository(){
global $phpgw, $phpgw_info;
reset($this->data);
$sql = "delete from phpgw_acl where acl_account = ".$this->account_id;
$this->db->query($sql ,__LINE__,__FILE__); $this->db->query($sql ,__LINE__,__FILE__);
if ($this->db->num_rows() == 0 && $phpgw_info["server"]["acl_default"] != "deny"){ return True; }
while ($this->db->next_record()) { $count = count($this->data);
if ($this->db->f("acl_rights") == 0){ return False; } reset ($this->data);
$rights |= $this->db->f("acl_rights"); while(list($idx,$value) = each($this->data)){
if ($this->data[$idx]["account"] == $this->account_id){
$sql = "insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_rights)";
$sql .= " values('".$this->data[$idx]["appname"]."', '".$this->data[$idx]["location"]."', ".$this->account_id.", ".$this->data[$idx]["rights"].")";
$this->db->query($sql ,__LINE__,__FILE__);
}
}
reset($this->data);
return $this->data;
}
/**************************************************************************\
* These are the non-standard $this->account_id specific functions *
\**************************************************************************/
function get_rights($location,$appname = False){
global $phpgw, $phpgw_info;
if (count($this->data) == 0){ $this->read_repository(); }
reset ($this->data);
if ($appname == False){
$appname = $phpgw_info["flags"]["currentapp"];
}
$count = count($this->data);
if ($count == 0 && $phpgw_info["server"]["acl_default"] != "deny"){ return True; }
$rights = 0;
// for ($idx = 0; $idx < $count; ++$idx){
reset ($this->data);
while(list($idx,$value) = each($this->data)){
if ($this->data[$idx]["appname"] == $appname) {
if ($this->data[$idx]["location"] == $location || $this->data[$idx]["location"] == 'everywhere'){
if ($this->data[$idx]["rights"] == 0){ return False; }
$rights |= $this->data[$idx]["rights"];
}
}
} }
return $rights; return $rights;
} }
function check($location, $required, $appname = False, $user_id = ""){ function check($location, $required, $appname = False){
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$rights = $this->get_rights($location,$appname, $user_id); $rights = $this->get_rights($location,$appname);
return !!($rights & $required); return !!($rights & $required);
} }
function get_specific_rights($location, $appname = False, $id = "", $id_type = "u"){ function get_specific_rights($location, $appname = False){
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
if ($appname == False){ if ($appname == False){
$appname = $phpgw_info["flags"]["currentapp"]; $appname = $phpgw_info["flags"]["currentapp"];
} }
if($id == "") {
$id = $phpgw_info["user"]["account_id"]; $count = count($this->data);
} if ($count == 0 && $phpgw_info["server"]["acl_default"] != "deny"){ return True; }
// User piece
$sql = "select acl_rights from phpgw_acl where acl_appname='$appname'";
$sql .= " and acl_location = '$location' and ";
$sql .= "acl_account_type = '".$id_type."' and acl_account = ".$id;
$this->db->query($sql ,__LINE__,__FILE__);
$rights = 0; $rights = 0;
if ($this->db->num_rows() == 0 && $phpgw_info["server"]["acl_default"] != "deny"){
return True; reset ($this->data);
while(list($idx,$value) = each($this->data)){
if ($this->data[$idx]["appname"] == $appname &&
($this->data[$idx]["location"] == $location || $this->data[$idx]["location"] == 'everywhere') &&
$this->data[$idx]["account"] == $this->account_id) {
if ($this->data[$idx]["rights"] == 0){ return False; }
$rights |= $this->data[$idx]["rights"];
} }
while ($this->db->next_record()) {
if ($this->db->f("acl_rights") == 0){ return False; }
$rights |= $this->db->f("acl_rights");
} }
return $rights; return $rights;
} }
function check_specific($location, $required, $appname = False, $id = "", $id_type = "u"){ function check_specific($location, $required, $appname = False){
global $phpgw, $phpgw_info; $rights = $this->get_specific_rights($location,$appname);
$rights = $this->get_specific_rights($location,$appname, $id, $id_type);
return !!($rights & $required); return !!($rights & $required);
} }
function add($app, $location, $id, $id_type, $rights){
$sql = "insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights)";
$sql .= " values('".$app."', '".$location."', ".$id.", '".$id_type."', ".$rights.")";
$this->db->query($sql ,__LINE__,__FILE__);
return True;
}
function delete($app, $location, $id, $id_type){
$sql = "delete from phpgw_acl where acl_appname like '".$app."'"
. " and acl_location like '".$location."' and "
. " acl_account_type = '".$id_type."' and acl_account = ".$id;
$this->db->query($sql ,__LINE__,__FILE__);
return $this->db->num_rows();
}
function replace($app, $location, $id, $id_type, $rights){
$this->delete($app, $location, $id, $id_type);
$this->add($app, $location, $id, $id_type, $rights);
return True;
}
function get_app_list_for_id($location, $required, $id = "", $id_type = "u"){
global $phpgw, $phpgw_info;
if ($id == ""){ $id = $phpgw_info["user"]["account_id"]; }
$sql = "select acl_appname, acl_rights from phpgw_acl where acl_location = '$location' and ";
$sql .= "acl_account_type = '".$id_type."' and acl_account = ".$id;
$this->db->query($sql ,__LINE__,__FILE__);
$rights = 0;
if ($this->db->num_rows() == 0 ){ return False; }
while ($this->db->next_record()) {
if ($this->db->f("acl_rights") == 0){ return False; }
$rights |= $this->db->f("acl_rights");
if (!!($rights & $required) == True){
$apps[] = $this->db->f("acl_appname");
}
}
return $apps;
}
function get_location_list($app, $required){ function get_location_list($app, $required){
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
// User piece // User piece
$sql = "select acl_location, acl_rights from phpgw_acl where acl_appname = '$app' "; $sql = "select acl_location, acl_rights from phpgw_acl where acl_appname = '$app' ";
$sql .= " and ((acl_account_type = 'u' and acl_account = '".$phpgw_info["user"]["account_id"]."')"; $sql .= " and (acl_account in ('".$this->account_id."', 0"; // group 0 covers all users
$equalto = $phpgw->accounts->security_equals($this->account_id);
// Group piece if (is_array($equalto) && count($equalto) > 0){
$sql .= " or (acl_account_type='g' and acl_account in (0"; // group 0 covers all users for ($idx = 0; $idx < count($equalto); ++$idx){
$memberships = $phpgw->accounts->read_group_names($phpgw_info["user"]["account_id"]); $sql .= ",".$equalto[$idx][0];
if (is_array($memberships) && count($memberships) > 0){
for ($idx = 0; $idx < count($memberships); ++$idx){
$sql .= ",".$memberships[$idx][0];
} }
} }
$sql .= ")))"; $sql .= ")))";
@ -185,12 +221,80 @@
return $locations; return $locations;
} }
function get_location_list_for_id($app, $required, $id_type = "", $id = ""){ /*
This is kinda how the function SHOULD work, so that it doesnt need to do its own sql query.
It should use the values in the $this->data
function get_location_list($app, $required){
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
if ($id == ""){ $id = $phpgw_info["user"]["account_id"]; } if ($appname == False){
if ($id_type == ""){ $id_type = "u"; } $appname = $phpgw_info["flags"]["currentapp"];
}
$count = count($this->data);
if ($count == 0 && $phpgw_info["server"]["acl_default"] != "deny"){ return True; }
$rights = 0;
reset ($this->data);
while(list($idx,$value) = each($this->data)){
if ($this->data[$idx]["appname"] == $appname && $this->data[$idx]["rights"] != 0){
$location_rights[$this->data[$idx]["location"]] |= $this->data[$idx]["rights"];
}
}
reset($location_rights);
for ($idx = 0; $idx < count($location_rights); ++$idx){
if (!!($location_rights[$idx] & $required) == True){
$location_rights[] = $this->data[$idx]["location"];
}
}
return $locations;
}
*/
/**************************************************************************\
* These are the generic functions. Not specific to $this->account_id *
\**************************************************************************/
function add_repository($app, $location, $account_id, $rights){
$this->delete_repository($app, $location, $account_id);
$sql = "insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_rights)";
$sql .= " values('".$app."', '".$location."', ".$account_id.", ".$rights.")";
$this->db->query($sql ,__LINE__,__FILE__);
return True;
}
function delete_repository($app, $location, $account_id){
$sql = "delete from phpgw_acl where acl_appname like '".$app."'"
. " and acl_location like '".$location."' and "
. " acl_account = ".$account_id;
$this->db->query($sql ,__LINE__,__FILE__);
return $this->db->num_rows();
}
function get_app_list_for_id($location, $required, $account_id = False){
global $phpgw, $phpgw_info;
if ($account_id == False){ $account_id = $this->account_id; }
$sql = "select acl_appname, acl_rights from phpgw_acl where acl_location = '$location' and ";
$sql .= "acl_account = ".$account_id;
$this->db->query($sql ,__LINE__,__FILE__);
$rights = 0;
if ($this->db->num_rows() == 0 ){ return False; }
while ($this->db->next_record()) {
if ($this->db->f("acl_rights") == 0){ return False; }
$rights |= $this->db->f("acl_rights");
if (!!($rights & $required) == True){
$apps[] = $this->db->f("acl_appname");
}
}
return $apps;
}
function get_location_list_for_id($app, $required, $account_id = False){
global $phpgw, $phpgw_info;
if ($account_id == False){ $account_id = $phpgw_info["user"]["account_id"]; }
$sql = "select acl_location, acl_rights from phpgw_acl where acl_appname = '$app' and "; $sql = "select acl_location, acl_rights from phpgw_acl where acl_appname = '$app' and ";
$sql .= "acl_account_type = '".$id_type."' and acl_account = ".$id; $sql .= "acl_account = ".$account_id;
$this->db->query($sql ,__LINE__,__FILE__); $this->db->query($sql ,__LINE__,__FILE__);
$rights = 0; $rights = 0;
if ($this->db->num_rows() == 0 ){ return False; } if ($this->db->num_rows() == 0 ){ return False; }
@ -205,13 +309,13 @@
return $locations; return $locations;
} }
function get_ids_for_location($location, $required, $app = False, $id_type = "u"){ function get_ids_for_location($location, $required, $app = False){
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
if ($app == False){ if ($app == False){
$app = $phpgw_info["flags"]["currentapp"]; $app = $phpgw_info["flags"]["currentapp"];
} }
$sql = "select acl_account, acl_rights from phpgw_acl where acl_appname = '$app' and "; $sql = "select acl_account, acl_rights from phpgw_acl where acl_appname = '$app' and ";
$sql .= "acl_account_type = '".$id_type."' and acl_location = '".$location."'"; $sql .= "acl_location = '".$location."'";
$this->db->query($sql ,__LINE__,__FILE__); $this->db->query($sql ,__LINE__,__FILE__);
$rights = 0; $rights = 0;
if ($this->db->num_rows() == 0 ){ return False; } if ($this->db->num_rows() == 0 ){ return False; }

View File

@ -26,65 +26,108 @@
{ {
var $account_id; var $account_id;
var $account_type; var $account_type;
var $account_apps = Array(Array()); var $data = Array();
var $db; var $db;
function applications($params = "") /**************************************************************************\
* Standard constructor for setting $this->account_id *
\**************************************************************************/
function applications($account_id = "")
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$this->db = $phpgw->db; $this->db = $phpgw->db;
if (is_array($params)) { if ($account_id == ""){
if (isset($params[1])){
$this->account_type = $params[1];
}else{
$this->account_type = "u";
}
if ($params[0] == ""){
$this->account_id = $phpgw_info["user"]["account_id"]; $this->account_id = $phpgw_info["user"]["account_id"];
} elseif (is_long($params[0])) { } elseif (is_long($account_id)) {
$this->account_id = $params[0]; $this->account_id = $account_id;
} elseif(is_string($params[0])) { } elseif(is_string($account_id)) {
if ($this->account_type = "u"){ $this->account_id = $phpgw->accounts->name2id($account_id);
$this->account_id = $phpgw->accounts->username2userid($params[0]);
}else{
$this->account_id = $phpgw->accounts->groupname2groupid($params[0]);
}
}
}else{
$this->account_id = $phpgw_info["user"]["account_id"];
$this->account_type = "u";
} }
$this->account_type = $phpgw->accounts->get_type($account_id);
} }
function enabled_apps() /**************************************************************************\
* These are the standard $this->account_id specific functions *
\**************************************************************************/
function read_repository()
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
if (gettype($phpgw_info["apps"]) != "array") { if (gettype($phpgw_info["apps"]) != "array") {
$this->read_installed_apps(); $this->read_installed_apps();
} }
@reset($phpgw_info["apps"]); $this->data = Array();
reset($phpgw_info["apps"]);
while ($app = each($phpgw_info["apps"])) { while ($app = each($phpgw_info["apps"])) {
if ($this->account_type == "g") { $check = $phpgw->acl->check("run",1,$app[0]);
$check = $phpgw->acl->check_specific("run",1,$app[0], $this->account_id, "g");
}else{
$check = $phpgw->acl->check("run",1,$app[0], $this->account_id);
}
if ($check) { if ($check) {
$this->account_apps[$app[0]] = array("title" => $phpgw_info["apps"][$app[0]]["title"], "name" => $app[0], "enabled" => True, "status" => $phpgw_info["apps"][$app[0]]["status"]); $this->data[$app[0]] = array("title" => $phpgw_info["apps"][$app[0]]["title"], "name" => $app[0], "enabled" => True, "status" => $phpgw_info["apps"][$app[0]]["status"]);
} }
} }
return $this->account_apps; reset($this->data);
return $this->data;
} }
function read() {
if (count($this->data) == 0){ $this->read_repository(); }
reset($this->data);
return $this->data;
}
function add($apps) {
global $phpgw_info;
if(gettype($apps) == "array") {
while($app = each($apps)) {
$this->data[$app[1]] = array("title" => $phpgw_info["apps"][$app[1]]["title"], "name" => $app[1], "enabled" => True, "status" => $phpgw_info["apps"][$app[1]]["status"]);
}
} elseif(gettype($apps) == "string") {
$this->data[$apps] = array("title" => $phpgw_info["apps"][$apps]["title"], "name" => $apps, "enabled" => True, "status" => $phpgw_info["apps"][$apps]["status"]);
}
reset($this->data);
return $this->data;
}
function delete($appname) {
if($this->data[$appname]) {
unset($this->data[$appname]);
}
reset($this->data);
return $this->data;
}
function update_data($data) {
reset($data);
$this->data = Array();
$this->data = $data;
reset($this->data);
return $this->data;
}
function save_repository(){
global $phpgw;
$num_rows = $phpgw->acl->delete("%%", "run", $this->account_id);
reset($this->data);
while($app = each($this->data)) {
if(!$this->is_system_enabled($app[0])) { continue; }
$phpgw->acl->add($app[0],'run',$this->account_id,1);
}
reset($this->data);
return $this->data;
}
/**************************************************************************\
* These are the non-standard $this->account_id specific functions *
\**************************************************************************/
function app_perms() function app_perms()
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
if (count($this->account_apps) == 0) { if (count($this->data) == 0) {
$this->enabled_apps(); $this->read_repository();
} }
@reset($this->account_apps); @reset($this->data);
while (list ($key) = each ($this->account_apps)) { while (list ($key) = each ($this->data)) {
$app[] = $this->account_apps[$key]["name"]; $app[] = $this->data[$key]["name"];
} }
return $app; return $app;
} }
@ -96,52 +139,27 @@
} }
@reset($phpgw_info["apps"]); @reset($phpgw_info["apps"]);
while ($app = each($phpgw_info["apps"])) { while ($app = each($phpgw_info["apps"])) {
if ($phpgw->acl->check_specific("run",1,$app[0], $this->account_id, $this->account_type) && $this->is_system_enabled($app[0])) { if ($phpgw->acl->check_specific("run",1,$app[0], $this->account_id) && $this->is_system_enabled($app[0])) {
$this->account_apps[$app[0]] = array("title" => $phpgw_info["apps"][$app[0]]["title"], "name" => $app[0], "enabled" => True, "status" => $phpgw_info["apps"][$app[0]]["status"]); $this->data[$app[0]] = array("title" => $phpgw_info["apps"][$app[0]]["title"], "name" => $app[0], "enabled" => True, "status" => $phpgw_info["apps"][$app[0]]["status"]);
} }
} }
return $this->account_apps; reset($this->data);
return $this->data;
} }
function add_app($apps) { /**************************************************************************\
if(gettype($apps) == "array") { * These are the generic functions. Not specific to $this->account_id *
while($app = each($apps)) { \**************************************************************************/
$this->account_apps[$app[1]] = array("title" => $phpgw_info["apps"][$app[1]]["title"], "name" => $app[1], "enabled" => True, "status" => $phpgw_info["apps"][$app[1]]["status"]);
}
} elseif(gettype($apps) == "string") {
$this->account_apps[$apps] = array("title" => $phpgw_info["apps"][$apps]["title"], "name" => $apps, "enabled" => True, "status" => $phpgw_info["apps"][$apps]["status"]);
}
reset($this->account_apps);
return $this->account_apps;
}
function delete_app($appname) {
unset($this->account_apps[$appname]);
reset($this->account_apps);
return $this->account_apps;
}
function save_apps(){
global $phpgw, $phpgw_info;
$num_rows = $phpgw->acl->delete("%%", "run", $this->account_id, $this->account_type);
reset($this->account_apps);
while($app = each($this->account_apps)) {
if(!$phpgw_info["apps"][$app[0]]["enabled"]) { continue; }
$phpgw->acl->add($app[0],'run',$this->account_id,$this->account_type,1);
}
reset($this->account_apps);
return $this->account_apps;
}
function read_installed_apps(){ function read_installed_apps(){
global $phpgw, $phpgw_info; global $phpgw_info;
$this->db->query("select * from applications where app_enabled != '0' order by app_order asc",__LINE__,__FILE__); $this->db->query("select * from applications where app_enabled != '0' order by app_order asc",__LINE__,__FILE__);
if($this->db->num_rows()) { if($this->db->num_rows()) {
while ($this->db->next_record()) { while ($this->db->next_record()) {
$name = $this->db->f("app_name"); $name = $this->db->f("app_name");
$title = $this->db->f("app_title"); $title = $this->db->f("app_title");
$status = $this->db->f("app_enabled"); $status = $this->db->f("app_enabled");
$phpgw_info["apps"][$name] = array("title" => $title, "name" => $name, "enabled" => True, "status" => $status); $phpgw_info["apps"]["$name"] = array("title" => $title, "name" => $name, "enabled" => True, "status" => $status);
} }
} }
} }

View File

@ -127,9 +127,11 @@
exit; exit;
} }
$this->preferences = CreateObject("phpgwapi.preferences", intval($phpgw_info["user"]["account_id"])); $this->preferences = CreateObject("phpgwapi.preferences", intval($phpgw_info["user"]["account_id"]));
$this->applications = CreateObject("phpgwapi.applications", array(intval($phpgw_info["user"]["account_id"]),'u')); $this->applications = CreateObject("phpgwapi.applications", intval($phpgw_info["user"]["account_id"]));
$phpgw_info["user"]["preferences"] = $this->preferences->get_saved_preferences(); $this->acl = CreateObject("phpgwapi.acl", intval($phpgw_info["user"]["account_id"]));
$phpgw_info["user"]["apps"] = $this->applications->enabled_apps(); $phpgw_info["user"]["acl"] = $this->acl->read_repository();
$phpgw_info["user"]["preferences"] = $this->preferences->read_repository();
$phpgw_info["user"]["apps"] = $this->applications->read_repository();
@reset($phpgw_info["user"]["apps"]); @reset($phpgw_info["user"]["apps"]);
} }
$this->translation = CreateObject("phpgwapi.translation"); $this->translation = CreateObject("phpgwapi.translation");

View File

@ -27,97 +27,99 @@
class preferences class preferences
{ {
var $account_id; var $account_id;
var $preference = Array(); var $account_type;
var $data = Array();
var $db; var $db;
function preferences($account_id = "") /**************************************************************************\
* Standard constructor for setting $this->account_id *
\**************************************************************************/
function preferences($account_id = False)
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$this->db = $phpgw->db; $this->db = $phpgw->db;
if ($account_id == ""){ if ($account_id == False){
$this->account_id = $phpgw_info["user"]["account_id"]; $this->account_id = $phpgw_info["user"]["account_id"];
} elseif (is_long($account_id)) { } elseif (is_long($account_id)) {
$this->account_id = $account_id; $this->account_id = $account_id;
} elseif(is_string($account_id)) { } elseif(is_string($account_id)) {
$this->account_id = $phpgw->accounts->username2userid($account_id); $this->account_id = $phpgw->accounts->name2id($account_id);
} }
//echo "Account ID (Initializing prefs) = ".$this->account_id."<br>\n";
} }
function get_saved_preferences() /**************************************************************************\
* These are the standard $this->account_id specific functions *
\**************************************************************************/
function read_repository()
{ {
global $phpgw;
$this->db->lock("preferences"); $this->db->lock("preferences");
$this->db->query("SELECT preference_value FROM preferences WHERE preference_owner=".$this->account_id,__LINE__,__FILE__); $this->db->query("SELECT preference_value FROM preferences WHERE preference_owner=".$this->account_id,__LINE__,__FILE__);
$this->db->next_record(); $this->db->next_record();
$pref_info = $this->db->f("preference_value"); $pref_info = $this->db->f("preference_value");
$this->preference = Array(); $this->data = Array();
$this->preference = unserialize($pref_info); $this->data = unserialize($pref_info);
$this->db->unlock(); $this->db->unlock();
return $this->preference; reset ($this->data);
return $this->data;
} }
function read()
function get_preferences()
{ {
global $phpgw; if (count($this->data) == 0){ $this->read_repository(); }
return $this->preference; reset ($this->data);
return $this->data;
} }
// This should be called when you are done makeing changes to the preferences function add($app_name,$var,$value = "")
function commit($line = "",$file = "")
{ {
global $phpgw, $phpgw_info;
//echo "<br>commit called<br>Line: $line<br>File: $file".$phpgw_info["user"]["account_id"]."<br>";
if ($this->account_id) {
$this->db->lock("preferences");
$this->db->query("delete from preferences where preference_owner=" . $this->account_id,__LINE__,__FILE__);
if ($PHP_VERSION < "4.0.0") {
$pref_info = addslashes(serialize($this->preference));
} else {
$pref_info = serialize($this->preference);
}
$this->db->query("insert into preferences (preference_owner,preference_value) values ("
. $this->account_id . ",'" . $pref_info . "')",__LINE__,__FILE__);
$this->db->unlock();
if ($phpgw_info["user"]["account_id"] == $this->account_id) {
$this->get_saved_preferences();
$phpgw->accounts->sync(__LINE__,__FILE__);
}
}
}
// Add a new preference.
function change($app_name,$var,$value = "")
{
global $phpgw_info;
if (! $value) { if (! $value) {
global $$var; global $$var;
$value = $$var; $value = $$var;
} }
$this->preference["$app_name"]["$var"] = $value; $this->data["$app_name"]["$var"] = $value;
reset($this->data);
return $this->data;
} }
function delete($app_name,$var) function delete($app_name, $var = "")
{ {
if (! $var) { if ($var == "") {
$this->reset($app_name); $this->data["$app_name"] = array();
} else { } else {
unset($this->preference["$app_name"]["$var"]); unset($this->data["$app_name"]["$var"]);
} }
reset ($this->data);
return $this->data;
} }
// This will kill all preferences within a certain app function save_repository()
function reset($app_name)
{ {
$this->preference["$app_name"] = array(); global $phpgw, $phpgw_info;
$this->db->lock("preferences");
$this->db->query('delete from preferences where preference_owner=' . $this->account_id,__LINE__,__FILE__);
if ($PHP_VERSION < "4.0.0") {
$pref_info = addslashes(serialize($this->data));
} else {
$pref_info = serialize($this->data);
}
$this->db->query('insert into preferences (preference_owner,preference_value) values ('
. $this->account_id . ",'" . $pref_info . "')",__LINE__,__FILE__);
$this->db->unlock();
return $this->data;
}
function update_data($data) {
reset($data);
$this->data = Array();
$this->data = $data;
reset($this->data);
return $this->data;
} }
} //end of preferences class } //end of preferences class