Exemple #1
0
/**
 * Determines highest ranked role and it's level.
 * 
 * @param type $user_id
 * @param type $rank
 * @return type 
 */
function wpcf_access_rank_user($user_id, $rank = 'high')
{
    global $wpcf_access;
    static $cache = array();
    $user = get_userdata($user_id);
    if (empty($user)) {
        $wpcf_access->user_rank['not_found'][$user_id] = array('guest', false);
        return array('guest', false);
    }
    if (!empty($cache[$user_id])) {
        return $cache[$user_id];
    }
    $roles = wpcf_get_editable_roles();
    $levels = wpcf_access_order_roles_by_level($roles);
    $role = false;
    $level = false;
    foreach ($levels as $_levels => $_level) {
        $current_level = $_levels;
        foreach ($_level as $_role => $_role_data) {
            if (in_array($_role, $user->roles)) {
                $role = $_role;
                $level = $current_level;
                if ($rank != 'low') {
                    $cache[$user_id] = array($role, $level);
                    $wpcf_access->user_rank[$user_id] = $cache[$user_id];
                    return $cache[$user_id];
                }
            }
        }
    }
    if (!$role || !$level) {
        return array('guest', false);
    }
    $cache[$user_id] = array($role, $level);
    $wpcf_access->user_rank[$user_id] = $cache[$user_id];
    return array($role, $level);
}
Exemple #2
0
/**
 * Adds or removes caps for roles down to level.
 * 
 * @param type $role
 * @param type $cap
 * @param type $allow
 * @param type $distinct 
 */
function wpcf_access_assign_cap_by_level($role, $cap)
{
    $ordered_roles = wpcf_access_order_roles_by_level(wpcf_get_editable_roles());
    $flag = $found = false;
    foreach ($ordered_roles as $level => $roles) {
        foreach ($roles as $role_name => $role_data) {
            $role_set = get_role($role_name);
            if (!$flag) {
                $role_set->add_cap($cap);
            } else {
                $role_set->remove_cap($cap);
            }
            if ($role == $role_name) {
                $found = true;
            }
        }
        if ($found) {
            $flag = true;
        }
    }
}
/**
 * HTML formatted permissions table.
 *
 * @param type $roles
 * @param type $permissions
 * @param type $name
 * @return string
 */
function wpcf_access_permissions_table($roles, $permissions, $settings, $group_id, $id, $enabled = true, $managed = true)
{
    $ordered_roles = wpcf_access_order_roles_by_level($roles);
    $output = '';
    $output .= '<table><tr><th>' . __('Action', 'wpcf-access') . '</th>';
    foreach ($ordered_roles as $levels => $roles_data) {
        if (empty($roles_data)) {
            continue;
        }
        $title = '';
        foreach ($roles_data as $role => $details) {
            $title .= translate_user_role($details['name']) . '<br />';
        }
        $output .= '<th>' . $title . '</th>';
    }
    // Add Guest
    $output .= '<th>' . __('Guest', 'wpcf-access') . '</th>';
    $output .= '<th>' . __('Specific user', 'wpcf-access') . '</th></tr><tbody>';
    foreach ($settings as $permission_slug => $data) {
        // Change slug for 3rd party
        if (!in_array($group_id, array('types', 'tax'))) {
            $permission_slug = $data['cap_id'];
        }
        $check = true;
        $output .= '<tr><td>' . $data['title'] . '</td>';
        $name = 'types_access[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][role]';
        // If no settings saved use default setting [role]
        $role_check = !empty($permissions[$permission_slug]['role']) ? $permissions[$permission_slug]['role'] : $data['role'];
        foreach ($ordered_roles as $levels => $roles_data) {
            if (empty($roles_data)) {
                continue;
            }
            // Render only first (built-in)
            $role = key($roles_data);
            $details = array_shift($roles_data);
            $att_id = $group_id . '_' . $id . '_permissions_' . $permission_slug . '_' . $role . '_role';
            $attributes = $check ? ' checked="checked"' : '';
            $attributes .= !$managed ? ' readonly="readonly" disabled="disabled"' : '';
            $output .= '<td><input type="checkbox" name="';
            $output .= $role_check == $role ? $name : 'dummy';
            $output .= '" id="' . $att_id . '" value="' . $role . '"' . $attributes . ' class="wpcf-access-check-left wpcf-access-' . $permission_slug . '" data-wpcfaccesscap="' . $permission_slug . '" data-wpcfaccessname="' . $name . '" ' . 'onclick="wpcfAccessAutoThick(jQuery(this), \'' . $permission_slug . '\', \'' . $name . '\');"';
            if (!$enabled) {
                $output .= ' disabled="disabled" readonly="readonly"';
            }
            $output .= '/></td>';
            // Turn off onwards checking
            if ($role_check == $role) {
                $check = false;
            }
        }
        // Add Guest
        $name = 'types_access[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][role]';
        $attributes = $check ? ' checked="checked"' : '';
        $attributes .= !$managed ? ' readonly="readonly" disabled="disabled"' : '';
        $output .= '<td><input type="checkbox" name="';
        $output .= $role_check == 'guest' ? $name : 'dummy';
        $output .= '" id="' . $group_id . '_' . $id . '_permissions_' . $permission_slug . '_guest_role" value="guest"' . $attributes . ' class="wpcf-access-check-left wpcf-access-' . $permission_slug . '" data-wpcfaccesscap="' . $permission_slug . '" data-wpcfaccessname="' . $name . '" ' . 'onclick="wpcfAccessAutoThick(jQuery(this), \'' . $permission_slug . '\', \'' . $name . '\');"';
        if (!$enabled) {
            $output .= ' disabled="disabled" readonly="readonly"';
        }
        $output .= ' />';
        // Add admin if all disabled
        $output .= '<input type="hidden" name="types_access[' . $group_id . '][' . $id . '][__permissions]' . '[' . $permission_slug . '][role]" value="administrator" />';
        $output .= '</td>';
        $data['users'] = !empty($permissions[$permission_slug]['users']) ? $permissions[$permission_slug]['users'] : array();
        $output .= '<td>' . '<input type="hidden" class="wpcf-access-name-holder" name="wpcf_access_' . $id . '_' . $permission_slug . '" data-wpcfaccesscap="' . $permission_slug . '" data-wpcfaccessname="' . 'types_access[' . $group_id . '][' . $id . ']' . '[permissions][' . $permission_slug . ']" value="types_access[' . $group_id . '][' . $id . ']' . '[permissions][' . $permission_slug . ']" />' . wpcf_access_admin_users_form($data, 'types_access[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . ']', $enabled, $managed) . '</td></tr>';
    }
    $output .= '</tbody></table>';
    return $output;
}
Exemple #4
0
/**
 * Determines highest ranked role and it's level.
 * 
 * @param type $user_id
 * @param type $rank
 * @return type 
 */
function wpcf_access_rank_user($user_id, $rank = 'high')
{
    $user = get_userdata($user_id);
    if (empty($user)) {
        return array('guest', false);
    }
    $roles = get_editable_roles();
    $levels = wpcf_access_order_roles_by_level($roles);
    $role = false;
    $level = false;
    foreach ($levels as $_levels => $_level) {
        $current_level = $_levels;
        foreach ($_level as $_role => $_role_data) {
            if (in_array($_role, $user->roles)) {
                $role = $_role;
                $level = $current_level;
                if ($rank != 'low') {
                    return array($role, $level);
                }
            }
        }
    }
    if (!$role || !$level) {
        return array('guest', false);
    }
    return array($role, $level);
}