Dynamically Populate Dropdowns. Each Dropdown values based on previous choice

I am trying to populate 3 dropdowns dynamically. The first dropdown has set choices, the second should populate based on the first dropdown choice selected and third populates based on the second dropdown choice selected. I’ve been pulling my hair out for days trying to get this work without any luck. I’ve researched, looked at this forum and others and nothing seems to work. I can’t even get it to populate the first dropdown. I’ve pasted this code in the functions.php of my Divi Child Theme.

add_filter( 'gform_pre_render_2', 'populate_dropdowns' );
add_filter( 'gform_pre_validation_2', 'populate_dropdowns' );
add_filter( 'gform_pre_submission_filter_2', 'populate_dropdowns' );
add_filter( 'gform_admin_pre_render_2', 'populate_dropdowns' );

function populate_dropdowns( $form ) {
    // Change 1, 2, and 3 to the IDs of your dropdown fields
    $dropdown1 = GFFormsModel::get_field( $form, 17 );
    $dropdown2 = GFFormsModel::get_field( $form, 27 );
    $dropdown3 = GFFormsModel::get_field( $form, 32 );

    // Set options for the first dropdown (no need to be dynamic)
    $dropdown1->choices = array(
        array( 'text' => 'MOTOR', 'value' => 'MOTOR' ),
        array( 'text' => 'HYDRAULIC PART', 'value' => 'HYDRAULIC_PART' ),
		array( 'text' => 'DRIVER / CONTROLLER', 'value' => 'DRIVER_CONTROLLER' ),
        array( 'text' => 'EQUIPMENT / ACCESSORIES', 'value' => 'EQUIPMENT_ACCESSORIES' ),
    );

    // Set options for the second dropdown based on the value of the first dropdown
    switch ( rgar( $form, $dropdown2['id'] ) ) { // Change input_1 to the ID of the first dropdown field
        case 'MOTOR':
            $dropdown2->choices = array(
                array( 'text' => 'STATOR / WINDINGS', 'value' => 'STATOR / WINDINGS' ),
                array( 'text' => 'ROTOR SHAFT', 'value' => 'ROTOR SHAFT' ),
                array( 'text' => 'FRONT BEARING (HYDRAULIC SIDE)', 'value' => 'FRONT BEARING (HYDRAULIC SIDE)' ),
				array( 'text' => 'REAR BEARING (NOT HYDRAULIC SIDE)', 'value' => 'REAR BEARING (NOT HYDRAULIC SIDE)' ),
                array( 'text' => 'CABLE CONNECTION / SWITCH / PLUG', 'value' => 'CABLE CONNECTION / SWITCH / PLUG' ),
                array( 'text' => 'CAPACITOR', 'value' => 'CAPACITOR' ),
                array( 'text' => 'COMPLETE MOTOR', 'value' => 'COMPLETE MOTOR' ),
                array( 'text' => 'OTHER', 'value' => 'OTHER' ),
            );
            break;
        case 'HYDRAULIC_PART':
            $dropdown2->choices = array(
                array( 'text' => 'SHAFT', 'value' => 'SHAFT' ),
                array( 'text' => 'PUMP BODY / PLUGS', 'value' => 'PUMP BODY / PLUGS' ),
                array( 'text' => 'IMPELLER / DIFFUSER / VOLUTE', 'value' => 'IMPELLER / DIFFUSER / VOLUTE' ),
				array( 'text' => 'MECHANICAL SEAL', 'value' => 'MECHANICAL SEAL' ),
                array( 'text' => 'COUPLING / JOINT', 'value' => 'COUPLING / JOINT' ),
                array( 'text' => 'GASKET', 'value' => 'GASKET' ),
				array( 'text' => 'WHOLE HYDRAULIC', 'value' => 'WHOLE HYDRAULIC' ),
            );
            break;
        case 'DRIVER_CONTROLLER':
            $dropdown2->choices = array(
                array( 'text' => 'ELECTRONIC BOARD', 'value' => 'ELECTRONIC BOARD' ),
                array( 'text' => 'DISPLAY', 'value' => 'DISPLAY' ),
                array( 'text' => 'CABLE CONNECTION / SWITCH / PLUG', 'value' => 'CABLE CONNECTION / SWITCH / PLUG' ),
				array( 'text' => 'ELECTRO-MECHANICAL COMPONENT', 'value' => 'ELECTRO-MECHANICAL COMPONENT' ),
            );
            break;
		case 'EQUIPMENT_ACCESSORIES':
            $dropdown2->choices = array(
                array( 'text' => 'VESSEL', 'value' => 'VESSEL' ),
                array( 'text' => 'TANK', 'value' => 'TANK' ),
                array( 'text' => 'BATTERY', 'value' => 'BATTERY' ),
				array( 'text' => 'PRESSURE GAUGE', 'value' => 'PRESSURE GAUGE' ),
                array( 'text' => 'PIPELINE / TAP', 'value' => 'PIPELINE / TAP' ),
                array( 'text' => 'CHECK VALVE / FOOT VALVE', 'value' => 'CHECK VALVE / FOOT VALVE' ),
				array( 'text' => 'FLOAT', 'value' => 'FLOAT' ),
                array( 'text' => 'PRESSURE SENSOR', 'value' => 'PRESSURE SENSOR' ),
                array( 'text' => 'FLOW SENSOR', 'value' => 'FLOW SENSOR' ),
				array( 'text' => 'DEPTH SENSOR', 'value' => 'DEPTH SENSOR' ),
            );
            break;	
        default:
            $dropdown2->choices = array();
            break;
    }

    // Set options for the third dropdown based on the value of the second dropdown
    switch ( rgar( $form, $dropdown3['id'] ) ) { // Change input_2 to the ID of the second dropdown field
        
		
		// MOTOR
		case 'STATOR / WINDINGS':
            $dropdown3->choices = array(
                array( 'text' => 'Option Alpha', 'value' => 'optionAlpha' ),
                array( 'text' => 'Option Beta', 'value' => 'optionBeta' ),
                array( 'text' => 'Option Gamma', 'value' => 'optionGamma' ),
            );
            break;
        case 'ROTOR SHAFT':
            $dropdown3->choices = array(
                array( 'text' => 'Option Delta', 'value' => 'optionDelta' ),
                array( 'text' => 'Option Epsilon', 'value' => 'optionEpsilon' ),
				array( 'text' => 'Option Zeta', 'value' => 'optionZeta' ),
				);
				break;
		case 'FRONT BEARING (HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Theta', 'value' => 'optionTheta' ),
				array( 'text' => 'Option Iota', 'value' => 'optionIota' ),
				array( 'text' => 'Option Kappa', 'value' => 'optionKappa' ),
				);
				break;
		case 'REAR BEARING (NOT HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Xi', 'value' => 'optionXi' ),
				array( 'text' => 'Option Omicron', 'value' => 'optionOmicron' ),
				array( 'text' => 'Option Pi', 'value' => 'optionPi' ),
				);
				break;
		case 'CABLE CONNECTION / SWITCH / PLUG':
				$dropdown3->choices = array(
				array( 'text' => 'Option Sigma', 'value' => 'optionSigma' ),
				array( 'text' => 'Option Tau', 'value' => 'optionTau' ),
				array( 'text' => 'Option Upsilon', 'value' => 'optionUpsilon' ),
				);
				break;
		case 'CAPACITOR':
				$dropdown3->choices = array(
				array( 'text' => 'Option Phi', 'value' => 'optionPhi' ),
				array( 'text' => 'Option Chi', 'value' => 'optionChi' ),
				array( 'text' => 'Option Psi', 'value' => 'optionPsi' ),
				);
				break;
		case 'COMPLETE MOTOR':
				$dropdown3->choices = array(
				array( 'text' => 'Option Delta Prime', 'value' => 'optionDeltaPrime' ),
				array( 'text' => 'Option Epsilon Prime', 'value' => 'optionEpsilonPrime' ),
				array( 'text' => 'Option Zeta Prime', 'value' => 'optionZetaPrime' ),
				);
				break;
		case 'OTHER':
				$dropdown3->choices = array(
				array( 'text' => 'Option Theta Prime', 'value' => 'optionThetaPrime' ),
				array( 'text' => 'Option Iota Prime', 'value' => 'optionIotaPrime' ),
				array( 'text' => 'Option Kappa Prime', 'value' => 'optionKappaPrime' ),
				);
				break;
				
		
		// HYDRAULIC PART	
		case 'STATOR / WINDINGS':
            $dropdown3->choices = array(
                array( 'text' => 'Option Alpha', 'value' => 'optionAlpha' ),
                array( 'text' => 'Option Beta', 'value' => 'optionBeta' ),
                array( 'text' => 'Option Gamma', 'value' => 'optionGamma' ),
            );
            break;
        case 'ROTOR SHAFT':
            $dropdown3->choices = array(
                array( 'text' => 'Option Delta', 'value' => 'optionDelta' ),
                array( 'text' => 'Option Epsilon', 'value' => 'optionEpsilon' ),
				array( 'text' => 'Option Zeta', 'value' => 'optionZeta' ),
				);
				break;
		case 'FRONT BEARING (HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Theta', 'value' => 'optionTheta' ),
				array( 'text' => 'Option Iota', 'value' => 'optionIota' ),
				array( 'text' => 'Option Kappa', 'value' => 'optionKappa' ),
				);
				break;
		case 'REAR BEARING (NOT HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Xi', 'value' => 'optionXi' ),
				array( 'text' => 'Option Omicron', 'value' => 'optionOmicron' ),
				array( 'text' => 'Option Pi', 'value' => 'optionPi' ),
				);
				break;
		case 'CABLE CONNECTION / SWITCH / PLUG':
				$dropdown3->choices = array(
				array( 'text' => 'Option Sigma', 'value' => 'optionSigma' ),
				array( 'text' => 'Option Tau', 'value' => 'optionTau' ),
				array( 'text' => 'Option Upsilon', 'value' => 'optionUpsilon' ),
				);
				break;
		case 'CAPACITOR':
				$dropdown3->choices = array(
				array( 'text' => 'Option Phi', 'value' => 'optionPhi' ),
				array( 'text' => 'Option Chi', 'value' => 'optionChi' ),
				array( 'text' => 'Option Psi', 'value' => 'optionPsi' ),
				);
				break;
		case 'COMPLETE MOTOR':
				$dropdown3->choices = array(
				array( 'text' => 'Option Delta Prime', 'value' => 'optionDeltaPrime' ),
				array( 'text' => 'Option Epsilon Prime', 'value' => 'optionEpsilonPrime' ),
				array( 'text' => 'Option Zeta Prime', 'value' => 'optionZetaPrime' ),
				);
				break;
				
				
		//DRIVER / CONTROLLER		
		case 'STATOR / WINDINGS':
            $dropdown3->choices = array(
                array( 'text' => 'Option Alpha', 'value' => 'optionAlpha' ),
                array( 'text' => 'Option Beta', 'value' => 'optionBeta' ),
                array( 'text' => 'Option Gamma', 'value' => 'optionGamma' ),
            );
            break;
        case 'ROTOR SHAFT':
            $dropdown3->choices = array(
                array( 'text' => 'Option Delta', 'value' => 'optionDelta' ),
                array( 'text' => 'Option Epsilon', 'value' => 'optionEpsilon' ),
				array( 'text' => 'Option Zeta', 'value' => 'optionZeta' ),
				);
				break;
		case 'FRONT BEARING (HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Theta', 'value' => 'optionTheta' ),
				array( 'text' => 'Option Iota', 'value' => 'optionIota' ),
				array( 'text' => 'Option Kappa', 'value' => 'optionKappa' ),
				);
				break;
		case 'REAR BEARING (NOT HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Xi', 'value' => 'optionXi' ),
				array( 'text' => 'Option Omicron', 'value' => 'optionOmicron' ),
				array( 'text' => 'Option Pi', 'value' => 'optionPi' ),
				);
				break;				
		
		
		//EQUIPMENT / ACCESSORIES
		case 'STATOR / WINDINGS':
            $dropdown3->choices = array(
                array( 'text' => 'Option Alpha', 'value' => 'optionAlpha' ),
                array( 'text' => 'Option Beta', 'value' => 'optionBeta' ),
                array( 'text' => 'Option Gamma', 'value' => 'optionGamma' ),
            );
            break;
        case 'ROTOR SHAFT':
            $dropdown3->choices = array(
                array( 'text' => 'Option Delta', 'value' => 'optionDelta' ),
                array( 'text' => 'Option Epsilon', 'value' => 'optionEpsilon' ),
				array( 'text' => 'Option Zeta', 'value' => 'optionZeta' ),
				);
				break;
		case 'FRONT BEARING (HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Theta', 'value' => 'optionTheta' ),
				array( 'text' => 'Option Iota', 'value' => 'optionIota' ),
				array( 'text' => 'Option Kappa', 'value' => 'optionKappa' ),
				);
				break;
		case 'REAR BEARING (NOT HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Xi', 'value' => 'optionXi' ),
				array( 'text' => 'Option Omicron', 'value' => 'optionOmicron' ),
				array( 'text' => 'Option Pi', 'value' => 'optionPi' ),
				);
				break;
		case 'STATOR / WINDINGS':
            $dropdown3->choices = array(
                array( 'text' => 'Option Alpha', 'value' => 'optionAlpha' ),
                array( 'text' => 'Option Beta', 'value' => 'optionBeta' ),
                array( 'text' => 'Option Gamma', 'value' => 'optionGamma' ),
            );
            break;
        case 'ROTOR SHAFT':
            $dropdown3->choices = array(
                array( 'text' => 'Option Delta', 'value' => 'optionDelta' ),
                array( 'text' => 'Option Epsilon', 'value' => 'optionEpsilon' ),
				array( 'text' => 'Option Zeta', 'value' => 'optionZeta' ),
				);
				break;
		case 'FRONT BEARING (HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Theta', 'value' => 'optionTheta' ),
				array( 'text' => 'Option Iota', 'value' => 'optionIota' ),
				array( 'text' => 'Option Kappa', 'value' => 'optionKappa' ),
				);
				break;
		case 'REAR BEARING (NOT HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Xi', 'value' => 'optionXi' ),
				array( 'text' => 'Option Omicron', 'value' => 'optionOmicron' ),
				array( 'text' => 'Option Pi', 'value' => 'optionPi' ),
				);
				break;		
		case 'FRONT BEARING (HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Theta', 'value' => 'optionTheta' ),
				array( 'text' => 'Option Iota', 'value' => 'optionIota' ),
				array( 'text' => 'Option Kappa', 'value' => 'optionKappa' ),
				);
				break;
		case 'REAR BEARING (NOT HYDRAULIC SIDE)':
				$dropdown3->choices = array(
				array( 'text' => 'Option Xi', 'value' => 'optionXi' ),
				array( 'text' => 'Option Omicron', 'value' => 'optionOmicron' ),
				array( 'text' => 'Option Pi', 'value' => 'optionPi' ),
				);
				break;
				
		default:
				$dropdown3->choices = array();
				break;
				}
				
// Update the form fields with the new options
$dropdown1 = GFFormsModel::get_field( $form, 17 );
$dropdown2 = GFFormsModel::get_field( $form, 27 );
$dropdown3 = GFFormsModel::get_field( $form, 32 );

return $form;

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.