mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 08:39:07 +01:00
fixed handling of group acl: addressbook eg. is NOT using it at all
This commit is contained in:
parent
a2e6e301ee
commit
d9117ecff0
@ -5,7 +5,7 @@
|
|||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* @package infolog
|
* @package infolog
|
||||||
* @copyright (c) 2003-9 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @copyright (c) 2003-10 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@ -15,6 +15,19 @@
|
|||||||
*/
|
*/
|
||||||
class infolog_hooks
|
class infolog_hooks
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* For which groups should no group acl be used: infolog group owners
|
||||||
|
*
|
||||||
|
* @param string|array $data
|
||||||
|
* @return boolean|array true, false or array with group-account_id's
|
||||||
|
*/
|
||||||
|
static function not_enum_group_acls($data)
|
||||||
|
{
|
||||||
|
$config = config::read('infolog');
|
||||||
|
|
||||||
|
return $config['group_owners'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook called by link-class to include infolog in the appregistry of the linkage
|
* Hook called by link-class to include infolog in the appregistry of the linkage
|
||||||
*
|
*
|
||||||
@ -23,6 +36,15 @@ class infolog_hooks
|
|||||||
*/
|
*/
|
||||||
static function search_link($location)
|
static function search_link($location)
|
||||||
{
|
{
|
||||||
|
// register our not_enum_group_acls hook, if not already registered
|
||||||
|
// can be removed after next infolog version update after 1.6
|
||||||
|
if ($GLOBALS['egw']->hooks->single('not_enum_group_acls',$acl_app) === false)
|
||||||
|
{
|
||||||
|
include(EGW_INCLUDE_ROOT.'/infolog/setup/setup.inc.php');
|
||||||
|
$GLOBALS['egw']->hooks->register_hooks('infolog',$setup_info['infolog']['hooks']);
|
||||||
|
unset($setup_info);
|
||||||
|
}
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'query' => 'infolog.infolog_bo.link_query',
|
'query' => 'infolog.infolog_bo.link_query',
|
||||||
'title' => 'infolog.infolog_bo.link_title',
|
'title' => 'infolog.infolog_bo.link_title',
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* @package infolog
|
* @package infolog
|
||||||
* @subpackage setup
|
* @subpackage setup
|
||||||
* @copyright (c) 2003-8 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @copyright (c) 2003-10 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@ -48,6 +48,7 @@ $setup_info['infolog']['hooks']['preferences'] = 'infolog_hooks::all_hooks';
|
|||||||
$setup_info['infolog']['hooks']['settings'] = 'infolog_hooks::settings';
|
$setup_info['infolog']['hooks']['settings'] = 'infolog_hooks::settings';
|
||||||
$setup_info['infolog']['hooks']['verify_settings'] = 'infolog_hooks::verify_settings';
|
$setup_info['infolog']['hooks']['verify_settings'] = 'infolog_hooks::verify_settings';
|
||||||
$setup_info['infolog']['hooks']['admin'] = 'infolog_hooks::all_hooks';
|
$setup_info['infolog']['hooks']['admin'] = 'infolog_hooks::all_hooks';
|
||||||
|
$setup_info['infolog']['hooks']['not_enum_group_acls'] = 'infolog_hooks::not_enum_group_acls';
|
||||||
$setup_info['infolog']['hooks']['deleteaccount'] = 'infolog.infolog_so.change_delete_owner';
|
$setup_info['infolog']['hooks']['deleteaccount'] = 'infolog.infolog_so.change_delete_owner';
|
||||||
$setup_info['infolog']['hooks'][] = 'home';
|
$setup_info['infolog']['hooks'][] = 'home';
|
||||||
$setup_info['infolog']['hooks']['addressbook_view'] = 'infolog.infolog_ui.hook_view';
|
$setup_info['infolog']['hooks']['addressbook_view'] = 'infolog.infolog_ui.hook_view';
|
||||||
|
@ -122,10 +122,10 @@ class acl
|
|||||||
/**
|
/**
|
||||||
* Read acl records for $acl->account_id from reposity
|
* Read acl records for $acl->account_id from reposity
|
||||||
*
|
*
|
||||||
* @internal
|
* @param boolean|array $no_groups=false if true, do not use memberships, if array do not use given groups
|
||||||
* @return array along with storing it in $acl->data. <br>
|
* @return array along with storing it in $acl->data. <br>
|
||||||
*/
|
*/
|
||||||
function read_repository()
|
function read_repository($no_groups=false)
|
||||||
{
|
{
|
||||||
// For some reason, calling this via XML-RPC doesn't call the constructor.
|
// For some reason, calling this via XML-RPC doesn't call the constructor.
|
||||||
// Here is yet another work around(tm) (jengo)
|
// Here is yet another work around(tm) (jengo)
|
||||||
@ -133,9 +133,16 @@ class acl
|
|||||||
{
|
{
|
||||||
$this->acl();
|
$this->acl();
|
||||||
}
|
}
|
||||||
$acl_acc_list = $GLOBALS['egw']->accounts->memberships($this->account_id,true);
|
if ($no_groups === true)
|
||||||
@array_unshift($acl_acc_list,$this->account_id);
|
{
|
||||||
|
$acl_acc_list = $this->account_id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$acl_acc_list = $GLOBALS['egw']->accounts->memberships($this->account_id,true);
|
||||||
|
if (is_array($no_groups)) $acl_acc_list = array_diff($acl_acc_list,$no_groups);
|
||||||
|
array_unshift($acl_acc_list,$this->account_id);
|
||||||
|
}
|
||||||
|
|
||||||
$this->data = Array();
|
$this->data = Array();
|
||||||
foreach($this->db->select(acl::TABLE,'*',array('acl_account' => $acl_acc_list ),__LINE__,__FILE__) as $row)
|
foreach($this->db->select(acl::TABLE,'*',array('acl_account' => $acl_acc_list ),__LINE__,__FILE__) as $row)
|
||||||
|
@ -99,7 +99,9 @@ class uiaclprefs
|
|||||||
$no_privat_grants = $owner != $GLOBALS['egw_info']['user']['account_id'];
|
$no_privat_grants = $owner != $GLOBALS['egw_info']['user']['account_id'];
|
||||||
}
|
}
|
||||||
$this->acl = new acl((int)$owner);
|
$this->acl = new acl((int)$owner);
|
||||||
$this->acl->read_repository();
|
// should we enumerate group acl (does app use it), eg. addressbook does NOT use group ACL's but group addressbooks
|
||||||
|
$not_enum_group_acls = $acl_app == 'addressbook' ? true : $GLOBALS['egw']->hooks->single('not_enum_group_acls',$acl_app);
|
||||||
|
$this->acl->read_repository($not_enum_group_acls);
|
||||||
|
|
||||||
if ($_POST['save'] || $_POST['apply'])
|
if ($_POST['save'] || $_POST['apply'])
|
||||||
{
|
{
|
||||||
@ -223,7 +225,15 @@ class uiaclprefs
|
|||||||
$totalentries = $GLOBALS['egw']->accounts->total;
|
$totalentries = $GLOBALS['egw']->accounts->total;
|
||||||
$shownentries = count($accounts);
|
$shownentries = count($accounts);
|
||||||
|
|
||||||
$memberships = $GLOBALS['egw']->accounts->memberships($owner,true);
|
if ($not_enum_group_acls === true)
|
||||||
|
{
|
||||||
|
$memberships = array();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$memberships = $GLOBALS['egw']->accounts->memberships($owner,true);
|
||||||
|
if (is_array($not_enum_group_acls)) $memberships = array_diff($memberships,$not_enum_group_acls);
|
||||||
|
}
|
||||||
$header_type = '';
|
$header_type = '';
|
||||||
$processed = Array();
|
$processed = Array();
|
||||||
foreach((array)$accounts as $uid => $data)
|
foreach((array)$accounts as $uid => $data)
|
||||||
|
Loading…
Reference in New Issue
Block a user