You are here

function panels_sections_page_manager_page_execute in Panels Sections 7.3

1 call to panels_sections_page_manager_page_execute()
panels_sections_preprocess_page in ./panels_sections.module
Implement hook_preprocess_page

File

./panels_sections.module, line 59

Code

function panels_sections_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
          $plugin = ctools_get_argument($argument['name']);

          // 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);
  return $output;
}