| 1 |
<?php
|
| 2 |
// $Id: relativity_views.inc,v 1.3 2007/04/03 06:07:14 darius Exp $
|
| 3 |
|
| 4 |
function relativity_views_tables() {
|
| 5 |
$tables['relativity'] = array(
|
| 6 |
'name' => 'relativity',
|
| 7 |
'provider' => 'internal',
|
| 8 |
'join' => array('left' => array('table' => 'node',
|
| 9 |
'field' => 'nid'),
|
| 10 |
'right' => array('field' => 'nid')),
|
| 11 |
'filters' => array('parent_nid' => array('name' => t('Relativity: Parent Node'),
|
| 12 |
'list' => 'views_handler_filter_relativity_parent_zero',
|
| 13 |
'operator' => 'views_handler_operator_andor',
|
| 14 |
'help' => t('This allows you to filter nodes based on parent node ID and title.')),
|
| 15 |
),
|
| 16 |
);
|
| 17 |
|
| 18 |
$tables['relativity_parent_node'] = array(
|
| 19 |
'name' => 'node',
|
| 20 |
'provider' => 'internal',
|
| 21 |
'join' => array(
|
| 22 |
'left' => array(
|
| 23 |
'table' => 'relativity',
|
| 24 |
'field' => 'parent_nid'
|
| 25 |
),
|
| 26 |
'right' => array(
|
| 27 |
'field' => 'nid'
|
| 28 |
)
|
| 29 |
),
|
| 30 |
'fields' => array(
|
| 31 |
'title' => array(
|
| 32 |
'name' => t('Relativity: Parent Title'),
|
| 33 |
'handler' => array(
|
| 34 |
'views_handler_field_relativity_parent_title' => t('As Link'),
|
| 35 |
'views_handler_field_relativity_parent_title_nl' => t('Without Link'),
|
| 36 |
),
|
| 37 |
'sortable' => TRUE,
|
| 38 |
'addlfields' => array('nid'),
|
| 39 |
'help' => t('Display the title of the parent node'),
|
| 40 |
),
|
| 41 |
),
|
| 42 |
'sorts' => array(
|
| 43 |
'title' => array(
|
| 44 |
'name' => t('Relativity: Parent Title'),
|
| 45 |
'help' => t('Sort by the title of the parent node'),
|
| 46 |
),
|
| 47 |
),
|
| 48 |
);
|
| 49 |
|
| 50 |
return $tables;
|
| 51 |
}
|
| 52 |
|
| 53 |
function relativity_views_arguments() {
|
| 54 |
$arguments = array(
|
| 55 |
'relativity_parent' => array(
|
| 56 |
'name' => t("Relativity: Parent Node ID"),
|
| 57 |
'handler' => "views_handler_arg_relativity_parent",
|
| 58 |
),
|
| 59 |
);
|
| 60 |
return $arguments;
|
| 61 |
}
|
| 62 |
|
| 63 |
function relativity_views_default_views() {
|
| 64 |
|
| 65 |
}
|
| 66 |
|
| 67 |
function views_handler_arg_relativity_parent($op, & $query, $argtype, $arg = '') {
|
| 68 |
switch ($op)
|
| 69 |
{
|
| 70 |
case 'summary' :
|
| 71 |
$query->ensure_table("relativity_parent_node");
|
| 72 |
$query->add_field("nid");
|
| 73 |
$query->add_field("parent_nid", "relativity");
|
| 74 |
$query->add_field("title", "relativity_parent_node");
|
| 75 |
$query->add_field("nid", "relativity_parent_node", "pnid");
|
| 76 |
$query->add_where("relativity_parent_node.nid IS NOT NULL");
|
| 77 |
$fieldinfo['field'] = "relativity_parent_node.title";
|
| 78 |
return $fieldinfo;
|
| 79 |
break;
|
| 80 |
case 'sort':
|
| 81 |
$query->add_orderby('relativity_parent_node', 'title', $argtype);
|
| 82 |
break;
|
| 83 |
case 'filter' :
|
| 84 |
$query->ensure_table("relativity");
|
| 85 |
$query->add_where("relativity.parent_nid = %d", $arg);
|
| 86 |
break;
|
| 87 |
case 'link' :
|
| 88 |
return l($query->title, "$arg/$query->pnid");
|
| 89 |
case 'title' :
|
| 90 |
if ($query)
|
| 91 |
{
|
| 92 |
$term = db_fetch_object(db_query("SELECT title FROM {node} WHERE nid = '%d'", $query));
|
| 93 |
return $term->title;
|
| 94 |
}
|
| 95 |
}
|
| 96 |
}
|
| 97 |
|
| 98 |
/*
|
| 99 |
* Format a field as a link to the parent node
|
| 100 |
*/
|
| 101 |
function views_handler_field_relativity_parent_title($fieldinfo, $fielddata, $value, $data) {
|
| 102 |
return l($value, "node/$data->relativity_parent_node_nid");
|
| 103 |
}
|
| 104 |
|
| 105 |
function views_handler_field_relativity_parent_title_nl($fieldinfo, $fielddata, $value, $data) {
|
| 106 |
return check_plain($value);
|
| 107 |
}
|
| 108 |
|
| 109 |
function views_handler_filter_relativity_parent_zero() {
|
| 110 |
$parents = array();
|
| 111 |
$result = db_query("SELECT DISTINCT parent_nid FROM {relativity} ORDER BY parent_nid");
|
| 112 |
while ($obj = db_fetch_object($result)) {
|
| 113 |
$node = node_load($obj->parent_nid);
|
| 114 |
$parents[$obj->parent_nid] = "$obj->parent_nid. $node->title";
|
| 115 |
}
|
| 116 |
return $parents;
|
| 117 |
}
|