2.0);
}
/**
* Implement hook_theme().
*/
function domain_views_theme() {
return array(
'domain_views_view_multiple_field' => array(
'arguments' => array('items' => NULL, 'field' => NULL, 'data' => NULL),
),
);
}
/**
* Theme multiple field output.
*
* Note that we only use $items in the default, but other themes might
* wish to leverage the extra data.
*
* @param $items
* An array of output strings, as defined by the view field definition.
* @param $field
* A string representing the name of the field being displayed.
* @param $values
* An object containing the prepared views data, before it was altered by our handler.
* @return
* Themed HTML output.
*/
function theme_domain_views_view_multiple_field($items, $field, $values) {
$output = '';
foreach ($items as $item) {
$output .= '
'. $item .'
';
}
return $output;
}
/**
* Access callback for use with domain_views_plugin_access.
*
* @param $domains
* An array of domain ids that may access this view.
* @param $strict
* Boolean value indicating if strict rules should be applied.
* @param $member
* Boolean value indicating if membership rules should be applied.
* @return
* Boolean TRUE or FALSE.
*/
function domain_views_access($domains, $strict = TRUE, $member = FALSE) {
global $_domain, $user;
$account = $user;
$check = FALSE;
// Apply membership rules?
if ($member) {
$grants['domain_id'] = domain_get_user_domains($account);
if (isset($grants['domain_id'][-1])) {
$grants['domain_id'][0] = 0;
unset($grants['domain_id'][-1]);
}
$check = TRUE;
}
// Apply strict rules? These are harsher than membership and get applied last.
if ($strict) {
$grants = domain_views_get_grants();
$check = TRUE;
}
// If no grants, stop.
if ($check && (empty($grants['domain_id']) || !in_array($_domain['domain_id'], $grants['domain_id']))) {
return FALSE;
}
// None of the above, just match the current domain.
else if (!$check) {
$grants['domain_id'] = array($_domain['domain_id']);
}
// Otherwise, convert and check.
foreach ($grants['domain_id'] as $grant) {
if ($grant == 0) {
$grant = -1;
}
if (in_array($grant, $domains)) {
return TRUE;
}
}
return FALSE;
}
/**
* Helper function to return the node grants for this user.
*
* @param $account
* The account object of the user requesting the View.
* @return $grants
* An array indicating which domains the user may access.
*/
function domain_views_get_grants($account = NULL) {
global $user, $_domain;
static $grants;
if (empty($account)) {
$account = $user;
}
if (isset($grants[$account->uid])) {
return $grants[$account->uid];
}
$user_grants = domain_node_grants($account, 'view');
// Domain All gets in the way of normal grants.
if (!empty($user_grants['domain_all'])) {
$user_grants['domain_id'] = array($_domain['domain_id']);
_domain_views_alter_grants($user_grants);
}
$grants[$account->uid] = $user_grants;
return $grants[$account->uid];
}
/**
* Helper function to hook_domaingrants().
* This should be replaced by a drupal_alter().
*/
function _domain_views_alter_grants(&$grants) {
static $_modules;
if (!isset($_modules)) {
$_modules = module_implements('domaingrants');
}
if (!empty($_modules)) {
foreach ($_modules as $module) {
// Cannot use module_invoke_all() since these are passed by reference.
$function = $module .'_domaingrants';
$function($grants, $account, $op);
}
}
}