You are here

content.inc in Node import 6

Same filename and directory in other branches
  1. 5 supported/cck/content.inc

Support file for contrib CCK module.

File

supported/cck/content.inc
View source
<?php

/**
 * @file
 * Support file for contrib CCK module.
 */

/**
 * Returns a list of CCK fields.
 *
 * @param $type
 *   Node import type.
 *
 * @param $module
 *   Support module.
 *
 * @param $reset
 *   Reset internal cache.
 *
 * @return
 *   Array of CCK field definitions.
 */
function node_import_cck_fields($type, $module, $reset = FALSE) {
  static $fields;
  if (!isset($fields) || $reset) {
    $fields = array();
  }
  if (!isset($fields[$type])) {
    $fields[$type] = array();
    if (($node_type = node_import_type_is_node($type)) !== FALSE) {
      $node_info = content_types($node_type);
      foreach ($node_info['fields'] as $fieldname => $fieldinfo) {
        if (!isset($fields[$type][$fieldinfo['module']])) {
          $fields[$type][$fieldinfo['module']] = array();
        }
        $fields[$type][$fieldinfo['module']][$fieldname] = $fieldinfo;
      }
    }
  }
  if (!isset($fields[$type][$module])) {
    $fields[$type][$module] = array();
  }
  return $fields[$type][$module];
}

/**
 * Creates a unique field/column name.
 */
function node_import_cck_name($fieldname, $colname) {
  return 'cck:' . $fieldname . ':' . $colname;
}

/**
 * Returns an array of default values for the field information array
 * for CCK fields.
 */
function node_import_cck_field_defaults($fieldinfo) {
  return array(
    'group' => count($fieldinfo['columns']) > 1 ? $fieldinfo['widget']['label'] : '',
    'tips' => array(
      t('Imports into %name CCK field (%type type).', array(
        '%name' => $fieldinfo['field_name'],
        '%type' => $fieldinfo['type'],
      )),
    ),
    'has_multiple' => $fieldinfo['multiple'],
    'module' => $fieldinfo['module'],
    'allowed_values' => content_allowed_values($fieldinfo),
    'cck:fieldname' => $fieldinfo['field_name'],
    'cck:fieldinfo' => $fieldinfo,
  );
}

/**
 * Implementation of hook_node_import_values_alter().
 */
function content_node_import_values_alter(&$values, $type, $defaults, $options, $fields, $preview) {
  if (($node_type = node_import_type_is_node($type)) !== FALSE) {
    foreach ($fields as $fieldname => $fieldinfo) {
      if (isset($fieldinfo['cck:fieldname'])) {
        $values[$fieldinfo['cck:fieldname']] = array();
        $num_values = 0;
        foreach ($fieldinfo['cck:fieldinfo']['columns'] as $colname => $colinfo) {
          $cck_fieldname = node_import_cck_name($fieldinfo['cck:fieldname'], $colname);
          if (isset($values[$cck_fieldname])) {
            if (!is_array($values[$cck_fieldname])) {
              $values[$cck_fieldname] = array(
                0 => $values[$cck_fieldname],
              );
            }
            $num_values = max(count($values[$cck_fieldname]), $num_values);
          }
        }
        $i = 0;
        while ($i < $num_values) {
          $value = array();
          foreach ($fieldinfo['cck:fieldinfo']['columns'] as $colname => $colinfo) {
            $cck_fieldname = node_import_cck_name($fieldinfo['cck:fieldname'], $colname);
            if (isset($values[$cck_fieldname]) && array_key_exists($i, $values[$cck_fieldname])) {
              $value[$colname] = $values[$cck_fieldname][$i];
            }
            else {
              $value[$colname] = isset($defaults[$cck_fieldname]) ? $defaults[$cck_fieldname] : NULL;
            }
          }
          $values[$fieldinfo['cck:fieldname']][$i] = $value;
          $i++;
        }

        /*
                foreach ($fieldinfo['cck:fieldinfo']['columns'] as $colname => $colinfo) {
                  $cck_fieldname = node_import_cck_name($fieldinfo['cck:fieldname'], $colname);
                  unset($values[$cck_fieldname]);
                }
        */
      }
    }
  }
}

Functions

Namesort descending Description
content_node_import_values_alter Implementation of hook_node_import_values_alter().
node_import_cck_fields Returns a list of CCK fields.
node_import_cck_field_defaults Returns an array of default values for the field information array for CCK fields.
node_import_cck_name Creates a unique field/column name.