OgChangeMultipleRolesFormBase.php in Organic groups 8
File
src/Form/OgChangeMultipleRolesFormBase.php
View source
<?php
declare (strict_types=1);
namespace Drupal\og\Form;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\TempStore\PrivateTempStoreFactory;
use Drupal\og\Entity\OgMembership;
use Drupal\og\Entity\OgRole;
use Drupal\og\OgAccessInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class OgChangeMultipleRolesFormBase extends FormBase {
protected $pluginId;
protected $memberships = [];
protected $tempStoreFactory;
protected $tempStore;
protected $ogAccess;
public function __construct(PrivateTempStoreFactory $temp_store_factory, OgAccessInterface $og_access) {
$this->tempStoreFactory = $temp_store_factory;
$this->ogAccess = $og_access;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('tempstore.private'), $container
->get('og.access'));
}
public function getFormId() {
return $this->pluginId . '_form';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Submit'),
];
return $form;
}
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();
}
}
}
public function access(AccountInterface $account) {
$memberships = $this
->getMemberships();
$access = AccessResult::allowedIf(!empty($memberships));
while ($access
->isAllowed() && ($membership = array_shift($memberships))) {
$access = $this->ogAccess
->userAccess($membership
->getGroup(), 'manage members', $account);
}
return $access;
}
protected function getTempStore() {
if (empty($this->tempStore)) {
$this->tempStore = $this->tempStoreFactory
->get($this->pluginId);
}
return $this->tempStore;
}
protected function getMemberships() {
if (empty($this->memberships)) {
$membership_ids = $this
->getTempStore()
->get('membership_ids');
if (!empty($membership_ids)) {
$this->memberships = OgMembership::loadMultiple($membership_ids);
}
}
return $this->memberships;
}
protected function getGroupTypes() {
$group_types = [];
foreach ($this
->getMemberships() as $membership) {
$group = $membership
->getGroup();
$key = implode('-', [
$group
->getEntityTypeId(),
$group
->bundle(),
]);
$group_types[$key] = [
'entity_type_id' => $group
->getEntityTypeId(),
'bundle_id' => $group
->bundle(),
];
}
return $group_types;
}
}