collection moderator

This commit is contained in:
Jacson Passold 2018-01-24 17:31:05 -02:00
parent c3366e7d15
commit 869febcfc8
1 changed files with 29 additions and 16 deletions

View File

@ -13,7 +13,7 @@ class Collections extends Repository {
public function __construct() { public function __construct() {
parent::__construct(); parent::__construct();
// add_filter('map_meta_cap', array($this, 'map_meta_cap'), 10, 4); add_filter('user_has_cap', array($this, 'user_has_cap'), 10, 3);
} }
/** /**
* {@inheritDoc} * {@inheritDoc}
@ -245,26 +245,39 @@ class Collections extends Repository {
/** /**
* Filter to handle special permissions * Filter to handle special permissions
* *
* @see https://developer.wordpress.org/reference/hooks/map_meta_cap/ * @see https://codex.wordpress.org/Plugin_API/Filter_Reference/user_has_cap
* *
*/ * Filter on the current_user_can() function.
public function map_meta_cap($caps, $cap, $user_id, $args) { * This function is used to explicitly allow authors to edit contributors and other
* authors posts if they are published or pending.
*
* @param array $allcaps All the capabilities of the user
* @param array $cap [0] Required capability
* @param array $args [0] Requested capability
* [1] User ID
* [2] Associated object ID
*/
public function user_has_cap($allcaps, $cap, $args) {
// Filters meta caps edit_tainacan-collection and check if user is moderator if(count($args) > 2) {
$collection_cpt = get_post_type_object(Entities\Collection::get_post_type()); $entity = Repository::get_entity_by_post($args[2]);
if ($cap == $collection_cpt->cap->edit_post) { $collection = false;
$entity = new Entities\Collection($args[0]); if($entity) {
if ($entity) { if($entity instanceof Entities\Collection) { // TODO others entity types
$moderators = $entity->get_moderators_ids(); $collection = $entity;
if (in_array($user_id, $moderators)) {
// if user is moderator, we clear the current caps
// (that might fave edit_others_posts) and leave only edit_posts
$caps = [$collection_cpt->cap->edit_posts];
} }
if($entity instanceof Entities\Item) { // TODO others entity types
$collection = $entity->get_collection();
}
if($collection) {
$moderators = $collection->get_moderators_ids();
if (is_array($moderators) && in_array($args[1], $moderators)) {
$allcaps[$cap[0]] = true;
}
}
} }
} }
return $allcaps;
return $caps;
} }