/**
 * 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/>';
                    }
                }
            }
        }
    }
}
Beispiel #2
0
    {
        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'));
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #11
0
 /**
  * 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);
 }