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