/**
* Can a user edit this entity?
*
* @tip Can be overridden by registering for the permissions_check plugin hook.
*
* @param ElggEntity $entity Object entity
* @param int $user_guid The user GUID, optionally (default: logged in user)
*
* @return bool Whether this entity is editable by the given user.
* @see elgg_set_ignore_access()
*/
public function canEdit(ElggEntity $entity, $user_guid = 0)
{
try {
$user = $this->entities->getUserForPermissionsCheck($user_guid);
} catch (UserFetchFailureException $e) {
return false;
}
// Test user if possible - should default to false unless a plugin hook says otherwise
$default = call_user_func(function () use($entity, $user) {
if (!$user) {
return false;
}
// favor the persisted attributes if not saved
$attrs = array_merge(['owner_guid' => $entity->owner_guid, 'container_guid' => $entity->container_guid], $entity->getOriginalAttributes());
if ($attrs['owner_guid'] == $user->guid) {
return true;
}
if ($attrs['container_guid'] == $user->guid) {
return true;
}
if ($entity->guid == $user->guid) {
return true;
}
$container = $this->entities->get($attrs['container_guid']);
return $container && $container->canEdit($user->guid);
});
$params = array('entity' => $entity, 'user' => $user);
return $this->hooks->trigger('permissions_check', $entity->getType(), $params, $default);
}