danielebarchiesi@0: plugin = $plugin; danielebarchiesi@0: if ($function = ctools_plugin_get_function($plugin, 'default cache')) { danielebarchiesi@0: $function($cache); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $cache; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Store changes to a task handler in the object cache. danielebarchiesi@0: */ danielebarchiesi@0: function page_manager_set_wizard_cache($cache) { danielebarchiesi@0: ctools_include('object-cache'); danielebarchiesi@0: ctools_object_cache_set('page_manager_page_wizard', $cache->plugin['name'], $cache); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Remove an item from the object cache. danielebarchiesi@0: */ danielebarchiesi@0: function page_manager_clear_wizard_cache($name) { danielebarchiesi@0: ctools_include('object-cache'); danielebarchiesi@0: ctools_object_cache_clear('page_manager_page_wizard', $name); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Menu callback for the page wizard. danielebarchiesi@0: */ danielebarchiesi@0: function page_manager_page_wizard($name, $step = NULL) { danielebarchiesi@0: $plugin = page_manager_get_page_wizard($name); danielebarchiesi@0: if (!$plugin) { danielebarchiesi@0: return MENU_NOT_FOUND; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Check for simple access string on plugin. danielebarchiesi@0: if (!empty($plugin['access']) && !user_access($plugin['access'])) { danielebarchiesi@0: return MENU_ACCESS_DENIED; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Check for possibly more complex access callback on plugin. danielebarchiesi@0: if ($function = ctools_plugin_get_function($plugin, 'access callback') && !$function($plugin)) { danielebarchiesi@0: return MENU_ACCESS_DENIED; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Create a basic wizard.in form info array and merge it with the danielebarchiesi@0: // plugin's. danielebarchiesi@0: $form_info = array( danielebarchiesi@0: 'id' => 'page_manager_page_wizard', danielebarchiesi@0: 'show trail' => TRUE, danielebarchiesi@0: 'show back' => TRUE, danielebarchiesi@0: 'show return' => FALSE, danielebarchiesi@0: 'show cancel' => FALSE, danielebarchiesi@0: 'next callback' => 'page_manager_page_wizard_next', danielebarchiesi@0: 'finish callback' => 'page_manager_page_wizard_finish', danielebarchiesi@0: danielebarchiesi@0: 'path' => "admin/structure/pages/wizard/$name/%step", danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form_info = array_merge_recursive($form_info, $plugin['form info']); danielebarchiesi@0: danielebarchiesi@0: // If step is unset, go with the basic step. danielebarchiesi@0: if (!isset($step)) { danielebarchiesi@0: $step = current(array_keys($form_info['order'])); danielebarchiesi@0: $cache = page_manager_make_wizard_cache($plugin); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $cache = page_manager_get_wizard_cache($plugin); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: ctools_include('wizard'); danielebarchiesi@0: $form_state = array( danielebarchiesi@0: 'plugin' => $plugin, danielebarchiesi@0: 'wizard cache' => $cache, danielebarchiesi@0: 'type' => 'edit', danielebarchiesi@0: 'rerender' => TRUE, danielebarchiesi@0: 'step' => $step, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: if (isset($plugin['page title'])) { danielebarchiesi@0: drupal_set_title($plugin['page title']); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if ($function = ctools_plugin_get_function($form_state['plugin'], 'start')) { danielebarchiesi@0: $function($form_info, $step, $form_state); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $output = ctools_wizard_multistep_form($form_info, $step, $form_state); danielebarchiesi@0: return $output; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Callback generated when the add page process is finished. danielebarchiesi@0: */ danielebarchiesi@0: function page_manager_page_wizard_finish(&$form_state) { danielebarchiesi@0: if ($function = ctools_plugin_get_function($form_state['plugin'], 'finish')) { danielebarchiesi@0: $function($form_state); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: page_manager_clear_wizard_cache($form_state['wizard cache']->plugin['name']); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Callback generated when the 'next' button is clicked. danielebarchiesi@0: * danielebarchiesi@0: * All we do here is store the cache. danielebarchiesi@0: */ danielebarchiesi@0: function page_manager_page_wizard_next(&$form_state) { danielebarchiesi@0: if ($function = ctools_plugin_get_function($form_state['plugin'], 'next')) { danielebarchiesi@0: $function($form_state); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: page_manager_set_wizard_cache($form_state['wizard cache']); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Provide a simple administrative list of all wizards. danielebarchiesi@0: * danielebarchiesi@0: * This is called as a page callback, but can also be used by any module danielebarchiesi@0: * that wants to get a list of wizards for its type. danielebarchiesi@0: */ danielebarchiesi@0: function page_manager_page_wizard_list($type = NULL) { danielebarchiesi@0: $plugins = page_manager_get_page_wizards(); danielebarchiesi@0: if (empty($plugins)) { danielebarchiesi@0: return '
' . t('There are no wizards available at this time.') . '
'; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: uasort($plugins, 'ctools_plugin_sort'); danielebarchiesi@0: danielebarchiesi@0: $output = '