space_taxonomy.inc in Spaces 7
File
spaces_taxonomy/plugins/space_taxonomy.inc
View source
<?php
class space_taxonomy extends space_type_purl {
var $term = NULL;
function title() {
return $this->term->name;
}
function load() {
if ($this->id === 0) {
return TRUE;
}
else {
if ($this->term = taxonomy_term_load($this->id)) {
return TRUE;
}
}
return FALSE;
}
function router($op, $object = NULL) {
switch ($op) {
case 'init':
if (implode('/', array(
arg(0),
arg(1),
)) === 'taxonomy/term' && arg(2)) {
$tid = arg(2);
if ($term = taxonomy_term_load($tid)) {
$this
->router_term($term);
}
}
break;
case 'node':
$node = $object;
$vocab = variable_get('spaces_taxonomy_machine_name', 0);
$fields = field_info_fields();
foreach ($fields as $name => $field) {
if ($field['type'] == 'taxonomy_term_reference' && $vocab == $field['settings']['allowed_values'][0]['vocabulary']) {
$term = isset($node->{$name}['und'][0]['taxonomy_term']) ? $node->{$name}['und'][0]['taxonomy_term'] : taxonomy_term_load($node->{$name}['und'][0]['tid']);
if ($term) {
$this
->router_term($term);
return;
}
}
}
break;
}
return;
}
protected function router_term($term) {
if ($term->vocabulary_machine_name == variable_get('spaces_taxonomy_machine_name', 0)) {
$space = spaces_load('taxonomy', $term->tid);
if ($space && (!$this->active || $this->id != $space->id)) {
$space
->activate();
}
}
}
function views_filter(&$query, $base_table = '', $relationship = '') {
switch ($base_table) {
case 'node':
$table = $query
->ensure_table('taxonomy_term_node', $relationship);
$query
->add_where(0, "{$table}.tid = %d", $this->id);
break;
}
}
}