You are here

content.devel.inc in Content Construction Kit (CCK) 6.3

Same filename and directory in other branches
  1. 6.2 includes/content.devel.inc

Functions needed for Devel module integration.

TODO This is not really working correctly yet. It is getting called once for every field and then generating every field each time. But if you only process one field at a time the earlier ones lose their values. The current method works to create values, but is overly processor- intensive and needs to be reworked in a way that each field is only processed once and all values are retained.

File

includes/content.devel.inc
View source
<?php

/**
 * @file
 * Functions needed for Devel module integration.
 * 
 * TODO
 * This is not really working correctly yet. It is getting called once
 * for every field and then generating every field each time. But if
 * you only process one field at a time the earlier ones lose their values.
 * The current method works to create values, but is overly processor-
 * intensive and needs to be reworked in a way that each field is 
 * only processed once and all values are retained.
 */

/**
 * Enrich the $node that is about to be saved with arbitrary
 * information in each of its CCK fields.
 **/
function content_generate_fields(&$node, $field) {
  $type_name = $node->type;
  $type = content_types($type_name);
  $field_types = _content_field_types();
  if (!empty($type['fields'])) {
    foreach ($type['fields'] as $field) {
      $node_field = array();

      // If module handles own multiples, then only call its hook once.
      if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
        $max = 0;
      }
      else {
        switch ($field['multiple']) {
          case 0:
            $max = 0;
            break;
          case 1:
            $max = rand(0, 3);

            //just an arbitrary number for 'unlimited'
            break;
          default:
            $max = $field['multiple'];
            break;
        }
      }
      for ($i = 0; $i <= $max; $i++) {
        $module = $field_types[$field['type']]['module'];
        $function = $module . '_content_generate';
        if (function_exists($function)) {
          $result = $function($node, $field);

          // $items, $teaser, $page
          if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {

            // Fields that handle their own multiples will add their own deltas.
            $node_field = $result;
          }
          else {

            // When multiples are handled by the content module, add a delta for each result.
            $node_field[$i] = $result;
          }
        }
      }
      $node->{$field['field_name']} = $node_field;
    }
  }
}

/**
 * A simple function to return multiple values for fields that use
 * custom multiple value widgets but don't need any other special multiple
 * values handling. This will call the field generation function
 * a random number of times and compile the results into a node array.
 */
function content_devel_multiple($function, $node, $field) {
  $node_field = array();
  if (function_exists($function)) {
    switch ($field['multiple']) {
      case 0:
        $max = 0;
        break;
      case 1:
        $max = rand(0, 3);

        //just an arbitrary number for 'unlimited'
        break;
      default:
        $max = $field['multiple'];
        break;
    }
    for ($i = 0; $i <= $max; $i++) {
      $node_field[$i] = $function($node, $field);
    }
  }
  return $node_field;
}
if (module_exists('text')) {
  function text_content_generate($node, $field) {
    if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
      return content_devel_multiple('_text_content_generate', $node, $field);
    }
    else {
      return _text_content_generate($node, $field);
    }
  }
  function _text_content_generate($node, $field) {
    $node_field = array();
    if ($field['widget']['type'] == 'text_textarea') {
      $format = $field['text_processing'] ? rand(0, 3) : 0;
      $node_field['value'] = devel_create_content($format);
      $node_field['format'] = $format;
    }
    else {
      $allowed_values = content_allowed_values($field);
      if (!empty($allowed_values)) {

        // Just pick one of the specified allowed values.
        $node_field['value'] = array_rand($allowed_values);
      }
      else {

        // Generate a value that respects max_length.
        if (empty($field['max_length'])) {
          $field['max_length'] = 12;
        }
        $node_field['value'] = user_password($field['max_length']);
      }
    }
    return $node_field;
  }
}
if (module_exists('number')) {
  function number_content_generate($node, $field) {
    if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
      return content_devel_multiple('_number_content_generate', $node, $field);
    }
    else {
      return _number_content_generate($node, $field);
    }
  }
  function _number_content_generate($node, $field) {
    $node_field = array();
    $allowed_values = content_allowed_values($field);
    if (!empty($allowed_values)) {

      // Just pick one of the specified allowed values.
      $node_field['value'] = array_rand($allowed_values);
    }
    else {
      $min = is_numeric($field['min']) ? $field['min'] : 0;
      switch ($field['type']) {
        case 'number_integer':
          $max = is_numeric($field['max']) ? $field['max'] : 10000;
          $decimal = 0;
          $scale = 0;
          break;
        case 'number_decimal':
          $precision = is_numeric($field['precision']) ? $field['precision'] : 10;
          $scale = is_numeric($field['scale']) ? $field['scale'] : 2;
          $max = is_numeric($field['max']) ? $field['max'] : pow(10, $precision - $scale);
          $decimal = rand(0, 10 * $scale) / 100;
          break;
        case 'number_float':
          $precision = rand(10, 32);
          $scale = rand(0, 2);
          $decimal = rand(0, 10 * $scale) / 100;
          $max = is_numeric($field['max']) ? $field['max'] : pow(10, $precision - $scale);
          break;
      }
      $node_field['value'] = round(rand($min, $max) + $decimal, $scale);
    }
    return $node_field;
  }
}
if (module_exists('nodereference')) {
  function nodereference_content_generate($node, $field) {
    if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
      return content_devel_multiple('_nodereference_content_generate', $node, $field);
    }
    else {
      return _nodereference_content_generate($node, $field);
    }
  }
  function _nodereference_content_generate($node, $field) {
    $node_field = array();
    $allowed_values = nodereference_allowed_values($field);
    unset($allowed_values[0]);
    if (!empty($allowed_values)) {

      // Just pick one of the specified allowed values.
      $node_field['nid'] = array_rand($allowed_values);
    }
    return $node_field;
  }
}
if (module_exists('userreference')) {
  function userreference_content_generate($node, $field) {
    if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
      return content_devel_multiple('_userreference_content_generate', $node, $field);
    }
    else {
      return _userreference_content_generate($node, $field);
    }
  }
  function _userreference_content_generate($node, $field) {
    $node_field = array();
    $allowed_values = userreference_allowed_values($field);
    if (isset($allowed_values['none'])) {
      unset($allowed_values['none']);
    }
    if (!empty($allowed_values)) {

      // Just pick one of the specified allowed values.
      $node_field['uid'] = array_rand($allowed_values);
    }
    return $node_field;
  }
}

Functions

Namesort descending Description
content_devel_multiple A simple function to return multiple values for fields that use custom multiple value widgets but don't need any other special multiple values handling. This will call the field generation function a random number of times and compile the results…
content_generate_fields Enrich the $node that is about to be saved with arbitrary information in each of its CCK fields.