collection moderator
This commit is contained in:
parent
c3366e7d15
commit
869febcfc8
|
@ -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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue