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

Diff of /contributions/modules/nodereferrer/nodereferrer.module

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

revision 1.19, Wed Jun 17 10:17:50 2009 UTC revision 1.20, Tue Sep 22 11:35:59 2009 UTC
# Line 1  Line 1 
1  <?php  <?php
2  // $Id: nodereferrer.module,v 1.18 2009/04/09 14:43:17 andypost Exp $  // $Id: nodereferrer.module,v 1.19 2009/06/17 10:17:50 andypost Exp $
3    
4    
5    
6  /**  /**
7   * @file   * @file
8   * Defines a field type for backlinking referencing nodes.   * Defines a field type for backlinking referencing nodes.
9     *
10   * @todo   * @todo
11   *    -clear content cache with nodeapi.   *    -clear content cache with nodeapi.
12   *    -query nids for access on load/view..   *    -query nids for access on load/view..
# Line 14  Line 15 
15  /**  /**
16   * Implementation of hook_help().   * Implementation of hook_help().
17   */   */
18  function nodereferrer_help($section, $arg) {  function nodereferrer_help($path, $arg) {
19    switch ($section) {    switch ($path) {
20      case 'admin/modules#description':      case 'admin/modules#description':
21        return t('<strong>CCK:</strong> Defines a field type for displaying referrers to a node. <em>Note: Requires content.module.</em>');        return t('<strong>CCK:</strong> Defines a field type for displaying referrers to a node. <em>Note: Requires content.module.</em>');
22    }    }
# Line 41  function nodereferrer_field_settings($op Line 42  function nodereferrer_field_settings($op
42          foreach ($data as $k => $v) {          foreach ($data as $k => $v) {
43            $data[$k] = array();            $data[$k] = array();
44          }          }
45        } else {        }
46          else {
47          $data = array();          $data = array();
48        }        }
49        return $data;        return $data;
# Line 70  function nodereferrer_field_settings($op Line 72  function nodereferrer_field_settings($op
72        );        );
73    
74        $options = nodereferrer_nodereference_field_options();        $options = nodereferrer_nodereference_field_options();
75        $form['referrer_fields'] = array (        $form['referrer_fields'] = array(
76          '#type' => 'checkboxes',          '#type' => 'checkboxes',
77          '#title' => t('Referring Fields'),          '#title' => t('Referring Fields'),
78          '#multiple' => TRUE,          '#multiple' => TRUE,
# Line 163  function nodereferrer_field($op, &$node, Line 165  function nodereferrer_field($op, &$node,
165        // clear any modules referring to me as my title or other data may change.        // clear any modules referring to me as my title or other data may change.
166        // and nodereference doesn't clear the cache yet.        // and nodereference doesn't clear the cache yet.
167        foreach (nodereferrer_referrers($node->nid, $fields, $types, false) as $delta => $item) {        foreach (nodereferrer_referrers($node->nid, $fields, $types, false) as $delta => $item) {
168          $cid = 'content:'. $item['nid'] .':'. $item['vid'];          $cid = 'content:' . $item['nid'] . ':' . $item['vid'];
169          cache_clear_all($cid, 'cache_page');          cache_clear_all($cid, 'cache_page');
170        }        }
171        return;        return;
# Line 262  function nodereferrer_theme_formatter($f Line 264  function nodereferrer_theme_formatter($f
264    $themed_items = array();    $themed_items = array();
265    foreach ($items as $i) {    foreach ($items as $i) {
266      $i['field'] = $info; // Add some extra information the themer might like to have      $i['field'] = $info; // Add some extra information the themer might like to have
267      $themed_items[] = theme('nodereferrer_field_'.$formatter, $i);      $themed_items[] = theme('nodereferrer_field_' . $formatter, $i);
268    }    }
269    $out = theme_item_list($themed_items).$pager;    $out = theme('item_list', $themed_items) . $pager;
270    
271    return $out;    return $out;
272  }  }
# Line 277  function theme_nodereferrer_formatter_de Line 279  function theme_nodereferrer_formatter_de
279  }  }
280    
281  function theme_nodereferrer_field_default($element) {  function theme_nodereferrer_field_default($element) {
282    return l($element['title'], 'node/'. $element['nid']);    return l($element['title'], 'node/' . $element['nid']);
283  }  }
284    
285  /**  /**
# Line 330  function nodereferrer_widget_info() { Line 332  function nodereferrer_widget_info() {
332  }  }
333    
334  /**  /**
335   * Implementation of hook_content_is_empty   * Implementation of hook_content_is_empty().
336   */   */
337  function nodereferrer_content_is_empty($item, $field) {  function nodereferrer_content_is_empty($item, $field) {
338    return TRUE;    return TRUE;
# Line 350  function nodereferrer_content_is_empty($ Line 352  function nodereferrer_content_is_empty($
352    
353  function nodereferrer_referrers($nid,  $fieldnames = array(), $nodetypes = array(), $translations = 0, $order = 'DESC') {  function nodereferrer_referrers($nid,  $fieldnames = array(), $nodetypes = array(), $translations = 0, $order = 'DESC') {
354    if ($nodetypes) {    if ($nodetypes) {
355      $filter_nodetypes = "AND n.type IN ('". implode("', '", $nodetypes) ."')";      $filter_nodetypes = "AND n.type IN ('" . implode("', '", $nodetypes) . "')";
356    }    }
357    else {    else {
358      $filter_nodetypes = '';      $filter_nodetypes = '';
359    }    }
360    $fields = content_fields();    $fields = content_fields();
361    // Set default values of fieldnames..    // Set default values of fieldnames.
362    if (!count($fieldnames)) {    if (!count($fieldnames)) {
363      $fieldnames = array_keys($fields);      $fieldnames = array_keys($fields);
364    }    }
# Line 384  function nodereferrer_referrers($nid, $ Line 386  function nodereferrer_referrers($nid, $
386    
387    
388    $values = array();    $values = array();
389    foreach($fieldnames as $fieldname) {    foreach ($fieldnames as $fieldname) {
390      if ($fields[$fieldname]['type'] == 'nodereference') {      if ($fields[$fieldname]['type'] == 'nodereference') {
391        $db_info = content_database_info($fields[$fieldname]);        $db_info = content_database_info($fields[$fieldname]);
392    
# Line 392  function nodereferrer_referrers($nid, $ Line 394  function nodereferrer_referrers($nid, $
394          $query = "SELECT       n.nid, n.vid, n.title          $query = "SELECT       n.nid, n.vid, n.title
395                    FROM         {" . $db_info['table'] . "} nr                    FROM         {" . $db_info['table'] . "} nr
396                    INNER JOIN   {node} current_node ON current_node.nid = %d                    INNER JOIN   {node} current_node ON current_node.nid = %d
397                    INNER JOIN   {node} n ON n.vid = nr.vid AND n.status = 1 ". $filter_nodetypes ."                    INNER JOIN   {node} n ON n.vid = nr.vid AND n.status = 1 " . $filter_nodetypes . "
398                    LEFT JOIN    {node} translations ON current_node.tnid > 0 AND translations.tnid = current_node.tnid                    LEFT JOIN    {node} translations ON current_node.tnid > 0 AND translations.tnid = current_node.tnid
399                    WHERE        (current_node.tnid = 0 AND nr." . $db_info['columns']['nid']['column'] . " = current_node.nid)                    WHERE        (current_node.tnid = 0 AND nr." . $db_info['columns']['nid']['column'] . " = current_node.nid)
400                                 OR                                 OR
401                                 (current_node.tnid > 0 AND nr." . $db_info['columns']['nid']['column'] . " = translations.nid)                                 (current_node.tnid > 0 AND nr." . $db_info['columns']['nid']['column'] . " = translations.nid)
402                    ORDER BY     ". $order;                    ORDER BY     " . $order;
403        } else {        }
404          else {
405          $query = "SELECT       n.nid, n.vid, n.title          $query = "SELECT       n.nid, n.vid, n.title
406                    FROM         {" . $db_info['table'] . "} nr                    FROM         {" . $db_info['table'] . "} nr
407                    INNER JOIN   {node} n ON n.vid = nr.vid AND n.status = 1 ". $filter_nodetypes ."                    INNER JOIN   {node} n ON n.vid = nr.vid AND n.status = 1 " . $filter_nodetypes . "
408                    WHERE        nr." . $db_info['columns']['nid']['column'] . " = %d                    WHERE        nr." . $db_info['columns']['nid']['column'] . " = %d
409                    ORDER BY     ". $order;                    ORDER BY     " . $order;
410        }        }
411    
412        $query = db_rewrite_sql($query);        $query = db_rewrite_sql($query);
# Line 427  function nodereferrer_nodereference_fiel Line 430  function nodereferrer_nodereference_fiel
430    $types = content_fields();    $types = content_fields();
431    foreach($types as $type) {    foreach($types as $type) {
432      if ($type['type'] == 'nodereference') {      if ($type['type'] == 'nodereference') {
433        $options[$type['field_name']] = $type['field_name'] .' ('. $type['widget']['label'] .')';        $options[$type['field_name']] = $type['field_name'] . ' (' . $type['widget']['label'] . ')';
434      }      }
435    }    }
436    return $options;    return $options;
437  }  }
438    
439  /**  /**
440   * Implementation of hook_nodeapi   * Implementation of hook_nodeapi().
441   */   */
442  function nodereferrer_nodeapi($node, $op) {  function nodereferrer_nodeapi($node, $op) {
443    switch ($op) {    switch ($op) {
# Line 450  function nodereferrer_nodeapi($node, $op Line 453  function nodereferrer_nodeapi($node, $op
453          // when the referencing node is updated.          // when the referencing node is updated.
454          if ($field['type'] == 'nodereference') {          if ($field['type'] == 'nodereference') {
455            $node_field = isset($node->$field['field_name']) ? $node->$field['field_name'] : array();            $node_field = isset($node->$field['field_name']) ? $node->$field['field_name'] : array();
456            foreach($node_field as $delta => $item) {            foreach ($node_field as $delta => $item) {
457              $nids[$item['nid']] = $item['nid'];              $nids[$item['nid']] = $item['nid'];
458            }            }
459          }          }
# Line 475  function nodereferrer_nodeapi($node, $op Line 478  function nodereferrer_nodeapi($node, $op
478  }  }
479    
480  /**  /**
481   * Implementation of hook_views_api   * Implementation of hook_views_api().
482   */   */
483  function nodereferrer_views_api() {  function nodereferrer_views_api() {
484    return array(    return array(
485      'api' => '2.0',      'api' => '2.0',
486      'path' => drupal_get_path('module', 'nodereferrer').'/views',      'path' => drupal_get_path('module', 'nodereferrer') . '/views',
487    );    );
488  }  }
489    

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

  ViewVC Help
Powered by ViewVC 1.1.2