function page_manager_page_add_subtask

Page callback to add a subtask.

1 string reference to 'page_manager_page_add_subtask'
page_manager_page_menu in page_manager/plugins/tasks/page.admin.inc
Delegated implementation of hook_menu().

File

page_manager/plugins/tasks/page.admin.inc, line 197

Code

function page_manager_page_add_subtask($task_name = NULL, $step = NULL) {
    ctools_include('context');
    $task = page_manager_get_task('page');
    $task_handler_plugins = page_manager_get_task_handler_plugins($task);
    if (empty($task_handler_plugins)) {
        drupal_set_message(t('There are currently no variants available and a page may not be added. Perhaps you need to install the Panels module to get a variant?'), 'error');
        return ' ';
    }
    $form_info = array(
        'id' => 'page_manager_add_page',
        'show trail' => TRUE,
        'show back' => TRUE,
        'show return' => FALSE,
        'next callback' => 'page_manager_page_add_subtask_next',
        'finish callback' => 'page_manager_page_add_subtask_finish',
        'return callback' => 'page_manager_page_add_subtask_finish',
        'cancel callback' => 'page_manager_page_add_subtask_cancel',
        'add order' => array(
            'basic' => t('Basic settings'),
            'argument' => t('Argument settings'),
            'access' => t('Access control'),
            'menu' => t('Menu settings'),
        ),
        'forms' => array(
            'basic' => array(
                'form id' => 'page_manager_page_form_basic',
            ),
            'access' => array(
                'form id' => 'page_manager_page_form_access',
            ),
            'menu' => array(
                'form id' => 'page_manager_page_form_menu',
            ),
            'argument' => array(
                'form id' => 'page_manager_page_form_argument',
            ),
        ),
    );
    if ($task_name) {
        $page = page_manager_get_page_cache($task_name);
        if (empty($page)) {
            return MENU_NOT_FOUND;
        }
        $form_info['path'] = "admin/structure/pages/add/{$task_name}/%step";
    }
    else {
        $new_page = page_manager_page_new();
        $new_page->name = NULL;
        $page = new stdClass();
        page_manager_page_new_page_cache($new_page, $page);
        $form_info['path'] = 'admin/structure/pages/add/%task_name/%step';
    }
    if ($step && $step != 'basic') {
        $handler_plugin = page_manager_get_task_handler($page->handler);
        $form_info['forms'] += $handler_plugin['forms'];
        if (isset($page->forms)) {
            foreach ($page->forms as $id) {
                if (isset($form_info['add order'][$id])) {
                    $form_info['order'][$id] = $form_info['add order'][$id];
                }
                elseif (isset($handler_plugin['add features'][$id])) {
                    $form_info['order'][$id] = $handler_plugin['add features'][$id];
                }
                elseif (isset($handler_plugin['required forms'][$id])) {
                    $form_info['order'][$id] = $handler_plugin['required forms'][$id];
                }
            }
        }
        else {
            $form_info['order'] = $form_info['add order'];
        }
        // This means we just submitted our form from the default list
        // of steps, which we've traded in for a newly generated list of
        // steps above. We need to translate this 'next' step into what
        // our questions determined would be next.
        if ($step == 'next') {
            $keys = array_keys($form_info['order']);
            // Get rid of 'basic' from the list of forms.
            array_shift($keys);
            $step = array_shift($keys);
            // If $step == 'basic' at this point, we were not presented with any
            // additional forms at all. Let's just save and go!
            if ($step == 'basic') {
                page_manager_save_page_cache($page);
                // Redirect to the new page's task handler editor.
                drupal_goto(page_manager_edit_url($page->task_name));
            }
        }
    }
    else {
        $form_info['show trail'] = FALSE;
        $form_info['order'] = array(
            'basic' => t('Basic settings'),
            'next' => t('A meaningless second page'),
        );
    }
    ctools_include('wizard');
    $form_state = array(
        'task' => $task,
        'subtask' => $page->subtask,
        'page' => &$page,
        'type' => 'add',
        'task_id' => 'page',
        'task_name' => $page->task_name,
        'creating' => TRUE,
    );
    if (!empty($page->handlers)) {
        $keys = array_keys($page->handlers);
        $key = array_shift($keys);
        $form_state['handler'] =& $page->handlers[$key];
        $form_state['handler_id'] = $key;
    }
    $output = ctools_wizard_multistep_form($form_info, $step, $form_state);
    if (!$output) {
        // redirect.
        drupal_redirect_form(array(), $form_state['redirect']);
    }
    return $output;
}