Exemplo n.º 1
0
/**
 * Save reader selection data sent via AJAX.
 *
 * @param int $post_id ID of the post.
 */
function cacsp_save_reader_connection($post_id)
{
    if (!defined('DOING_AJAX') || !DOING_AJAX) {
        return;
    }
    if (!isset($_POST['social_paper_readers_nonce']) || !isset($_POST['social_paper_readers'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['social_paper_readers_nonce'], 'cacsp-reader-selector')) {
        return;
    }
    $paper = new CACSP_Paper($post_id);
    $results = array();
    $new_reader_ids = array_map('intval', (array) $_POST['social_paper_readers']);
    $existing_reader_ids = $paper->get_reader_ids();
    // Remove readers no longer listed.
    $readers_to_remove = array_diff($existing_reader_ids, $new_reader_ids);
    if ($readers_to_remove) {
        foreach ($readers_to_remove as $user_id) {
            $results['removed'][$user_id] = $paper->remove_reader($user_id);
        }
    }
    // Add new readers.
    $readers_to_add = array_diff($new_reader_ids, $existing_reader_ids);
    if ($readers_to_add) {
        foreach ($readers_to_add as $user_id) {
            $results['connected'][$user_id] = $paper->add_reader($user_id);
        }
    }
    // Can't do much with results :(
}
Exemplo n.º 2
0
 public function test_save_should_update_wp_post_properties()
 {
     $p = $this->factory->paper->create();
     $paper = new CACSP_Paper($p);
     $paper->post_title = 'Foo';
     $paper->post_content = 'Bar';
     $saved = $paper->save();
     $this->assertNotEmpty($saved);
     $this->assertSame('Foo', $paper->post_title);
     $this->assertSame('Bar', $paper->post_content);
 }
Exemplo n.º 3
0
 public function test_pre_get_posts_filter()
 {
     $papers = $this->factory->paper->create_many(3);
     $groups = $this->factory->group->create_many(3);
     $p0 = new CACSP_Paper($papers[0]);
     $p1 = new CACSP_Paper($papers[1]);
     $p2 = new CACSP_Paper($papers[2]);
     $p0->connect_to_group($groups[0]);
     $p1->connect_to_group($groups[1]);
     $p2->connect_to_group($groups[2]);
     $q = new WP_Query(array('post_type' => 'cacsp_paper', 'bp_group' => array($groups[0], $groups[2]), 'fields' => 'ids'));
     $this->assertEqualSets(array($papers[0], $papers[2]), $q->posts);
 }
/**
 * Save group selection data sent via AJAX.
 *
 * @param int $post_id ID of the post.
 */
function cacsp_save_group_connection($post_id)
{
    if (!defined('DOING_AJAX') || !DOING_AJAX) {
        return;
    }
    if (!isset($_POST['social_paper_groups_nonce']) || !isset($_POST['social_paper_groups'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['social_paper_groups_nonce'], 'cacsp-group-selector')) {
        return;
    }
    $paper = new CACSP_Paper($post_id);
    $results = array();
    $new_group_ids = array_map('intval', (array) $_POST['social_paper_groups']);
    $existing_group_ids = $paper->get_group_ids();
    // Disconnect from groups no longer listed.
    $disconnected_groups = array_diff($existing_group_ids, $new_group_ids);
    if ($disconnected_groups) {
        foreach ($disconnected_groups as $group_id) {
            $results['disconnected'][$group_id] = $paper->disconnect_from_group($group_id);
        }
    }
    // Connect to new groups.
    $connected_groups = array_diff($new_group_ids, $existing_group_ids);
    if ($connected_groups) {
        foreach ($connected_groups as $group_id) {
            $results['connected'][$group_id] = $paper->connect_to_group($group_id);
        }
    }
    // Can't do much with results :(
}
Exemplo n.º 5
0
/**
 * Add capabilities for subscribers and contributors.
 *
 * By default, subscribers and contributors do not have caps to post, edit or
 * delete papers. This function injects these caps for users with these roles.
 *
 * @param  array  $caps    The mapped caps
 * @param  string $cap     The cap being mapped
 * @param  int    $user_id The user id in question
 * @param  array  $args    Optional parameters passed to has_cap(). For us, this means the post ID.
 * @return array
 */
function cacsp_map_extra_meta_caps($caps, $cap, $user_id, $args)
{
    switch ($cap) {
        // give user these caps
        case 'publish_papers':
        case 'edit_papers':
            // handles adding tags/categories
            break;
            // meta caps
        // meta caps
        case 'edit_paper':
        case 'delete_paper':
            // bail if someone else's event
            if (!empty($caps[0]) && false !== strpos($caps[0], 'others')) {
                return $caps;
            }
            break;
        case 'read_paper':
            // Make sure authors can view their own post
            if ((int) get_post($args[0])->post_author === $user_id) {
                return array('exist');
            }
            $post_id = $args[0];
            if (!cacsp_paper_is_protected($post_id)) {
                return array('exist');
            } else {
                $paper = new CACSP_Paper($post_id);
                $paper_reader_ids = $paper->get_reader_ids();
                if (in_array(get_current_user_id(), $paper_reader_ids, true)) {
                    return array('exist');
                } elseif (function_exists('bp_is_active') && bp_is_active('groups')) {
                    $paper_group_ids = $paper->get_group_ids();
                    $user_group_ids = cacsp_get_groups_of_user(get_current_user_id());
                    if (array_intersect($paper_group_ids, $user_group_ids)) {
                        return array('exist');
                    }
                }
            }
            return array('do_not_allow');
            // allow files to be uploaded via AJAX
        // allow files to be uploaded via AJAX
        case 'upload_files':
            if (defined('DOING_AJAX') && true === constant('DOING_AJAX')) {
                if (false === isset($_REQUEST['post_id'])) {
                    return $caps;
                }
                if (false === current_user_can('edit_paper', $_REQUEST['post_id'])) {
                    return $caps;
                }
                $user_id = get_current_user_id();
            } else {
                return $caps;
            }
            break;
        default:
            return $caps;
            break;
    }
    // make sure user is valid
    $user = new WP_User($user_id);
    if (!is_a($user, 'WP_User') || empty($user->ID)) {
        return $caps;
    }
    /**
     * Filters Social Paper basic meta caps.
     *
     * @param array   Pass 'exist' cap so users are able to manage papers.
     * @param array   $caps The mapped caps
     * @param string  $cap The cap being mapped
     * @param WP_User The user being tested for the cap.
     */
    return apply_filters('cacsp_map_extra_meta_caps', array('exist'), $caps, $cap, $user);
}