| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Contains generic plugin administration functions.
 
-  *
 
-  * CTools includes the ability to (relatively) easily provide wizard based
 
-  * configuration for plugins, meaning plugins that need configuration can
 
-  * automatically allow multi-step forms.
 
-  *
 
-  * Implementing this
 
-  */
 
- /**
 
-  * Get a plugin configuration form.
 
-  *
 
-  * The $form_info and $form_state need to be preconfigured with data you'll need
 
-  * such as whether or not you're using ajax, or the modal. $form_info will need
 
-  * your next/submit callbacks so that you can cache your data appropriately.
 
-  *
 
-  * @param array $form_info
 
-  *   This form_info *must* contain at least the path. next and finish callbacks
 
-  *   are advisable but not necessary if using wizard's auto caching. Setting
 
-  *   a cache mechanism is advisable. If not using auto caching, next and finish
 
-  *   callbacks will be necessary.
 
-  *
 
-  *   Also be sure to set up things such as AJAX settings and any temporary
 
-  *   data you will need. Simply setting 'modal' => TRUE and
 
-  *   'modal return' => TRUE should make this system work well in the modal.
 
-  *
 
-  *   In addition to standard wizard fields, this supports one extra field:
 
-  *   - 'default form': A callback to a 'wrapper' that will be applied to either
 
-  *     the first or a marked form. This is useful for adding global features that
 
-  *     are applicable to all instances of a plugin, such as identifiers, or
 
-  *     contexts, or the like.
 
-  *
 
-  * @param array &$form_state
 
-  *   This is a standard form state array. This system imposes some requirements
 
-  *   on what will be in the form state:
 
-  *
 
-  *   - 'plugin': The plugin definition being edited.
 
-  *   - 'conf': The configuration that is being edited, presumed to be an array.
 
-  *             Ultimately at the end, this is where the modified config will be
 
-  *             found.
 
-  *   - 'op': The operation, either 'add' or 'edit'. This is used to derive form
 
-  *           names and can also be used to derive default values from the plugin.
 
-  *   - 'step': The current step. May be null if it is the 'first' step, but
 
-  *             generally needs to be defined in the path.
 
-  *
 
-  * @param string $default_form
 
-  *   An optional default form that can be added.
 
-  *
 
-  * @return
 
-  *   If this function returns false, no form exists.
 
-  */
 
- function ctools_plugin_configure_form($form_info, &$form_state) {
 
-   // Turn the forms defined in the plugin into the format the wizard needs.
 
-   _ctools_plugin_configure_create_form_info($form_info, $form_state['plugin'], $form_state['op']);
 
-   if (empty($form_info['order'])) {
 
-     return FALSE;
 
-   }
 
-   ctools_include('wizard');
 
-   return ctools_wizard_multistep_form($form_info, $form_state['step'], $form_state);
 
- }
 
