View source
<?php
namespace Drupal\social_group\Plugin\Action;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\group\Entity\Group;
use Drupal\views_bulk_operations\Action\ViewsBulkOperationsActionBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\user\Entity\User;
class AddMembersToGroup extends ViewsBulkOperationsActionBase implements ContainerFactoryPluginInterface, PluginFormInterface {
protected $storage;
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->storage = $entity_type_manager
->getStorage('group');
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'));
}
public function execute($entity = NULL) {
$group = Group::load($this->configuration['groups']);
if (NULL !== $group) {
$is_member = $group
->getMember($entity);
if (!$is_member) {
$group
->addMember($entity);
return $this
->t('Amount of users added to group');
}
return $this
->t('Amount of existing members');
}
return $this
->t('Amount of users added not added');
}
public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
if ($object instanceof User) {
$access = AccessResult::allowed();
}
else {
$access = AccessResult::forbidden();
}
return $return_as_object ? $access : $access
->isAllowed();
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['#title'] = $this
->formatPlural($this->context['selected_count'], 'Add selected member to a group', 'Add @count selected members to a group');
$groups = Group::loadMultiple(social_group_get_all_groups());
$options = [];
foreach ($groups as $group) {
$group_type = $group
->getGroupType();
$options[$group_type
->label()][$group
->id()] = $group
->label();
}
$markup = $this
->formatPlural($this->context['selected_count'], 'Please select the group you want to add the member you have selected to', 'Please select the group you want to add the @count members you have selected to');
$form['description'] = [
'#markup' => $markup,
];
unset($form['list']);
$form['groups'] = [
'#type' => 'select',
'#title' => $this
->t('Group'),
'#options' => $options,
];
$form['actions']['submit']['#value'] = $this
->t('Add to Group');
$form['actions']['submit']['#attributes']['class'] = [
'button button--primary js-form-submit form-submit btn js-form-submit btn-raised btn-primary waves-effect waves-btn waves-light',
];
$form['actions']['cancel']['#attributes']['class'] = [
'button button--danger btn btn-flat waves-effect waves-btn',
];
return $form;
}
}