You are here

function _serial_generate_value in Serial Field 7

Same name and namespace in other branches
  1. 6 serial.inc \_serial_generate_value()

Generates a unique serial value (unique per entity bundle).

Parameters

string $entity_type: Type of entity (e.g. node)

string $bundle: Containing bundle (e.g. content type).

string $field_name: The field name.

bool $delete: Indicates if temporary records should be deleted.

Return value

int the unique serial value number.

Throws

\Exception

2 calls to _serial_generate_value()
serial_field_presave in ./serial.module
Implements hook_field_presave().
_serial_init_old_entities in ./serial.inc
Initializes the value of a new serial field in existing entities.

File

./serial.inc, line 154
Internal functions for the Serial module.

Code

function _serial_generate_value($entity_type, $bundle, $field_name, $delete = TRUE) {
  $transaction = db_transaction();
  try {

    // Get the name of the relevant table.
    $table = _serial_get_table_name($entity_type, $bundle, $field_name);

    // Insert a temporary record to get a new unique serial value.
    $uniqid = uniqid('', TRUE);
    $sid = db_insert($table)
      ->fields(array(
      'uniqid' => $uniqid,
    ))
      ->execute();

    // If there's a reason why it's come back undefined, reset it.
    $sid = isset($sid) ? $sid : 0;

    // Delete the temporary record.
    if ($delete && $sid && $sid % 10 == 0) {
      db_delete($table)
        ->condition('sid', $sid, '<')
        ->execute();
    }

    // Return the new unique serial value.
    return $sid;
  } catch (Exception $e) {
    $transaction
      ->rollback();
    watchdog_exception('serial', $e);
    throw $e;
  }
}