function rules_action_type_form_alter

Form alter callback for actions relying on the entity type or the data type.

Related topics

2 string references to 'rules_action_type_form_alter'
rules_data_action_info in modules/data.rules.inc
Implements hook_rules_action_info() on behalf of the pseudo data module.
rules_entity_action_info in modules/entity.rules.inc
Implements hook_rules_action_info() on behalf of the entity module.

File

modules/data.rules.inc, line 378

Code

function rules_action_type_form_alter(&$form, &$form_state, $options, RulesAbstractPlugin $element) {
    $first_step = empty($element->settings['type']);
    $form['reload'] = array(
        '#weight' => 5,
        '#type' => 'submit',
        '#name' => 'reload',
        '#value' => $first_step ? t('Continue') : t('Reload form'),
        '#limit_validation_errors' => array(
            array(
                'parameter',
                'type',
            ),
        ),
        '#submit' => array(
            'rules_action_type_form_submit_rebuild',
        ),
        '#ajax' => rules_ui_form_default_ajax(),
    );
    // Use ajax and trigger as the reload button.
    $form['parameter']['type']['settings']['type']['#ajax'] = $form['reload']['#ajax'] + array(
        'event' => 'change',
        'trigger_as' => array(
            'name' => 'reload',
        ),
    );
    if ($first_step) {
        // In the first step show only the type select.
        foreach (element_children($form['parameter']) as $key) {
            if ($key != 'type') {
                unset($form['parameter'][$key]);
            }
        }
        unset($form['submit']);
        unset($form['provides']);
        // Disable #ajax for the first step as it has troubles with lazy-loaded JS.
        // @todo Re-enable once JS lazy-loading is fixed in core.
        unset($form['parameter']['type']['settings']['type']['#ajax']);
        unset($form['reload']['#ajax']);
    }
    else {
        // Hide the reload button in case js is enabled and it's not the first step.
        $form['reload']['#attributes'] = array(
            'class' => array(
                'rules-hide-js',
            ),
        );
    }
}