You are here

function ctools_term_parent_context in Chaos Tool Suite (ctools) 7

Same name and namespace in other branches
  1. 6 plugins/relationships/term_parent.inc \ctools_term_parent_context()

Return a new context based on an existing context.

1 string reference to 'ctools_term_parent_context'
term_parent.inc in plugins/relationships/term_parent.inc
Plugin to provide an relationship handler for term parent.

File

plugins/relationships/term_parent.inc, line 25
Plugin to provide an relationship handler for term parent.

Code

function ctools_term_parent_context($context, $conf) {

  // If unset it wants a generic, unfilled context, which is just NULL.
  if (empty($context->data)) {
    return ctools_context_create_empty('entity:taxonomy_term');
  }
  if (isset($context->data)) {
    $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();

    // If top level term, keep looking up until we see a top level.
    if ($conf['type'] == 'top') {

      // If looking for top level, and there are no parents at all, make sure
      // the current term is the 'top level'.
      if (empty($result)) {
        $result['tid'] = $context->data->tid;
      }
      while (!empty($result['parent'])) {
        $result = db_query('SELECT * FROM {taxonomy_term_hierarchy} WHERE tid = :tid', array(
          ':tid' => $result['parent'],
        ))
          ->fetchAssoc();
      }
    }

    // Load the term.
    if ($result) {
      $term = taxonomy_term_load($result['tid']);
      return ctools_context_create('entity:taxonomy_term', $term);
    }
  }
}