upgrade omega again
[indybay:drupal.git] / docs / sites / all / modules / contrib / context / plugins / context_condition_node_taxonomy.inc
1 <?php
2
3 /**
4  * Expose node taxonomy terms as a context condition.
5  */
6 class context_condition_node_taxonomy extends context_condition_node {
7   function condition_values() {
8     $values = array();
9     if (module_exists('taxonomy')) {
10       foreach (taxonomy_get_vocabularies() as $vocab) {
11         if (empty($vocab->tags)) {
12           foreach (taxonomy_get_tree($vocab->vid) as $term) {
13             $values[$term->tid] = check_plain($term->name);
14           }
15         }
16       }
17     }
18     return $values;
19   }
20
21   function condition_form($context) {
22     $form = parent::condition_form($context);
23     $form['#type'] = 'select';
24     $form['#size'] = 12;
25     $form['#multiple'] = TRUE;
26     $vocabularies = taxonomy_get_vocabularies();
27     $options = array();
28     foreach ($vocabularies as $vid => $vocabulary) {
29       $tree = taxonomy_get_tree($vid);
30       if ($tree && (count($tree) > 0)) {
31         $options[$vocabulary->name] = array();
32         foreach ($tree as $term) {
33           $options[$vocabulary->name][$term->tid] = str_repeat('-', $term->depth) . $term->name;
34         }
35       }
36     }
37     $form['#options'] = $options;
38     return $form;
39   }
40
41   function execute($node, $op) {
42     // build a list of each taxonomy reference field belonging to the bundle for the current node
43     $fields = field_info_fields();
44     $instance_fields = field_info_instances('node', $node->type);
45     $check_fields = array();
46     foreach ($instance_fields as $key => $field_info) {
47       if ($fields[$key]['type'] == 'taxonomy_term_reference') {
48         $check_fields[] = $key;
49       }
50     }
51
52     if ($this->condition_used() && !empty($check_fields)) {
53       foreach ($check_fields as $field) {
54         if ($terms = field_get_items('node', $node, $field)) {
55           foreach ($terms as $term) {
56             foreach ($this->get_contexts($term['tid']) as $context) {
57               // Check the node form option.
58               if ($op === 'form') {
59                 $options = $this->fetch_from_context($context, 'options');
60                 if (!empty($options['node_form'])) {
61                   $this->condition_met($context, $term['tid']);
62                 }
63               }
64               else {
65                 $this->condition_met($context, $term['tid']);
66               }
67             }
68           }
69         }
70       }
71     }
72   }
73 }