- function _ctools_plugin_configure_create_form_info(&$form_info, $plugin_definition, $op) {
 
-   // Provide a few extra defaults.
 
-   $form_info += array(
 
-     'id' => 'ctools_plugin_configure_form',
 
-     'show back' => TRUE,
 
-   );
 
-   $add_form = isset($form_info['add form name']) ? $form_info['add form name'] : 'add form';
 
-   $edit_form = isset($form_info['edit form name']) ? $form_info['edit form name'] : 'edit form';
 
-   // Figure out what the forms should actually be. Since they can be specified
 
-   // in a couple of different ways (in order to support simple declarations for
 
-   // the minimal forms but more complex declarations for powerful wizards).
 
-   if ($op == 'add') {
 
-     if (!empty($plugin_definition[$add_form])) {
 
-       $info = $plugin_definition[$add_form];
 
-     }
 
-   }
 
-   if (!isset($info) || $op == 'edit') {
 
-     // Use the edit form for the add form if add form was completely left off.
 
-     if (!empty($plugin_definition[$edit_form])) {
 
-       $info = $plugin_definition[$edit_form];
 
-     }
 
-   }
 
-   // If there is a default form wrapper, but no form is supplied,
 
-   // use the wrapper as the form.
 
-   if (empty($info) && !empty($form_info['default form'])) {
 
-     $info = $form_info['default form'];
 
-   }
 
-   // @todo we may want to make these titles more settable?
 
-   if (is_string($info)) {
 
-     if (empty($plugin_definition['title'])) {
 
-       $title = t('Configure');
 
-     }
 
-     else if ($op == 'add') {
 
-       $title = t('Configure new !plugin_title', array('!plugin_title' => $plugin_definition['title']));
 
-     }
 
-     else {
 
-       $title = t('Configure !plugin_title', array('!plugin_title' => $plugin_definition['title']));
 
-     }
 
-     if (empty($form_info['order'])) {
 
-       $form_info['order'] = array();
 
-     }
 
-     $form_info['order']['form'] = $title;
 
-     if (empty($form_info['forms'])) {
 
-       $form_info['forms'] = array();
 
-     }
 
-     $form_info['forms']['form'] = array(
 
-       'title' => $title,
 
-       'form id' => $info,
 
-     );
 
-     // Add the default form if one is specified.
 
-     if (!empty($form_info['default form']) && $form_info['forms']['form']['form id'] != $form_info['default form']) {
 
-       $form_info['forms']['form']['wrapper'] = $form_info['default form'];
 
-     }
 
-     // If no submit is supplied, supply the default submit which will do the
 
-     // most obvious task.
 
-     if (!function_exists($form_info['forms']['form']['form id'] . '_submit')) {
 
-       // Store the original wrapper so we can chain it.
 
-       if (!empty($form_info['forms']['form']['wrapper'])) {
 
-         $form_info['forms']['form']['original wrapper'] = $form_info['forms']['form']['wrapper'];
 
-       }
 
-       $form_info['forms']['form']['wrapper'] = 'ctools_plugins_default_form_wrapper';
 
-     }
 
-   }
 
-   else if (is_array($info)) {
 
-       if (empty($form_info['order'])) {
 
-         $form_info['order'] = array();
 
-       }
 
-     if (empty($form_info['forms'])) {
 
-       $form_info['forms'] = array();
 
-     }
 
-     $count = 0;
 
-     $base = 'step';
 
-     $wrapper = NULL;
 
-     foreach ($info as $form_id => $title) {
 
-       $step = $base . ++$count;
 
-       if (empty($wrapper)) {
 
-         $wrapper = $step;
 
-       }
 
-       if (is_array($title)) {
 
-         if (!empty($title['default'])) {
 
-           $wrapper = $step;
 
-         }
 
-         $title = $title['title'];
 
-       }
 
-       $form_info['order'][$step] = $title;
 
-       $form_info['forms'][$step] = array(
 
-         'title' => $title,
 
-         'form id' => $form_id,
 
-       );
 
-     }
 
-     if ($wrapper && !empty($form_info['default form'])) {
 
-       $form_info['forms'][$wrapper]['wrapper'] = $form_info['default form'];
 
-     }
 
-   }
 
- }
 
- /**
 
-  * A wrapper to provide a default submit so that plugins don't have to duplicate
 
-  * a whole bunch of code to do what most of them want to do anyway.
 
-  */
 
- function ctools_plugins_default_form_wrapper($form, &$form_state) {
 
-   $form_info = &$form_state['form_info'];
 
-   $info = $form_info['forms'][$form_state['step']];
 
-   if (isset($info['original wrapper']) && function_exists($info['original wrapper'])) {
 
-     $form = $info['original wrapper']($form, $form_state);
 
-   }
 
-   if (isset($form['buttons']['next'])) {
 
-     if (empty($form['buttons']['next']['#submit'])) {
 
-       $form['buttons']['next']['#submit'] = $form['#submit'];
 
-     }
 
-     $form['buttons']['next']['#submit'][] = 'ctools_plugins_default_form_wrapper_submit';
 
-   }
 
-   if (isset($form['buttons']['return'])) {
 
-     if (empty($form['buttons']['return']['#submit'])) {
 
-       $form['buttons']['return']['#submit'] = $form['#submit'];
 
-     }
 
-     $form['buttons']['return']['#submit'][] = 'ctools_plugins_default_form_wrapper_submit';
 
-   }
 
-   return $form;
 
- }
 
- /**
 
-  * Provide a default storage mechanism.
 
-  */
 
- function ctools_plugins_default_form_wrapper_submit(&$form, &$form_state) {
 
-   foreach (array_keys($form_state['plugin']['defaults']) as $key) {
 
-     if (isset($form_state['values'][$key])) {
 
-       $form_state['conf'][$key] = $form_state['values'][$key];
 
-     }
 
-   }
 
- }
 
 
  |