function _page_manager_get_operation_content in Chaos Tool Suite (ctools) 7
Same name and namespace in other branches
- 6 page_manager/page_manager.admin.inc \_page_manager_get_operation_content()
Fetch the content for an operation, after it's been discovered from arguments.
This system runs through the CTools form wizard. Each operation specifies a form or set of forms that it may use. Operations may also specify wrappers and can set their own next/finish handlers so that they can make additional things happen at the end.
1 call to _page_manager_get_operation_content()
- page_manager_get_operation_content in page_manager/
page_manager.admin.inc - Fetch the content for an operation.
File
- page_manager/
page_manager.admin.inc, line 854 - Administrative functions for the page manager.
Code
function _page_manager_get_operation_content($js, &$page, $active, $operation, $titles = array(), $args = array()) {
if (isset($operation['form'])) {
$form_info = array(
'id' => 'page_manager_page',
'finish text' => t('Update'),
'show trail' => FALSE,
'show back' => FALSE,
'show return' => FALSE,
'show cancel' => FALSE,
'next callback' => 'page_manager_edit_page_next',
'finish callback' => 'page_manager_edit_page_finish',
// Items specific to the 'edit' routines that will get moved over:
'path' => page_manager_edit_url($page->task_name, $active) . "/%step",
// wrapper function to add an extra finish button.
'wrapper' => 'page_manager_operation_wrapper',
);
// If $operation['form'] is simply a string, then it is the function
// name of the form.
if (!is_array($operation['form'])) {
$form_info['order'] = array(
'form' => $operation['title'],
);
$form_info['forms'] = array(
'form' => array(
'form id' => $operation['form'],
),
);
if (isset($operation['wrapper'])) {
$form_info['forms']['form']['wrapper'] = $operation['wrapper'];
}
}
else {
$form_info['order'] = $operation['form']['order'];
$form_info['forms'] = $operation['form']['forms'];
}
// Allow the operation to override any form info settings:
if (isset($operation['form info'])) {
foreach ($operation['form info'] as $key => $setting) {
$form_info[$key] = $setting;
}
}
if (!empty($page->subtask['operations include'])) {
// Quickly load any files necessary to display the forms.
$page->subtask['operations include']['function'] = 'nop';
ctools_plugin_get_function($page->subtask, 'operations include');
}
$step = array_shift($args);
// If step is unset, go with the basic step.
if (!isset($step)) {
$step = current(array_keys($form_info['order']));
}
// If it is locked, hide the buttonzzz!
if ($page->locked && empty($operation['even locked'])) {
$form_info['no buttons'] = TRUE;
}
ctools_include('wizard');
$form_state = array(
'page' => $page,
'type' => 'edit',
'ajax' => $js && (!isset($operation['ajax']) || !empty($operation['ajax'])),
'rerender' => TRUE,
'trail' => $active,
'task_name' => $page->task_name,
'task_id' => $page->task_id,
'task' => $page->task,
'subtask_id' => $page->subtask_id,
'subtask' => $page->subtask,
'operation' => $operation,
);
if ($active && $active[0] == 'handlers' && isset($form_state['page']->handlers[$form_state['trail'][1]])) {
$form_state['handler_id'] = $form_state['trail'][1];
$form_state['handler'] =& $form_state['page']->handlers[$form_state['handler_id']];
}
if ($active && $active[0] == 'actions' && $active[1] == 'configure' && isset($form_state['page']->new_handler)) {
$form_state['handler_id'] = $form_state['page']->new_handler->name;
$form_state['handler'] =& $form_state['page']->new_handler;
}
$built_form = ctools_wizard_multistep_form($form_info, $step, $form_state);
$output = drupal_render($built_form);
$title = empty($form_state['title']) ? $operation['title'] : $form_state['title'];
$titles[] = $title;
$title = implode(' » ', array_filter($titles));
// If there are messages for the form, render them.
if ($messages = theme('status_messages')) {
$output = $messages . $output;
}
$description = isset($operation['admin description']) ? $operation['admin description'] : (isset($operation['description']) ? $operation['description'] : '');
$return = array(
'title' => $title,
'content' => $output,
'description' => $description,
);
// Append any extra content, used for the preview which is submitted then
// rendered.
if (isset($form_state['content'])) {
$return['content'] .= $form_state['content'];
}
// If the form wanted us to go somewhere else next, pass that along.
if (isset($form_state['new trail'])) {
$return['new trail'] = $form_state['new trail'];
}
}
else {
$return = array(
'title' => t('Error'),
'content' => t('This operation trail does not exist.'),
);
}
$return['active'] = $active;
return $return;
}