danielebarchiesi@0: t('Multiple terms from node'), danielebarchiesi@0: 'keyword' => 'terms', danielebarchiesi@0: 'description' => t('Adds a taxonomy terms from a node context; if multiple terms are selected, they wil be concatenated.'), danielebarchiesi@0: 'required context' => new ctools_context_required(t('Node'), 'node'), danielebarchiesi@0: 'context' => 'ctools_terms_from_node_context', danielebarchiesi@0: 'edit form' => 'ctools_terms_from_node_settings_form', danielebarchiesi@0: 'defaults' => array('vocabulary' => array(), 'concatenator' => ','), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Return a new context based on an existing context. danielebarchiesi@0: */ danielebarchiesi@0: function ctools_terms_from_node_context($context, $conf) { danielebarchiesi@0: // If unset it wants a generic, unfilled context, which is just NULL. danielebarchiesi@0: if (empty($context->data)) { danielebarchiesi@0: return ctools_context_create_empty('terms', NULL); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Collect all terms for the chosen vocabulary and concatenate them. danielebarchiesi@0: $node = $context->data; danielebarchiesi@0: $terms = array(); danielebarchiesi@0: danielebarchiesi@0: $fields = field_info_instances('node', $node->type); danielebarchiesi@0: foreach ($fields as $name => $info) { danielebarchiesi@0: $field_info = field_info_field($name); danielebarchiesi@0: if ($field_info['type'] == 'taxonomy_term_reference' && (empty($conf['vocabulary']) || $conf['vocabulary'][$field_info['settings']['allowed_values'][0]['vocabulary']])) { danielebarchiesi@0: $items = field_get_items('node', $node, $name); danielebarchiesi@0: if (is_array($items)) { danielebarchiesi@0: foreach ($items as $item) { danielebarchiesi@0: $terms[] = $item['tid']; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (!empty($terms)) { danielebarchiesi@0: $all_terms = ctools_break_phrase(implode($conf['concatenator'], $terms)); danielebarchiesi@0: return ctools_context_create('terms', $all_terms); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Settings form for the relationship. danielebarchiesi@0: */ danielebarchiesi@0: function ctools_terms_from_node_settings_form($form, &$form_state) { danielebarchiesi@0: $conf = $form_state['conf']; danielebarchiesi@0: danielebarchiesi@0: $options = array(); danielebarchiesi@0: foreach (taxonomy_vocabulary_get_names() as $name => $vocabulary) { danielebarchiesi@0: $options[$name] = $vocabulary->name; danielebarchiesi@0: } danielebarchiesi@0: $form['vocabulary'] = array( danielebarchiesi@0: '#title' => t('Vocabulary'), danielebarchiesi@0: '#type' => 'checkboxes', danielebarchiesi@0: '#options' => $options, danielebarchiesi@0: '#default_value' => $conf['vocabulary'], danielebarchiesi@0: '#prefix' => '
', danielebarchiesi@0: '#suffix' => '
', danielebarchiesi@0: ); danielebarchiesi@0: $form['concatenator'] = array( danielebarchiesi@0: '#title' => t('Concatenator'), danielebarchiesi@0: '#type' => 'select', danielebarchiesi@0: '#options' => array(',' => ', (AND)', '+' => '+ (OR)'), danielebarchiesi@0: '#default_value' => $conf['concatenator'], danielebarchiesi@0: '#prefix' => '
', danielebarchiesi@0: '#suffix' => '
', danielebarchiesi@0: '#description' => t("When the value from this context is passed on to a view as argument, the terms can be concatenated in the form of 1+2+3 (for OR) or 1,2,3 (for AND)."), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return $form; danielebarchiesi@0: }