$desc) { if(array_key_exists('perms_' . $perm, $_POST)) { $pcarr[] = $perm; } } } \Zotlabs\Lib\Permcat::update(local_channel(), $name, $pcarr); if ($contacts) { \Zotlabs\Lib\Permcat::assign($channel, $name, $contacts); } Libsync::build_sync_packet(); info( t('Contact role saved.') . EOL); goaway($return_path); return; } function get() { if(! local_channel()) return; $channel = App::get_channel(); if(argc() > 1) $name = hex2bin(argv(1)); if(argc() > 2 && argv(2) === 'drop') { \Zotlabs\Lib\Permcat::delete(local_channel(),$name); // TODO: assign all members of the deleted role to the default role Libsync::build_sync_packet(); json_return_and_die([ 'success' => true ]); } $existing = []; $pcat = new \Zotlabs\Lib\Permcat(local_channel()); $pcatlist = $pcat->listing(); /* not yet ready $test = $pcatlist[4]['perms']; $role_sql = ''; foreach ($test as $t) $role_sql .= "( k = '" . dbesc($t['name']) . "' AND v = '" . intval($t['value']) . "' ) OR "; $role_sql = rtrim($role_sql, ' OR '); // get all xchans belonging to a permission role $q = q("SELECT xchan FROM abconfig WHERE chan = %d AND cat = 'my_perms' AND ( $role_sql ) GROUP BY xchan HAVING count(xchan) = %d", intval(local_channel()), intval(count($test)) ); */ $is_system_role = false; $permcats = []; if($pcatlist) { foreach($pcatlist as $pc) { if(($pc['name']) && ($name) && ($pc['name'] == $name)) { $existing = $pc['perms']; if (isset($pc['system']) && intval($pc['system'])) $is_system_role = $pc['name']; } $permcats[bin2hex($pc['name'])] = $pc['localname']; if($pc['name'] == $name) $localname = $pc['localname']; } } $global_perms = \Zotlabs\Access\Permissions::Perms(); foreach($global_perms as $k => $v) { $thisperm = \Zotlabs\Lib\Permcat::find_permcat($existing,$k); $checkinherited = \Zotlabs\Access\PermissionLimits::Get(local_channel(),$k); if($existing[$k]) $thisperm = 1; $perms[] = [ 'perms_' . $k, $v, '', $thisperm, 1, (($checkinherited & PERMS_SPECIFIC) ? '' : '1'), '', $checkinherited ]; } $is_default_role = (get_pconfig(local_channel(),'system','default_permcat','default') == $name); $group_select_options = [ 'selected' => '', 'form_id' => 'group_select', 'label' => t('Assign this role to'), 'after' => [ 'name' => t('All my contacts'), 'id' => 'all_contacts', 'selected' => false ] ]; $group_select = AccessList::select(local_channel(), $group_select_options); $tpl = get_markup_template("permcats.tpl"); $o .= replace_macros($tpl, array( '$form_security_token' => get_form_security_token("permcats"), '$default_role' => array('default_role', t('Use this role as default for new contacts'), intval($is_default_role), '', [t('No'), t('Yes')]), '$title' => t('Contact Roles'), '$tokens' => $t, '$permcats' => $permcats, '$atoken' => $atoken, '$url1' => z_root() . '/channel/' . $channel['channel_address'], '$url2' => z_root() . '/photos/' . $channel['channel_address'], '$name' => ['name', t('Role name') . ' *', (($localname) ? $localname : ''), (($is_system_role) ? t('System role - not editable') : '') , '', (($is_system_role) ? 'disabled' : '')], '$perms' => $perms, '$inherited' => t('inherited'), '$is_system_role' => $is_system_role, '$permlbl' => t('Role Permissions'), '$permnote' => t('Some permissions may be inherited from your channel role, which have higher priority than contact role settings.'), '$submit' => t('Submit'), '$return_path' => argv(1), '$group_select' => $group_select, )); return $o; } }