function ctools_term_has_parent_ctools_access_check
Check for access.
1 string reference to 'ctools_term_has_parent_ctools_access_check'
- term_has_parent.inc in plugins/
access/ term_has_parent.inc - Plugin to provide access control based upon a parent term.
File
-
plugins/
access/ term_has_parent.inc, line 102
Code
function ctools_term_has_parent_ctools_access_check($conf, $context) {
// As far as I know there should always be a context at this point, but this
// is safe.
if (empty($context) || empty($context->data) || empty($context->data->vid) || empty($context->data->tid)) {
return FALSE;
}
// Get the $vid.
if (!isset($conf['vid'])) {
return FALSE;
}
$vid = $conf['vid'];
// we'll start looking up the hierarchy from our context term id.
$current_term = $context->data->tid;
$term = '';
// Scan up the tree.
while (TRUE) {
// Select parent as term_parent to avoid PHP5 complications with the parent keyword.
// @todo: Find a way to reduce the number of queries required for really deep hierarchies.
$term = db_query("SELECT parent AS term_parent, tid AS tid FROM {taxonomy_term_hierarchy} th WHERE th.tid = :tid", array(
':tid' => $current_term,
))->fetchObject();
// If no term is found, get out of the loop.
if (!$term || empty($term->tid)) {
break;
}
// Check the term selected, if the user asked it to.
if (!empty($conf['include_self']) && isset($conf['vid_' . $vid][$term->tid])) {
return TRUE;
}
// Did we find the parent TID we were looking for?
if (isset($conf['vid_' . $vid][$term->tid])) {
// YES, we're done!
return TRUE;
}
// Nope, we didn't find it.
// If this is the top of the hierarchy, stop scanning.
if ($term->term_parent == 0) {
break;
}
// Update the parent, and keep scanning.
$current_term = $term->term_parent;
}
return FALSE;
}