You are here

function webform_features_export_render in Webform Features 7.3

Same name and namespace in other branches
  1. 7.4 webform_features.features.inc \webform_features_export_render()

Implements hook_features_export_render().

File

./webform_features.features.inc, line 68
Webform Features features integration.

Code

function webform_features_export_render($module, $data, $export = NULL) {
  $code = array();
  $code[] = '$webforms = array();';
  foreach ($data as $machine_name) {
    $node = webform_features_machine_name_load($machine_name, TRUE);
    if (empty($node)) {
      continue;
    }
    $export = clone $node;

    // Use date instead of created, in the same format used by node_object_prepare.
    $export->date = format_date($export->created, 'custom', 'Y-m-d H:i:s O');

    // Don't cause conflicts with nid/vid/revision_timestamp/changed fields.
    unset($export->nid);
    unset($export->vid);
    unset($export->changed);
    unset($export->created);
    unset($export->date);
    unset($export->revision_timestamp);
    unset($export->last_comment_timestamp);
    unset($export->webform['nid']);

    // Replace author by its username.
    $author = user_load($export->uid);
    $export->webform_features_author = $author->name;
    $author = user_load($export->revision_uid);
    $export->webform_features_revision_author = $author->name;
    unset($export->uid, $export->revision_uid);

    // Manage components.
    $components_machine_names = array();
    foreach ($export->webform['components'] as $key => $component) {
      $components_machine_names[$component['cid']] = $component['machine_name'];
    }
    $components_array = array();
    foreach ($export->webform['components'] as $key => $component) {
      if (!empty($component['pid'])) {
        $component['parent_machine_name'] = $components_machine_names[$component['pid']];
      }
      unset($component['nid']);
      unset($component['cid']);
      unset($component['pid']);
      $components_array[$component['machine_name']] = $component;
    }
    $export->webform['components'] = $components_array;

    // Manage emails.
    $emails_array = array();
    foreach ($export->webform['emails'] as $key => $email) {

      // Remove IDs.
      unset($email['nid']);
      unset($email['eid']);

      // Handle parameters linked to a component.
      $email['components_machine_names'] = array();
      foreach (array(
        'email',
        'subject',
        'from_name',
        'from_address',
      ) as $field_name) {
        $email['components_machine_names'][$field_name] = FALSE;
        if (is_numeric($email[$field_name])) {
          $email[$field_name] = $components_machine_names[$email[$field_name]];
          $email['components_machine_names'][$field_name] = TRUE;
        }
      }
      $emails_array[] = $email;
    }
    $export->webform['emails'] = $emails_array;

    // Clean file fields to avoid exporting issues
    // Copied from UUID Features uuid_features_file_field_export().
    $fields = field_info_instances('node', $export->type);
    foreach ($fields as $field_instance) {
      $field =& $export->{$field_instance['field_name']};
      $info = field_info_field($field_instance['field_name']);
      if (in_array($info['type'], array(
        'file',
        'image',
      ))) {
        $field = array();
      }
    }

    // The hook_alter signature is:
    // hook_webform_features_export_render_alter(&$export, $node, $module);
    drupal_alter('webform_features_export_render', $export, $node, $module);
    $code[] = "  \$webforms['{$machine_name}'] = " . features_var_export($export) . ";";
  }
  $code[] = "return \$webforms;";
  $code = implode("\n", $code);
  return array(
    'webform_defaults' => $code,
  );
}