Commit c2016594 authored by Nikolay Lobachev's avatar Nikolay Lobachev
Browse files

Issue #3304797: Update classes, methods and interfaces.

parent d919e614
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ function grequest_menu_local_tasks_alter(&$data, $route_name) {
  $route_matcher = \Drupal::service('current_route_match');
  $group = $route_matcher->getParameter('group');

  if ($group instanceof GroupInterface && !$group->getGroupType()->hasContentPlugin('group_membership_request')) {
  if ($group instanceof GroupInterface && !$group->getGroupType()->hasPlugin('group_membership_request')) {
    unset($data['tabs'][0]['views_view:view.group_pending_members.page_1']);
  }
}
@@ -38,13 +38,13 @@ function grequest_menu_local_tasks_alter(&$data, $route_name) {
/**
 * Implements hook_entity_delete().
 */
function grequest_group_content_delete(EntityInterface $group_content) {
  if (is_null($group_content->getEntity())) {
function grequest_group_content_delete(EntityInterface $group_relationship) {
  if (is_null($group_relationship->getEntity())) {
    return;
  }

  if ($group_content->getContentPlugin()->getPluginId() === 'group_membership') {
    $membership_request = \Drupal::service('grequest.membership_request_manager')->getMembershipRequest($group_content->getEntity(), $group_content->getGroup());
  if ($group_relationship->getPluginId() === 'group_membership') {
    $membership_request = \Drupal::service('grequest.membership_request_manager')->getMembershipRequest($group_relationship->getEntity(), $group_relationship->getGroup());
    if (!empty($membership_request)) {
      $membership_request->delete();
    }
+10 −10
Original line number Diff line number Diff line
@@ -75,34 +75,34 @@ class GroupMembershipRequestController extends ControllerBase {
   */
  public function requestMembership(GroupInterface $group) {
    $user = $this->entityTypeManager->getStorage('user')->load($this->currentUser->id());
    $group_relation = $this->membershipRequestManager->create($group, $user);
    return $this->entityFormBuilder()->getForm($group_relation, 'group-request-membership');
    $group_relationship = $this->membershipRequestManager->create($group, $user);
    return $this->entityFormBuilder()->getForm($group_relationship, 'group-request-membership');
  }

  /**
   * Provides the form for approval a group membership.
   *
   * @param \Drupal\group\Plugin\Group\Relation\GroupRelationInterface $group_relation
   *   The group relation.
   * @param \Drupal\group\Entity\GroupRelationshipInterface $group_relation
   *   The group relationship.
   *
   * @return array
   *   A group approval membership form.
   */
  public function approveMembership(GroupRelationInterface $group_relation) {
    return $this->entityFormBuilder()->getForm($group_relation, 'group-approve-membership');
  public function approveMembership(GroupRelationshipInterface $group_relationship) {
    return $this->entityFormBuilder()->getForm($group_relationship, 'group-approve-membership');
  }

  /**
   * Provides the form for rejection a group membership.
   *
   * @param \Drupal\group\Plugin\Group\Relation\GroupRelationInterface $group_relation
   *   The group relation.
   * @param \Drupal\group\Entity\GroupRelationshipInterface $group_relationship
   *   The group relationship.
   *
   * @return array
   *   A group rejection membership form.
   */
  public function rejectMembership(GroupRelationInterface $group_relation) {
    return $this->entityFormBuilder()->getForm($group_relation, 'group-reject-membership');
  public function rejectMembership(GroupRelationshipInterface $group_relationship) {
    return $this->entityFormBuilder()->getForm($group_relationship, 'group-reject-membership');
  }

  /**
+4 −4
Original line number Diff line number Diff line
@@ -114,13 +114,13 @@ class GroupMembershipApproveForm extends ContentEntityConfirmFormBase {
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $group_relation = $this->getEntity();
    $group_relationship = $this->getEntity();
    $group_roles = [];
    $form_roles_values = $form_state->getValue('roles');
    if (!empty($form_roles_values)) {
      $group_roles = array_filter(array_values($form_roles_values));
    }
    $result = $this->membershipRequestManager->approve($group_relation, $group_roles);
    $result = $this->membershipRequestManager->approve($group_relationship, $group_roles);

    if ($result) {
      $this->messenger()->addStatus($this->t('Membership request approved'));
@@ -130,8 +130,8 @@ class GroupMembershipApproveForm extends ContentEntityConfirmFormBase {
    }

    $this->logger->notice('@type: approved %title.', [
      '@type' => $group_relation->bundle(),
      '%title' => $group_relation->label(),
      '@type' => $group_relationship->bundle(),
      '%title' => $group_relationship->label(),
    ]);

    $form_state->setRedirectUrl($this->getCancelUrl());
+4 −4
Original line number Diff line number Diff line
@@ -95,9 +95,9 @@ class GroupMembershipRejectForm extends ContentEntityConfirmFormBase {
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $group_relation = $this->getEntity();
    $group_relationship = $this->getEntity();

    $result = $this->membershipRequestManager->reject($group_relation);
    $result = $this->membershipRequestManager->reject($group_relationship);

    if ($result) {
      $this->messenger()->addStatus($this->t('Membership request rejected'));
@@ -107,8 +107,8 @@ class GroupMembershipRejectForm extends ContentEntityConfirmFormBase {
    }

    $this->logger->notice('@type: rejected %title.', [
      '@type' => $group_relation->bundle(),
      '%title' => $group_relation->label(),
      '@type' => $group_relationship->bundle(),
      '%title' => $group_relationship->label(),
    ]);

    $form_state->setRedirectUrl($this->getCancelUrl());
+38 −40
Original line number Diff line number Diff line
@@ -5,10 +5,10 @@ namespace Drupal\grequest;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\grequest\Plugin\GroupContentEnabler\GroupMembershipRequest;
use Drupal\group\Entity\GroupContent;
use Drupal\group\Entity\GroupContentInterface;
use Drupal\grequest\Plugin\Group\Relation\GroupMembershipRequest;
use Drupal\group\Entity\GroupInterface;
use Drupal\group\Entity\GroupRelationship;
use Drupal\group\Entity\GroupRelationshipInterface;
use Drupal\user\UserInterface;

/**
@@ -51,23 +51,23 @@ class MembershipRequestManager {
   * @param \Drupal\group\Entity\GroupInterface $group
   *   Group.
   *
   * @return \Drupal\Core\Entity\EntityInterface|null
   *   Group content.
   * @return \Drupal\group\Entity\GroupRelationshipInterface|null
   *   Group relationship or NULL.
   */
  public function getMembershipRequest(UserInterface $user, GroupInterface $group) {
    // If no responsible group content types were found, we return nothing.
    $group_content_type_storage = $this->entityTypeManager->getStorage('group_content_type');
    $group_content_types = $group_content_type_storage->loadByContentPluginId('group_membership_request');
    if (!empty($group_content_types)) {
      $group_content_storage = $this->entityTypeManager->getStorage('group_content');
      $group_content_items = $group_content_storage->loadByProperties([
        'type' => array_keys($group_content_types),
    // If no responsible group relationship types were found, we return nothing.
    $group_relationship_type_storage = $this->entityTypeManager->getStorage('group_content_type');
    $group_relationship_types = $group_relationship_type_storage->loadByPluginId('group_membership_request');
    if (!empty($group_relationship_types)) {
      $group_relationship_storage = $this->entityTypeManager->getStorage('group_content');
      $group_membership_requests = $group_relationship_storage->loadByProperties([
        'type' => array_keys($group_relationship_types),
        'entity_id' => $user->id(),
        'gid' => $group->id(),
      ]);

      if (!empty($group_content_items)) {
        return reset($group_content_items);
      if (!empty($group_membership_requests)) {
        return reset($group_membership_requests);
      }
    }

@@ -77,20 +77,20 @@ class MembershipRequestManager {
  /**
   * Approve a membership request.
   *
   * @param \Drupal\group\Entity\GroupContentInterface $group_content
   *   Group membership request group content.
   * @param \Drupal\group\Entity\GroupRelationshipInterface $group_relationship
   *   Group membership request group relationship.
   * @param array $group_roles
   *   Group roles to be added to a member.
   *
   * @return bool
   *   Result.
   */
  public function approve(GroupContentInterface $group_content, array $group_roles = []) {
    $this->updateStatus($group_content, GroupMembershipRequest::TRANSITION_APPROVE);
    $result = $group_content->save() == SAVED_UPDATED;
  public function approve(GroupRelationshipInterface $group_relationship, array $group_roles = []) {
    $this->updateStatus($group_relationship, GroupMembershipRequest::TRANSITION_APPROVE);
    $result = $group_relationship->save() == SAVED_UPDATED;
    if ($result) {
      // Adding user to a group.
      $group_content->getGroup()->addMember($group_content->getEntity(), [
      $group_relationship->getGroup()->addMember($group_relationship->getEntity(), [
        'group_roles' => $group_roles,
      ]);
    }
@@ -101,33 +101,33 @@ class MembershipRequestManager {
  /**
   * Reject a membership request.
   *
   * @param \Drupal\group\Entity\GroupContentInterface $group_content
   *   Group membership request group content.
   * @param \Drupal\group\Entity\GroupRelationshipInterface $group_relationship
   *   Group membership request group relationship.
   *
   * @return bool
   *   Result.
   */
  public function reject(GroupContentInterface $group_content) {
    $this->updateStatus($group_content, GroupMembershipRequest::TRANSITION_REJECT);
    return $group_content->save() == SAVED_UPDATED;
  public function reject(GroupRelationshipInterface $group_relationship) {
    $this->updateStatus($group_relationship, GroupMembershipRequest::TRANSITION_REJECT);
    return $group_relationship->save() == SAVED_UPDATED;
  }

  /**
   * Update status of a membership request.
   *
   * @param \Drupal\group\Entity\GroupContentInterface $group_content
   *   Group membership request group content.
   * @param \Drupal\group\Entity\GroupRelationshipInterface $group_relationship
   *   Group membership request group relationship.
   * @param string $transition_id
   *   Transition approve | reject.
   */
  public function updateStatus(GroupContentInterface $group_content, $transition_id) {
    if ($group_content->getContentPlugin()->getPluginId() != 'group_membership_request') {
  public function updateStatus(GroupRelationshipInterface $group_relationship, $transition_id) {
    if ($group_relationship->getPluginId() != 'group_membership_request') {
      throw new \Exception('Only group content of "Group membership request" is allowed.');
    }
    $state_item = $group_content->get(GroupMembershipRequest::STATUS_FIELD)->first();
    $state_item = $group_relationship->get(GroupMembershipRequest::STATUS_FIELD)->first();
    if ($state_item->isTransitionAllowed($transition_id)) {
      $state_item->applyTransitionById($transition_id);
      $group_content->set('grequest_updated_by', $this->currentUser->id());
      $group_relationship->set('grequest_updated_by', $this->currentUser->id());
    }
    else {
      throw new \Exception(new FormattableMarkup('Transition ":transition_id" is not allowed.', [':transition_id' => $transition_id]));
@@ -142,18 +142,16 @@ class MembershipRequestManager {
   * @param \Drupal\user\UserInterface $user
   *   User.
   *
   * @return \Drupal\group\Entity\GroupContentInterface
   *   Group membership request group content.
   * @return \Drupal\group\Entity\GroupRelationshipInterface
   *   Group membership request group relationship.
   */
  public function create(GroupInterface $group, UserInterface $user) {
    if ($group->getMember($user)) {
      throw new \Exception('This user is already a member of the group');
    }
    $group_content = GroupContent::create([
      'type' => $group
        ->getGroupType()
        ->getContentPlugin('group_membership_request')
        ->getContentTypeConfigId(),
    $group_relationship = GroupRelationship::create([
      'group_type' => $group->getGroupType()->id(),
      'plugin_id' => 'group_membership_request',
      'gid' => $group->id(),
      'entity_id' => $user->id(),
      GroupMembershipRequest::STATUS_FIELD => GroupMembershipRequest::REQUEST_NEW,
@@ -161,9 +159,9 @@ class MembershipRequestManager {

    // We have to set transition here. Once the group_content saved events will
    // be correctly fired.
    $this->updateStatus($group_content, GroupMembershipRequest::TRANSITION_CREATE);
    $this->updateStatus($group_relationship, GroupMembershipRequest::TRANSITION_CREATE);

    return $group_content;
    return $group_relationship;
  }

}
Loading