diff --git a/sites/all/modules/i18n/i18nviews/includes/i18nviews.views.inc b/sites/all/modules/i18n/i18nviews/includes/i18nviews.views.inc index 1a5b1fa..414e7aa 100644 --- a/sites/all/modules/i18n/i18nviews/includes/i18nviews.views.inc +++ b/sites/all/modules/i18n/i18nviews/includes/i18nviews.views.inc @@ -17,11 +17,42 @@ function i18nviews_views_data() { */ function i18nviews_views_handlers() { return array( + 'info' => array( + 'path' => drupal_get_path('module', 'i18nviews') . '/includes', + ), 'handlers' => array( 'content_negotiation_filter_handler' => array( 'parent' => 'views_handler_filter', 'file' => 'includes/content_negotiation_filter_handler.inc' ), + 'i18nviews_handler_field_taxonomy' => array( + 'parent' => 'views_handler_field_taxonomy', + ), + 'i18nviews_handler_field_term_description' => array( + 'parent' => 'views_handler_field_markup', + ), + 'i18nviews_handler_field_term_node_tid' => array( + 'parent' => 'views_handler_field_term_node_tid', + ), + 'i18nviews_handler_argument_term_node_tid' => array( + 'parent' => 'views_handler_argument_term_node_tid', + ), + 'i18nviews_handler_filter_term_node_tid' => array( + 'parent' => 'views_handler_filter_term_node_tid', + ), ), ); } + +/** + * Implemenation of hook_views_data_alter(). + */ +function i18nviews_views_data_alter(&$data) { + $data['term_data']['name']['field']['handler'] = 'i18nviews_handler_field_taxonomy'; + $data['term_data']['description']['field']['handler'] = 'i18nviews_handler_field_term_description'; + $data['term_node']['tid']['field']['handler'] = 'i18nviews_handler_field_term_node_tid'; + $data['term_node']['tid']['argument']['handler'] = 'i18nviews_handler_argument_term_node_tid'; + $data['term_node']['tid']['filter']['handler'] = 'i18nviews_handler_filter_term_node_tid'; + //dsm($data); +} + diff --git a/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_argument_term_node_tid.inc b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_argument_term_node_tid.inc new file mode 100644 index 0000000..e554b22 --- /dev/null +++ b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_argument_term_node_tid.inc @@ -0,0 +1,19 @@ +value), '%d')); + + $result = db_query("SELECT name, tid FROM {term_data} WHERE tid IN ($placeholders)", $this->value); + while ($term = db_fetch_object($result)) { + $titles[] = check_plain(tt('taxonomy:term:'. $term->tid .':name', $term->name)); + } + return $titles; + } +} + diff --git a/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_taxonomy.inc b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_taxonomy.inc new file mode 100644 index 0000000..1265b77 --- /dev/null +++ b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_taxonomy.inc @@ -0,0 +1,17 @@ + $value) { + if (isset($value->term_data_name)) { + $tid = (isset($value->term_data_tid)) ? $value->term_data_tid : $value->tid; + $values[$key]->term_data_name = tt('taxonomy:term:'. $tid .':name', $value->term_data_name); + } + } + } +} \ No newline at end of file diff --git a/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_term_description.inc b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_term_description.inc new file mode 100644 index 0000000..db1cd0f --- /dev/null +++ b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_term_description.inc @@ -0,0 +1,17 @@ + $value) { + if (isset($value->term_data_description)) { + $tid = (isset($value->term_data_tid)) ? $value->term_data_tid : $value->tid; + $values[$key]->term_data_description = tt('taxonomy:term:'. $tid .':description', $value->term_data_description); + } + } + } +} \ No newline at end of file diff --git a/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_term_node_tid.inc b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_term_node_tid.inc new file mode 100644 index 0000000..808e82b --- /dev/null +++ b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_field_term_node_tid.inc @@ -0,0 +1,40 @@ +field_alias = $this->aliases['vid']; + $vids = array(); + foreach ($values as $result) { + if (!empty($result->{$this->aliases['vid']})) { + $vids[] = $result->{$this->aliases['vid']}; + } + } + + if ($vids) { + $voc = ''; + if (!empty($this->options['limit']) && !empty($this->options['vids'])) { + $voc = " AND td.vid IN (" . implode(', ', array_keys(array_filter($this->options['vids']))) . ")"; + } + + $result = db_query("SELECT tn.vid AS node_vid, td.*, v.name as vocabulary FROM {term_data} td INNER JOIN {term_node} tn ON td.tid = tn.tid INNER JOIN {vocabulary} v ON v.vid = td.vid WHERE tn.vid IN (" . implode(', ', $vids) . ")$voc ORDER BY td.weight, td.name"); + + while ($term = db_fetch_object($result)) { + $name = tt('taxonomy:term:'. $term->tid .':name', $term->name); + $this->items[$term->node_vid][$term->tid]['name'] = check_plain($name); + $this->items[$term->node_vid][$term->tid]['tid'] = $term->tid; + $this->items[$term->node_vid][$term->tid]['vid'] = $term->vid; + $this->items[$term->node_vid][$term->tid]['vocabulary'] = check_plain($term->vocabulary); + + if (!empty($this->options['link_to_taxonomy'])) { + $this->items[$term->node_vid][$term->tid]['make_link'] = TRUE; + $this->items[$term->node_vid][$term->tid]['path'] = taxonomy_term_path($term); + } + } + } + } +} + diff --git a/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_filter_term_node_tid.inc b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_filter_term_node_tid.inc new file mode 100644 index 0000000..b6d3784 --- /dev/null +++ b/sites/all/modules/i18n/i18nviews/includes/i18nviews_handler_filter_term_node_tid.inc @@ -0,0 +1,170 @@ +options['vid']); + if (empty($vocabulary) && $this->options['limit']) { + $form['markup'] = array( + '#prefix' => '