/[drupal]/contributions/modules/fieldreference/fieldreference.module
ViewVC logotype

Diff of /contributions/modules/fieldreference/fieldreference.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.5, Mon May 19 19:07:52 2008 UTC revision 1.6, Mon Jun 16 14:49:24 2008 UTC
# Line 139  function fieldreference_field_formatter_ Line 139  function fieldreference_field_formatter_
139   * Implementation of hook_field_formatter().   * Implementation of hook_field_formatter().
140   */   */
141  function fieldreference_field_formatter($field, $item, $formatter, $node) {  function fieldreference_field_formatter($field, $item, $formatter, $node) {
142    // TODO: handle recursion !!!    static $recursion_queue = array();
143    
144    if (empty($item['nid']) || !is_numeric($item['nid']) ||    if (empty($item['nid']) || !is_numeric($item['nid']) ||
145        empty($item['field_name']) ||        empty($item['field_name']) ||
# Line 147  function fieldreference_field_formatter( Line 147  function fieldreference_field_formatter(
147      return '';      return '';
148    }    }
149    
150      $field_id = $item['nid'] . ':' . $item['field_name'] . ':' . $item['delta'];
151      if (in_array($field_id, $recursion_queue)) {
152        drupal_set_message(t('circular field reference chain'), 'error');
153        return '';
154      }
155    
156    if ($formatter == 'default') {    if ($formatter == 'default') {
157      $context = $node->teaser ? 'teaser' : 'full';      $context = $node->teaser ? 'teaser' : 'full';
158    }    }
# Line 162  function fieldreference_field_formatter( Line 168  function fieldreference_field_formatter(
168    $referenced_type = content_types($node->type);    $referenced_type = content_types($node->type);
169    $referenced_field = $referenced_type['fields'][$item['field_name']];    $referenced_field = $referenced_type['fields'][$item['field_name']];
170    
171    $referenced_formatter = isset($referenced_field['display_settings'][$context]['format']) ? $referenced_field['display_settings'][$context]['format'] : 'default';    if ($referenced_field['type'] == 'fieldreference') {
172        $recursion_queue[] = $field_id;
173      }
174      else {
175        $recursion_queue = array();
176      }
177    
178      $referenced_formatter = isset($referenced_field['display_settings'][$context]['format']) ? $referenced_field['display_settings'][$context]['format'] : 'default';
179    
180    $referenced_items = $referenced_node->$item['field_name'];    $referenced_items = $referenced_node->$item['field_name'];
181    
# Line 238  function fieldreference_widget($op, &$no Line 250  function fieldreference_widget($op, &$no
250            $storage = array();            $storage = array();
251            foreach($items['fields'] as $value) {            foreach($items['fields'] as $value) {
252              $value = explode(':', $value);              $value = explode(':', $value);
253                if (!$value) {
254                  continue;
255                }
256              $delta['nid'] = $value[0];              $delta['nid'] = $value[0];
257              $delta['field_name'] = $value[1];              $delta['field_name'] = $value[1];
258              $delta['delta'] = $value[2];              $delta['delta'] = $value[2];
# Line 249  function fieldreference_widget($op, &$no Line 264  function fieldreference_widget($op, &$no
264          }          }
265          else {          else {
266            $value = explode(':', $items['fields']);            $value = explode(':', $items['fields']);
267              if (!$value) {
268                unset($items[0]);
269              }
270            $items[0]['nid'] = $value[0];            $items[0]['nid'] = $value[0];
271            $items[0]['field_name'] = $value[1];            $items[0]['field_name'] = $value[1];
272            $items[0]['delta'] = $value[2];            $items[0]['delta'] = $value[2];
# Line 359  function fieldreference_widget($op, &$no Line 377  function fieldreference_widget($op, &$no
377                  unset($items[$delta]);                  unset($items[$delta]);
378                }                }
379              }              }
380                unset($items[$delta]['field']);
381              }
382              else {
383                unset($items[$delta]);
384            }            }
           unset($items[$delta]['field']);  
385          }          }
386          $items['fields'] = $fields;          $items['fields'] = $fields;
387          break;          break;
# Line 426  function _fieldreference_potential_refer Line 447  function _fieldreference_potential_refer
447   * Retrieve a pipe delimited string of autocomplete suggestions   * Retrieve a pipe delimited string of autocomplete suggestions
448   */   */
449  function fieldreference_autocomplete($field_name, $string = '') {  function fieldreference_autocomplete($field_name, $string = '') {
450    $fields = content_fields();    $field = content_fields($field_name);
   $field = $fields[$field_name];  
451    $matches = array();    $matches = array();
452    
453    foreach (_fieldreference_potential_references($field, $string) as $row) {    foreach (_fieldreference_potential_references($field, $string) as $row) {

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.2