crm_core-8.x-3.x-dev/modules/crm_core_contact/src/Entity/Organization.php

modules/crm_core_contact/src/Entity/Organization.php
<?php

namespace Drupal\crm_core_contact\Entity;

use Drupal\Core\Entity\EntityChangedTrait;
use Drupal\Core\Entity\EntityPublishedInterface;
use Drupal\Core\Entity\EntityPublishedTrait;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\crm_core_contact\OrganizationInterface;
use Drupal\entity\Revision\RevisionableContentEntityBase;
use Drupal\user\EntityOwnerTrait;

/**
 * CRM Organization Entity Class.
 *
 * @ContentEntityType(
 *   id = "crm_core_organization",
 *   label = @Translation("Organization"),
 *   bundle_label = @Translation("Organization type"),
 *   handlers = {
 *     "access" = "Drupal\crm_core_contact\OrganizationAccessControlHandler",
 *     "form" = {
 *       "default" = "Drupal\crm_core_contact\Form\OrganizationForm",
 *       "delete" = "Drupal\crm_core_contact\Form\ContactDeleteForm",
 *     },
 *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
 *     "list_builder" = "Drupal\crm_core_contact\OrganizationListBuilder",
 *     "views_data" = "Drupal\views\EntityViewsData",
 *     "route_provider" = {
 *       "html" = "Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider",
 *       "revision" = "\Drupal\entity\Routing\RevisionRouteProvider",
 *     },
 *     "local_task_provider" = {
 *       "default" = "\Drupal\crm_core_contact\Menu\ContactLocalTaskProvider",
 *     },
 *   },
 *   base_table = "crm_core_organization",
 *   revision_table = "crm_core_organization_revision",
 *   admin_permission = "administer crm_core_organization entities",
 *   show_revision_ui = TRUE,
 *   entity_keys = {
 *     "id" = "organization_id",
 *     "revision" = "revision_id",
 *     "bundle" = "type",
 *     "uuid" = "uuid",
 *     "label" = "name",
 *     "langcode" = "langcode",
 *     "owner" = "uid",
 *     "published" = "status",
 *   },
 *   revision_metadata_keys = {
 *     "revision_user" = "revision_user",
 *     "revision_created" = "revision_created",
 *     "revision_log_message" = "revision_log_message",
 *   },
 *   bundle_entity_type = "crm_core_organization_type",
 *   field_ui_base_route = "entity.crm_core_organization_type.edit_form",
 *   permission_granularity = "bundle",
 *   permission_labels = {
 *     "singular" = @Translation("Organization"),
 *     "plural" = @Translation("Organizations"),
 *   },
 *   links = {
 *     "add-page" = "/crm-core/organization/add",
 *     "add-form" = "/crm-core/organization/add/{crm_core_organization_type}",
 *     "canonical" = "/crm-core/organization/{crm_core_organization}",
 *     "collection" = "/crm-core/organization",
 *     "edit-form" = "/crm-core/organization/{crm_core_organization}/edit",
 *     "delete-form" = "/crm-core/organization/{crm_core_organization}/delete",
 *     "revision" = "/crm-core/organization/{crm_core_organization}/revisions/{crm_core_organization_revision}/view",
 *     "revision-revert-form" = "/crm-core/organization/{crm_core_organization}/revisions/{crm_core_organization_revision}/revert",
 *     "version-history" = "/crm-core/organization/{crm_core_organization}/revisions",
 *   }
 * )
 */
class Organization extends RevisionableContentEntityBase implements EntityPublishedInterface, OrganizationInterface {

  use EntityChangedTrait;
  use EntityOwnerTrait;
  use EntityPublishedTrait;
  use StringTranslationTrait;

  /**
   * {@inheritdoc}
   */
  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
    $fields = parent::baseFieldDefinitions($entity_type);
    $fields += static::ownerBaseFieldDefinitions($entity_type);
    // Add the published field.
    $fields += static::publishedBaseFieldDefinitions($entity_type);

    $fields['uid']
      ->setLabel(t('Owned by'))
      ->setDescription(t('The username of the contact owner.'))
      ->setRevisionable(TRUE)
      ->setDisplayOptions('view', [
        'label' => 'inline',
        'type' => 'author',
        'weight' => 0,
      ])
      ->setDisplayOptions('form', [
        'type' => 'entity_reference_autocomplete',
        'weight' => 5,
        'settings' => [
          'match_operator' => 'CONTAINS',
          'size' => '60',
          'placeholder' => '',
        ],
      ])
      ->setDisplayConfigurable('form', TRUE);

    $fields['status']->setLabel(t('Active'))
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
        'weight' => 1,
        'settings' => [
          'display_label' => TRUE,
        ],
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['created'] = BaseFieldDefinition::create('created')
      ->setLabel(t('Created'))
      ->setDescription(t('The time that the organization was created.'))
      ->setRevisionable(TRUE)
      ->setDisplayOptions('form', [
        'type' => 'datetime_timestamp',
        'weight' => -5,
      ])
      ->setDisplayConfigurable('form', TRUE);

    $fields['changed'] = BaseFieldDefinition::create('changed')
      ->setLabel(t('Changed'))
      ->setDescription(t('The time that the organization was last edited.'))
      ->setRevisionable(TRUE);

    $fields['name'] = BaseFieldDefinition::create('string')
      ->setLabel(t('Name'))
      ->setRevisionable(TRUE)
      ->setDisplayOptions('form', [
        'type' => 'text_textfield',
        'weight' => 0,
      ])
      ->setDisplayOptions('view', [
        'label' => 'hidden',
        'type' => 'string',
        'weight' => 0,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    return $fields;
  }

  /**
   * {@inheritdoc}
   */
  public function getPrimaryAddress() {
    return $this->getPrimaryField('address');
  }

  /**
   * {@inheritdoc}
   */
  public function getPrimaryEmail() {
    return $this->getPrimaryField('email');
  }

  /**
   * {@inheritdoc}
   */
  public function getPrimaryPhone() {
    return $this->getPrimaryField('phone');
  }

  /**
   * Gets the primary field.
   *
   * @param string $field
   *   The primary field name.
   *
   * @return \Drupal\Core\Field\FieldItemListInterface|\Drupal\Core\TypedData\TypedDataInterface
   *   The primary field property object.
   *
   * @throws \InvalidArgumentException
   *   If no primary field is configured.
   *   If the configured primary field does not exist.
   */
  public function getPrimaryField($field) {
    $type = $this->get('type')->entity;
    $name = empty($type->getPrimaryFields()[$field]) ? '' : $type->getPrimaryFields()[$field];
    return $this->get($name);
  }

  /**
   * {@inheritdoc}
   */
  public function label() {
    $label = $this->get('name')->value;
    if (empty($label)) {
      $label = $this->t('Nameless #@id', ['@id' => $this->id()]);
    }
    \Drupal::moduleHandler()->alter('crm_core_organization_label', $label, $this);

    return $label;
  }

  /**
   * {@inheritdoc}
   */
  public function preSave(EntityStorageInterface $storage) {
    parent::preSave($storage);

    foreach (array_keys($this->getTranslationLanguages()) as $langcode) {
      $translation = $this->getTranslation($langcode);

      // If no owner has been set explicitly, make the anonymous user the owner.
      if (!$translation->getOwner()) {
        $translation->setOwnerId(0);
      }
    }

    // If no revision owner has been set explicitly, make the organization owner
    // the revision owner.
    if (!$this->getRevisionUser()) {
      $this->setRevisionUserId($this->getOwnerId());
    }
  }

}

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

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