diff --git a/domain_views.info b/domain_views.info index 9e40703..452aa9a 100644 --- a/domain_views.info +++ b/domain_views.info @@ -9,6 +9,8 @@ files[] = domain_views.views.inc ; Includes files[] = includes/domain_views_handler_argument_domain_access_gid.inc files[] = includes/domain_views_handler_field_domain_id.inc +files[] = includes/domain_views_handler_field_domain_id_node_multiple.inc +files[] = includes/domain_views_handler_field_domain_id_user_multiple.inc files[] = includes/domain_views_handler_field_domain_sitename.inc files[] = includes/domain_views_handler_field_domain_subdomain.inc files[] = includes/domain_views_handler_field_domain_access_sitename.inc diff --git a/domain_views.views.inc b/domain_views.views.inc index 53d1ee9..cfbb17d 100644 --- a/domain_views.views.inc +++ b/domain_views.views.inc @@ -240,6 +240,14 @@ function domain_views_views_data() { 'handler' => 'domain_views_handler_argument_domain_access_gid', ), ); + $data['domain_access']['gids'] = array( + 'title' => t('Domains'), + 'help' => t('All domains of the record displayed in a single row.'), + 'field' => array( + 'click sortable' => FALSE, + 'handler' => 'domain_views_handler_field_domain_id_node_multiple', + ), + ); // Define the fields. $data['domain_access']['realm'] = array( 'title' => t('Access Type'), @@ -345,6 +353,14 @@ function domain_views_views_data() { 'label' => t('Domain editors'), ), ); + $data['domain_editor']['domain_ids'] = array( + 'title' => t('Domains'), + 'help' => t('All domain(s) an editor is assigned to, displayed in a single row.'), + 'field' => array( + 'click sortable' => FALSE, + 'handler' => 'domain_views_handler_field_domain_id_user_multiple', + ), + ); return $data; } diff --git a/includes/domain_views_handler_field_domain_id_node_multiple.inc b/includes/domain_views_handler_field_domain_id_node_multiple.inc new file mode 100755 index 0000000..b432841 --- /dev/null +++ b/includes/domain_views_handler_field_domain_id_node_multiple.inc @@ -0,0 +1,168 @@ +field_alias = 'nid'; + } + + function option_definition() { + $options = parent::option_definition(); + $options['link_to_default_domain'] = array('default' => FALSE); + $options['link_to_original_domain'] = array('default' => FALSE); + $options['list_all_domains'] = array('default' => FALSE); + + $options['display_method'] = array('default' => 'domain_id'); + $options['link_option'] = array('default' => 'none'); + + $options['all_domain_show'] = array('default' => 'domains'); + $options['all_domain_text'] = array('default' => 'All Domains'); + return $options; + } + + /** + * Provide link to default domain option + */ + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + // Added for backward compatibility with older versions + if ($this->options['link_to_domain_id'] || $this->options['link_to_sitename']) { + $this->options['link_option'] = 'link_to_domain'; + + // Unset old options + $form['link_to_domain_id'] = array('#type' => 'value', '#value' => FALSE); + $form['link_to_sitename'] = array('#type' => 'value', '#value' => FALSE); + } + + $form['display_method'] = array( + '#title' => t('Display as'), + '#type' => 'select', + '#options' => array( + 'domain_id' => t('Domain ID'), + 'sitename' => t('Site Name'), + 'subdomain' => t('Subdomain'), + ), + '#default_value' => ($this->options['display_method']) ? $this->options['display_method'] : 'domain_id', + ); + + $form['link_option'] = array( + '#title' => t('Link options'), + '#type' => 'select', + '#options' => array( + 'none' => t('No link'), + 'link_to_domain' => t('Link this field to its domain'), + ), + '#default_value' => ($this->options['link_option']) ? $this->options['link_option'] : 'none', + ); + $form['all_domain_show'] = array( + '#title' => t('All affiliates display'), + '#type' => 'select', + '#options' => array( + 'domains' => t('Domains'), + 'text' => t('Text'), + ), + '#default_value' => ($this->options['all_domain_show']) ? $this->options['all_domain_show'] : 'domains', + ); + $form['all_domain_text'] = array( + '#title' => t('All domain text'), + '#type' => 'textfield', + '#default_value' => ($this->options['all_domain_text']) ? $this->options['all_domain_text'] : 'All Domains', + '#description' => t('The text to display when item is available on all domains.'), + '#states' => array( + 'invisible' => array( + ':input[name="options[all_domain_show]"]' => array('value' => 'domains'), + ), + ), + ); + } + + function pre_render(&$values) { + $nids = array(); + $this->items = array(); + + foreach ($values as $result) { + $nids[] = $result->nid; + } + + if ($nids) { + //$result = db_query("SELECT da.nid, da.gid AS domain_id, d.sitename, d.subdomain FROM {domain_access} da INNER JOIN {domain} d ON da.gid = d.domain_id WHERE da.realm = 'domain_id' AND da.nid IN (:nids) ORDER BY da.nid", + //array(':nids' => $nids)); + $result = db_query("SELECT da.nid, da.gid AS domain_id, d.sitename, d.subdomain FROM {domain_access} da LEFT JOIN {domain} d ON da.gid = d.domain_id WHERE da.nid IN (:nids) ORDER BY da.gid", + array(':nids' => $nids)); + foreach ($result as $row) { + if($row->domain_id == 0){ + if ($this->options['all_domain_show'] == 'text') { + $this->items[$row->nid][$row->domain_id]['sitename'] = check_plain($this->options['all_domain_text']); + } elseif ($this->options['all_domain_show'] == 'domains') { + if (!count($this->allDomains)) { + $dresult = db_query("SELECT * FROM {domain} ORDER BY domain_id"); + foreach ($dresult as $drow) { + $this->allDomains[$drow->domain_id] = $drow; + } + } + foreach ($this->allDomains as $domain) { + $this->items[$row->nid][$domain->domain_id]['sitename'] = check_plain($domain->sitename); + $this->items[$row->nid][$domain->domain_id]['domain_id'] = $domain->domain_id; + $this->items[$row->nid][$domain->domain_id]['subdomain'] = $domain->subdomain; + } + } + } elseif(!isset($this->items[$row->nid][0])) { + $this->items[$row->nid][$row->domain_id]['sitename'] = check_plain($row->sitename); + $this->items[$row->nid][$row->domain_id]['domain_id'] = $row->domain_id; + $this->items[$row->nid][$row->domain_id]['subdomain'] = $row->subdomain; + } + } + } + } + + function render_item($count, $item) { + switch ($this->options['display_method']) { + case 'sitename': + $text = $item['sitename']; + break; + case 'subdomain': + $text = $item['subdomain']; + break; + default: + $text = $item['domain_id']; + break; + } + + switch ($this->options['link_option']) { + case 'link_to_domain': + $path = $item['subdomain']; + break; + default: + $path = NULL; + break; + } + + if ($path) { + return l($text, 'http://' . $path); + } + else { + return $text; + } + } +} diff --git a/includes/domain_views_handler_field_domain_id_user_multiple.inc b/includes/domain_views_handler_field_domain_id_user_multiple.inc new file mode 100644 index 0000000..7008305 --- /dev/null +++ b/includes/domain_views_handler_field_domain_id_user_multiple.inc @@ -0,0 +1,122 @@ +field_alias = 'uid'; + } + + function option_definition() { + $options = parent::option_definition(); + $options['link_to_default_domain'] = array('default' => FALSE); + $options['link_to_original_domain'] = array('default' => FALSE); + $options['list_all_domains'] = array('default' => FALSE); + + $options['display_method'] = array('default' => 'domain_id'); + $options['link_option'] = array('default' => 'none'); + return $options; + } + + /** + * Provide link to default domain option + */ + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + // Added for backward compatibility with older versions + if ($this->options['link_to_domain_id'] || $this->options['link_to_sitename']) { + $this->options['link_option'] = 'link_to_domain'; + + // Unset old options + $form['link_to_domain_id'] = array('#type' => 'value', '#value' => FALSE); + $form['link_to_sitename'] = array('#type' => 'value', '#value' => FALSE); + } + + $form['display_method'] = array( + '#title' => t('Display as'), + '#type' => 'select', + '#options' => array( + 'domain_id' => t('Domain ID'), + 'sitename' => t('Site Name'), + 'subdomain' => t('Subdomain'), + ), + '#default_value' => ($this->options['display_method']) ? $this->options['display_method'] : 'domain_id', + ); + + $form['link_option'] = array( + '#title' => t('Link options'), + '#type' => 'select', + '#options' => array( + 'none' => t('No link'), + 'link_to_domain' => t('Link this field to its domain'), + ), + '#default_value' => ($this->options['link_option']) ? $this->options['link_option'] : 'none', + ); + } + + function pre_render(&$values) { + $uids = array(); + $this->items = array(); + + foreach ($values as $result) { + $uids[] = $result->uid; + } + + if ($uids) { + $result = db_query("SELECT de.uid, de.domain_id, d.sitename, d.subdomain FROM {domain_editor} de INNER JOIN {domain} d ON de.domain_id = d.domain_id WHERE de.uid IN (:uids) ORDER BY de.uid", + array(':uids' => $uids)); + foreach ($result as $row) { + $this->items[$row->uid][$row->domain_id]['sitename'] = check_plain($row->sitename); + $this->items[$row->uid][$row->domain_id]['domain_id'] = $row->domain_id; + $this->items[$row->uid][$row->domain_id]['subdomain'] = $row->subdomain; + } + } + } + + function render_item($count, $item) { + switch ($this->options['display_method']) { + case 'sitename': + $text = $item['sitename']; + break; + case 'subdomain': + $text = $item['subdomain']; + break; + default: + $text = $item['domain_id']; + break; + } + + switch ($this->options['link_option']) { + case 'link_to_domain': + $path = $item['subdomain']; + break; + default: + $path = NULL; + break; + } + + if ($path) { + return l($text, 'http://' . $path); + } + else { + return $text; + } + } +}