$groups_user = new Groups_User($user_id); $read_caps = self::get_read_post_capabilities($post_id); if (!empty($read_caps)) { foreach ($read_caps as $read_cap) { if ($groups_user->can($read_cap)) { $result = true; break; } } } else { $result = true; } $result = apply_filters('groups_post_access_user_can_read_post', $result, $post_id, $user_id); Groups_Cache::set(self::CAN_READ_POST . '_' . $user_id . '_' . $post_id, $result, self::CACHE_GROUP); } } return $result; } /** * Hooks into groups_deleted_capability_capability to remove existing access * restrictions based on the deleted capability. * * @param string $name of the deleted capability */ public static function groups_deleted_capability_capability($capability) { delete_metadata('post', null, self::POSTMETA_PREFIX . self::READ_POST_CAPABILITY, $capability, true); } } Groups_Post_Access::init();
function ml_subscriptions_post_capabilities($post) { $capabilities = array(); foreach (Groups_Post_Access::get_read_post_capabilities($post->ID) as $capability) { if ($capability != NULL) { $capabilities[] = $capability; } } return $capabilities; }
function gpbbp_apply_capabilities_from_forum($post_id, $forum_id) { $forum_capabilities = Groups_Post_access::get_read_post_capabilities($forum_id); if (!is_array($forum_capabilities)) { return; } foreach ($forum_capabilities as $capability) { Groups_Post_Access::create(array('post_id' => $post_id, 'capability' => $capability)); } unset($capability); }
/** * 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 activation work. */ private static function setup() { global $wpdb, $wp_roles; // create WP capabilities Groups_Controller::set_default_capabilities(); $charset_collate = ''; if (!empty($wpdb->charset)) { $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset}"; } if (!empty($wpdb->collate)) { $charset_collate .= " COLLATE {$wpdb->collate}"; } // create tables $group_table = _groups_get_tablename('group'); if ($wpdb->get_var("SHOW TABLES LIKE '{$group_table}'") != $group_table) { $queries[] = "CREATE TABLE {$group_table} (\n\t\t\t\tgroup_id BIGINT(20) UNSIGNED NOT NULL auto_increment,\n\t\t\t\tparent_id BIGINT(20) DEFAULT NULL,\n\t\t\t\tcreator_id BIGINT(20) DEFAULT NULL,\n\t\t\t\tdatetime DATETIME DEFAULT NULL,\n\t\t\t\tname VARCHAR(100) NOT NULL,\n\t\t\t\tdescription LONGTEXT DEFAULT NULL,\n\t\t\t\tPRIMARY KEY (group_id),\n\t\t\t\tUNIQUE INDEX group_n (name)\n\t\t\t) {$charset_collate};"; } $capability_table = _groups_get_tablename('capability'); if ($wpdb->get_var("SHOW TABLES LIKE '{$capability_table}'") != $capability_table) { $queries[] = "CREATE TABLE {$capability_table} (\n\t\t\t\tcapability_id BIGINT(20) UNSIGNED NOT NULL auto_increment,\n\t\t\t\tcapability VARCHAR(255) NOT NULL,\n\t\t\t\tclass VARCHAR(255) DEFAULT NULL,\n\t\t\t\tobject VARCHAR(255) DEFAULT NULL,\n\t\t\t\tname VARCHAR(100) DEFAULT NULL,\n\t\t\t\tdescription LONGTEXT DEFAULT NULL,\n\t\t\t\tPRIMARY KEY (capability_id),\n\t\t\t\tUNIQUE INDEX capability (capability(100)),\n\t\t\t\tINDEX capability_kco (capability(20),class(20),object(20))\n\t\t\t) {$charset_collate};"; } $user_group_table = _groups_get_tablename('user_group'); if ($wpdb->get_var("SHOW TABLES LIKE '{$user_group_table}'") != $user_group_table) { $queries[] = "CREATE TABLE {$user_group_table} (\n\t\t\t\tuser_id bigint(20) unsigned NOT NULL,\n\t\t\t\tgroup_id bigint(20) unsigned NOT NULL,\n\t\t\t\tPRIMARY KEY (user_id, group_id),\n\t\t\t\tINDEX user_group_gu (group_id,user_id)\n\t\t\t) {$charset_collate};"; } $user_capability_table = _groups_get_tablename('user_capability'); if ($wpdb->get_var("SHOW TABLES LIKE '{$user_capability_table}'") != $user_capability_table) { $queries[] = "CREATE TABLE {$user_capability_table} (\n\t\t\t\tuser_id\t bigint(20) unsigned NOT NULL,\n\t\t\t\tcapability_id bigint(20) unsigned NOT NULL,\n\t\t\t\tPRIMARY KEY (user_id, capability_id),\n\t\t\t\tINDEX user_capability_cu (capability_id,user_id)\n\t\t\t) {$charset_collate};"; } $group_capability_table = _groups_get_tablename('group_capability'); if ($wpdb->get_var("SHOW TABLES LIKE '{$group_capability_table}'") != $group_capability_table) { $queries[] = "CREATE TABLE {$group_capability_table} (\n\t\t\t\tgroup_id bigint(20) unsigned NOT NULL,\n\t\t\t\tcapability_id bigint(20) unsigned NOT NULL,\n\t\t\t\tPRIMARY KEY (group_id, capability_id),\n\t\t\t\tINDEX group_capability_cg (capability_id,group_id)\n\t\t\t) {$charset_collate};"; } if (!empty($queries)) { require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta($queries); } // needs to be called to create its capabilities Groups_Post_Access::activate(); // same thing to created groups for registered users Groups_Registered::activate(); // add WordPress capabilities Groups_WordPress::activate(); // ... end of plugin activation work. }
function sysProductLoop($category_name, $number_posts) { if (empty($number_posts)) { $number_posts = -1; } $args = array('showposts' => $number_posts, 'product_cat' => $category_name, 'post_type' => 'product'); $loop = new WP_Query($args); if ($loop->have_posts()) { ?> <section class="loop__products masonry__grid"> <?php while ($loop->have_posts()) { $loop->the_post(); // gets the loop__product info $product = new WC_Product(get_the_ID()); $product_price = $product->get_price_html(); // gets the group info $groups = new Groups_Post_Access(); $groups_post = $groups->get_read_post_capabilities(get_the_ID()); ?> <div class="loop__product masonry__item"<?php // adds all groups applied to loop__product to the attribute 'data-machines' if (!empty($groups)) { $x = 0; echo 'data-machines="'; foreach ($groups_post as $group) { if ($x > 0) { echo " "; } else { $x++; } $group_sort = strtolower($group); $group_sort = str_replace('|', '', $group_sort); $group_sort = str_replace(' ', '-', $group_sort); $group_sort = str_replace('--', '-', $group_sort); echo $group_sort; } echo '"'; } ?> > <a href="<?php the_permalink(); ?> " class="loop__product__link"> <?php // if loop__product has image if (get_the_post_thumbnail()) { // get loop__product image $url = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'medium'); ?> <div class="loop__product__image__container"> <img data-layzr="<?php echo $url[0]; ?> " alt="<?php the_title(); ?> image" class="loop__product__image"> </div> <?php } ?> <div class="loop__product__header"> <h2 class="loop__product__title"><?php echo ucwords(get_the_title()); ?> </h2> <p class="loop__product__price"><?php echo $product_price; ?> </p> </div> <?php if (get_the_excerpt()) { $x = get_the_excerpt(); echo '<p class="loop__product__excerpt">' . $x . '</p>'; } ?> </a> </div> <?php } // END | While $loop->have_posts(); ?> </section> <?php } // END | If $loop->have_posts() // to make sure that any wp_query's after don't use the same $args wp_reset_query(); }
/** * 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; } } } } } }
/** * 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 we're here, we assume the user is allowed to edit attachments, // but we still need to check if the user can restrict access if (self::user_can_restrict()) { $post_id = null; if (isset($post['ID'])) { $post_id = $post['ID']; } else { if (isset($post['post_ID'])) { $post_id = $post['post_ID']; } } if ($post_id !== null) { $valid_read_caps = self::get_valid_read_caps_for_user(); foreach ($valid_read_caps as $valid_read_cap) { if ($capability = Groups_Capability::read_by_capability($valid_read_cap)) { if (!empty($attachment[self::CAPABILITY]) && is_array($attachment[self::CAPABILITY]) && in_array($capability->capability_id, $attachment[self::CAPABILITY])) { Groups_Post_Access::create(array('post_id' => $post_id, 'capability' => $capability->capability)); } else { Groups_Post_Access::delete($post_id, $capability->capability); } } } } } } return $post; }
/** * Handles access restriction capability modifications from bulk-editing. * This is called once for each post that is included in bulk-editing. * The fields that are handled here are rendered through the * bulk_edit_custom_box() method in this class. * * @param int $post_id */ public static function save_post($post_id) { if (isset($_REQUEST['capabilities-action'])) { if (wp_verify_nonce($_REQUEST['bulk-post-capability-nonce'], 'post-capability')) { $field = Groups_Post_Access::POSTMETA_PREFIX . 'bulk-' . Groups_Post_Access::READ_POST_CAPABILITY; if (!empty($_REQUEST[$field]) && is_array($_REQUEST[$field])) { if (Groups_Access_Meta_Boxes::user_can_restrict()) { $valid_read_caps = Groups_Access_Meta_Boxes::get_valid_read_caps_for_user(); foreach ($_REQUEST[$field] as $capability_name) { if ($capability = Groups_Capability::read_by_capability($capability_name)) { if (in_array($capability->capability, $valid_read_caps)) { switch ($_REQUEST['capabilities-action']) { case 'add-capability': Groups_Post_Access::create(array('post_id' => $post_id, 'capability' => $capability->capability)); break; case 'remove-capability': Groups_Post_Access::delete($post_id, $capability->capability); break; } } } } } } } } }