/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $payment_id = $form['payment_reference']['#value']; $acquisition_code = PaymentReference::queue()->claimPayment($payment_id); if ($acquisition_code && PaymentReference::queue()->acquirePayment($payment_id, $acquisition_code)) { \Drupal::state()->set('payment_reference_test_payment_reference_element', $payment_id); } }
/** * @covers ::factory */ public function testFactory() { $container = new Container(); $factory = $this->getMock(PaymentFactoryInterface::class); $container->set('payment_reference.payment_factory', $factory); \Drupal::setContainer($container); $this->assertSame($factory, PaymentReference::factory()); }
/** * Tests the field. */ protected function testField() { // Create the field and field instance. $field_name = strtolower($this->randomMachineName()); entity_create('field_storage_config', array('cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, 'entity_type' => 'user', 'field_name' => $field_name, 'type' => 'payment_reference'))->save(); entity_create('field_config', array('bundle' => 'user', 'entity_type' => 'user', 'field_name' => $field_name, 'settings' => array('currency_code' => 'EUR', 'line_items_data' => [])))->save(); $payment = Generate::createPayment(mt_rand()); $payment->setPaymentStatus(Payment::statusManager()->createInstance('payment_success')); $payment->save(); PaymentReference::queue()->save('user.' . $field_name, $payment->id()); $this->assertEqual(PaymentReference::queue()->loadPaymentIds('user.' . $field_name, $payment->getOwnerId()), array($payment->id())); // Set a field value on an entity and test getting it. /** @var \Drupal\user\UserInterface $user */ $user = entity_create('user', array('name' => $this->randomString())); $user->get($field_name)->appendItem($payment->id()); $this->assertEqual($user->get($field_name)->first()->entity->id(), $payment->id()); // Save the entity, load it from storage and test getting the field value. $user->save(); $user = entity_load_unchanged('user', $user->id()); $this->assertEqual($user->{$field_name}[0]->target_id, $payment->id()); $this->assertEqual(PaymentReference::queue()->loadPaymentIds('user.' . $field_name, $payment->getOwnerId()), []); }
/** * {@inheritdoc} */ public function preSave() { $entity_type_id = $this->getFieldDefinition()->getFieldStorageDefinition()->getTargetEntityTypeId(); $entity_storage = \Drupal::entityManager()->getStorage($entity_type_id); /** @var \Drupal\Core\Entity\ContentEntityInterface $current_entity */ $current_entity = $this->getEntity(); $unchanged_payment_id = NULL; if ($current_entity->id()) { /** @var \Drupal\Core\Entity\ContentEntityInterface $unchanged_entity */ $unchanged_entity = $entity_storage->loadUnchanged($current_entity->id()); if ($unchanged_entity) { $unchanged_payment_id = $unchanged_entity->get($this->getFieldDefinition()->getName())->get($this->name)->get('target_id')->getValue(); } } $current_payment_id = $this->get('target_id')->getValue(); // Only claim the payment if the payment ID in this field has changed since // the field's target entity was last saved or if the entity is new. if (!$current_entity->id() || $current_payment_id != $unchanged_payment_id) { $queue = PaymentReferenceServiceWrapper::queue(); $acquisition_code = $queue->claimPayment($current_payment_id); if ($acquisition_code !== FALSE) { $queue->acquirePayment($current_payment_id, $acquisition_code); } else { $this->get('target_id')->setValue(0); } } }