[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/cck/includes/ -> content.devel.inc (source)

   1  <?php
   2  // $Id: content.devel.inc,v 1.4.2.6 2009/01/20 07:31:30 karens Exp $
   3  
   4  /**
   5   * @file
   6   * Functions needed for Devel module integration.
   7   * 
   8   * TODO
   9   * This is not really working correctly yet. It is getting called once
  10   * for every field and then generating every field each time. But if
  11   * you only process one field at a time the earlier ones lose their values.
  12   * The current method works to create values, but is overly processor-
  13   * intensive and needs to be reworked in a way that each field is 
  14   * only processed once and all values are retained.
  15   */
  16  
  17  /**
  18   * Enrich the $node that is about to be saved with arbitrary
  19   * information in each of its CCK fields.
  20   **/
  21  function content_generate_fields(&$node, $field) {
  22    $type_name = $node->type;
  23    $type = content_types($type_name);
  24    $field_types = _content_field_types();
  25  
  26    if (!empty($type['fields'])) {
  27      foreach ($type['fields'] as $field) {
  28        $node_field = array();
  29        // If module handles own multiples, then only call its hook once.
  30        if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
  31          $max = 0;
  32        }
  33        else {
  34          switch ($field['multiple']) {
  35            case 0:
  36              $max = 0;
  37              break;
  38            case 1:
  39              $max = rand(0, 3); //just an arbitrary number for 'unlimited'
  40              break;
  41            default:
  42              $max = $field['multiple'];
  43              break;
  44          }
  45        }
  46        for ($i = 0; $i <= $max; $i++) {
  47          $module = $field_types[$field['type']]['module'];
  48          $function = $module .'_content_generate';
  49          if (function_exists($function)) {
  50            $result = $function($node, $field); // $items, $teaser, $page
  51            if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
  52              // Fields that handle their own multiples will add their own deltas.
  53              $node_field = $result;
  54            }
  55            else {
  56              // When multiples are handled by the content module, add a delta for each result.
  57              $node_field[$i] = $result;
  58            }
  59          }
  60        }
  61        $node->{$field['field_name']} = $node_field;
  62      }
  63    }
  64  }
  65  
  66  /**
  67   * A simple function to return multiple values for fields that use
  68   * custom multiple value widgets but don't need any other special multiple
  69   * values handling. This will call the field generation function
  70   * a random number of times and compile the results into a node array.
  71   */
  72  function content_devel_multiple($function, $node, $field) {
  73    $node_field = array();
  74    if (function_exists($function)) {
  75      switch ($field['multiple']) {
  76        case 0:
  77          $max = 0;
  78          break;
  79        case 1:
  80          $max = rand(0, 3); //just an arbitrary number for 'unlimited'
  81          break;
  82        default:
  83          $max = $field['multiple'];
  84          break;
  85      }
  86      for ($i = 0; $i <= $max; $i++) {
  87        $node_field[$i] = $function($node, $field);
  88      }
  89    }
  90    return $node_field;
  91  }
  92  
  93  if (module_exists('text')) {
  94    function text_content_generate($node, $field) {
  95      if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
  96        return content_devel_multiple('_text_content_generate', $node, $field);
  97      }
  98      else {
  99        return _text_content_generate($node, $field);
 100      }
 101    }
 102  
 103    function _text_content_generate($node, $field) {
 104      $node_field = array();
 105      if ($field['widget']['type'] == 'text_textarea') {
 106        $format = $field['text_processing'] ? rand(0, 3) : 0;
 107        $node_field['value'] = devel_create_content($format);
 108        $node_field['format'] = $format;
 109      }
 110      else {
 111        $allowed_values = content_allowed_values($field);
 112        if (!empty($allowed_values)) {
 113          // Just pick one of the specified allowed values.
 114          $node_field['value'] = array_rand($allowed_values);
 115        }
 116        else {
 117          // Generate a value that respects max_length.
 118          if (empty($field['max_length'])) {
 119            $field['max_length'] = 12;
 120          }
 121          $node_field['value'] = user_password($field['max_length']);
 122        }
 123      }
 124      return $node_field;
 125    }
 126  }
 127  
 128  if (module_exists('number')) {
 129    function number_content_generate($node, $field) {
 130      if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
 131        return content_devel_multiple('_number_content_generate', $node, $field);
 132      }
 133      else {
 134        return _number_content_generate($node, $field);
 135      }
 136    }
 137  
 138    function _number_content_generate($node, $field) {
 139      $node_field = array();
 140      $allowed_values = content_allowed_values($field);
 141      if (!empty($allowed_values)) {
 142        // Just pick one of the specified allowed values.
 143        $node_field['value'] = array_rand($allowed_values);
 144      }
 145      else {
 146        $min = is_numeric($field['min']) ? $field['min'] : 0;
 147        switch ($field['type']) {
 148          case 'number_integer':
 149            $max = is_numeric($field['max']) ? $field['max'] : 10000;
 150            $decimal = 0;
 151            $scale = 0;
 152            break;
 153  
 154          case 'number_decimal':
 155            $precision = is_numeric($field['precision']) ? $field['precision'] : 10;
 156            $scale = is_numeric($field['scale']) ? $field['scale'] : 2;
 157            $max = is_numeric($field['max']) ? $field['max'] : pow(10, ($precision - $scale));
 158            $decimal = rand(0, (10 * $scale)) / 100;
 159            break;
 160  
 161          case 'number_float':
 162            $precision = rand(10, 32);
 163            $scale = rand(0, 2);
 164            $decimal = rand(0, (10 * $scale)) / 100;
 165            $max = is_numeric($field['max']) ? $field['max'] : pow(10, ($precision - $scale));
 166            break;
 167        }
 168        $node_field['value'] = round((rand($min, $max) + $decimal), $scale);
 169      }
 170      return $node_field;
 171    }
 172  }
 173  
 174  if (module_exists('nodereference')) {
 175    function nodereference_content_generate($node, $field) {
 176      if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
 177        return content_devel_multiple('_nodereference_content_generate', $node, $field);
 178      }
 179      else {
 180        return _nodereference_content_generate($node, $field);
 181      }
 182    }
 183  
 184    function _nodereference_content_generate($node, $field) {
 185      $node_field = array();
 186      $allowed_values = nodereference_allowed_values($field);
 187      unset($allowed_values[0]);
 188      if (!empty($allowed_values)) {
 189        // Just pick one of the specified allowed values.
 190        $node_field['nid'] = array_rand($allowed_values);
 191      }
 192      return $node_field;
 193    }
 194  }
 195  
 196  if (module_exists('userreference')) {
 197    function userreference_content_generate($node, $field) {
 198      if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_MODULE) {
 199        return content_devel_multiple('_userreference_content_generate', $node, $field);
 200      }
 201      else {
 202        return _userreference_content_generate($node, $field);
 203      }
 204    }
 205  
 206    function _userreference_content_generate($node, $field) {
 207      $node_field = array();
 208      $allowed_values = userreference_allowed_values($field);
 209      if (isset($allowed_values['none'])) {
 210        unset($allowed_values['none']);
 211      }
 212      if (!empty($allowed_values)) {
 213        // Just pick one of the specified allowed values.
 214        $node_field['uid'] = array_rand($allowed_values);
 215      }
 216      return $node_field;
 217    }
 218  }


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7