OgRemoveMultipleRolesForm.php in Organic groups 8
File
src/Form/OgRemoveMultipleRolesForm.php
View source
<?php
declare (strict_types=1);
namespace Drupal\og\Form;
use Drupal\Core\Form\FormStateInterface;
use Drupal\og\Entity\OgRole;
class OgRemoveMultipleRolesForm extends OgChangeMultipleRolesFormBase {
protected $pluginId = 'og_membership_remove_multiple_roles_action';
public function buildForm(array $form, FormStateInterface $form_state) {
$options = [];
foreach ($this
->getMemberships() as $membership) {
foreach ($membership
->getRoles() as $role) {
if (!$role
->isRequired()) {
$options[$role
->id()] = $role
->label();
}
}
}
$form['roles'] = [
'#type' => 'select',
'#title' => $this
->t('Remove roles'),
'#multiple' => TRUE,
'#required' => TRUE,
'#options' => $options,
];
return parent::buildForm($form, $form_state);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$role_ids = array_keys($form_state
->getValue('roles'));
$roles = OgRole::loadMultiple($role_ids);
foreach ($this
->getMemberships() as $membership) {
$changed = FALSE;
foreach ($roles as $role) {
$group = $membership
->getGroup();
if ($group
->getEntityTypeId() === $role
->getGroupType() && $group
->bundle() === $role
->getGroupBundle()) {
if ($membership
->hasRole($role
->id())) {
$changed = TRUE;
$membership
->revokeRole($role);
}
}
}
if ($changed) {
$membership
->save();
}
}
}
}