contacts_events-8.x-1.x-dev/modules/teams/src/Entity/Team.php

modules/teams/src/Entity/Team.php
<?php

namespace Drupal\contacts_events_teams\Entity;

use Drupal\commerce_order\Entity\OrderItemInterface;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\contacts_events\Entity\EventInterface;
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\entity\BundleFieldDefinition;

/**
 * Defines the Team entity.
 *
 * @ingroup contacts_events_teams
 *
 * @ContentEntityType(
 *   id = "c_events_team",
 *   label = @Translation("Team"),
 *   label_plural = @Translation("Teams"),
 *   label_collection = @Translation("Teams"),
 *   handlers = {
 *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
 *     "list_builder" = "Drupal\contacts_events_teams\TeamListBuilder",
 *     "views_data" = "Drupal\views\EntityViewsData",
 *     "form" = {
 *       "add" = "Drupal\contacts_events_teams\Form\TeamForm",
 *       "edit" = "Drupal\contacts_events_teams\Form\TeamForm",
 *       "delete" = "Drupal\Core\Entity\ContentEntityDeleteForm",
 *     },
 *     "access" = "Drupal\contacts_events_teams\TeamAccessControlHandler",
 *     "route_provider" = {
 *       "html" = "Drupal\contacts_events_teams\TeamHtmlRouteProvider",
 *     },
 *   },
 *   base_table = "c_events_team",
 *   admin_permission = "administer contacts events teams",
 *   entity_keys = {
 *     "id" = "id",
 *     "label" = "name",
 *     "uuid" = "uuid",
 *     "langcode" = "langcode",
 *   },
 *   links = {
 *     "canonical" = "/event/{contacts_event}/teams/{c_events_team}",
 *     "edit-form" = "/event/{contacts_event}/teams/{c_events_team}/edit",
 *     "add-form" = "/event/{contacts_event}/teams/add",
 *     "delete-form" = "/event/{contacts_event}/teams/{c_events_team}/delete",
 *     "collection" = "/event/{contacts_event}/teams/manage",
 *   }
 * )
 */
class Team extends ContentEntityBase implements TeamInterface {

  /**
   * {@inheritdoc}
   */
  public function getName() {
    return $this->get('name')->value;
  }

  /**
   * {@inheritdoc}
   */
  public function setName($name) {
    $this->set('name', $name);
    return $this;
  }

  /**
   * {@inheritdoc}
   */
  public function getEvent() : EventInterface {
    return $this->get('event')->entity;
  }

  /**
   * {@inheritdoc}
   */
  public function setEvent($event) {
    $this->set('event', $event);
    return $this;
  }

