public function CommercePaymentTransactionEntityController::save in Commerce Core 7
Saves a payment transaction.
When saving a transaction without an ID, this function will create a new transaction at that time. Subsequent transactions that should be saved as new revisions should set $transaction->revision to TRUE and include a log string in $transaction->log.
Parameters
$transaction: The full transaction object to save.
$transaction: An optional transaction object.
Return value
SAVED_NEW or SAVED_UPDATED depending on the operation performed.
Overrides DrupalCommerceEntityController::save
File
- modules/
payment/ includes/ commerce_payment_transaction.controller.inc, line 65  - The controller for the payment transaction entity containing the CRUD operations.
 
Class
- CommercePaymentTransactionEntityController
 - The controller class for payment transactions contains methods for the transaction CRUD operations. The load method is inherited from the default controller.
 
Code
public function save($transaction, DatabaseTransaction $db_transaction = NULL) {
  if (!isset($db_transaction)) {
    $db_transaction = db_transaction();
    $started_transaction = TRUE;
  }
  try {
    global $user;
    // Determine if we will be inserting a new transaction.
    $transaction->is_new = empty($transaction->transaction_id);
    // Set the timestamp fields.
    if (empty($transaction->created)) {
      $transaction->created = REQUEST_TIME;
    }
    else {
      // Otherwise if the payment transaction is not new but comes from an
      // entity_create() or similar function call that initializes the created
      // timestamp to an empty string, unset it to prevent destroying existing
      // data in that property on update.
      if ($transaction->created === '') {
        unset($transaction->created);
      }
    }
    $transaction->changed = REQUEST_TIME;
    $transaction->revision_uid = $user->uid;
    $transaction->revision_timestamp = REQUEST_TIME;
    // Round the amount to ensure it's an integer for storage.
    $transaction->amount = round($transaction->amount);
    if ($transaction->is_new || !empty($transaction->revision)) {
      // When inserting either a new transaction or revision, $transaction->log
      // must be set because {commerce_payment_transaction_revision}.log is a
      // text column and therefore cannot have a default value. However, it
      // might not be set at this point, so we ensure that it is at least an
      // empty string in that case.
      if (!isset($transaction->log)) {
        $transaction->log = '';
      }
    }
    elseif (empty($transaction->log)) {
      // If we are updating an existing transaction without adding a new
      // revision, we need to make sure $transaction->log is unset whenever it
      // is empty.  As long as $transaction->log is unset, drupal_write_record()
      // will not attempt to update the existing database column when re-saving
      // the revision.
      unset($transaction->log);
    }
    return parent::save($transaction, $db_transaction);
  } catch (Exception $e) {
    if (!empty($started_transaction)) {
      $db_transaction
        ->rollback();
      watchdog_exception($this->entityType, $e);
    }
    throw $e;
  }
}