function domain_views_tables() {
$domains = domain_domains();
$domain_options = array('-1' => t('Any domain -- use with "Is not one of"'), '***CURRENT_DOMAIN***' => t('Current Domain'));
foreach ($domains as $domain) {
$domain_options[$domain['domain_id']] = $domain['sitename'];
}
$domain_form = array(
'#type' => 'select',
'#options' => $domain_options,
'#multiple' => TRUE,
'#size' => 'size="'. min(8, count($domain_options)) .'"',
);
$tables['domain_access'] = array(
'name' => 'node_access',
'join' => array(
'left' => array(
'table' => 'node',
'field' => 'nid'
),
'right' => array(
'field' => 'nid'
),
'extra' => array(
'realm' => 'domain_id'
),
),
'filters' => array(
'gid' => array(
'name' => t('Domain Access: Domain'),
'value' => $domain_form,
'value-type' => 'array',
'operator' => 'views_handler_operator_or',
'help' => t('This will filter a view to only show nodes from the specified domain.'),
),
),
);
$tables['domain'] = array(
'name' => 'domain',
'join' => array(
'left' => array(
'table' => 'domain_access',
'field' => 'gid'
),
'right' => array(
'field' => 'domain_id'
),
'extra' => array(
'valid' => '1'
),
),
);
return $tables;
}
function domain_views_arguments() {
$arguments = array(
'domain_access' => array(
'name' => t('Domain Access: Domain'),
'handler' => 'domain_views_handler_arg_domain_id', 'help' => t('The argument will filter a view to only show nodes from the specified domain.'),
),
);
return $arguments;
}
function domain_views_handler_arg_domain_id($op, &$query, $argtype, $arg = '') {
switch ($op) {
case 'summary':
$query->add_table('domain_access'); $query->add_table('domain'); $query->add_field('sitename', 'domain');
$query->add_field('domain_id', 'domain');
$query->add_where("domain.valid = '%s'", 1); $fieldinfo['field'] = "domain.domain_id";
return $fieldinfo;
case 'sort':
$query->add_orderby('domain', 'sitename', $argtype);
break;
case 'filter':
$domain_id = ($arg == 'current') ? (int) $GLOBALS['_domain']['domain_id'] : (int) $arg;
$query->add_table('domain_access');
$query->add_where("domain_access.gid = '%s'", $domain_id); $query->set_distinct();
break;
case 'link':
return l($query->sitename, "$arg/" . intval($query->domain_id));
case 'title':
return '';
}
}
function domain_views_query_substitutions($view) {
return array('***CURRENT_DOMAIN***' => $GLOBALS['_domain']['domain_id']);
}