function page_manager_get_operations
Take the operations array from a task and expand it.
This allows some of the operations to be dynamic, based upon settings on the task or the task's handlers. Each operation should have a type. In addition to all the types allowed in page_manager_render_operations, these types will be dynamically replaced with something else:
- 'handlers': An automatically created group that contains all the task's handlers and appropriate links.
- 'function': A callback (which will be placed in the 'function' parameter that should return an array of operations. This can be used to provide additional, dynamic links if needed.
3 calls to page_manager_get_operations()
- page_manager_edit_page in page_manager/
page_manager.admin.inc - Render the edit page for a a page, custom or system.
- page_manager_edit_page_operation in page_manager/
page_manager.admin.inc - Entry point to edit a single operation for a page.
- page_manager_http_response_admin_summary in page_manager/
plugins/ task_handlers/ http_response.inc
File
-
page_manager/
page_manager.admin.inc, line 494
Code
function page_manager_get_operations($page, $operations = NULL) {
if (!isset($operations)) {
// All tasks have at least these 2 ops:
$operations = array(
'summary' => array(
'title' => t('Summary'),
'description' => t('Get a summary of the information about this page.'),
'path' => 'admin/structure/pages/edit',
'ajax' => FALSE,
'no operations' => TRUE,
'form info' => array(
'no buttons' => TRUE,
),
'form' => 'page_manager_page_summary',
),
'actions' => array(
'type' => 'group',
'title' => '',
'class' => array(
'operations-actions',
),
'location' => 'primary',
'children' => array(),
),
);
if (isset($page->subtask['operations'])) {
$operations += $page->subtask['operations'];
// add actions separately.
if (!empty($page->subtask['operations']['actions'])) {
$operations['actions']['children'] += $page->subtask['operations']['actions']['children'];
}
}
$operations['handlers'] = array(
'type' => 'handlers',
);
}
$result = array();
foreach ($operations as $id => $operation) {
if (empty($operation['type'])) {
$operation['type'] = 'operation';
}
switch ($operation['type']) {
case 'handlers':
$result[$id] = page_manager_get_handler_operations($page);
break;
case 'function':
if (function_exists($operation['function'])) {
$retval = $function($page, $operation);
if (is_array($retval)) {
$result[$id] = $retval;
}
}
break;
default:
$result[$id] = $operation;
}
}
if (!empty($page->subtask['enable callback']) && !empty($page->subtask['disabled']) && empty($result['actions']['children']['enable'])) {
$result['actions']['children']['enable'] = array(
'title' => t('Enable'),
'description' => t('Activate this page so that it will be in use in your system.'),
'form' => 'page_manager_enable_form',
'ajax' => FALSE,
'silent' => TRUE,
'no update and save' => TRUE,
'form info' => array(
'finish text' => t('Enable'),
),
);
}
if (!empty($page->subtask['enable callback']) && empty($page->subtask['disabled']) && empty($result['actions']['children']['disable'])) {
$result['actions']['children']['disable'] = array(
'title' => t('Disable'),
'description' => t('De-activate this page. The data will remain but the page will not be in use on your system.'),
'form' => 'page_manager_disable_form',
'ajax' => FALSE,
'silent' => TRUE,
'no update and save' => TRUE,
'form info' => array(
'finish text' => t('Disable'),
),
);
}
$result['actions']['children']['add'] = array(
'title' => t('Add variant'),
'description' => t('Add a new variant to this page.'),
'form' => 'page_manager_handler_add',
'ajax' => FALSE,
'silent' => TRUE,
// prevents a message about updating and prevents this item from showing as changed.
'no update and save' => TRUE,
// get rid of update and save button which is bad here.
'form info' => array(
'finish text' => t('Create variant'),
),
);
// Restrict variant import due to security implications.
if (user_access('use ctools import')) {
$result['actions']['children']['import'] = array(
'title' => t('Import variant'),
'description' => t('Add a new variant to this page from code exported from another page.'),
'form' => 'page_manager_handler_import',
);
}
if (count($page->handlers) > 1) {
$result['actions']['children']['rearrange'] = array(
'title' => t('Reorder variants'),
'ajax' => FALSE,
'description' => t('Change the priority of the variants to ensure that the right one gets selected.'),
'form' => 'page_manager_handler_rearrange',
);
}
// This is a special operation used to configure a new task handler before
// it is added.
if (isset($page->new_handler)) {
$plugin = page_manager_get_task_handler($page->new_handler->handler);
$result['actions']['children']['configure'] = array(
'title' => t('Configure'),
'description' => t('Configure a newly created variant prior to actually adding it to the page.'),
'ajax' => FALSE,
'no update and save' => TRUE,
// get rid of update and save button which is bad here.
'form info' => array(
// We use our own cancel and finish callback to handle the fun stuff.
'finish callback' => 'page_manager_handler_add_finish',
'cancel callback' => 'page_manager_handler_add_cancel',
'show trail' => TRUE,
'show back' => TRUE,
'finish text' => t('Create variant'),
),
'form' => array(
'forms' => $plugin['forms'],
),
);
foreach ($page->forms as $id) {
if (isset($plugin['add features'][$id])) {
$result['actions']['children']['configure']['form']['order'][$id] = $plugin['add features'][$id];
}
elseif (isset($plugin['required forms'][$id])) {
$result['actions']['children']['configure']['form']['order'][$id] = $plugin['required forms'][$id];
}
}
}
if ($page->locked) {
$result['actions']['children']['break-lock'] = array(
'title' => t('Break lock'),
'description' => t('Break the lock on this page so that you can edit it.'),
'form' => 'page_manager_break_lock',
'ajax' => FALSE,
'no update and save' => TRUE,
// get rid of update and save button which is bad here.
'form info' => array(
'finish text' => t('Break lock'),
),
'even locked' => TRUE,
// show button even if locked
'silent' => TRUE,
);
}
drupal_alter('page_manager_operations', $result, $page);
return $result;
}