danielebarchiesi@0: t('Term parent'), danielebarchiesi@0: 'keyword' => 'parent_term', danielebarchiesi@0: 'description' => t('Adds a taxonomy term parent from a term context.'), danielebarchiesi@0: 'required context' => new ctools_context_required(t('Term'), 'entity:taxonomy_term'), danielebarchiesi@0: 'context' => 'ctools_term_parent_context', danielebarchiesi@0: 'edit form' => 'ctools_term_parent_settings_form', danielebarchiesi@0: 'defaults' => array('type' => 'top'), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Return a new context based on an existing context. danielebarchiesi@0: */ danielebarchiesi@0: function ctools_term_parent_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('entity:taxonomy_term'); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (isset($context->data)) { danielebarchiesi@0: $result = db_query('SELECT t1.* FROM {taxonomy_term_hierarchy} t1 INNER JOIN {taxonomy_term_hierarchy} t2 ON t1.tid = t2.parent WHERE t2.tid = :tid', array(':tid' => $context->data->tid))->fetchAssoc(); danielebarchiesi@0: danielebarchiesi@0: // If top level term, keep looking up until we see a top level. danielebarchiesi@0: if ($conf['type'] == 'top') { danielebarchiesi@0: // If looking for top level, and there are no parents at all, make sure danielebarchiesi@0: // the current term is the 'top level'. danielebarchiesi@0: if (empty($result)) { danielebarchiesi@0: $result['tid'] = $context->data->tid; danielebarchiesi@0: } danielebarchiesi@0: while (!empty($result['parent'])) { danielebarchiesi@0: $result = db_query('SELECT * FROM {taxonomy_term_hierarchy} WHERE tid = :tid', array(':tid' => $result['parent']))->fetchAssoc(); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Load the term. danielebarchiesi@0: if ($result) { danielebarchiesi@0: $term = taxonomy_term_load($result['tid']); danielebarchiesi@0: return ctools_context_create('entity:taxonomy_term', $term); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Settings form for the relationship. danielebarchiesi@0: */ danielebarchiesi@0: function ctools_term_parent_settings_form($form, &$form_state) { danielebarchiesi@0: $conf = $form_state['conf']; danielebarchiesi@0: danielebarchiesi@0: $form['type'] = array( danielebarchiesi@0: '#type' => 'select', danielebarchiesi@0: '#title' => t('Relationship type'), danielebarchiesi@0: '#options' => array('parent' => t('Immediate parent'), 'top' => t('Top level term')), danielebarchiesi@0: '#default_value' => $conf['type'], danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return $form; danielebarchiesi@0: }