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