From 70dae328b5174543363163f8ca1c88c3c0af3cd8 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Mon, 25 Jul 2016 21:59:52 -0700 Subject: check for new permissions and update channels and connections with defaults if any are found and if there are defaults for any channel roles which are being used on this site. --- boot.php | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'boot.php') diff --git a/boot.php b/boot.php index 0ff598b45..a6cc23c9f 100755 --- a/boot.php +++ b/boot.php @@ -1551,6 +1551,9 @@ function check_config(&$a) { load_hooks(); + + check_for_new_perms(); + check_cron_broken(); } @@ -2440,6 +2443,67 @@ function cert_bad_email() { } +function check_for_new_perms() { + + $pregistered = get_config('system','perms'); + $pcurrent = array_keys(\Zotlabs\Access\Permissions::Perms()); + + if(! $pregistered) { + set_config('system','perms',$pcurrent); + return; + } + + $found_new_perm = false; + + foreach($pcurrent as $p) { + if(! in_array($p,$pregistered)) { + $found_new_perm = true; + // for all channels + $c = q("select channel_id from channel where true"); + if($c) { + foreach($c as $cc) { + // get the permission role + $r = q("select v from pconfig where uid = %d and cat = 'system' and k = 'permissions_role'", + intval($cc['uid']) + ); + if($r) { + // get a list of connections + $x = q("select abook_xchan from abook where abook_channel = %d and abook_self = 0", + intval($cc['uid']) + ); + // get the permissions role details + $rp = \Zotlabs\Access\PermissionRoles::role_perms($r[0]['v']); + if($rp) { + // set the channel limits if appropriate or 0 + if(array_key_exists('limits',$rp) && array_key_exists($p,$rp['limits'])) { + \Zotlabs\Access\PermissionLimits::Set($cc['uid'],$p,$rp['limits'][$p]); + } + else { + \Zotlabs\Access\PermissionLimits::Set($cc['uid'],$p,0); + } + + $set = ((array_key_exists('perms_connect',$rp) && array_key_exists($p,$rp['perms_connect'])) ? true : false); + // foreach connection set to the perms_connect value + if($x) { + foreach($x as $xx) { + set_abconfig($cc['uid'],$xx['abook_xchan'],'my_perms',$p,intval($set)); + } + } + } + } + } + } + } + } + + // We should probably call perms_refresh here, but this should get pushed in 24 hours and there is no urgency + if($found_new_perm) + set_config('system','perms',$pcurrent); + +} + + + /** * @brief Send warnings every 3-5 days if cron is not running. */ -- cgit v1.2.3