/** * taxonomy-forum.php * * This is the template for Forums (forum taxonomy) when using * the Sentient theme. * * To modify this template: * - Create a groups-forums subfolder in your theme's root folder. * - Copy this file there and adjust it as desired. * * @author itthinx */ function gf_sentient_forum_head() { // title & New Topic link if (is_tax()) { global $wp_query; if ($forum = $wp_query->get_queried_object()) { if ($forum && !is_wp_error($forum)) { echo '<header class="forum_header">'; echo sprintf('<h1 class="forum-title %s">%s</h1>', $forum->slug, wp_strip_all_tags($forum->name)); echo '</header>'; echo '<br/>'; $user_id = get_current_user_id(); if (Groups_Forums::user_can_post($user_id, $forum->term_id)) { $edit_topic_post_id = Groups_Options::get_option('groups-forums-edit-topic-post-id', null); if ($edit_topic_post_id) { $link = add_query_arg('forum_id', $forum->term_id, get_permalink($edit_topic_post_id)); echo '<div class="new-topic">'; echo sprintf('<a href="%s">%s</a>', $link, __('Post a new Topic', GROUPS_FORUMS_PLUGIN_DOMAIN)); echo '</div>'; echo '<br/>'; } } } } } }
/** * Create needed capabilities on plugin activation. * Must be called explicitly or hooked into activation. */ public static function activate() { if (!Groups_Capability::read_by_capability(self::READ_POST_CAPABILITY)) { Groups_Capability::create(array("capability" => self::READ_POST_CAPABILITY)); // default read caps Groups_Options::update_option(Groups_Post_Access::READ_POST_CAPABILITIES, array(Groups_Post_Access::READ_POST_CAPABILITY)); // for translation // @see self::READ_POST_CAPABILITY_NAME __("Read Post", GROUPS_PLUGIN_DOMAIN); } }
{ return false !== get_user_by("id", $user_id); } } /** * Load core : */ require_once GROUPS_CORE_LIB . '/class-groups-utility.php'; // options require_once GROUPS_CORE_LIB . '/class-groups-options.php'; // plugin control: activation, deactivation, ... require_once GROUPS_CORE_LIB . '/class-groups-controller.php'; // admin if (is_admin()) { require_once GROUPS_ADMIN_LIB . '/class-groups-admin.php'; if (Groups_Options::get_option(GROUPS_SHOW_IN_USER_PROFILE, GROUPS_SHOW_IN_USER_PROFILE_DEFAULT)) { require_once GROUPS_ADMIN_LIB . '/class-groups-admin-user-profile.php'; } require_once GROUPS_ADMIN_LIB . '/class-groups-admin-users.php'; require_once GROUPS_ADMIN_LIB . '/class-groups-admin-posts.php'; require_once GROUPS_ADMIN_LIB . '/class-groups-admin-post-columns.php'; } // help if (is_admin()) { require_once GROUPS_CORE_LIB . '/class-groups-help.php'; } require_once GROUPS_CORE_LIB . '/class-groups-capability.php'; require_once GROUPS_CORE_LIB . '/class-groups-group.php'; require_once GROUPS_CORE_LIB . '/class-groups-group-capability.php'; require_once GROUPS_CORE_LIB . '/class-groups-user.php'; require_once GROUPS_CORE_LIB . '/class-groups-user-capability.php';
function groups_network_admin_options() { if (!current_user_can(GROUPS_ADMINISTER_OPTIONS)) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } echo '<div>' . '<h2>' . __('Groups network options', GROUPS_PLUGIN_DOMAIN) . '</h2>' . '</div>'; // handle options form submission if (isset($_POST['submit'])) { if (wp_verify_nonce($_POST[GROUPS_ADMIN_OPTIONS_NONCE], 'admin')) { // delete data if (!empty($_POST['delete-data'])) { Groups_Options::update_option('groups_network_delete_data', true); } else { Groups_Options::update_option('groups_network_delete_data', false); } } } $delete_data = Groups_Options::get_option('groups_network_delete_data', false); // options form echo '<form action="" name="options" method="post">' . '<div>' . '<h3>' . __('Network deactivation and data persistence', GROUPS_PLUGIN_DOMAIN) . '</h3>' . '<p>' . '<input name="delete-data" type="checkbox" ' . ($delete_data ? 'checked="checked"' : '') . '/>' . '<label for="delete-data">' . __('Delete all Groups plugin data for ALL sites on network deactivation', GROUPS_PLUGIN_DOMAIN) . '</label>' . '</p>' . '<p class="description warning">' . __('CAUTION: If this option is active while the plugin is deactivated, ALL plugin settings and data will be DELETED for <strong>all sites</strong>. If you are going to use this option, now would be a good time to make a backup. By enabling this option you agree to be solely responsible for any loss of data or any other consequences thereof.', GROUPS_PLUGIN_DOMAIN) . '</p>' . '<p>' . wp_nonce_field('admin', GROUPS_ADMIN_OPTIONS_NONCE, true, false) . '<input type="submit" name="submit" value="' . __('Save', GROUPS_PLUGIN_DOMAIN) . '"/>' . '</p>' . '</div>' . '</form>'; Groups_Help::footer(); }
/** * Save capabilities for attachment post type (Media). * When multiple attachments are saved, this is called once for each. * @param array $post post data * @param array $attachment attachment field data * @return array */ public static function attachment_fields_to_save($post, $attachment) { $post_types_option = Groups_Options::get_option(Groups_Post_Access::POST_TYPES, array()); if (!isset($post_types_option['attachment']['add_meta_box']) || $post_types_option['attachment']['add_meta_box']) { if (current_user_can('edit_attachment')) { Groups_Post_Access::delete($post['ID'], null); if (!empty($attachment[self::CAPABILITY])) { foreach ($attachment[self::CAPABILITY] as $capability_id) { if ($capability = Groups_Capability::read($capability_id)) { Groups_Post_Access::create(array('post_id' => $post['ID'], 'capability' => $capability->capability)); } } } } } return $post; }
/** * Plugin deactivation cleanup. * @param $drop overrides the groups_delete_data option, default is false */ private static function cleanup($drop = false) { global $wpdb, $wp_roles; $delete_data = Groups_Options::get_option('groups_delete_data', false); if ($delete_data || $drop) { foreach ($wp_roles->role_objects as $role) { $role->remove_cap(GROUPS_ACCESS_GROUPS); $role->remove_cap(GROUPS_ADMINISTER_GROUPS); $role->remove_cap(GROUPS_ADMINISTER_OPTIONS); } $wpdb->query('DROP TABLE IF EXISTS ' . _groups_get_tablename('group')); $wpdb->query('DROP TABLE IF EXISTS ' . _groups_get_tablename('capability')); $wpdb->query('DROP TABLE IF EXISTS ' . _groups_get_tablename('user_group')); $wpdb->query('DROP TABLE IF EXISTS ' . _groups_get_tablename('user_capability')); $wpdb->query('DROP TABLE IF EXISTS ' . _groups_get_tablename('group_capability')); Groups_Options::flush_options(); delete_option(GROUPS_ADMINISTRATOR_ACCESS_OVERRIDE); delete_option('groups_plugin_version'); delete_option('groups_delete_data'); } }
/** * Handles redirection. */ public static function wp() { global $wp_query; $is_restricted_term = false; if (class_exists('Groups_Options') && class_exists('Groups_Restrict_Categories')) { $redirect_restricted_terms = Groups_Options::get_option('groups-404-redirect-restricted-terms', false); if ($redirect_restricted_terms) { $is_term = $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax; if ($is_term) { $restricted_term_ids = Groups_Restrict_Categories::get_user_restricted_term_ids(get_current_user_id()); $term_id = $wp_query->get_queried_object_id(); if (in_array($term_id, $restricted_term_ids)) { $is_restricted_term = true; } } } } if ($wp_query->is_404 || $is_restricted_term) { if (self::groups_is_active()) { $redirect_to = Groups_Options::get_option('groups-404-redirect-to', 'post'); $post_id = Groups_Options::get_option('groups-404-redirect-post-id', ''); $redirect_status = intval(Groups_Options::get_option('groups-404-redirect-status', '301')); $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_post_id = url_to_postid($current_url); if (!$current_post_id) { $current_post_id = $wp_query->get_queried_object_id(); } if (!$current_post_id) { require_once 'groups-404-url-to-postid.php'; $current_post_id = groups_404_url_to_postid($current_url); } if ($current_post_id) { $is_restricted_by_term = false; if (class_exists('Groups_Restrict_Categories') && method_exists('Groups_Restrict_Categories', 'user_can_read')) { $is_restricted_by_term = !Groups_Restrict_Categories::user_can_read($current_post_id); } if (!Groups_Post_Access::user_can_read_post($current_post_id, get_current_user_id()) || $is_restricted_by_term || $is_restricted_term) { switch ($redirect_to) { case 'login': if (!is_user_logged_in()) { wp_redirect(wp_login_url($current_url), $redirect_status); exit; } else { // If the user is already logged in, we can't // redirect to the WordPress login again, // we either send them to the home page, or // to the page indicated in the settings. if (empty($post_id)) { wp_redirect(get_home_url(), $redirect_status); } else { $post_id = apply_filters('groups_404_redirect_post_id', $post_id, $current_post_id, $current_url); if ($post_id != $current_post_id) { wp_redirect(get_permalink($post_id), $redirect_status); } else { return; } } exit; } default: // 'post' if (empty($post_id)) { wp_redirect(get_home_url(), $redirect_status); } else { $post_id = apply_filters('groups_404_redirect_post_id', $post_id, $current_post_id, $current_url); if ($post_id != $current_post_id) { wp_redirect(get_permalink($post_id), $redirect_status); } else { return; } } exit; } } } } } }
/** * @return array of valid read capabilities for the current or given user */ public static function get_valid_read_caps_for_user($user_id = null) { $result = array(); $user = new Groups_User($user_id === null ? get_current_user_id() : $user_id); $valid_read_caps = Groups_Options::get_option(Groups_Post_Access::READ_POST_CAPABILITIES, array(Groups_Post_Access::READ_POST_CAPABILITY)); foreach ($valid_read_caps as $valid_read_cap) { if ($capability = Groups_Capability::read_by_capability($valid_read_cap)) { if ($user->can($capability->capability)) { $result[] = $valid_read_cap; } } } return $result; }
/** * Manage Groups: table of groups and add, edit, remove actions. */ function groups_admin_groups() { global $wpdb; $output = ''; $today = date('Y-m-d', time()); if (!current_user_can(GROUPS_ADMINISTER_GROUPS)) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } // // handle actions // if (isset($_POST['action'])) { // handle action submit - do it switch ($_POST['action']) { case 'add': if (!($group_id = groups_admin_groups_add_submit())) { return groups_admin_groups_add(); } else { $group = Groups_Group::read($group_id); Groups_Admin::add_message(sprintf(__("The <em>%s</em> group has been created.", GROUPS_PLUGIN_DOMAIN), stripslashes(wp_filter_nohtml_kses($group->name)))); } break; case 'edit': if (!($group_id = groups_admin_groups_edit_submit())) { return groups_admin_groups_edit($_POST['group-id-field']); } else { $group = Groups_Group::read($group_id); Groups_Admin::add_message(sprintf(__('The <em>%s</em> group has been updated.', GROUPS_PLUGIN_DOMAIN), stripslashes(wp_filter_nohtml_kses($group->name)))); } break; case 'remove': if ($group_id = groups_admin_groups_remove_submit()) { Groups_Admin::add_message(__('The group has been deleted.', GROUPS_PLUGIN_DOMAIN)); } break; // bulk actions on groups: add capabilities, remove capabilities, remove groups // bulk actions on groups: add capabilities, remove capabilities, remove groups case 'groups-action': if (wp_verify_nonce($_POST[GROUPS_ADMIN_GROUPS_ACTION_NONCE], 'admin')) { $group_ids = isset($_POST['group_ids']) ? $_POST['group_ids'] : null; $bulk_action = null; if (isset($_POST['bulk'])) { $bulk_action = $_POST['bulk-action']; } if (is_array($group_ids) && $bulk_action !== null) { foreach ($group_ids as $group_id) { switch ($bulk_action) { case 'add-capability': $capabilities_id = isset($_POST['capability_id']) ? $_POST['capability_id'] : null; if ($capabilities_id !== null) { foreach ($capabilities_id as $capability_id) { Groups_Group_Capability::create(array('group_id' => $group_id, 'capability_id' => $capability_id)); } } break; case 'remove-capability': $capabilities_id = isset($_POST['capability_id']) ? $_POST['capability_id'] : null; if ($capabilities_id !== null) { foreach ($capabilities_id as $capability_id) { Groups_Group_Capability::delete($group_id, $capability_id); } } break; case 'remove-group': $bulk_confirm = isset($_POST['confirm']) ? true : false; if ($bulk_confirm) { groups_admin_groups_bulk_remove_submit(); } else { return groups_admin_groups_bulk_remove(); } break; } } } } break; } } else { if (isset($_GET['action'])) { // handle action request - show form switch ($_GET['action']) { case 'add': return groups_admin_groups_add(); break; case 'edit': if (isset($_GET['group_id'])) { return groups_admin_groups_edit($_GET['group_id']); } break; case 'remove': if (isset($_GET['group_id'])) { return groups_admin_groups_remove($_GET['group_id']); } break; } } } // // group table // if (isset($_POST['clear_filters']) || isset($_POST['group_id']) || isset($_POST['group_name'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_GROUPS_FILTER_NONCE], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } // filters $group_id = Groups_Options::get_user_option('groups_group_id', null); $group_name = Groups_Options::get_user_option('groups_group_name', null); if (isset($_POST['clear_filters'])) { Groups_Options::delete_user_option('groups_group_id'); Groups_Options::delete_user_option('groups_group_name'); $group_id = null; $group_name = null; } else { if (isset($_POST['submitted'])) { // filter by name if (!empty($_POST['group_name'])) { $group_name = $_POST['group_name']; Groups_Options::update_user_option('groups_group_name', $group_name); } // filter by group id if (!empty($_POST['group_id'])) { $group_id = intval($_POST['group_id']); Groups_Options::update_user_option('groups_group_id', $group_id); } else { if (isset($_POST['group_id'])) { // empty && isset => '' => all $group_id = null; Groups_Options::delete_user_option('groups_group_id'); } } } } if (isset($_POST['row_count'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_GROUPS_NONCE_1], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } if (isset($_POST['paged'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_GROUPS_NONCE_2], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg('paged', $current_url); $current_url = remove_query_arg('action', $current_url); $current_url = remove_query_arg('group_id', $current_url); $group_table = _groups_get_tablename('group'); $output .= '<div class="manage-groups">' . '<div>' . '<h2>' . _x('Groups', 'page-title', GROUPS_PLUGIN_DOMAIN) . '</h2>' . '</div>'; $output .= Groups_Admin::render_messages(); $output .= '<div class="manage">' . "<a title='" . __('Click to add a new group', GROUPS_PLUGIN_DOMAIN) . "' class='add button' href='" . esc_url($current_url) . "&action=add'><img class='icon' alt='" . __('Add', GROUPS_PLUGIN_DOMAIN) . "' src='" . GROUPS_PLUGIN_URL . "images/add.png'/><span class='label'>" . __('New Group', GROUPS_PLUGIN_DOMAIN) . "</span></a>" . '</div>'; $row_count = isset($_POST['row_count']) ? intval($_POST['row_count']) : 0; if ($row_count <= 0) { $row_count = Groups_Options::get_user_option('groups_per_page', GROUPS_GROUPS_PER_PAGE); } else { Groups_Options::update_user_option('groups_per_page', $row_count); } $offset = isset($_GET['offset']) ? intval($_GET['offset']) : 0; if ($offset < 0) { $offset = 0; } $paged = isset($_REQUEST['paged']) ? intval($_REQUEST['paged']) : 0; if ($paged < 0) { $paged = 0; } $orderby = isset($_GET['orderby']) ? $_GET['orderby'] : null; switch ($orderby) { case 'group_id': case 'name': break; default: $orderby = 'name'; } $order = isset($_GET['order']) ? $_GET['order'] : null; switch ($order) { case 'asc': case 'ASC': $switch_order = 'DESC'; break; case 'desc': case 'DESC': $switch_order = 'ASC'; break; default: $order = 'ASC'; $switch_order = 'DESC'; } $filters = array(" 1=%d "); $filter_params = array(1); if ($group_id) { $filters[] = " {$group_table}.group_id = %d "; $filter_params[] = $group_id; } if ($group_name) { $filters[] = " {$group_table}.name LIKE '%%%s%%' "; $filter_params[] = $group_name; } if (!empty($filters)) { $filters = " WHERE " . implode(" AND ", $filters); } else { $filters = ''; } $count_query = $wpdb->prepare("SELECT COUNT(*) FROM {$group_table} {$filters}", $filter_params); $count = $wpdb->get_var($count_query); if ($count > $row_count) { $paginate = true; } else { $paginate = false; } $pages = ceil($count / $row_count); if ($paged > $pages) { $paged = $pages; } if ($paged != 0) { $offset = ($paged - 1) * $row_count; } $query = $wpdb->prepare("SELECT * FROM {$group_table}\n\t\t{$filters}\n\t\tORDER BY {$orderby} {$order}\n\t\tLIMIT {$row_count} OFFSET {$offset}", $filter_params); $results = $wpdb->get_results($query, OBJECT); $column_display_names = array('group_id' => __('Id', GROUPS_PLUGIN_DOMAIN), 'name' => __('Group', GROUPS_PLUGIN_DOMAIN), 'description' => __('Description', GROUPS_PLUGIN_DOMAIN), 'capabilities' => __('Capabilities', GROUPS_PLUGIN_DOMAIN), 'edit' => __('Edit', GROUPS_PLUGIN_DOMAIN), 'remove' => __('Remove', GROUPS_PLUGIN_DOMAIN)); $output .= '<div class="groups-overview">'; $output .= '<div class="filters">' . '<label class="description" for="setfilters">' . __('Filters', GROUPS_PLUGIN_DOMAIN) . '</label>' . '<form id="setfilters" action="" method="post">' . '<p>' . '<label class="group-id-filter" for="group_id">' . __('Group Id', GROUPS_PLUGIN_DOMAIN) . '</label>' . '<input class="group-id-filter" name="group_id" type="text" value="' . esc_attr($group_id) . '"/>' . '<label class="group-name-filter" for="group_name">' . __('Group Name', GROUPS_PLUGIN_DOMAIN) . '</label>' . '<input class="group-name-filter" name="group_name" type="text" value="' . $group_name . '"/>' . '</p>' . '<p>' . wp_nonce_field('admin', GROUPS_ADMIN_GROUPS_FILTER_NONCE, true, false) . '<input class="button" type="submit" value="' . __('Apply', GROUPS_PLUGIN_DOMAIN) . '"/>' . '<input class="button" type="submit" name="clear_filters" value="' . __('Clear', GROUPS_PLUGIN_DOMAIN) . '"/>' . '<input type="hidden" value="submitted" name="submitted"/>' . '</p>' . '</form>' . '</div>'; if ($paginate) { require_once GROUPS_CORE_LIB . '/class-groups-pagination.php'; $pagination = new Groups_Pagination($count, null, $row_count); $output .= '<form id="posts-filter" method="post" action="">'; $output .= '<div>'; $output .= wp_nonce_field('admin', GROUPS_ADMIN_GROUPS_NONCE_2, true, false); $output .= '</div>'; $output .= '<div class="tablenav top">'; $output .= $pagination->pagination('top'); $output .= '</div>'; $output .= '</form>'; } $output .= '<div class="page-options right">'; $output .= '<form id="setrowcount" action="" method="post">'; $output .= '<div>'; $output .= '<label for="row_count">' . __('Results per page', GROUPS_PLUGIN_DOMAIN) . '</label>'; $output .= '<input name="row_count" type="text" size="2" value="' . esc_attr($row_count) . '" />'; $output .= wp_nonce_field('admin', GROUPS_ADMIN_GROUPS_NONCE_1, true, false); $output .= '<input class="button" type="submit" value="' . __('Apply', GROUPS_PLUGIN_DOMAIN) . '"/>'; $output .= '</div>'; $output .= '</form>'; $output .= '</div>'; $capability_table = _groups_get_tablename("capability"); $group_capability_table = _groups_get_tablename("group_capability"); // capabilities select $capabilities = $wpdb->get_results("SELECT * FROM {$capability_table} ORDER BY capability"); $capabilities_select = sprintf('<select class="select capability" name="capability_id[]" multiple="multiple" placeholder="%s" data-placeholder="%s">', esc_attr(__('Capabilities …', GROUPS_PLUGIN_DOMAIN)), esc_attr(__('Capabilities …', GROUPS_PLUGIN_DOMAIN))); foreach ($capabilities as $capability) { $capabilities_select .= sprintf('<option value="%s">%s</option>', esc_attr($capability->capability_id), wp_filter_nohtml_kses($capability->capability)); } $capabilities_select .= '</select>'; $capabilities_select .= Groups_UIE::render_select('.select.capability'); $output .= '<form id="groups-action" method="post" action="">'; $output .= '<div class="tablenav top">'; $output .= '<div class="groups-bulk-container">'; $output .= '<div class="capabilities-select-container">'; $output .= $capabilities_select; $output .= wp_nonce_field('admin', GROUPS_ADMIN_GROUPS_ACTION_NONCE, true, false); $output .= '</div>'; $output .= '<select class="bulk-action" name="bulk-action">'; $output .= '<option selected="selected" value="-1">' . __('Bulk Actions', GROUPS_PLUGIN_DOMAIN) . '</option>'; $output .= '<option value="remove-group">' . __('Remove group', GROUPS_PLUGIN_DOMAIN) . '</option>'; $output .= '<option value="add-capability">' . __('Add capability', GROUPS_PLUGIN_DOMAIN) . '</option>'; $output .= '<option value="remove-capability">' . __('Remove capability', GROUPS_PLUGIN_DOMAIN) . '</option>'; $output .= '</select>'; $output .= sprintf('<input class="button" type="submit" name="bulk" value="%s" />', __('Apply', GROUPS_PLUGIN_DOMAIN)); $output .= '<input type="hidden" name="action" value="groups-action"/>'; $output .= '</div>'; $output .= '</div>'; $output .= '<table id="" class="wp-list-table widefat fixed" cellspacing="0">'; $output .= '<thead>'; $output .= '<tr>'; $output .= '<th id="cb" class="manage-column column-cb check-column" scope="col"><input type="checkbox"></th>'; foreach ($column_display_names as $key => $column_display_name) { $options = array('orderby' => $key, 'order' => $switch_order); $class = $key; if (!in_array($key, array('capabilities', 'edit', 'remove'))) { if (strcmp($key, $orderby) == 0) { $lorder = strtolower($order); $class = "{$key} manage-column sorted {$lorder}"; } else { $class = "{$key} manage-column sortable"; } $column_display_name = '<a href="' . esc_url(add_query_arg($options, $current_url)) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>'; } $output .= "<th scope='col' class='{$class}'>{$column_display_name}</th>"; } $output .= '</tr>'; $output .= '</thead>'; $output .= '<tbody>'; if (count($results) > 0) { for ($i = 0; $i < count($results); $i++) { $result = $results[$i]; $output .= '<tr class="' . ($i % 2 == 0 ? 'even' : 'odd') . '">'; $output .= '<th class="check-column">'; $output .= '<input type="checkbox" value="' . esc_attr($result->group_id) . '" name="group_ids[]"/>'; $output .= '</th>'; $output .= "<td class='group-id'>"; $output .= $result->group_id; $output .= "</td>"; $output .= "<td class='group-name'>" . stripslashes(wp_filter_nohtml_kses($result->name)) . "</td>"; $output .= "<td class='group-description'>" . stripslashes(wp_filter_nohtml_kses($result->description)) . "</td>"; $output .= '<td class="capabilities">'; $group = new Groups_Group($result->group_id); $group_capabilities = $group->capabilities; $group_capabilities_deep = $group->capabilities_deep; usort($group_capabilities_deep, array('Groups_Utility', 'cmp')); if (count($group_capabilities_deep) > 0) { $output .= '<ul>'; foreach ($group_capabilities_deep as $group_capability) { $output .= '<li>'; $class = ''; if (empty($group_capabilities) || !in_array($group_capability, $group_capabilities)) { $class = 'inherited'; } $output .= sprintf('<span class="%s">', $class); if (isset($group_capability->capability) && isset($group_capability->capability->capability)) { $output .= wp_filter_nohtml_kses($group_capability->capability->capability); } $output .= '</span>'; $output .= '</li>'; } $output .= '</ul>'; } else { $output .= __('This group has no capabilities.', GROUPS_PLUGIN_DOMAIN); } $output .= '</td>'; $output .= "<td class='edit'>"; $output .= "<a href='" . esc_url(add_query_arg('paged', $paged, $current_url)) . "&action=edit&group_id=" . $result->group_id . "' alt='" . __('Edit', GROUPS_PLUGIN_DOMAIN) . "'><img src='" . GROUPS_PLUGIN_URL . "images/edit.png'/></a>"; $output .= "</td>"; $output .= "<td class='remove'>"; if ($result->name !== Groups_Registered::REGISTERED_GROUP_NAME) { $output .= "<a href='" . esc_url($current_url) . "&action=remove&group_id=" . $result->group_id . "' alt='" . __('Remove', GROUPS_PLUGIN_DOMAIN) . "'><img src='" . GROUPS_PLUGIN_URL . "images/remove.png'/></a>"; } $output .= "</td>"; $output .= '</tr>'; } } else { $output .= '<tr><td colspan="7">' . __('There are no results.', GROUPS_PLUGIN_DOMAIN) . '</td></tr>'; } $output .= '</tbody>'; $output .= '</table>'; $output .= Groups_UIE::render_add_titles('.groups-overview table td'); $output .= '</form>'; // #groups-action if ($paginate) { require_once GROUPS_CORE_LIB . '/class-groups-pagination.php'; $pagination = new Groups_Pagination($count, null, $row_count); $output .= '<div class="tablenav bottom">'; $output .= $pagination->pagination('bottom'); $output .= '</div>'; } $output .= '</div>'; // .groups-overview $output .= '</div>'; // .manage-groups echo $output; Groups_Help::footer(); }
/** * Renders custom column content. * * @param string $column_name * @param int $post_id * @return string custom column content */ public static function custom_column($column_name, $post_id) { $output = ''; switch ($column_name) { case self::CAPABILITIES: $read_caps = get_post_meta($post_id, Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY); $valid_read_caps = Groups_Options::get_option(Groups_Post_Access::READ_POST_CAPABILITIES, array(Groups_Post_Access::READ_POST_CAPABILITY)); if (count($valid_read_caps) > 0) { sort($valid_read_caps); $output = '<ul>'; foreach ($valid_read_caps as $valid_read_cap) { if ($capability = Groups_Capability::read_by_capability($valid_read_cap)) { if (in_array($valid_read_cap, $read_caps)) { $output .= '<li>'; $output .= wp_strip_all_tags($capability->capability); $output .= '</li>'; } } } $output .= '</ul>'; } else { $output .= ''; } break; } echo $output; }
* * @author itthinx */ get_header(); echo '<div id="primary" class="content-area forum">'; echo '<main id="main" class="site-main" role="main">'; // title & New Topic link if (is_tax()) { global $wp_query; if ($forum = $wp_query->get_queried_object()) { if ($forum && !is_wp_error($forum)) { echo sprintf('<h1 class="forum-title %s">%s</h1>', $forum->slug, wp_strip_all_tags($forum->name)); echo '<br/>'; $user_id = get_current_user_id(); if (Groups_Forums::user_can_post($user_id, $forum->term_id)) { $edit_topic_post_id = Groups_Options::get_option('groups-forums-edit-topic-post-id', null); if ($edit_topic_post_id) { $link = add_query_arg('forum_id', $forum->term_id, get_permalink($edit_topic_post_id)); echo '<div class="new-topic">'; echo sprintf('<a href="%s">%s</a>', $link, __('Post a new Topic', GROUPS_FORUMS_PLUGIN_DOMAIN)); echo '</div>'; echo '<br/>'; } } } } } // forum topics while (have_posts()) { the_post(); get_template_part('template-parts/content', get_post_format());
/** * Manage capabilities: table of capabilities and add, edit, remove actions. */ function groups_admin_capabilities() { global $wpdb; $output = ''; $today = date('Y-m-d', time()); if (!current_user_can(GROUPS_ADMINISTER_GROUPS)) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } // // handle actions // if (isset($_POST['action'])) { // handle action submit - do it switch ($_POST['action']) { case 'add': if (!groups_admin_capabilities_add_submit()) { return groups_admin_capabilities_add(); } break; case 'edit': if (!groups_admin_capabilities_edit_submit()) { return groups_admin_capabilities_edit($_POST['capability-id-field']); } break; case 'remove': groups_admin_capabilities_remove_submit(); break; // bulk actions on groups: capabilities // bulk actions on groups: capabilities case 'groups-action': // if ( wp_verify_nonce( $_POST[GROUPS_ADMIN_CAPABILITIES_ACTION_NONCE], 'admin' ) ) { // $group_ids = isset( $_POST['group_ids'] ) ? $_POST['group_ids'] : null; // $subaction = isset( $_POST['add'] ) ? $_POST['add'] : ( isset( $_POST['remove'] ) ? $_POST['remove'] : null ); // $capability_id = isset( $_POST['capability_id'] ) ? $_POST['capability_id'] : null; // if ( is_array( $group_ids ) && ( $subaction !== null ) && ( $capability_id !== null ) ) { // foreach ( $group_ids as $group_id ) { // switch ( $subaction ) { // case 'Add' : // Groups_Group_Capability::create( array( 'group_id' => $group_id, 'capability_id' => $capability_id ) ); // break; // case 'Remove' : // Groups_Group_Capability::delete( $group_id, $capability_id ); // break; // } // } // } // } break; } } else { if (isset($_GET['action'])) { // handle action request - show form switch ($_GET['action']) { case 'add': return groups_admin_capabilities_add(); break; case 'edit': if (isset($_GET['capability_id'])) { return groups_admin_capabilities_edit($_GET['capability_id']); } break; case 'remove': if (isset($_GET['capability_id'])) { return groups_admin_capabilities_remove($_GET['capability_id']); } break; case 'refresh': if (check_admin_referer('refresh')) { $n = Groups_WordPress::refresh_capabilities(); if ($n > 0) { $output .= '<div class="info">' . sprintf(_n('One capability has been added.', '%d capabilities have been added.', $n, GROUPS_PLUGIN_DOMAIN), $n) . '</div>'; } else { $output .= '<div class="info">' . __('No new capabilities have been found.', GROUPS_PLUGIN_DOMAIN) . '</div>'; } } else { wp_die(__('A Duck!', GROUPS_PLUGIN_DOMAIN)); } break; } } } // // capabilities table // if (isset($_POST['clear_filters']) || isset($_POST['capability_id']) || isset($_POST['capability'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_CAPABILITIES_FILTER_NONCE], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } // filters $capability_id = Groups_Options::get_user_option('capabilities_capability_id', null); $capability = Groups_Options::get_user_option('capabilities_capability', null); if (isset($_POST['clear_filters'])) { Groups_Options::delete_user_option('capabilities_capability_id'); Groups_Options::delete_user_option('capabilities_capability'); $capability_id = null; $capability = null; } else { if (isset($_POST['submitted'])) { // filter by name if (!empty($_POST['capability'])) { $capability = $_POST['capability']; Groups_Options::update_user_option('capabilities_capability', $capability); } // filter by capability id if (!empty($_POST['capability_id'])) { $capability_id = intval($_POST['capability_id']); Groups_Options::update_user_option('capabilities_capability_id', $capability_id); } else { if (isset($_POST['capability_id'])) { // empty && isset => '' => all $capability_id = null; Groups_Options::delete_user_option('capabilities_capability_id'); } } } } if (isset($_POST['row_count'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_CAPABILITIES_NONCE_1], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } if (isset($_POST['paged'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_CAPABILITIES_NONCE_2], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg('paged', $current_url); $current_url = remove_query_arg('action', $current_url); $current_url = remove_query_arg('capability_id', $current_url); $capability_table = _groups_get_tablename('capability'); $output .= '<div class="manage-capabilities">' . '<div>' . '<h2>' . __('Capabilities', GROUPS_PLUGIN_DOMAIN) . '</h2>' . '</div>'; $output .= '<div class="manage">' . "<a title='" . __('Click to add a new capability', GROUPS_PLUGIN_DOMAIN) . "' class='add button' href='" . esc_url($current_url) . "&action=add'><img class='icon' alt='" . __('Add', GROUPS_PLUGIN_DOMAIN) . "' src='" . GROUPS_PLUGIN_URL . "images/add.png'/><span class='label'>" . __('New Capability', GROUPS_PLUGIN_DOMAIN) . "</span></a>" . "<a title='" . __('Click to refresh capabilities', GROUPS_PLUGIN_DOMAIN) . "' class='refresh button' href='" . esc_url(wp_nonce_url($current_url, 'refresh')) . "&action=refresh'><img class='icon' alt='" . __('Refresh', GROUPS_PLUGIN_DOMAIN) . "' src='" . GROUPS_PLUGIN_URL . "images/refresh.png'/><span class='label'>" . __('', GROUPS_PLUGIN_DOMAIN) . "</span></a>" . '</div>'; $row_count = isset($_POST['row_count']) ? intval($_POST['row_count']) : 0; if ($row_count <= 0) { $row_count = Groups_Options::get_user_option('capabilities_per_page', GROUPS_CAPABILITIES_PER_PAGE); } else { Groups_Options::update_user_option('capabilities_per_page', $row_count); } $offset = isset($_GET['offset']) ? intval($_GET['offset']) : 0; if ($offset < 0) { $offset = 0; } $paged = isset($_GET['paged']) ? intval($_GET['paged']) : 0; if ($paged < 0) { $paged = 0; } $orderby = isset($_GET['orderby']) ? $_GET['orderby'] : null; switch ($orderby) { case 'capability_id': case 'capability': break; default: $orderby = 'name'; } $order = isset($_GET['order']) ? $_GET['order'] : null; switch ($order) { case 'asc': case 'ASC': $switch_order = 'DESC'; break; case 'desc': case 'DESC': $switch_order = 'ASC'; break; default: $order = 'ASC'; $switch_order = 'DESC'; } $filters = array(); $filter_params = array(); if ($capability_id) { $filters[] = " {$capability_table}.capability_id = %d "; $filter_params[] = $capability_id; } if ($capability) { $filters[] = " {$capability_table}.capability LIKE '%%%s%%' "; $filter_params[] = $capability; } if (!empty($filters)) { $filters = " WHERE " . implode(" AND ", $filters); } else { $filters = ''; } $count_query = $wpdb->prepare("SELECT COUNT(*) FROM {$capability_table} {$filters}", $filter_params); $count = $wpdb->get_var($count_query); if ($count > $row_count) { $paginate = true; } else { $paginate = false; } $pages = ceil($count / $row_count); if ($paged > $pages) { $paged = $pages; } if ($paged != 0) { $offset = ($paged - 1) * $row_count; } $query = $wpdb->prepare("SELECT * FROM {$capability_table}\n\t\t{$filters}\n\t\tORDER BY {$orderby} {$order}\n\t\tLIMIT {$row_count} OFFSET {$offset}", $filter_params); $results = $wpdb->get_results($query, OBJECT); $column_display_names = array('capability_id' => __('Id', GROUPS_PLUGIN_DOMAIN), 'capability' => __('Capability', GROUPS_PLUGIN_DOMAIN), 'description' => __('Description', GROUPS_PLUGIN_DOMAIN), 'edit' => __('Edit', GROUPS_PLUGIN_DOMAIN), 'remove' => __('Remove', GROUPS_PLUGIN_DOMAIN)); $output .= '<div class="capabilities-overview">'; $output .= '<div class="filters">' . '<label class="description" for="setfilters">' . __('Filters', GROUPS_PLUGIN_DOMAIN) . '</label>' . '<form id="setfilters" action="" method="post">' . '<p>' . '<label class="capability-id-filter" for="capability_id">' . __('Capability Id', GROUPS_PLUGIN_DOMAIN) . '</label>' . '<input class="capability-id-filter" name="capability_id" type="text" value="' . esc_attr($capability_id) . '"/>' . '<label class="capability-filter" for="capability">' . __('Capability', GROUPS_PLUGIN_DOMAIN) . '</label>' . '<input class="capability-filter" name="capability" type="text" value="' . $capability . '"/>' . '</p>' . '<p>' . wp_nonce_field('admin', GROUPS_ADMIN_CAPABILITIES_FILTER_NONCE, true, false) . '<input class="button" type="submit" value="' . __('Apply', GROUPS_PLUGIN_DOMAIN) . '"/>' . '<input class="button" type="submit" name="clear_filters" value="' . __('Clear', GROUPS_PLUGIN_DOMAIN) . '"/>' . '<input type="hidden" value="submitted" name="submitted"/>' . '</p>' . '</form>' . '</div>'; $output .= ' <div class="page-options"> <form id="setrowcount" action="" method="post"> <div> <label for="row_count">' . __('Results per page', GROUPS_PLUGIN_DOMAIN) . '</label>' . '<input name="row_count" type="text" size="2" value="' . esc_attr($row_count) . '" /> ' . wp_nonce_field('admin', GROUPS_ADMIN_CAPABILITIES_NONCE_1, true, false) . ' <input class="button" type="submit" value="' . __('Apply', GROUPS_PLUGIN_DOMAIN) . '"/> </div> </form> </div> '; if ($paginate) { require_once GROUPS_CORE_LIB . '/class-groups-pagination.php'; $pagination = new Groups_Pagination($count, null, $row_count); $output .= '<form id="posts-filter" method="post" action="">'; $output .= '<div>'; $output .= wp_nonce_field('admin', GROUPS_ADMIN_CAPABILITIES_NONCE_2, true, false); $output .= '</div>'; $output .= '<div class="tablenav top">'; $output .= $pagination->pagination('top'); $output .= '</div>'; $output .= '</form>'; } // $capability_table = _groups_get_tablename( "capability" ); // $group_capability_table = _groups_get_tablename( "group_capability" ); // // capabilities select // $capabilities_select = '<select name="capability_id">'; // $capabilities = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $capability_table ORDER BY capability" ) ); // foreach( $capabilities as $capability ) { // $capabilities_select .= '<option value="' . esc_attr( $capability->capability_id ) . '">' . wp_filter_nohtml_kses( $capability->capability ) . '</option>'; // } // $capabilities_select .= '</select>'; // $output .= '<form id="groups-action" method="post" action="">'; // $output .= '<div class="tablenav top">'; // $output .= '<div class="alignleft">'; // $output .= __( "Apply capability to selected groups:", GROUPS_PLUGIN_DOMAIN ); // $output .= $capabilities_select; // $output .= '<input class="button" type="submit" name="add" value="' . __( "Add", GROUPS_PLUGIN_DOMAIN ) . '"/>'; // $output .= '<input class="button" type="submit" name="remove" value="' . __( "Remove", GROUPS_PLUGIN_DOMAIN ) . '"/>'; // $output .= wp_nonce_field( 'admin', GROUPS_ADMIN_CAPABILITIES_ACTION_NONCE, true, false ); // $output .= '<input type="hidden" name="action" value="groups-action"/>'; // $output .= '</div>'; // .alignleft // $output .= '</div>'; // .tablenav.top $output .= ' <table id="" class="wp-list-table widefat fixed" cellspacing="0"> <thead> <tr> '; $output .= '<th id="cb" class="manage-column column-cb check-column" scope="col"><input type="checkbox"></th>'; foreach ($column_display_names as $key => $column_display_name) { $options = array('orderby' => $key, 'order' => $switch_order); $class = $key; if (!in_array($key, array('capabilities', 'edit', 'remove'))) { if (strcmp($key, $orderby) == 0) { $lorder = strtolower($order); $class = "{$key} manage-column sorted {$lorder}"; } else { $class = "{$key} manage-column sortable"; } $column_display_name = '<a href="' . esc_url(add_query_arg($options, $current_url)) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>'; } $output .= "<th scope='col' class='{$class}'>{$column_display_name}</th>"; } $output .= '</tr> </thead> <tbody> '; if (count($results) > 0) { for ($i = 0; $i < count($results); $i++) { $result = $results[$i]; $output .= '<tr class="' . ($i % 2 == 0 ? 'even' : 'odd') . '">'; $output .= '<th class="check-column">'; $output .= '<input type="checkbox" value="' . esc_attr($result->capability_id) . '" name="capability_ids[]"/>'; $output .= '</th>'; $output .= "<td class='capability-id'>"; $output .= $result->capability_id; $output .= "</td>"; $output .= "<td class='capability'>" . stripslashes(wp_filter_nohtml_kses($result->capability)) . "</td>"; $output .= "<td class='description'>" . stripslashes(wp_filter_nohtml_kses($result->description)) . "</td>"; $output .= "<td class='edit'>"; $output .= "<a href='" . esc_url(add_query_arg('paged', $paged, $current_url)) . "&action=edit&capability_id=" . $result->capability_id . "' alt='" . __('Edit', GROUPS_PLUGIN_DOMAIN) . "'><img src='" . GROUPS_PLUGIN_URL . "images/edit.png'/></a>"; $output .= "</td>"; $output .= "<td class='remove'>"; if ($result->capability !== Groups_Post_Access::READ_POST_CAPABILITY) { $output .= "<a href='" . esc_url($current_url) . "&action=remove&capability_id=" . $result->capability_id . "' alt='" . __('Remove', GROUPS_PLUGIN_DOMAIN) . "'><img src='" . GROUPS_PLUGIN_URL . "images/remove.png'/></a>"; } $output .= "</td>"; $output .= '</tr>'; } } else { $output .= '<tr><td colspan="10">' . __('There are no results.', GROUPS_PLUGIN_DOMAIN) . '</td></tr>'; } $output .= '</tbody>'; $output .= '</table>'; // $output .= '</form>'; // #groups-action if ($paginate) { require_once GROUPS_CORE_LIB . '/class-groups-pagination.php'; $pagination = new Groups_Pagination($count, null, $row_count); $output .= '<div class="tablenav bottom">'; $output .= $pagination->pagination('bottom'); $output .= '</div>'; } $output .= '</div>'; // .capabilities-overview $output .= '</div>'; // .manage-capabilities echo $output; Groups_Help::footer(); }
/** * Manage capabilities: table of capabilities and add, edit, remove actions. */ function groups_admin_capabilities() { global $wpdb; $output = ''; $today = date('Y-m-d', time()); if (!current_user_can(GROUPS_ADMINISTER_GROUPS)) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } // // handle actions // if (isset($_POST['action'])) { // handle action submit - do it switch ($_POST['action']) { case 'add': if (!($capability_id = groups_admin_capabilities_add_submit())) { return groups_admin_capabilities_add(); } else { $capability = Groups_Capability::read($capability_id); Groups_Admin::add_message(sprintf(__('The <em>%s</em> capability has been created.', GROUPS_PLUGIN_DOMAIN), stripslashes(wp_filter_nohtml_kses($capability->capability)))); } break; case 'edit': if (!($capability_id = groups_admin_capabilities_edit_submit())) { return groups_admin_capabilities_edit($_POST['capability-id-field']); } else { $capability = Groups_Capability::read($capability_id); Groups_Admin::add_message(sprintf(__('The <em>%s</em> capability has been updated.', GROUPS_PLUGIN_DOMAIN), stripslashes(wp_filter_nohtml_kses($capability->capability)))); } break; case 'remove': if ($capability_id = groups_admin_capabilities_remove_submit()) { Groups_Admin::add_message(__('The capability has been deleted.', GROUPS_PLUGIN_DOMAIN)); } break; // bulk actions on groups: capabilities // bulk actions on groups: capabilities case 'groups-action': if (wp_verify_nonce($_POST[GROUPS_ADMIN_GROUPS_ACTION_NONCE], 'admin')) { $capability_ids = isset($_POST['capability_ids']) ? $_POST['capability_ids'] : null; $bulk = isset($_POST['bulk']) ? $_POST['bulk'] : null; if (is_array($capability_ids) && $bulk !== null) { foreach ($capability_ids as $capability_id) { $bulk_action = isset($_POST['bulk-action']) ? $_POST['bulk-action'] : null; switch ($bulk_action) { case 'remove': if (isset($_POST['confirm'])) { groups_admin_capabilities_bulk_remove_submit(); } else { return groups_admin_capabilities_bulk_remove(); } break; } break; } } } break; } } else { if (isset($_GET['action'])) { // handle action request - show form switch ($_GET['action']) { case 'add': return groups_admin_capabilities_add(); break; case 'edit': if (isset($_GET['capability_id'])) { return groups_admin_capabilities_edit($_GET['capability_id']); } break; case 'remove': if (isset($_GET['capability_id'])) { return groups_admin_capabilities_remove($_GET['capability_id']); } break; case 'refresh': if (check_admin_referer('refresh')) { $n = Groups_WordPress::refresh_capabilities(); if ($n > 0) { $output .= '<div class="updated fade"><p>' . sprintf(_n('One capability has been added.', '%d capabilities have been added.', $n, GROUPS_PLUGIN_DOMAIN), $n) . '</p></div>'; } else { $output .= '<div class="updated fade"><p>' . __('No new capabilities have been found.', GROUPS_PLUGIN_DOMAIN) . '</p></div>'; } } else { wp_die(__('A Duck!', GROUPS_PLUGIN_DOMAIN)); } break; } } } // // capabilities table // if (isset($_POST['clear_filters']) || isset($_POST['capability_id']) || isset($_POST['capability'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_CAPABILITIES_FILTER_NONCE], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } // filters $capability_id = Groups_Options::get_user_option('capabilities_capability_id', null); $capability = Groups_Options::get_user_option('capabilities_capability', null); if (isset($_POST['clear_filters'])) { Groups_Options::delete_user_option('capabilities_capability_id'); Groups_Options::delete_user_option('capabilities_capability'); $capability_id = null; $capability = null; } else { if (isset($_POST['submitted'])) { // filter by name if (!empty($_POST['capability'])) { $capability = $_POST['capability']; Groups_Options::update_user_option('capabilities_capability', $capability); } // filter by capability id if (!empty($_POST['capability_id'])) { $capability_id = intval($_POST['capability_id']); Groups_Options::update_user_option('capabilities_capability_id', $capability_id); } else { if (isset($_POST['capability_id'])) { // empty && isset => '' => all $capability_id = null; Groups_Options::delete_user_option('capabilities_capability_id'); } } } } if (isset($_POST['row_count'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_CAPABILITIES_NONCE_1], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } if (isset($_POST['paged'])) { if (!wp_verify_nonce($_POST[GROUPS_ADMIN_CAPABILITIES_NONCE_2], 'admin')) { wp_die(__('Access denied.', GROUPS_PLUGIN_DOMAIN)); } } $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg('paged', $current_url); $current_url = remove_query_arg('action', $current_url); $current_url = remove_query_arg('capability_id', $current_url); $capability_table = _groups_get_tablename('capability'); $output .= '<div class="manage-capabilities wrap">' . '<h1>' . __('Capabilities', GROUPS_PLUGIN_DOMAIN) . sprintf('<a title="%s" class="add page-title-action" href="%s">', esc_attr(__('Click to add a new capability', GROUPS_PLUGIN_DOMAIN)), esc_url($current_url . '&action=add')) . sprintf('<img class="icon" alt="%s" src="%s" />', esc_attr(__('Add', GROUPS_PLUGIN_DOMAIN)), esc_url(GROUPS_PLUGIN_URL . 'images/add.png')) . sprintf('<span class="label">%s</span>', stripslashes(wp_filter_nohtml_kses(__('New Capability', GROUPS_PLUGIN_DOMAIN)))) . '</a>' . sprintf('<a title="%s" class="refresh page-title-action" href="%s">', esc_attr(__('Click to refresh capabilities', GROUPS_PLUGIN_DOMAIN)), esc_url(wp_nonce_url($current_url . '&action=refresh', 'refresh'))) . sprintf('<img class="icon" alt="%s" src="%s" />', esc_attr(__('Refresh', GROUPS_PLUGIN_DOMAIN)), esc_url(GROUPS_PLUGIN_URL . 'images/refresh.png')) . sprintf('<span class="label">%s</span>', stripslashes(wp_filter_nohtml_kses(__('Refresh', GROUPS_PLUGIN_DOMAIN)))) . '</a>' . '</h1>'; $output .= Groups_Admin::render_messages(); $row_count = isset($_POST['row_count']) ? intval($_POST['row_count']) : 0; if ($row_count <= 0) { $row_count = Groups_Options::get_user_option('capabilities_per_page', GROUPS_CAPABILITIES_PER_PAGE); } else { Groups_Options::update_user_option('capabilities_per_page', $row_count); } $offset = isset($_GET['offset']) ? intval($_GET['offset']) : 0; if ($offset < 0) { $offset = 0; } $paged = isset($_REQUEST['paged']) ? intval($_REQUEST['paged']) : 0; if ($paged < 0) { $paged = 0; } $orderby = isset($_GET['orderby']) ? $_GET['orderby'] : null; switch ($orderby) { case 'capability_id': case 'capability': case 'description': break; default: $orderby = 'name'; } $order = isset($_GET['order']) ? $_GET['order'] : null; switch ($order) { case 'asc': case 'ASC': $switch_order = 'DESC'; break; case 'desc': case 'DESC': $switch_order = 'ASC'; break; default: $order = 'ASC'; $switch_order = 'DESC'; } $filters = array(" 1=%d "); $filter_params = array(1); if ($capability_id) { $filters[] = " {$capability_table}.capability_id = %d "; $filter_params[] = $capability_id; } if ($capability) { $filters[] = " {$capability_table}.capability LIKE '%%%s%%' "; $filter_params[] = $capability; } if (!empty($filters)) { $filters = " WHERE " . implode(" AND ", $filters); } else { $filters = ''; } $count_query = $wpdb->prepare("SELECT COUNT(*) FROM {$capability_table} {$filters}", $filter_params); $count = $wpdb->get_var($count_query); if ($count > $row_count) { $paginate = true; } else { $paginate = false; } $pages = ceil($count / $row_count); if ($paged > $pages) { $paged = $pages; } if ($paged != 0) { $offset = ($paged - 1) * $row_count; } $query = $wpdb->prepare("SELECT * FROM {$capability_table}\n\t\t{$filters}\n\t\tORDER BY {$orderby} {$order}\n\t\tLIMIT {$row_count} OFFSET {$offset}", $filter_params); $results = $wpdb->get_results($query, OBJECT); $column_display_names = array('capability_id' => __('ID', GROUPS_PLUGIN_DOMAIN), 'capability' => __('Capability', GROUPS_PLUGIN_DOMAIN), 'description' => __('Description', GROUPS_PLUGIN_DOMAIN)); $output .= '<div class="capabilities-overview">'; $output .= '<div class="filters">' . '<form id="setfilters" action="" method="post">' . '<fieldset>' . '<legend>' . __('Filters', GROUPS_PLUGIN_DOMAIN) . '</legend>' . '<label class="capability-id-filter">' . __('Capability ID', GROUPS_PLUGIN_DOMAIN) . ' ' . '<input class="capability-id-filter" name="capability_id" type="text" value="' . esc_attr($capability_id) . '"/>' . '</label>' . ' ' . '<label class="capability-filter">' . __('Capability', GROUPS_PLUGIN_DOMAIN) . ' ' . '<input class="capability-filter" name="capability" type="text" value="' . $capability . '"/>' . '</label>' . ' ' . wp_nonce_field('admin', GROUPS_ADMIN_CAPABILITIES_FILTER_NONCE, true, false) . '<input class="button" type="submit" value="' . __('Apply', GROUPS_PLUGIN_DOMAIN) . '"/>' . ' ' . '<input class="button" type="submit" name="clear_filters" value="' . __('Clear', GROUPS_PLUGIN_DOMAIN) . '"/>' . '<input type="hidden" value="submitted" name="submitted"/>' . '</fieldset>' . '</form>' . '</div>'; if ($paginate) { require_once GROUPS_CORE_LIB . '/class-groups-pagination.php'; $pagination = new Groups_Pagination($count, null, $row_count); $output .= '<form id="posts-filter" method="post" action="">'; $output .= '<div>'; $output .= wp_nonce_field('admin', GROUPS_ADMIN_CAPABILITIES_NONCE_2, true, false); $output .= '</div>'; $output .= '<div class="tablenav top">'; $output .= $pagination->pagination('top'); $output .= '</div>'; $output .= '</form>'; } $output .= '<div class="page-options right">'; $output .= '<form id="setrowcount" action="" method="post">'; $output .= '<div>'; $output .= '<label for="row_count">' . __('Results per page', GROUPS_PLUGIN_DOMAIN) . '</label>'; $output .= '<input name="row_count" type="text" size="2" value="' . esc_attr($row_count) . '" />'; $output .= wp_nonce_field('admin', GROUPS_ADMIN_CAPABILITIES_NONCE_1, true, false); $output .= '<input class="button" type="submit" value="' . __('Apply', GROUPS_PLUGIN_DOMAIN) . '"/>'; $output .= '</div>'; $output .= '</form>'; $output .= '</div>'; $output .= '<form id="groups-action" method="post" action="">'; $output .= '<div class="tablenav top">'; $output .= '<div class="capabilities-bulk-container">'; $output .= '<div class="alignleft actions">'; $output .= '<select name="bulk-action">'; $output .= '<option selected="selected" value="-1">' . esc_html(__('Bulk Actions', GROUPS_PLUGIN_DOMAIN)) . '</option>'; $output .= '<option value="remove">' . esc_html(__('Remove', GROUPS_PLUGIN_DOMAIN)) . '</option>'; $output .= '</select>'; $output .= '<input class="button" type="submit" name="bulk" value="' . esc_attr(__("Apply", GROUPS_PLUGIN_DOMAIN)) . '"/>'; $output .= '</div>'; $output .= '</div>'; $output .= '</div>'; $output .= wp_nonce_field('admin', GROUPS_ADMIN_GROUPS_ACTION_NONCE, true, false); $output .= '<input type="hidden" name="action" value="groups-action"/>'; $output .= '<table id="" class="wp-list-table widefat fixed" cellspacing="0">'; $output .= '<thead>'; $output .= '<tr>'; $output .= '<th id="cb" class="manage-column column-cb check-column" scope="col"><input type="checkbox"></th>'; foreach ($column_display_names as $key => $column_display_name) { $options = array('orderby' => $key, 'order' => $switch_order); $class = $key; if (!in_array($key, array('capabilities', 'edit', 'remove'))) { if (strcmp($key, $orderby) == 0) { $lorder = strtolower($order); $class = "{$key} manage-column sorted {$lorder}"; } else { $class = "{$key} manage-column sortable"; } $column_display_name = sprintf('<a href="%s"><span>%s</span><span class="sorting-indicator"></span></a>', esc_url(add_query_arg($options, $current_url)), esc_html($column_display_name)); } else { $column_display_name = esc_html($column_display_name); } $output .= sprintf('<th scope="col" class="%s">%s</th>', esc_attr($class), $column_display_name); } $output .= '</tr>'; $output .= '</thead>'; $output .= '<tbody>'; if (count($results) > 0) { for ($i = 0; $i < count($results); $i++) { $result = $results[$i]; // Construct the "edit" URL. $edit_url = add_query_arg(array('capability_id' => intval($result->capability_id), 'action' => 'edit', 'paged' => $paged), $current_url); // Construct the "delete" URL. $delete_url = add_query_arg(array('capability_id' => intval($result->capability_id), 'action' => 'remove', 'paged' => $paged), $current_url); // Construct row actions for this group. $row_actions = '<div class="row-actions">' . '<span class="edit">' . '<a href="' . esc_url($edit_url) . '">' . '<img src="' . GROUPS_PLUGIN_URL . 'images/edit.png"/>' . __('Edit', GROUPS_PLUGIN_DOMAIN) . '</a>'; if ($result->capability !== Groups_Post_Access::READ_POST_CAPABILITY) { $row_actions .= ' | ' . '</span>' . '<span class="remove trash">' . '<a href="' . esc_url($delete_url) . '" class="submitdelete">' . '<img src="' . GROUPS_PLUGIN_URL . 'images/remove.png"/>' . __('Remove', GROUPS_PLUGIN_DOMAIN) . '</a>' . '</span>'; } $row_actions .= '</div>'; // .row-actions $output .= '<tr class="' . ($i % 2 == 0 ? 'even' : 'odd') . '">'; $output .= '<th class="check-column">'; $output .= '<input type="checkbox" value="' . esc_attr($result->capability_id) . '" name="capability_ids[]"/>'; $output .= '</th>'; $output .= '<td class="capability-id">'; $output .= $result->capability_id; $output .= '</td>'; $output .= '<td class="capability">'; $output .= sprintf('<a href="%s">%s</a>', esc_url($edit_url), stripslashes(wp_filter_nohtml_kses($result->capability))); $output .= $row_actions; $output .= '</td>'; $output .= '<td class="description">'; $output .= stripslashes(wp_filter_nohtml_kses($result->description)); $output .= '</td>'; $output .= '</tr>'; } } else { $output .= '<tr><td colspan="3">' . __('There are no results.', GROUPS_PLUGIN_DOMAIN) . '</td></tr>'; } $output .= '</tbody>'; $output .= '</table>'; $output .= Groups_UIE::render_add_titles('.capabilities-overview table td'); $output .= '</form>'; // #groups-action if ($paginate) { require_once GROUPS_CORE_LIB . '/class-groups-pagination.php'; $pagination = new Groups_Pagination($count, null, $row_count); $output .= '<div class="tablenav bottom">'; $output .= $pagination->pagination('bottom'); $output .= '</div>'; } $output .= '</div>'; // .capabilities-overview $output .= '</div>'; // .manage-capabilities echo $output; }
/** * Query modifier to take the selected access restriction capability into * account. * * @param WP_Query $query query object passed by reference */ public static function parse_query(&$query) { global $pagenow; if (is_admin()) { if ($pagenow == 'edit.php') { // check that we're on the right screen $post_type = isset($_GET['post_type']) ? $_GET['post_type'] : 'post'; $post_types_option = Groups_Options::get_option(Groups_Post_Access::POST_TYPES, array()); if (!isset($post_types_option[$post_type]['add_meta_box']) || $post_types_option[$post_type]['add_meta_box']) { if (!empty($_GET[Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY]) && is_array($_GET[Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY])) { $include_unrestricted = false; if (in_array(self::NOT_RESTRICTED, $_GET[Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY])) { $include_unrestricted = true; } $capabilities = array(); foreach ($_GET[Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY] as $capability) { if (Groups_Capability::read_by_capability($capability)) { $capabilities[] = $capability; } } if (!empty($capabilities)) { if ($include_unrestricted) { // meta_query does not handle a conjunction // on the same meta field correctly // (at least not up to WordPress 3.7.1) // $query->query_vars['meta_query'] = array ( // 'relation' => 'OR', // array ( // 'key' => Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY, // 'value' => $capabilities, // 'compare' => 'IN' // ), // array ( // 'key' => Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY, // 'compare' => 'NOT EXISTS' // ) // ); // we'll limit it to show just unrestricted entries // until the above is solved $query->query_vars['meta_query'] = array(array('key' => Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY, 'compare' => 'NOT EXISTS')); } else { $query->query_vars['meta_query'] = array(array('key' => Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY, 'value' => $capabilities, 'compare' => 'IN')); } } else { if ($include_unrestricted) { $query->query_vars['meta_query'] = array(array('key' => Groups_Post_Access::POSTMETA_PREFIX . Groups_Post_Access::READ_POST_CAPABILITY, 'compare' => 'NOT EXISTS')); } } } } } } }
/** * Admin menu. */ public static function admin_menu() { include_once GROUPS_ADMIN_LIB . '/groups-admin-groups.php'; include_once GROUPS_ADMIN_LIB . '/groups-admin-capabilities.php'; include_once GROUPS_ADMIN_LIB . '/groups-admin-options.php'; $pages = array(); // main $page = add_menu_page(__('Groups', GROUPS_PLUGIN_DOMAIN), __('Groups', GROUPS_PLUGIN_DOMAIN), GROUPS_ADMINISTER_GROUPS, 'groups-admin', apply_filters('groups_add_menu_page_function', 'groups_admin_groups'), GROUPS_PLUGIN_URL . '/images/groups.png'); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); $show_tree_view = Groups_Options::get_option(GROUPS_SHOW_TREE_VIEW, GROUPS_SHOW_TREE_VIEW_DEFAULT); if ($show_tree_view) { include_once GROUPS_ADMIN_LIB . '/groups-admin-tree-view.php'; $page = add_submenu_page('groups-admin', __('Tree', GROUPS_PLUGIN_DOMAIN), __('Tree', GROUPS_PLUGIN_DOMAIN), GROUPS_ACCESS_GROUPS, 'groups-admin-tree-view', apply_filters('groups_add_submenu_page_function', 'groups_admin_tree_view')); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); } // capabilities $page = add_submenu_page('groups-admin', __('Groups Capabilities', GROUPS_PLUGIN_DOMAIN), __('Capabilities', GROUPS_PLUGIN_DOMAIN), GROUPS_ADMINISTER_GROUPS, 'groups-admin-capabilities', apply_filters('groups_add_submenu_page_function', 'groups_admin_capabilities')); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); // options $page = add_submenu_page('groups-admin', __('Groups options', GROUPS_PLUGIN_DOMAIN), __('Options', GROUPS_PLUGIN_DOMAIN), GROUPS_ADMINISTER_OPTIONS, 'groups-admin-options', apply_filters('groups_add_submenu_page_function', 'groups_admin_options')); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); do_action('groups_admin_menu', $pages); }
/** * Admin menu. */ public static function admin_menu() { include_once GROUPS_ADMIN_LIB . '/groups-admin-groups.php'; include_once GROUPS_ADMIN_LIB . '/groups-admin-capabilities.php'; include_once GROUPS_ADMIN_LIB . '/groups-admin-options.php'; $pages = array(); // main $page = add_menu_page(_x('Groups', 'page-title', GROUPS_PLUGIN_DOMAIN), _x('Groups', 'menu-title', GROUPS_PLUGIN_DOMAIN), GROUPS_ADMINISTER_GROUPS, 'groups-admin', apply_filters('groups_add_menu_page_function', 'groups_admin_groups'), GROUPS_PLUGIN_URL . '/images/groups.png', self::MENU_POSITION); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); if (isset($_POST[GROUPS_ADMIN_OPTIONS_NONCE]) && wp_verify_nonce($_POST[GROUPS_ADMIN_OPTIONS_NONCE], 'admin')) { $show_tree_view = !empty($_POST[GROUPS_SHOW_TREE_VIEW]); } else { $show_tree_view = Groups_Options::get_option(GROUPS_SHOW_TREE_VIEW, GROUPS_SHOW_TREE_VIEW_DEFAULT); } if ($show_tree_view) { include_once GROUPS_ADMIN_LIB . '/groups-admin-tree-view.php'; $page = add_submenu_page('groups-admin', __('Tree', GROUPS_PLUGIN_DOMAIN), __('Tree', GROUPS_PLUGIN_DOMAIN), GROUPS_ACCESS_GROUPS, 'groups-admin-tree-view', apply_filters('groups_add_submenu_page_function', 'groups_admin_tree_view')); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); } // capabilities $page = add_submenu_page('groups-admin', __('Groups Capabilities', GROUPS_PLUGIN_DOMAIN), __('Capabilities', GROUPS_PLUGIN_DOMAIN), GROUPS_ADMINISTER_GROUPS, 'groups-admin-capabilities', apply_filters('groups_add_submenu_page_function', 'groups_admin_capabilities')); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); // options $page = add_submenu_page('groups-admin', __('Groups options', GROUPS_PLUGIN_DOMAIN), __('Options', GROUPS_PLUGIN_DOMAIN), GROUPS_ADMINISTER_OPTIONS, 'groups-admin-options', apply_filters('groups_add_submenu_page_function', 'groups_admin_options')); $pages[] = $page; add_action('admin_print_styles-' . $page, array(__CLASS__, 'admin_print_styles')); add_action('admin_print_scripts-' . $page, array(__CLASS__, 'admin_print_scripts')); do_action('groups_admin_menu', $pages); }