You are here

function noderelationships_settings_save in Node Relationships 6

Set relationship settings for the given content type.

2 calls to noderelationships_settings_save()
noderelationships_admin_settings_backref_submit in ./noderelationships.admin.inc
Submit handler for the back reference settings form.
noderelationships_admin_settings_noderef_submit in ./noderelationships.admin.inc
Submit handler for the node reference extras form.

File

./noderelationships.inc, line 124
Common functions for the noderelationships module.

Code

function noderelationships_settings_save($nodetype, $settings) {
  $old_settings_hash = md5(serialize(noderelationships_settings_load($nodetype)));
  $new_settings_hash = md5(serialize($settings));

  // Quit if settings have not been changed.
  if ($old_settings_hash == $new_settings_hash) {
    return FALSE;
  }

  // Prepare the settings for database storage.
  $settings_rows = array();
  if (!empty($settings['noderef'])) {
    $noderef_settings = $settings['noderef'];
    if (!empty($noderef_settings) && is_array($noderef_settings)) {
      foreach ($noderef_settings as $option_name => $option_values) {
        if (!empty($option_values) && is_array($option_values)) {
          foreach ($option_values as $field_name => $value) {
            $settings_key = 'noderef::' . $field_name;
            if (!isset($settings_rows[$settings_key])) {
              $settings_rows[$settings_key] = array();
            }
            $settings_rows[$settings_key][$option_name] = $value;
          }
        }
      }
    }
  }
  if (!empty($settings['backref']) && !empty($settings['backref']['regions'])) {
    $backref_settings = $settings['backref']['regions'];
    if (!empty($backref_settings) && is_array($backref_settings)) {
      foreach ($backref_settings as $region => $region_relations) {
        if (!empty($region_relations) && is_array($region_relations)) {
          foreach ($region_relations as $relation_key => $relation_info) {
            $settings_key = 'backref:' . $relation_key;
            $relation_info['region'] = $region;
            $settings_rows[$settings_key] = $relation_info;
          }
        }
      }
    }
  }

  // Update the settings in the database.
  db_query("DELETE FROM {noderelationships_settings} WHERE type_name = '%s'", $nodetype);
  foreach ($settings_rows as $settings_key => $settings_row) {
    list($relation_type, $related_type, $field_name) = explode(':', $settings_key);
    $args = array(
      $nodetype,
      $relation_type,
      $related_type,
      $field_name,
      serialize($settings_row),
    );
    db_query("INSERT INTO {noderelationships_settings} (type_name, relation_type, related_type, field_name, settings) VALUES ('%s', '%s', '%s', '%s', '%s')", $args);
  }

  // Synchronize back reference settings with back reference fields.
  noderelationships_cck_backref_sync_fields($nodetype);
  return TRUE;
}