function rules_condition_entity_is_of_bundle_form_alter

Form alter callback for the condition entity_is_of_bundle.

Use multiple steps to configure the condition as the needed bundle field list depends on the selected entity type.

Related topics

File

modules/entity.rules.inc, line 541

Code

function rules_condition_entity_is_of_bundle_form_alter(&$form, &$form_state, $options, RulesAbstractPlugin $element) {
    if (empty($element->settings['entity:select'])) {
        $step = 1;
    }
    elseif (empty($element->settings['type'])) {
        $step = 2;
    }
    else {
        $step = 3;
    }
    $form['reload'] = array(
        '#weight' => $form['submit']['#weight'] + 1,
        '#type' => 'submit',
        '#name' => 'reload',
        '#value' => $step != 3 ? t('Continue') : t('Reload form'),
        '#limit_validation_errors' => array(
            array(
                'parameter',
                'entity',
            ),
            array(
                'parameter',
                'type',
            ),
        ),
        '#submit' => array(
            'rules_form_submit_rebuild',
        ),
        '#ajax' => rules_ui_form_default_ajax('fade'),
        '#attributes' => array(
            'class' => array(
                'rules-hide-js',
            ),
        ),
    );
    // 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',
        ),
    );
    switch ($step) {
        case 1:
            $form['reload']['#limit_validation_errors'] = array(
                array(
                    'parameter',
                    'entity',
                ),
            );
            unset($form['parameter']['type']);
            unset($form['reload']['#attributes']['class']);
        // NO break.
        case 2:
            $form['negate']['#access'] = FALSE;
            unset($form['parameter']['bundle']);
            unset($form['submit']);
            break;
        case 3:
            if (($info = $element->getArgumentInfo('entity')) && $info['type'] != 'entity') {
                // Hide the entity type parameter if not needed.
                unset($form['parameter']['type']);
            }
            break;
    }
}