* Projectmanager: showing again global categories and their color from all apps, do no remove datasource category when element get stored and no category is selected

This commit is contained in:
Ralf Becker 2013-03-20 11:06:52 +00:00
parent 589a5e63cc
commit bcc1d5e5d0

View File

@ -476,7 +476,7 @@ class categories
{ {
foreach($cat_arr as $id=>$cat_id) foreach($cat_arr as $id=>$cat_id)
{ {
if (!$this->check_perms($needed, $cat_id)) if (!$this->check_perms($needed, $cat_id, false, $needed == EGW_ACL_READ)) // allow reading all global cats
{ {
unset($cat_arr[$id]); unset($cat_arr[$id]);
} }
@ -495,9 +495,10 @@ class categories
* @param int $needed necessary ACL right: EGW_ACL_{READ|EDIT|DELETE} * @param int $needed necessary ACL right: EGW_ACL_{READ|EDIT|DELETE}
* @param mixed $category category as array or the category_id * @param mixed $category category as array or the category_id
* @param boolean $no_acl_check=false if true, grants are NOT checked, gives access to all non-private categories of all users * @param boolean $no_acl_check=false if true, grants are NOT checked, gives access to all non-private categories of all users
* @param boolean $allow_global_read if true, global cats are allowed (independent of app) for reading
* @return boolean true permission granted, false for permission denied, null for category does not exist * @return boolean true permission granted, false for permission denied, null for category does not exist
*/ */
public function check_perms($needed, $category, $no_acl_check=false) public function check_perms($needed, $category, $no_acl_check=false, $allow_global_read=false)
{ {
if (!is_array($category) && !($category = self::read($category))) if (!is_array($category) && !($category = self::read($category)))
{ {
@ -513,9 +514,10 @@ class categories
} }
// Read access to global categories // Read access to global categories
if ($needed == EGW_ACL_READ && (array_intersect(explode(',',$category['owner']),$this->global_owners) || if ($needed == EGW_ACL_READ && (($is_global=array_intersect(explode(',',$category['owner']),$this->global_owners)) ||
$no_acl_check && $category['access'] == 'public') && // no_acl_check only means public cats $no_acl_check && $category['access'] == 'public') && // no_acl_check only means public cats
($category['appname'] == self::GLOBAL_APPNAME || $category['appname'] == $this->app_name)) ($category['appname'] == self::GLOBAL_APPNAME || $category['appname'] == $this->app_name ||
$is_global && $allow_global_read))
{ {
//echo "<p>".__METHOD__."($needed,$category[name]) access because global via memberships</p>\n"; //echo "<p>".__METHOD__."($needed,$category[name]) access because global via memberships</p>\n";
return true; return true;