$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();
Exemple #2
0
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;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }