/** * 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; }
/** * 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); }
/** * 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; } } }
/** * 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> <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; }