function menu_token_panel_context::object_load in Menu Token 7
This function is used to load the relevant token replacement object.
Overrides menu_token_handler::object_load
File
- plugins/
menu_token_panel_context.inc, line 20
Class
Code
function object_load($options) {
$original_map = arg();
$parts = array_slice($original_map, 0, MENU_MAX_PARTS);
$ancestors = menu_get_ancestors($parts);
$router_item = db_query_range('SELECT * FROM {menu_router} WHERE path IN (:ancestors) ORDER BY fit DESC', 0, 1, array(
':ancestors' => $ancestors,
))
->fetchAssoc();
// only run for page manager callbacks
if ($router_item['page_callback'] == 'page_manager_page_execute') {
$entity_type = $options['_type'];
$router_item = menu_get_item();
$subtask_id = $router_item['page_arguments'][0];
// This code was shamelessly taken from page_manager_page_execute()
$page = page_manager_page_load($subtask_id);
$task = page_manager_get_task($page->task);
$subtask = page_manager_get_task_subtask($task, $subtask_id);
// Turn the contexts into a properly keyed array.
$contexts = array();
$args = array();
foreach ($router_item['page_arguments'] as $count => $arg) {
if (is_object($arg) && get_class($arg) == 'ctools_context') {
$contexts[$arg->id] = $arg;
$args[] = $arg->original_argument;
}
else {
if ($count) {
$args[] = $arg;
}
}
}
$count = 0;
$names = page_manager_page_get_named_arguments($page->path);
$bits = explode('/', $page->path);
if ($page->arguments) {
foreach ($page->arguments as $name => $argument) {
// Optional arguments must be converted to contexts too, if they exist.
if ($bits[$names[$name]][0] == '!') {
ctools_include('context');
$argument['keyword'] = $name;
if (isset($args[$count])) {
// Hack: use a special argument config variable to learn if we need
// to use menu_tail style behavior:
if (empty($argument['settings']['use_tail'])) {
$value = $args[$count];
}
else {
$value = implode('/', array_slice($args, $count));
}
$context = ctools_context_get_context_from_argument($argument, $value);
}
else {
// make sure there is a placeholder context for missing optional contexts.
$context = ctools_context_get_context_from_argument($argument, NULL, TRUE);
// Force the title to blank for replacements
}
if ($context) {
$contexts[$context->id] = $context;
}
}
$count++;
}
}
foreach ($contexts as $key => $context) {
list($key, $thing, $entity) = $context->type;
if ($entity == $entity_type) {
return $context->data;
}
}
}
}