paid_ads-8.x-1.x-dev/src/Entity/PaidPayment.php
src/Entity/PaidPayment.php
<?php namespace Drupal\paid_ads\Entity; use Drupal\Component\Serialization\Json; use Drupal\Core\Entity\ContentEntityBase; use Drupal\Core\Entity\EntityChangedTrait; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\paid_ads\Plugin\PaidGatewayInterface; use Drupal\user\UserInterface; /** * Defines a payment entity. * * @ContentEntityType( * base_table = "paid_payment", * handlers = { * "list_builder" = "Drupal\paid_ads\Entity\PaidPaymentListBuilder", * "view_builder" = "Drupal\Core\Entity\EntityViewBuilder", * }, * entity_keys = { * "id" = "id", * "uuid" = "uuid", * }, * id = "paid_payment", * label = @Translation("Paid Payment"), * links = { * "canonical" = "/paid-payment/{payment}", * "collection" = "/admin/content/paid-payment", * } * ) */ class PaidPayment extends ContentEntityBase implements PaidPaymentInterface { use EntityChangedTrait; /** * {@inheritdoc} */ public function getCreatedTime() { return $this->get('created')->value; } /** * {@inheritdoc} */ public static function create(array $values = []) { if (!isset($values['payment_statuses'])) { $values['payment_statuses'] = [PaidPaymentStatuses::CREATED]; } return parent::create($values); } /** * {@inheritdoc} */ public function getChangedTimeAcrossTranslations() { return $this->getChangedTime(); } /** * {@inheritdoc} */ public function setOwnerId($id) { $this->owner[0]->setValue($id); return $this; } /** * {@inheritdoc} */ public function setOwner(UserInterface $user) { $this->owner[0]->setValue($user->id()); return $this; } /** * {@inheritdoc} */ public function getOwnerId() { return $this->owner[0]->get('target_id') ->getValue(); } /** * {@inheritdoc} */ public function getOwner() { return $this->owner[0]->get('entity') ->getValue(); } /** * {@inheritdoc} */ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { $fields['bundle'] = BaseFieldDefinition::create('string') ->setLabel(t('Bundle')) ->setReadOnly(TRUE); $fields['changed'] = BaseFieldDefinition::create('changed') ->setLabel(t('Changed')) ->setDescription(t('The time the payment was last edited.')) ->setDisplayOptions( 'view', [ 'type' => 'timestamp', 'weight' => 0, ] ) ->setDisplayConfigurable('view', TRUE); $fields['created'] = BaseFieldDefinition::create('created') ->setLabel(t('Created')) ->setDescription(t('The time the payment was created.')) ->setDisplayOptions( 'view', [ 'type' => 'timestamp', 'weight' => 0, ] ) ->setDisplayConfigurable('view', TRUE); $fields['currency'] = BaseFieldDefinition::create('string') ->setLabel(t('Currency')) ->setRequired(TRUE) ->setDefaultValue('USD'); $fields['amount'] = BaseFieldDefinition::create('string') ->setLabel(t('Amount')) ->setRequired(TRUE); $fields['id'] = BaseFieldDefinition::create('integer') ->setLabel(t('Payment ID')) ->setReadOnly(TRUE); $fields['owner'] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Payer')) ->setDefaultValue(0) ->setSetting('target_type', 'user') ->setSetting('handler', 'default') ->setDefaultValueCallback(static::class . '::getCurrentUserId') ->setTranslatable(TRUE) ->setDisplayOptions( 'view', [ 'type' => 'author', 'weight' => 0, ] ) ->setDisplayConfigurable('view', TRUE); $fields['payment_method'] = BaseFieldDefinition::create('string') ->setLabel(t('Payment method')) ->setDisplayConfigurable('view', TRUE); $fields['payment_statuses'] = BaseFieldDefinition::create('string') ->setLabel(t('Payment statuses')) ->setCardinality(BaseFieldDefinition::CARDINALITY_UNLIMITED); $fields['options'] = BaseFieldDefinition::create('string') ->setLabel(t('Options')); $fields['payment_type'] = BaseFieldDefinition::create('string') ->setLabel(t('Payment type')); $fields['uuid'] = BaseFieldDefinition::create('uuid') ->setLabel(t('Universally Unique ID')) ->setReadOnly(TRUE); $fields['order_id'] = BaseFieldDefinition::create('string') ->setLabel(t('PayPal order id')) ->setDisplayConfigurable('view', TRUE) ->setDisplayConfigurable('form', FALSE); return $fields; } /** * {@inheritdoc} * * @todo Replace with 'approve' or 'confirm'. */ public function execute() { $options = Json::decode($this->get('options')->value); if (isset($options['onSuccess'])) { call_user_func($options['onSuccess'][0], $options['onSuccess'][1] ?? []); } $this->setPaymentStatus(PaidPaymentStatuses::SUCCESS); $this->save(); } /** * {@inheritdoc} */ public function setPaymentStatuses(array $payment_statuses) { $this->get('payment_statuses') ->setValue($payment_statuses); return $this; } /** * {@inheritdoc} */ public function setPaymentStatus(string $payment_status) { $previous_status = $this->getPaymentStatus(); if (!$previous_status || $previous_status != $payment_status) { $this->get('payment_statuses') ->appendItem($payment_status); } return $this; } /** * {@inheritdoc} */ public function getPaymentStatuses() { $payment_statuses = []; foreach ($this->get('payment_statuses') as $field_item) { $payment_statuses[] = $field_item->getValue()['value']; } return array_filter($payment_statuses); } /** * {@inheritdoc} */ public function getPaymentStatus() { $statuses = $this->getPaymentStatuses(); if ($statuses) { $status = end($statuses); return $status; } else { return PaidPaymentStatuses::UNKNOWN; } } /** * {@inheritdoc} */ public function getPaymentMethod() { return $this->get('payment_method') ->first()->value; } /** * {@inheritdoc} */ public function setPaymentMethod(PaidGatewayInterface $payment_gateway) { $this->get('payment_method') ->setValue($payment_gateway->getPluginId()); $this->set('bundle', $payment_gateway->getPluginId()); return $this; } /** * Default value callback for 'owner' base field definition. * * @param \Drupal\Core\Entity\EntityInterface $entity * Entity default value for. * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition * Field default value for. * * @return array * An array of default values. * * @see ::baseFieldDefinitions() */ public static function getCurrentUserId(EntityInterface $entity, FieldDefinitionInterface $field_definition) { return [ \Drupal::currentUser() ->id(), ]; } /** * {@inheritdoc} */ public function getAmount() { return $this->get('amount')->value; } /** * {@inheritdoc} */ public function setAmount(string $amount) { $this->set('amount', $amount); return $this; } /** * {@inheritdoc} */ public function getId() { return $this->id(); } /** * {@inheritdoc} */ public function setOptions($options) { if (is_array($options)) { $options = Json::encode($options); } $this->set('options', $options); return $this; } /** * Returns currency. * * @return string * Currency code. */ public function getCurrency() { return $this->currency->value; } /** * Updates PayPal order id for the current entity. * * @param string $value * New value. * * @return $this * Self. */ public function setOrderId(string $value) { $this->set('order_id', $value); return $this; } /** * Returns PayPal order id. * * @return string * String containing PayPal order id. */ public function getOrderId(): string { return (string) $this->order_id->value; } }