function RulesPluginUI::getParameterForm

Actually generates the parameter form for the given data type.

1 call to RulesPluginUI::getParameterForm()
RulesPluginUI::form in ui/ui.core.inc
Implements RulesPluginUIInterface::form().

File

ui/ui.core.inc, line 298

Class

RulesPluginUI
Faces UI extender for all kind of Rules plugins.

Code

protected function getParameterForm($name, $info, $settings, &$mode) {
    $class = $this->getDataTypeClass($info['type'], $info);
    $supports_input_mode = in_array('RulesDataDirectInputFormInterface', class_implements($class));
    // Init the mode.
    if (!isset($mode)) {
        if (isset($settings[$name . ':select'])) {
            $mode = 'selector';
        }
        elseif (isset($settings[$name]) && $supports_input_mode) {
            $mode = 'input';
        }
        elseif (isset($info['restriction'])) {
            $mode = $info['restriction'];
        }
        else {
            // Allow the parameter to define the 'default mode' and fallback to the
            // data type default.
            $mode = !empty($info['default mode']) ? $info['default mode'] : call_user_func(array(
                $class,
                'getDefaultMode',
            ));
        }
    }
    // For translatable parameters, pre-populate an internal translation source
    // key so data type forms or input evaluators (i18n) may show a suitable
    // help message.
    if (drupal_multilingual() && !empty($info['translatable'])) {
        $parameter = $this->element
            ->pluginParameterInfo();
        $info['custom translation language'] = !empty($parameter['language']);
    }
    // Add the parameter form.
    if ($mode == 'input' && $supports_input_mode) {
        $form['settings'] = call_user_func(array(
            $class,
            'inputForm',
        ), $name, $info, $settings, $this->element);
    }
    else {
        $form['settings'] = call_user_func(array(
            $class,
            'selectionForm',
        ), $name, $info, $settings, $this->element);
    }
    // Add a link for switching the input mode when JS is enabled and a button
    // to switch it without JavaScript, in case switching is possible.
    if ($supports_input_mode && empty($info['restriction'])) {
        $value = $mode == 'selector' ? t('Switch to the direct input mode') : t('Switch to data selection');
        $form['switch_button'] = array(
            '#type' => 'submit',
            '#name' => 'param_' . $name,
            '#attributes' => array(
                'class' => array(
                    'rules-switch-button',
                ),
            ),
            '#parameter' => $name,
            '#value' => $value,
            '#submit' => array(
                'rules_ui_parameter_replace_submit',
            ),
            '#ajax' => rules_ui_form_default_ajax('none'),
            // Do not validate!
'#limit_validation_errors' => array(),
        );
    }
    return $form;
}