You are here

function webform_rules_data_type_webform_data::save in Webform Rules 6

Makes changes to the data permanent. Implement it, if your data type is savable.

Overrides rules_data_type::save

File

./webform_rules.rules.inc, line 146
Functions for rules integration.

Class

webform_rules_data_type_webform_data
Defines the webform_data type

Code

function save() {
  $changed = FALSE;

  // Get eventually modified data.
  $submission =& $this
    ->get();
  if (!$submission || !is_array($submission)) {

    // No data found.
    return FALSE;
  }
  $sid = $submission['sid'];

  // Load saved submission data.
  $saved_submission = $this
    ->load($sid);
  if (count($saved_submission) != 1) {

    // No submission found with given id.
    return FALSE;
  }
  $new_submission = $saved_submission[$sid];
  $node = node_load($new_submission->nid);
  if (!$node) {

    // Webform could not be loaded.
    return FALSE;
  }

  // Replace saved submission data with modified values.
  foreach ($submission['components'] as $key => $value) {
    $cid = $value['component']['cid'];
    $new_val = is_array($value['value']) ? $value['value'] : array(
      $value['value'],
    );
    if ($new_val != $new_submission->data[$cid]['value']) {
      $changed = TRUE;
    }
    $new_submission->data[$cid]['value'] = $new_val;
  }

  // Update submission data if necessary.
  if ($changed) {
    module_load_include('inc', 'webform', 'includes/webform.submissions');

    // TODO: changed is always TRUE atm?
    webform_submission_update($node, $new_submission);
  }
  return TRUE;
}