From 3ac75481c11394f62e95b2edb7e20e46c949dd3e Mon Sep 17 00:00:00 2001 From: seek3r Date: Sat, 3 Feb 2001 10:48:41 +0000 Subject: [PATCH] classes are in the newer format. Still some cleanup to do but the concept is at least in progress --- login.php | 2 +- phpgwapi/inc/class.accounts_sql.inc.php | 41 ++- phpgwapi/inc/class.acl.inc.php | 318 ++++++++++++++++-------- phpgwapi/inc/class.applications.inc.php | 158 ++++++------ phpgwapi/inc/class.phpgw.inc.php | 8 +- phpgwapi/inc/class.preferences.inc.php | 126 +++++----- 6 files changed, 387 insertions(+), 266 deletions(-) diff --git a/login.php b/login.php index 71f257debb..11e371a19b 100755 --- a/login.php +++ b/login.php @@ -118,7 +118,7 @@ //echo "check point 1 - $last_loginid
\n"; $prefs = CreateObject("phpgwapi.preferences", $last_loginid); //echo "check point 2
\n"; - $phpgw_info["user"]["preferences"] = $prefs->get_saved_preferences(); + $phpgw_info["user"]["preferences"] = $prefs->read_repository(); //echo "check point 3
\n"; #print "LANG:".$phpgw_info["user"]["preferences"]["common"]["lang"]."
"; $phpgw->translation->add_app("login"); diff --git a/phpgwapi/inc/class.accounts_sql.inc.php b/phpgwapi/inc/class.accounts_sql.inc.php index 83a11d296c..458d8d7fc8 100644 --- a/phpgwapi/inc/class.accounts_sql.inc.php +++ b/phpgwapi/inc/class.accounts_sql.inc.php @@ -95,9 +95,9 @@ { global $phpgw_info, $phpgw; - if (gettype($id) == "string") { $id = $this->username2userid($id); } + if (gettype($id) == "string") { $id = $this->name2id($id); } $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) { for ($idx=0; $idxsecurity_equals($lid); + } + + function security_equals($lid = "") { global $phpgw, $phpgw_info; @@ -163,24 +167,25 @@ return $accounts; } - function username2userid($user_name) + function name2id($account_name) { 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()) { $this->db->next_record(); + return $this->db->f("account_id"); }else{ return False; } } - function userid2username($user_id) + function id2name($account_id) { 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()) { $this->db->next_record(); return $this->db->f("account_lid"); @@ -189,32 +194,22 @@ } } - function groupname2groupid($group_name) + function get_type($account_id) { 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()) { $this->db->next_record(); - return $this->db->f("group_id"); + return $this->db->f("account_type"); }else{ return False; } +*/ +return "u"; } - 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{ - return False; - } - } - function exists($accountname){ $this->db->query("SELECT account_id FROM accounts WHERE account_lid='".$accountname."'",__LINE__,__FILE__); if($this->db->num_rows()) { diff --git a/phpgwapi/inc/class.acl.inc.php b/phpgwapi/inc/class.acl.inc.php index 7970cdb0d6..06c88db300 100644 --- a/phpgwapi/inc/class.acl.inc.php +++ b/phpgwapi/inc/class.acl.inc.php @@ -25,147 +25,183 @@ class acl { + var $account_id; + var $account_type; + var $data = Array(); 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; + 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) - 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); - */ + /**************************************************************************\ + * These are the standard $this->account_id specific functions * + \**************************************************************************/ - function get_rights($location,$appname = False, $user_id = ""){ + function read_repository() + { 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){ $appname = $phpgw_info["flags"]["currentapp"]; } - if($user_id == "") { - $user_id = $phpgw_info["user"]["account_id"]; - } - // 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.")"; + $this->data[] = array("appname" => $appname, "location" => $location, "account" => $this->account_id, "rights" => $rights); + reset($this->data); + return $this->data; + } - // Group piece - $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 (is_array($memberships) && count($memberships) > 0){ - for ($idx = 0; $idx < count($memberships); ++$idx){ - $sql .= ",".$memberships[$idx][0]; + function delete($appname = False, $location) + { + if ($appname == False){ + $appname = $phpgw_info["flags"]["currentapp"]; + } + $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 .= ")))"; - $rights = 0; + reset($this->data); + 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__); - if ($this->db->num_rows() == 0 && $phpgw_info["server"]["acl_default"] != "deny"){ return True; } - while ($this->db->next_record()) { - if ($this->db->f("acl_rights") == 0){ return False; } - $rights |= $this->db->f("acl_rights"); + + $count = count($this->data); + reset ($this->data); + 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; } - function check($location, $required, $appname = False, $user_id = ""){ + function check($location, $required, $appname = False){ global $phpgw, $phpgw_info; - $rights = $this->get_rights($location,$appname, $user_id); - + $rights = $this->get_rights($location,$appname); 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; if ($appname == False){ $appname = $phpgw_info["flags"]["currentapp"]; } - if($id == "") { - $id = $phpgw_info["user"]["account_id"]; - } - // 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__); + + $count = count($this->data); + if ($count == 0 && $phpgw_info["server"]["acl_default"] != "deny"){ return True; } $rights = 0; - if ($this->db->num_rows() == 0 && $phpgw_info["server"]["acl_default"] != "deny"){ - return True; - } - while ($this->db->next_record()) { - if ($this->db->f("acl_rights") == 0){ return False; } - $rights |= $this->db->f("acl_rights"); + + 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"]; + } } return $rights; } - function check_specific($location, $required, $appname = False, $id = "", $id_type = "u"){ - global $phpgw, $phpgw_info; - $rights = $this->get_specific_rights($location,$appname, $id, $id_type); - + function check_specific($location, $required, $appname = False){ + $rights = $this->get_specific_rights($location,$appname); 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){ global $phpgw, $phpgw_info; // User piece $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"]."')"; - - // Group piece - $sql .= " or (acl_account_type='g' and acl_account in (0"; // group 0 covers all users - $memberships = $phpgw->accounts->read_group_names($phpgw_info["user"]["account_id"]); - if (is_array($memberships) && count($memberships) > 0){ - for ($idx = 0; $idx < count($memberships); ++$idx){ - $sql .= ",".$memberships[$idx][0]; + $sql .= " and (acl_account in ('".$this->account_id."', 0"; // group 0 covers all users + $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 .= ")))"; @@ -185,12 +221,80 @@ 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; - if ($id == ""){ $id = $phpgw_info["user"]["account_id"]; } - if ($id_type == ""){ $id_type = "u"; } + 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; + + 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 .= "acl_account_type = '".$id_type."' and acl_account = ".$id; + $sql .= "acl_account = ".$account_id; $this->db->query($sql ,__LINE__,__FILE__); $rights = 0; if ($this->db->num_rows() == 0 ){ return False; } @@ -205,13 +309,13 @@ 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; if ($app == False){ $app = $phpgw_info["flags"]["currentapp"]; } $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__); $rights = 0; if ($this->db->num_rows() == 0 ){ return False; } diff --git a/phpgwapi/inc/class.applications.inc.php b/phpgwapi/inc/class.applications.inc.php index ead12bf936..6116837c02 100755 --- a/phpgwapi/inc/class.applications.inc.php +++ b/phpgwapi/inc/class.applications.inc.php @@ -26,65 +26,108 @@ { var $account_id; var $account_type; - var $account_apps = Array(Array()); + var $data = Array(); var $db; - function applications($params = "") + /**************************************************************************\ + * Standard constructor for setting $this->account_id * + \**************************************************************************/ + function applications($account_id = "") { global $phpgw, $phpgw_info; $this->db = $phpgw->db; - if (is_array($params)) { - 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"]; - } elseif (is_long($params[0])) { - $this->account_id = $params[0]; - } elseif(is_string($params[0])) { - if ($this->account_type = "u"){ - $this->account_id = $phpgw->accounts->username2userid($params[0]); - }else{ - $this->account_id = $phpgw->accounts->groupname2groupid($params[0]); - } - } - }else{ + if ($account_id == ""){ $this->account_id = $phpgw_info["user"]["account_id"]; - $this->account_type = "u"; + } elseif (is_long($account_id)) { + $this->account_id = $account_id; + } elseif(is_string($account_id)) { + $this->account_id = $phpgw->accounts->name2id($account_id); } + $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; if (gettype($phpgw_info["apps"]) != "array") { $this->read_installed_apps(); } - @reset($phpgw_info["apps"]); + $this->data = Array(); + reset($phpgw_info["apps"]); while ($app = each($phpgw_info["apps"])) { - if ($this->account_type == "g") { - $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); - } + $check = $phpgw->acl->check("run",1,$app[0]); 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() { global $phpgw, $phpgw_info; - if (count($this->account_apps) == 0) { - $this->enabled_apps(); + if (count($this->data) == 0) { + $this->read_repository(); } - @reset($this->account_apps); - while (list ($key) = each ($this->account_apps)) { - $app[] = $this->account_apps[$key]["name"]; + @reset($this->data); + while (list ($key) = each ($this->data)) { + $app[] = $this->data[$key]["name"]; } return $app; } @@ -96,52 +139,27 @@ } @reset($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])) { - $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"]); + if ($phpgw->acl->check_specific("run",1,$app[0], $this->account_id) && $this->is_system_enabled($app[0])) { + $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") { - 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; - } + /**************************************************************************\ + * These are the generic functions. Not specific to $this->account_id * + \**************************************************************************/ 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__); if($this->db->num_rows()) { while ($this->db->next_record()) { $name = $this->db->f("app_name"); $title = $this->db->f("app_title"); $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); } } } @@ -158,4 +176,4 @@ } } } -?> +?> \ No newline at end of file diff --git a/phpgwapi/inc/class.phpgw.inc.php b/phpgwapi/inc/class.phpgw.inc.php index b389c0a7d3..66f002000a 100644 --- a/phpgwapi/inc/class.phpgw.inc.php +++ b/phpgwapi/inc/class.phpgw.inc.php @@ -127,9 +127,11 @@ exit; } $this->preferences = CreateObject("phpgwapi.preferences", intval($phpgw_info["user"]["account_id"])); - $this->applications = CreateObject("phpgwapi.applications", array(intval($phpgw_info["user"]["account_id"]),'u')); - $phpgw_info["user"]["preferences"] = $this->preferences->get_saved_preferences(); - $phpgw_info["user"]["apps"] = $this->applications->enabled_apps(); + $this->applications = CreateObject("phpgwapi.applications", intval($phpgw_info["user"]["account_id"])); + $this->acl = CreateObject("phpgwapi.acl", intval($phpgw_info["user"]["account_id"])); + $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"]); } $this->translation = CreateObject("phpgwapi.translation"); diff --git a/phpgwapi/inc/class.preferences.inc.php b/phpgwapi/inc/class.preferences.inc.php index 0218d68e04..3cce9d133f 100644 --- a/phpgwapi/inc/class.preferences.inc.php +++ b/phpgwapi/inc/class.preferences.inc.php @@ -27,98 +27,100 @@ class preferences { var $account_id; - var $preference = Array(); + var $account_type; + var $data = Array(); var $db; - function preferences($account_id = "") + /**************************************************************************\ + * Standard constructor for setting $this->account_id * + \**************************************************************************/ + + function preferences($account_id = False) { global $phpgw, $phpgw_info; $this->db = $phpgw->db; - if ($account_id == ""){ + if ($account_id == False){ $this->account_id = $phpgw_info["user"]["account_id"]; - }elseif (is_long($account_id)) { + } elseif (is_long($account_id)) { $this->account_id = $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."
\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->query("SELECT preference_value FROM preferences WHERE preference_owner=".$this->account_id,__LINE__,__FILE__); $this->db->next_record(); $pref_info = $this->db->f("preference_value"); - $this->preference = Array(); - $this->preference = unserialize($pref_info); + $this->data = Array(); + $this->data = unserialize($pref_info); $this->db->unlock(); - return $this->preference; + reset ($this->data); + return $this->data; } - - function get_preferences() + function read() { - global $phpgw; - return $this->preference; + if (count($this->data) == 0){ $this->read_repository(); } + reset ($this->data); + return $this->data; } - // This should be called when you are done makeing changes to the preferences - function commit($line = "",$file = "") + function add($app_name,$var,$value = "") { - global $phpgw, $phpgw_info; - - //echo "
commit called
Line: $line
File: $file".$phpgw_info["user"]["account_id"]."
"; - 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__); - } + if (! $value) { + global $$var; + $value = $$var; } - } - - // Add a new preference. - function change($app_name,$var,$value = "") - { - global $phpgw_info; - - if (! $value) { - global $$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) { - $this->reset($app_name); - } else { - unset($this->preference["$app_name"]["$var"]); - } + if ($var == "") { + $this->data["$app_name"] = array(); + } else { + unset($this->data["$app_name"]["$var"]); + } + reset ($this->data); + return $this->data; } - // This will kill all preferences within a certain app - function reset($app_name) + function save_repository() { - $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 -?> \ No newline at end of file +?>