function page_manager_page_execute in Chaos Tool Suite (ctools) 6
Same name and namespace in other branches
- 7 page_manager/plugins/tasks/page.inc \page_manager_page_execute()
Execute a page task.
This is the callback to entries in the Drupal menu system created by the page task.
Parameters
$subtask_id: The name of the page task used.
...: A number of context objects as specified by the user when creating named arguments in the path.
2 string references to 'page_manager_page_execute'
- page_manager_page_form_basic_validate in page_manager/
plugins/ tasks/ page.admin.inc - Validate the basic form.
- page_manager_page_menu_item in page_manager/
plugins/ tasks/ page.admin.inc - Create a menu item for page manager pages.
File
- page_manager/
plugins/ tasks/ page.inc, line 263 - Handle the 'page' task, which creates pages with arbitrary tasks and lets handlers decide how they will be rendered.
Code
function page_manager_page_execute($subtask_id) {
$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 (func_get_args() 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++;
}
}
// Add a fake tab for 'View' so that edit tabs can be added.
if (user_access('administer page manager') && (!isset($page->menu['type']) || in_array($page->menu['type'], array(
'tab',
'default tab',
)))) {
ctools_include('menu');
ctools_menu_add_tab(array(
'title' => t('View'),
'href' => $_GET['q'],
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -10,
));
}
if ($function = ctools_plugin_get_function($task, 'page callback')) {
return call_user_func_array($function, array(
$page,
$contexts,
$args,
));
}
ctools_include('context-task-handler');
$output = ctools_context_handler_render($task, $subtask, $contexts, $args);
if ($output === FALSE) {
return drupal_not_found();
}
return $output;
}