You are here

webform_submission_uuid.module in Webform Submission UUID 6.4

Same filename and directory in other branches
  1. 7.4 webform_submission_uuid.module
  2. 7 webform_submission_uuid.module

Webform submission uuid module, generates uuid string for all submissions.

File

webform_submission_uuid.module
View source
<?php

/**
 * @file
 * Webform submission uuid module, generates uuid string for all submissions.
 */

/**
 * Implements hook_uuid_sync().
 */
function webform_submission_uuid_uuid_sync($initial_sync = FALSE) {
  switch (WebformStorageController::getInstanceType()) {
    case 'db':

      // Update the uuid_webform_submissions table with missing UUID's
      $result = db_query('SELECT sid FROM {webform_submissions} WHERE sid NOT IN (SELECT sid FROM {uuid_webform_submissions})');
      while ($item = db_fetch_object($result)) {
        db_query('INSERT INTO {uuid_webform_submissions} (sid, uuid) VALUES(%d, "%s")', $item->sid, uuid_uuid());
      }
      break;
    case 'mongodb':

      // Do nothing, we will use the mongo _id as a uuid.
      break;
  }
}

/**
 * Implements hook_webform_submission_load().
 */
function webform_submission_uuid_webform_submission_load(&$submissions) {
  switch (WebformStorageController::getInstanceType()) {
    case 'db':

      // Adds the UUID to each submission that was loaded.
      $sids = array_keys($submissions);

      // Get the webform submissions.
      $result = db_query('SELECT sid, uuid FROM {uuid_webform_submissions} us WHERE us.sid IN (' . db_placeholders($sids) . ')', $sids);
      while ($row = db_fetch_object($result)) {
        if (!empty($submissions[$row->sid])) {
          $submissions[$row->sid]->uuid = $row->uuid;
        }
      }
      break;
    case 'mongodb':
      foreach ($submissions as $sid => $submission) {
        $submissions[$sid]->uuid = $submissions[$sid]->_id;
      }
      break;
  }
}

/**
 * Implements hook_webform_submission_presave().
 */
function webform_submission_uuid_webform_submission_presave($node, &$submission) {
  switch (WebformStorageController::getInstanceType()) {
    case 'db':
      if (empty($submission->sid) || !empty($submission->is_new)) {
        $submission->uuid = uuid_uuid();
      }
      break;
  }
}

/**
 * Implements hook_webform_submission_insert().
 *
 * @param object $node
 * @param object $submission
 */
function webform_submission_uuid_webform_submission_insert($node, $submission) {
  switch (WebformStorageController::getInstanceType()) {
    case 'db':
      db_query('INSERT INTO {uuid_webform_submissions} (sid, uuid) VALUES (%d, "%s")', $submission->sid, $submission->uuid);
      break;
  }
}

/**
 * Implements hook_webform_submission_delete().
 *
 * @param object $node
 * @param object $submission
 */
function webform_submission_uuid_webform_submission_delete($node, $submission) {
  switch (WebformStorageController::getInstanceType()) {
    case 'db':
      db_query('DELETE FROM {uuid_webform_submissions} WHERE sid = %d', $submission->sid);
      break;
  }
}

/**
 * Loads a webform submission provided the UUID.  This function is modeled after
 * webform_get_submission.
 */
function webform_submission_uuid_get_submission($uuid, $reset = FALSE) {
  static $submissions = array();
  if ($reset) {
    $submissions = array();
    if (!isset($uuid)) {
      return;
    }
  }

  // Load the submission if needed.
  if (!isset($submissions[$uuid])) {

    // Translate this UUID to a webform submission.
    module_load_include('inc', 'webform', 'includes/webform.submissions');
    $mongo_id = new MongoId($uuid);
    $submissions[$uuid] = webform_get_submissions(array(
      'uuid' => $mongo_id,
    ));
  }

  // Return the submission.
  return array_shift(array_values($submissions[$uuid]));
}

/**
 * Loads a webform provided the UUID of a submission.
 */
function webform_submission_uuid_webform($uuid, $reset = FALSE) {
  $webform = null;

  // Get the submission entry.
  if ($submission = webform_submission_uuid_get_submission($uuid, $reset)) {

    // Translate this to a webform node.
    $webform = node_load($submission->nid, NULL, $reset);
  }

  // Return the webform node.
  return $webform;
}