og-8.x-1.x-dev/src/Plugin/Action/AddSingleOgMembershipRole.php
src/Plugin/Action/AddSingleOgMembershipRole.php
<?php
declare(strict_types=1);
namespace Drupal\og\Plugin\Action;
use Drupal\Core\Action\Attribute\Action;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\og\Entity\OgRole;
use Drupal\og\OgMembershipInterface;
/**
* Adds a role to a group membership.
*/
#[Action(
id: 'og_membership_add_single_role_action',
label: new TranslatableMarkup('Add a role to the selected members'),
type: 'og_membership',
)]
class AddSingleOgMembershipRole extends ChangeSingleOgMembershipRoleBase {
/**
* {@inheritdoc}
*/
public function execute(?OgMembershipInterface $membership = NULL) {
if (!$membership) {
return;
}
$role_name = $this->configuration['role_name'];
$role_id = implode('-', [
$membership->getGroupEntityType(),
$membership->getGroupBundle(),
$role_name,
]);
// Only add the role if it is valid and doesn't exist yet.
$role = OgRole::load($role_id);
if ($membership->isRoleValid($role) && !$membership->hasRole($role_id)) {
$membership->addRole($role)->save();
}
}
}
