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); } } }