You are here

webform_localization.sync.inc in Webform Localization 7

Same filename and directory in other branches
  1. 7.4 includes/webform_localization.sync.inc

Webform Localization General Properties, Roles and Emails Sync Functions.

File

includes/webform_localization.sync.inc
View source
<?php

/**
 * @file
 * Webform Localization General Properties, Roles and Emails Sync Functions.
 */

/**
 * Development sponsored by Riot Games.
 *
 * @author German Martin <gmartin.php@gmail.com>
 */

/**
 * Sync webform configured properties with its translated versions.
 *
 * @param $nid
 *   A node Id.
 */
function webform_localization_webform_properties_sync($nid) {

  // Gets webform localization options that match this node ID.
  $webform_localization_options = webform_localization_get_config($nid, TRUE);
  if (count($webform_localization_options['webform_properties']) > 0) {
    $node_list = _webform_localization_translation_set_node_list($nid);
    if (count($node_list) > 1) {

      // Select all webforms that match these node IDs.
      $result = db_select('webform')
        ->fields('webform')
        ->condition('nid', $node_list, 'IN')
        ->execute()
        ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
      if ($result) {
        $origin = $result[$nid];
        unset($result[$nid]);

        // Sync each translated version.
        foreach ($result as $webform) {
          foreach ($webform_localization_options['webform_properties'] as $property) {
            $webform[$property] = $origin[$property];
          }
          drupal_write_record('webform', $webform, array(
            'nid',
          ));
        }
      }
    }
  }
}

/**
 * Sync webform roles with its translated versions.
 *
 * @param $nid
 *   A node Id.
 */
function webform_localization_roles_sync($nid) {
  $node_list = _webform_localization_translation_set_node_list($nid);
  $roles = db_select('webform_roles')
    ->fields('webform_roles', array(
    'rid',
  ))
    ->condition('nid', $nid)
    ->execute()
    ->fetchCol();
  foreach ($node_list as $n) {
    if ($n != $nid) {
      db_delete('webform_roles')
        ->condition('nid', $n)
        ->execute();
      foreach ($roles as $rid) {
        db_insert('webform_roles')
          ->fields(array(
          'nid' => $n,
          'rid' => $rid,
        ))
          ->execute();
      }
    }
  }
}

/**
 * Sync webform emails recipients with its translated versions.
 *
 * @param $nid
 *   A node Id.
 */
function webform_localization_emails_sync($nid) {
  $node_list = _webform_localization_translation_set_node_list($nid);
  $origin = _webform_localization_emails_load($nid);
  foreach ($node_list as $n) {
    if ($n != $nid) {
      $version = _webform_localization_emails_load($n);
      if ($origin != $version) {
        module_load_include('inc', 'webform', 'includes/webform.emails');
        $original_eids = array_keys($version);
        $current_eids = array_keys($origin);
        $all_eids = array_unique(array_merge($original_eids, $current_eids));
        $deleted_eids = array_diff($original_eids, $current_eids);
        $inserted_eids = array_diff($current_eids, $original_eids);
        foreach ($all_eids as $eid) {
          if (in_array($eid, $inserted_eids)) {
            $temp = $origin[$eid];
            $temp['nid'] = $n;
            webform_email_insert($temp);
          }
          elseif (in_array($eid, $deleted_eids)) {
            $node = node_load($n);
            webform_email_delete($node, $version[$eid]);
          }
          elseif ($origin[$eid] != $version[$eid]) {
            $temp = $origin[$eid];
            $temp['nid'] = $n;
            webform_email_update($temp);
          }
        }
      }
    }
  }
}

/**
 * Get an Array of webform emails recipients for a Node Id.
 *
 * @param $nid
 *   A node Id.
 * @return
 *   An array of webform emails.
 */
function _webform_localization_emails_load($nid) {
  $emails = db_select('webform_emails')
    ->fields('webform_emails')
    ->condition('nid', $nid)
    ->execute()
    ->fetchAllAssoc('eid', PDO::FETCH_ASSOC);

  // Unserialize the exclude component list for e-mails.
  foreach ($emails as $eid => $email) {
    $emails[$eid]['excluded_components'] = array_filter(explode(',', $email['excluded_components']));
    if (variable_get('webform_format_override', 0)) {
      $emails[$eid]['html'] = variable_get('webform_default_format', 0);
    }
  }
  return $emails;
}

/**
 * Get a node Id list of a translation set.
 *
 * @param $nid
 *   A node Id.
 * @return
 *   An array of node ids that share a tnid.
 */
function _webform_localization_translation_set_node_list($nid) {
  static $node_list = array();
  if (!isset($node_list[$nid])) {

    // Get all versions of the node.
    $node = node_load($nid);
    if (!isset($node->tnid) || $node->tnid == 0) {
      $node_list[$nid] = array();
      return $node_list[$nid];
    }
    $translations = translation_node_get_translations($node->tnid);
    $list = array();
    foreach ($translations as $n) {
      $list[] = $n->nid;
    }
    $node_list[$nid] = $list;
  }
  return $node_list[$nid];
}

Functions

Namesort descending Description
webform_localization_emails_sync Sync webform emails recipients with its translated versions.
webform_localization_roles_sync Sync webform roles with its translated versions.
webform_localization_webform_properties_sync Sync webform configured properties with its translated versions.
_webform_localization_emails_load Get an Array of webform emails recipients for a Node Id.
_webform_localization_translation_set_node_list Get a node Id list of a translation set.