og-8.x-1.x-dev/src/Form/OgMembershipForm.php

src/Form/OgMembershipForm.php
<?php

declare(strict_types=1);

namespace Drupal\og\Form;

use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\DependencyInjection\AutowireTrait;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\og\OgAccessInterface;
use Drupal\og\OgMembershipInterface;

/**
 * Form controller for the group content edit forms.
 *
 * @ingroup group
 */
class OgMembershipForm extends ContentEntityForm {

  use AutowireTrait;

  public function __construct(
    EntityRepositoryInterface $entityRepository,
    EntityTypeBundleInfoInterface $entityTypeBundleInfo,
    TimeInterface $time,
    protected OgAccessInterface $ogAccess,
  ) {
    parent::__construct($entityRepository, $entityTypeBundleInfo, $time);
  }

  /**
   * {@inheritdoc}
   */
  public function form(array $form, FormStateInterface $form_state) {
    /** @var \Drupal\og\Entity\OgMembership $entity */
    $entity = $this->getEntity();
    /** @var \Drupal\Core\Entity\ContentEntityInterface $group */
    $group = $entity->getGroup();

    $form = parent::form($form, $form_state);
    $form['#title'] = $this->t('Add member to %group', ['%group' => $group->label()]);
    $form['entity_type'] = ['#value' => $entity->getEntityType()->id()];
    $form['entity_id'] = ['#value' => $group->id()];

    if ($entity->getType() != OgMembershipInterface::TYPE_DEFAULT) {
      $form['membership_type'] = [
        '#title' => $this->t('Membership type'),
        '#type' => 'item',
        '#plain_text' => $entity->type->entity->label(),
        '#weight' => -2,
      ];
    }

    if ($this->operation == 'edit') {
      $form['#title'] = $this->t('Edit membership in %group', ['%group' => $group->label()]);
      $form['uid']['#access'] = FALSE;
      $form['member'] = [
        '#title' => $this->t('Member name'),
        '#type' => 'item',
        '#markup' => $entity->getOwner()->getDisplayName(),
        '#weight' => -10,
      ];
    }

    // Require the 'manage members' permission to be able to edit roles.
    $form['roles']['#access'] = $this->ogAccess
      ->userAccess($group, 'manage members')
      ->isAllowed();

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function save(array $form, FormStateInterface $form_state) {
    $membership = $this->entity;
    $insert = $membership->isNew();
    $membership->save();

    $membership_link = $membership->toLink($this->t('View'))->toString();

    $context = [
      '@membership_type' => $membership->getType(),
      '@uid' => $membership->getOwner()->id(),
      '@group_type' => $membership->getGroupEntityType(),
      '@gid' => $membership->getGroupId(),
      'link' => $membership_link,
    ];

    $t_args = [
      '%user' => $membership->getOwner()->toLink()->toString(),
      '%group' => $membership->getGroup()->toLink()->toString(),
    ];

    if ($insert) {
      $this->logger('og')->notice('OG Membership: added the @membership_type membership for the use uid @uid to the group of the entity-type @group_type and ID @gid.', $context);
      $this->messenger()->addMessage($this->t('Added %user to %group.', $t_args));
      return $insert;
    }

    $this->logger('og')->notice('OG Membership: updated the @membership_type membership for the use uid @uid to the group of the entity-type @group_type and ID @gid.', $context);
    $this->messenger()->addMessage($this->t('Updated the membership for %user to %group.', $t_args));

    return $insert;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc