Esempio n. 1
0
/**
 * Renders meta boxes.
 * 
 * @param type $post
 * @param type $args 
 */
function wpcf_access_post_meta_box($post, $args)
{
    $meta = get_post_meta($post->ID, '_types_access', true);
    $roles = wpcf_get_editable_roles();
    $area = $args['args'];
    $output = '';
    $groups = array();
    $groups = apply_filters('types-access-show-ui-group', $groups, $area['id']);
    foreach ($groups as $group) {
        $output .= '<div class="wpcf-access-type-item">';
        $output .= '<div class="wpcf-access-mode">';
        $caps = array();
        $caps = apply_filters('types-access-show-ui-cap', $caps, $area['id'], $group['id']);
        $saved_data = array();
        foreach ($caps as $cap_slug => $cap) {
            if (isset($cap['default_role'])) {
                $caps[$cap_slug]['role'] = $cap['role'] = $cap['default_role'];
            }
            $saved_data[$cap['cap_id']] = is_array($meta) && isset($meta[$area['id']][$group['id']]['permissions'][$cap['cap_id']]) ? $meta[$area['id']][$group['id']]['permissions'][$cap['cap_id']] : array('role' => $cap['role']);
        }
        if (isset($cap['style']) && $cap['style'] == 'dropdown') {
        } else {
            $output .= wpcf_access_permissions_table($roles, $saved_data, $caps, $area['id'], $group['id']);
        }
        $output .= '</div>';
        $output .= '</div>';
    }
    echo $output;
}
Esempio n. 2
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);
}
Esempio n. 3
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;
        }
    }
}
Esempio n. 4
0
/**
 * Deletes custom role. 
 */
function wpcf_access_delete_role_ajax()
{
    if (!isset($_POST['wpcf_access_delete_role_nonce']) || !wp_verify_nonce($_POST['wpcf_access_delete_role_nonce'], 'delete_role')) {
        die('verification failed');
    }
    if (in_array(strtolower(trim($_POST['wpcf_access_delete_role'])), array('administrator', 'editor', 'author', 'contributor', 'subscriber'))) {
        $error = 'true';
        $output = '<div class="error"><p>' . __('Role can not be deleted', 'wpcf_access') . '</p></div>';
    } else {
        require_once WPCF_ACCESS_INC . '/admin-edit-access.php';
        if ($_POST['wpcf_reassign'] != 'ignore') {
            $users = get_users('role=' . $_POST['wpcf_access_delete_role']);
            foreach ($users as $user) {
                $user = new WP_User($user->ID);
                $user->add_role($_POST['wpcf_reassign']);
            }
        }
        remove_role($_POST['wpcf_access_delete_role']);
        $error = 'false';
        $output = wpcf_access_admin_set_custom_roles_level_form(wpcf_get_editable_roles());
    }
    echo json_encode(array('error' => $error, 'output' => $output));
    die;
}
/**
 * Reassing role form.
 * 
 * @param type $role
 * @return string 
 */
function wpcf_access_reassign_role_form($role)
{
    $output = '';
    $output .= '<div class="wpcf-access-reassign-role" id="wpcf-access-reassign-' . sanitize_title($role) . '"><div class="wpcf-access-reassign-role-popup">';
    $users = get_users('role=' . $role . '&number=5');
    $users_txt = '';
    foreach ($users as $user) {
        $users_txt[] = $user->display_name;
    }
    if (!empty($users)) {
        $users_txt = implode(', ', $users_txt);
        $output .= sprintf(__('Choose what role to change current %s users to:', 'wpcf_access'), '<em>' . $users_txt . '</em>');
        $output .= wpcf_access_admin_roles_dropdown(wpcf_get_editable_roles(), 'wpcf_reassign', array(), __('--- chose role ---', 'wpcf_access'), true, array($role));
    } else {
        $output .= '<input type="hidden" name="wpcf_reassign" value="ignore" />';
        $output .= __('Do you really want to remove this role?', 'wpcf_access');
    }
    $output .= '<input type="hidden" name="wpcf_access_delete_role" value="' . $role . '" />
                <input type="hidden" name="wpcf_access_delete_role_nonce" value="' . wp_create_nonce('delete_role') . '" />
        <div class="modal">
        <a href="javascript:void(0);" class="button-primary confirm"';
    if (!empty($users)) {
        $output .= ' disabled="disabled">' . __('Save', 'wpcf_access');
    } else {
        $output .= '>' . __('Delete', 'wpcf_access');
    }
    $output .= '</a>
        <a href="javascript:void(0);" class="button-secondary cancel" onclick="javascript:tb_remove();">' . __('Cancel', 'wpcf_access') . '</a>&nbsp;<img src="' . esc_url(admin_url('images/wpspin_light.gif')) . '" class="img-waiting" alt="" />
    </div>';
    $output .= '<div class="ajax-response"></div></div></div>';
    return $output;
}