  /**
   * {@inheritdoc}
   */
  public function isTeamLeader($user) : bool {
    if ($user instanceof AccountInterface) {
      $user = $user->id();
    }

    foreach ($this->get('leaders') as $team_leader_item) {
      if ($team_leader_item->target_id == $user) {
        return TRUE;
      }
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  protected function urlRouteParameters($rel) {
    $parameters = parent::urlRouteParameters($rel);
    $parameters['contacts_event'] = $this->get('event')->target_id;
    return $parameters;
  }

  /**
   * {@inheritdoc}
   */
  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
    $fields = parent::baseFieldDefinitions($entity_type);

    $fields['name'] = BaseFieldDefinition::create('string')
      ->setLabel(new TranslatableMarkup('Team Name'))
      ->setSettings([
        'max_length' => 50,
        'text_processing' => 0,
      ])
      ->setDefaultValue('')
      ->setDisplayOptions('view', [
        'label' => 'above',
        'type' => 'string',
        'weight' => 0,
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
        'weight' => 0,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['event'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel(new TranslatableMarkup('Event'))
      ->setDescription(new TranslatableMarkup('The Event'))
      ->setSetting('target_type', 'contacts_event')
      ->setSetting('handler', 'default')
      ->setDisplayOptions('view', [
        'label' => 'hidden',
        'type' => 'author',
        'weight' => 1,
      ])
      ->setDisplayOptions('form', [
        'region' => 'hidden',
      ])
      ->setDisplayConfigurable('form', FALSE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['public'] = BaseFieldDefinition::create('boolean')
      ->setLabel(new TranslatableMarkup('Is this team publicly visible?'))
      ->setDefaultValue(TRUE)
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
        'weight' => 2,
      ])
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['form'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel(new TranslatableMarkup('Application Form'))
      ->setDescription(new TranslatableMarkup('Select the application form to be used.'))
      ->setRequired(TRUE)
      ->setSetting('target_type', 'c_events_team_app_type')
      ->setSetting('handler', 'default')
      ->setDisplayOptions('view', [
        'label' => 'hidden',
        'type' => 'author',
        'weight' => 3,
      ])
      ->setDisplayOptions('form', [
        'type' => 'options_select',
        'weight' => 3,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    // Translatable strings should have leading/trailing whitespace, but we need
    // that for rendered output, so wrap in formattable markup.
    $age_suffix = new FormattableMarkup(' @year', [
      '@year' => new TranslatableMarkup('year(s)'),
    ]);
    $fields['age_min'] = BaseFieldDefinition::create('integer')
      ->setLabel(new TranslatableMarkup('Minimum age'))
      ->setDescription(new TranslatableMarkup('The minimum age for team applicants.'))
      ->setRequired(TRUE)
      ->setDefaultValue(18)
      ->setSetting('suffix', $age_suffix)
      ->setDisplayOptions('view', [
        'label' => 'above',
        'type' => 'string',
        'weight' => 4,
      ])
      ->setDisplayOptions('form', [
        'type' => 'number',
        'weight' => 4,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['age_max'] = BaseFieldDefinition::create('integer')
      ->setLabel(new TranslatableMarkup('Maximum age'))
      ->setDescription(new TranslatableMarkup('The maximum age for team applicants.'))
      ->setRequired(FALSE)
      ->setDefaultValue(NULL)
      ->setSetting('suffix', $age_suffix)
      ->setDisplayOptions('view', [
        'label' => 'above',
        'type' => 'string',
        'weight' => 5,
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
        'weight' => 5,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['leaders'] = BaseFieldDefinition::create('entity_reference')
      ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
      ->setLabel(new TranslatableMarkup('Team Leaders'))
      ->setRevisionable(TRUE)
      ->setSetting('target_type', 'user')
      ->setSetting('handler', 'search_api')
      ->setSetting('handler_settings', [
        'index' => 'contacts_index',
        'conditions' => [['roles', 'crm_indiv']],
      ])
      ->setTranslatable(TRUE)
      ->setDisplayOptions('view', [
        'label' => 'hidden',
        'type' => 'author',
        'weight' => 6,
      ])
      ->setDisplayOptions('form', [
        'type' => 'entity_reference_autocomplete',
        'weight' => 6,
        'settings' => [
          'match_operator' => 'CONTAINS',
          'size' => '60',
          'autocomplete_type' => 'tags',
          'placeholder' => '',
        ],
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['price_override'] = BaseFieldDefinition::create('commerce_price')
      ->setLabel(new TranslatableMarkup('Price Override'))
      ->setDisplayOptions('view', [
        'label' => 'hidden',
        'type' => 'commerce_order_total_summary',
        'weight' => 7,
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
        'weight' => 7,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['category'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel(new TranslatableMarkup('Category'))
      ->setSetting('target_type', 'taxonomy_term')
      ->setSetting('handler', 'default')
      ->setSetting('handler_settings', ['target_bundles' => ['contacts_events_teams']])
      ->setRequired(TRUE)
      ->setDisplayOptions('view', [
        'label' => 'hidden',
        'type' => 'author',
        'weight' => 8,
      ])
      ->setDisplayOptions('form', [
        'type' => 'options_select',
        'weight' => 8,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['capacity'] = BaseFieldDefinition::create('integer')
      ->setLabel(new TranslatableMarkup('Team Capacity'))
      ->setRequired(FALSE)
      ->setDefaultValue(NULL)
      ->setDisplayOptions('view', [
        'label' => 'above',
        'type' => 'string',
        'weight' => 9,
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
        'weight' => 9,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['disable_automatic_emails'] = BaseFieldDefinition::create('boolean')
      ->setLabel(new TranslatableMarkup('Disable automatic emails for this team'))
      ->setDefaultValue(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['team_email_override'] = BaseFieldDefinition::create('boolean')
      ->setLabel(new TranslatableMarkup('Override team emails'))
      ->setDefaultValue(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    return $fields;
  }

  /**
   * {@inheritdoc}
   */
  public static function bundleFieldDefinitions(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {
    $fields = parent::bundleFieldDefinitions($entity_type, $bundle, $base_field_definitions);

    $fields['application_request_team_enabled'] = BundleFieldDefinition::create('boolean')
      ->setName('application_request_team_enabled')
      ->setLabel(new TranslatableMarkup('Enable application request (with team)?'))
      ->setDefaultValue(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_request_team_b_man'] = BundleFieldDefinition::create('boolean')
      ->setName('application_request_team_b_man')
      ->setLabel(new TranslatableMarkup('Do not send to the booking manager'))
      ->setDefaultValue(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_request_team_subject'] = BundleFieldDefinition::create('string')
      ->setName('application_request_team_subject')
      ->setLabel(new TranslatableMarkup('Application request subject (with team)'))
      ->setRequired(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_request_team_body'] = BundleFieldDefinition::create('text_long')
      ->setName('application_request_team_body')
      ->setLabel(new TranslatableMarkup('Application request email (with team)'))
      ->setRequired(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'text_textarea',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_accepted_enabled'] = BundleFieldDefinition::create('boolean')
      ->setName('application_accepted_enabled')
      ->setLabel(new TranslatableMarkup('Enable application accepted?'))
      ->setDefaultValue(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_accepted_subject'] = BundleFieldDefinition::create('string')
      ->setName('application_accepted_subject')
      ->setLabel(new TranslatableMarkup('Application accepted subject'))
      ->setRequired(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_accepted_body'] = BundleFieldDefinition::create('text_long')
      ->setName('application_accepted_body')
      ->setLabel(new TranslatableMarkup('Application accepted email'))
      ->setRequired(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'text_textarea',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_submitted_enabled'] = BundleFieldDefinition::create('boolean')
      ->setName('application_submitted_enabled')
      ->setLabel(new TranslatableMarkup('Enable application submitted?'))
      ->setDefaultValue(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_submitted_subject'] = BundleFieldDefinition::create('string')
      ->setName('application_submitted_subject')
      ->setLabel(new TranslatableMarkup('Application submitted subject'))
      ->setRequired(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    $fields['application_submitted_body'] = BundleFieldDefinition::create('text_long')
      ->setName('application_submitted_body')
      ->setLabel(new TranslatableMarkup('Application submitted email'))
      ->setRequired(FALSE)
      ->setDisplayOptions('view', [
        'region' => 'hidden',
      ])
      ->setDisplayOptions('form', [
        'type' => 'text_textarea',
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', FALSE);

    return $fields;
  }

  /**
   * Gets the team name from an order item.
   *
   * Used as a callback for the ticket list screen.
   * See contacts_events_teams_inline_entity_form_table_fields_alter.
   *
   * @param \Drupal\commerce_order\Entity\OrderItemInterface $order_item
   *   The order item.
   *
   * @return string
   *   The team name
   */
  public static function getTeamNameFromOrderItem(OrderItemInterface $order_item) {
    if ($order_item->bundle() === 'contacts_ticket') {
      /** @var \Drupal\contacts_events\Entity\Ticket $ticket */
      /** @var \Drupal\contacts_events_teams\Entity\TeamInterface $team */
      if ($team = $order_item->getPurchasedEntity()->team->entity) {
        return $team->getName();
      }
    }
    return NULL;
  }

}

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

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