Preview:
<?php

namespace Drupal\kazan_dizajner\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;

class KazaniForm extends FormBase {

  protected $cena;

  public function getFormId(): string
  {
    return 'kazani_form';
  }

  public function buildForm(array $form, FormStateInterface $form_state): array
  {
    $form['kazani_tipovi'] = [
      '#type' => 'radios',
      '#title' => '1. Izaberite model kazana koji želite da kreirate:',
      '#options' => [
        'prevrtac' => 'Kazani prevrtači',
        'praktik' => 'Kazani praktik',
        'profesionalni' => 'Kazani profesionalni',
      ],
    ];
    $form['kazani_prevrtaci_zapremina'] = [
      '#type' => 'radios',
      '#title' => '2. Izaberite zapreminu kotla:',
      '#options' => [
        '_prevrtac_40_litara' => '40 litara',
        '_prevrtac_60_litara' => '60 litara',
        '_prevrtac_80_litara' => '80 litara',
        '_prevrtac_100_litara' => '100 litara'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => ['value' => 'prevrtac']
        ]
      ],
      //TODO: Ne rade conditional fieldovi kada radi ajax
//      '#ajax' => [
//        'callback' => '::myAjaxCallback',
//        'wrapper' => 'edit-output',
//        'progress' => [
//          'type' => 'throbber',
//          'message' => $this->t('Verifying entry...'),
//        ],
//      ]
    ];
    $form['kazani_prevrtaci_debljina_dna'] = [
      '#type' => 'radios',
      '#title' => 'Izaberite debljinu dna kotla:',
      '#options' => [
        '_prevrtac_1_5_mm' => 'Dno kotla - 1.5 mm',
        '_prevrtac_2_mm' => 'Dno kotla - 2 mm',
        '_prevrtac_3_mmm' => 'Dno kotla - 3 mm',
        '_prevrtac_4_mm' => 'Dno kotla - 4 mm'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_prevrtaci_zapremina"]' => [
            ['value' => '_prevrtac_40_litara'],
            ['value' => '_prevrtac_60_litara'],
            ['value' => '_prevrtac_80_litara'],
            ['value' => '_prevrtac_100_litara'],
          ],
          ['input[name="kazani_tipovi"]' => ['value' => 'prevrtac']]
        ]
      ]
    ];
    $form['kazani_prevrtaci_cev'] = [
      '#type' => 'radios',
      '#title' => '3. Izaberite željenu dužinu i prečnik cevi/lule:',
      '#options' => [
        '_prevrtac_fi28x1500mm' => 'Cev/lula - fi 28x1500 mm (STANDARD)',
        '_prevrtac_fi28x2000mm' => 'Cev/lula - fi 28x2000 mm',
        '_prevrtac_fi28x2500mm' => 'Cev/lula - fi 28x2500 mm',
        '_prevrtac_fi28x3000mm' => 'Cev/lula - fi 28x3000 mm',
        '_prevrtac_fi28x3500mm' => 'Cev/lula - fi 28x3500 mm',
        '_prevrtac_fi28x4000mm' => 'Cev/lula - fi 28x4000 mm',
        '_prevrtac_fi40x2000mm' => 'Cev/lula - fi 40x2000 mm',
        '_prevrtac_fi40x2500mm' => 'Cev/lula - fi 40x2500 mm',
        '_prevrtac_fi40x3000mm' => 'Cev/lula - fi 40x3000 mm',
        '_prevrtac_fi40x3500mm' => 'Cev/lula - fi 40x3500 mm',
        '_prevrtac_fi40x4000mm' => 'Cev/lula - fi 40x4000 mm',
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => ['value' => 'prevrtac']
        ],
      ]
    ];
    $form['kazani_prevrtaci_hladnjak'] = [
      '#type' => 'radios',
      '#title' => '4. Izaberite zapreminu i model hladnjaka:',
      '#options' => [
        '_prevrtac_pocinkovani_od_330_litara' => 'Pocinkovani hladnjak od 330 litara (STANDARD)',
        '_praktik_prohromski_od_330_litara' => 'Prohromski hladnjak od 330 litara',
        '_prevrtac_pocinkovani_od_470_litara' => 'Pocinkovani hladnjak od 470 litara',
        '_prevrtac_prohromski_od_470_litara' => 'Prohromski hladnjak od 470 litara'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'prevrtac'],
          ]
        ],
      ]
    ];
    $form['hladnjak_prevrtaci_izmenjivac'] = [
      '#type' => 'radios',
      '#title' => 'Izmenjivač toplote u hladnjaku',
      '#options' => [
        '_prevrtac_spirala_5_navoja' => 'Spirala 5 navoja (STANDARD)',
        '_prevrtac_cilindar_kiler' => 'Doplata za cilindar/kiler'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'prevrtac'],
          ]
        ],
      ]
    ];
    $form['kazani_prevrtaci_mesalica'] = [
      '#type' => 'radios',
      '#title' => '5. Izaberite jednu od varijanti mešalice:',
      '#options' => [
        '_prevrtac_rucna' => 'Ručna mešalica (STANDARD)',
        '_prevrtac_elektricna' => 'Električna mešalica'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'prevrtac'],
          ]
        ],
      ]
    ];
    $form['dodatna_prevrtaci_oprema'] = [
      '#type' => 'checkboxes',
      '#title' => '6. Izaberite potrebnu dodatnu opremu:',
      '#options' => [
        '_prevrtac_alkoholmetar' => 'Alkoholmetar',
        '_prevrtac_sirometar' => 'Sirometar',
        '_prevrtac_plamenik' => 'Plamenik',
        '_prevrtac_levak' => 'Levak',
        '_prevrtac_menzura' => 'Menzura',
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'prevrtac'],
          ]
        ],
      ]
    ];
    // Kazani praktik.
    $form['kazani_praktik_zapremina'] = [
      '#type' => 'radios',
      '#title' => '2. Izaberite zapreminu kotla:',
      '#options' => [
        '_praktik_60_litara' => '60 litara',
        '_praktik_80_litara' => '80 litara',
        '_praktik_100_litara' => '100 litara'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => ['value' => 'praktik']
        ]
      ]
    ];
    $form['kazani_praktik_debljina_dna'] = [
      '#type' => 'radios',
      '#title' => 'Izaberite debljinu dna kotla:',
      '#options' => [
        '_praktik_1_5_mm' => 'Dno kotla - 1.5 mm',
        '_praktik_2_mm' => 'Dno kotla - 2 mm',
        '_praktik_3_mmm' => 'Dno kotla - 3 mm',
        '_praktik_4_mm' => 'Dno kotla - 4 mm'
      ],
      '#states' => [
        'visible' => [
          ':input[name="kazani_praktik_zapremina"]' => [
            ['value' => '_praktik_60_litara'],
            ['value' => '_praktik_80_litara'],
            ['value' => '_praktik_100_litara']
          ],
          [':input[name="kazani_tipovi"]' => ['value' => 'praktik']]
        ]
      ]
    ];
    $form['kazani_praktik_cev'] = [
      '#type' => 'radios',
      '#title' => '3. Izaberite željenu dužinu i prečnik cevi/lule:',
      '#options' => [
        '_praktik_fi40x2000mm' => 'Cev/lula - fi 40x2000 mm (STANDARD)',
        '_praktik_fi40x2500mm' => 'Cev/lula - fi 40x2500 mm',
        '_praktik_fi40x3000mm' => 'Cev/lula - fi 40x3000 mm',
        '_praktik_fi40x3500mm' => 'Cev/lula - fi 40x3500 mm',
        '_praktik_fi40x4000mm' => 'Cev/lula - fi 40x4000 mm',
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => ['value' => 'praktik']
        ],
      ]
    ];
    $form['kazani_praktik_hladnjak'] = [
      '#type' => 'radios',
      '#title' => '4. Izaberite zapreminu i model hladnjaka:',
      '#options' => [
        '_praktik_pocinkovani_od_330_litara' => 'Pocinkovani hladnjak od 330 litara (STANDARD)',
        '_praktik_prohromski_od_330_litara' => 'Prohromski hladnjak od 330 litara',
        '_praktik_pocinkovani_od_470_litara' => 'Pocinkovani hladnjak od 470 litara',
        '_praktik_prohromski_od_470_litara' => 'Prohromski hladnjak od 470 litara'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'praktik'],
          ]
        ],
      ]
    ];
    $form['hladnjak_praktik_izmenjivac'] = [
      '#type' => 'radios',
      '#title' => 'Izmenjivač toplote u hladnjaku',
      '#options' => [
        '_praktik_spirala_5_navoja' => 'Spirala 5 navoja (STANDARD)',
        '_praktik_cilindar_kiler' => 'Doplata za cilindar/kiler'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'praktik'],
          ]
        ],
      ]
    ];
    $form['kazani_praktik_mesalica'] = [
      '#type' => 'radios',
      '#title' => '5. Izaberite jednu od varijanti mešalice:',
      '#options' => [
        '_praktik_rucna' => 'Ručna mešalica (STANDARD)',
        '_praktik_elektricna' => 'Električna mešalica'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'praktik'],
          ]
        ],
      ]
    ];
    $form['dodatna_praktik_oprema'] = [
      '#type' => 'checkboxes',
      '#title' => '6. Izaberite potrebnu dodatnu opremu:',
      '#options' => [
        '_praktik_alkoholmetar' => 'Alkoholmetar',
        '_praktik_sirometar' => 'Sirometar',
        '_praktik_plamenik' => 'Plamenik',
        '_praktik_levak' => 'Levak',
        '_praktik_menzura' => 'Menzura',
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'praktik'],
          ]
        ],
      ]
    ];
    // Kazani profesionalni.
    $form['kazani_profesionalni_zapremina'] = [
      '#type' => 'radios',
      '#title' => '2. Izaberite zapreminu kotla:',
      '#options' => [
        '_profi_80_litara' => '80 litara',
        '_profi_100_litara' => '100 litara',
        '_profi_120_litara' => '120 litara',
        '_profi_160_litara' => '160 litara',
        '_profi_200_litara' => '200 litara',
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => ['value' => 'profesionalni']
        ]
      ]
    ];
    $form['kazani_profesionalni_debljina_dna'] = [
      '#type' => 'radios',
      '#title' => 'Izaberite debljinu dna kotla:',
      '#options' => [
        '_profi_1_5_mm' => 'Dno kotla - 1.5 mm (STANDARD)',
        '_profi_2_mm' => 'Dno kotla - 2 mm',
        '_profi_3_mmm' => 'Dno kotla - 3 mm',
        '_profi_4_mm' => 'Dno kotla - 4 mm',
        '_profi_5_mm' => 'Dno kotla - 5 mm',
      ],
      '#states' => [
        'visible' => [
          ':input[name="kazani_profesionalni_zapremina"]' => [
            ['value' => '_profi_80_litara'],
            ['value' => '_profi_100_litara'],
            ['value' => '_profi_120_litara'],
            ['value' => '_profi_160_litara'],
            ['value' => '_profi_200_litara'],
          ],
          [':input[name="kazani_tipovi"]' => ['value' => 'profesionalni']]
        ],
      ]
    ];
    $form['kazani_profesionalni_cev'] = [
      '#type' => 'radios',
      '#title' => '3. Izaberite željenu dužinu i prečnik cevi/lule:',
      '#options' => [
        '_profi_fi40x2000mm' => 'Cev/lula - fi 40x2000 mm (STANDARD)',
        '_profi_fi40x2500mm' => 'Cev/lula - fi 40x2500 mm',
        '_profi_fi40x3000mm' => 'Cev/lula - fi 40x3000 mm',
        '_profi_fi40x3500mm' => 'Cev/lula - fi 40x3500 mm',
        '_profi_fi40x4000mm' => 'Cev/lula - fi 40x4000 mm',
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => ['value' => 'profesionalni']
        ],
      ]
    ];
    $form['kazani_profesionalni_hladnjak'] = [
      '#type' => 'radios',
      '#title' => '4. Izaberite zapreminu i model hladnjaka:',
      '#options' => [
        '_profi_pocinkovani_od_330_litara' => 'Pocinkovani hladnjak od 330 litara (STANDARD)',
        '_profi_prohromski_od_330_litara' => 'Prohromski hladnjak od 330 litara',
        '_profi_pocinkovani_od_470_litara' => 'Pocinkovani hladnjak od 470 litara',
        '_profi_prohromski_od_470_litara' => 'Prohromski hladnjak od 470 litara'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'profesionalni']
          ]
        ],
      ]
    ];
    $form['hladnjak_profesionalni_izmenjivac'] = [
      '#type' => 'radios',
      '#title' => 'Izmenjivač toplote u hladnjaku',
      '#options' => [
        '_profi_spirala_5_navoja' => 'Spirala 5 navoja (STANDARD)',
        '_profi_cilindar_kiler' => 'Doplata za cilindar/kiler'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'profesionalni']
          ]
        ],
      ]
    ];
    $form['kazani_profesionalni_mesalica'] = [
      '#type' => 'radios',
      '#title' => '5. Izaberite jednu od varijanti mešalice:',
      '#options' => [
        '_profi_rucna' => 'Ručna mešalica (STANDARD)',
        '_profi_elektricna' => 'Električna mešalica'
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'profesionalni']
          ]
        ],
      ]
    ];
    $form['dodatna_profesionalni_oprema'] = [
      '#type' => 'checkboxes',
      '#title' => '6. Izaberite potrebnu dodatnu opremu:',
      '#options' => [
        '_profi_alkoholmetar' => 'Alkoholmetar',
        '_profi_sirometar' => 'Sirometar',
        '_profi_plamenik' => 'Plamenik',
        '_profi_levak' => 'Levak',
        '_profi_menzura' => 'Menzura',
      ],
      '#states' => [
        'visible' => [
          'input[name="kazani_tipovi"]' => [
            ['value' => 'profesionalni']
          ]
        ],
      ]
    ];
    $form['izracunaj_cenu'] = [
      '#type' => 'button',
      '#value' => 'Izracunaj cenu',
      '#ajax' => [
        'callback' => '::cene',
        'wrapper' => 'edit-output',
        'progress' => [
          'type' => 'throbber',
          'message' => $this->t('Verifying entry...'),
        ]
      ]
    ];
    // Order price.
    $form['cena'] = [
      '#type' => 'label',
      '#attributes' => ['id' => 'edit-output'],
      '#title' => 'Cena',
    ];
    // User information.
    $form['emailaddress'] = [
      '#type' => 'email',
      '#title' => 'E-mail (dobićete kopiju gore kreiranog kazana)*'
    ];
    $form['phone'] = [
      '#type' => 'tel',
      '#title' => 'Broj telefona*'
    ];
    $form['message'] = [
      '#type' => 'textarea',
      '#title' => 'Poruka*'
    ];
    $form['actions']['#type'] = 'actions';
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Save'),
      '#button_type' => 'primary'
    ];

    return $form;
  }

  public static function cene(array &$form, FormStateInterface $form_state) {
    $config = \Drupal::config('kazan_dizajner.settings');
    $cena = '';
    $oprema_cena = '';
    // Fetching users input for acquiring each item price.
    if ($form_state->getUserInput()['kazani_tipovi'] == 'prevrtac') {
      $zapremina = $form_state->getUserInput()['kazani_prevrtaci_zapremina'];
      ($zapremina) ? $form_state->getUserInput()['kazani_prevrtaci_zapremina'] : '';
      $dno = $form_state->getUserInput()['kazani_prevrtaci_debljina_dna'];
      ($dno) ? $form_state->getUserInput()['kazani_prevrtaci_debljina_dna'] : '';
      $cev = $form_state->getUserInput()['kazani_prevrtaci_cev'];
      ($cev) ? $form_state->getUserInput()['kazani_prevrtaci_cev'] : '';
      $hladnjak = $form_state->getUserInput()['kazani_prevrtaci_hladnjak'];
      ($hladnjak) ? $form_state->getUserInput()['kazani_prevrtaci_hladnjak'] : '';
      $izmenjivac = $form_state->getUserInput()['hladnjak_prevrtaci_izmenjivac'];
      ($izmenjivac) ? $form_state->getUserInput()['hladnjak_prevrtaci_izmenjivac'] : '';
      $mesalica = $form_state->getUserInput()['kazani_prevrtaci_mesalica'];
      ($mesalica) ? $form_state->getUserInput()['kazani_prevrtaci_mesalica'] : '';
      $dodaci = $form_state->getUserInput()['dodatna_prevrtaci_oprema'];
      foreach ($dodaci as $dodatak) {
        if ($dodatak != NULL) {
          $oprema_cena += $config->get($dodatak);
        }
      }
    } else if ($form_state->getUserInput()['kazani_tipovi'] == 'praktik') {
      $zapremina = $form_state->getUserInput()['kazani_praktik_zapremina'];
      ($zapremina) ? $form_state->getUserInput()['kazani_prevrtaci_zapremina'] : '';
      $dno = $form_state->getUserInput()['kazani_praktik_debljina_dna'];
      ($dno) ? $form_state->getUserInput()['kazani_praktik_debljina_dna'] : '';
      $cev = $form_state->getUserInput()['kazani_praktik_cev'];
      ($cev) ? $form_state->getUserInput()['kazani_praktik_cev'] : '';
      $hladnjak = $form_state->getUserInput()['kazani_praktik_hladnjak'];
      ($hladnjak) ? $form_state->getUserInput()['kazani_praktik_hladnjak'] : '';
      $izmenjivac = $form_state->getUserInput()['hladnjak_praktik_izmenjivac'];
      ($izmenjivac) ? $form_state->getUserInput()['hladnjak_praktik_izmenjivac'] : '';
      $mesalica = $form_state->getUserInput()['kazani_praktik_mesalica'];
      ($mesalica) ? $form_state->getUserInput()['kazani_praktik_mesalica'] : '';
      $dodaci = $form_state->getUserInput()['dodatna_praktik_oprema'];
      foreach ($dodaci as $dodatak) {
        if ($dodatak != NULL) {
          $oprema_cena += $config->get($dodatak);
        }
      }
    } else {
      $zapremina = $form_state->getUserInput()['kazani_profesionalni_zapremina'];
      ($zapremina) ? $form_state->getUserInput()['kazani_profesionalni_zapremina'] : '';
      $dno = $form_state->getUserInput()['kazani_profesionalni_debljina_dna'];
      ($dno) ? $form_state->getUserInput()['kazani_profesionalni_debljina_dna'] : '';
      $cev = $form_state->getUserInput()['kazani_profesionalni_cev'];
      ($cev) ? $form_state->getUserInput()['kazani_profesionalni_cev'] : '';
      $hladnjak = $form_state->getUserInput()['kazani_profesionalni_hladnjak'];
      ($hladnjak) ? $form_state->getUserInput()['kazani_profesionalni_hladnjak'] : '';
      $izmenjivac = $form_state->getUserInput()['hladnjak_profesionalni_izmenjivac'];
      ($izmenjivac) ? $form_state->getUserInput()['hladnjak_profesionalni_izmenjivac'] : '';
      $mesalica = $form_state->getUserInput()['kazani_profesionalni_mesalica'];
      ($mesalica) ? $form_state->getUserInput()['kazani_profesionalni_mesalica'] : '';
      $dodaci = $form_state->getUserInput()['dodatna_profesionalni_oprema'];
      foreach ($dodaci as $dodatak) {
        if ($dodatak != NULL) {
          $oprema_cena += $config->get($dodatak);
        }
      }
    }
    //Calculating total order price.
    $artikli = [];
    array_push($artikli, $zapremina, $dno, $cev, $hladnjak, $izmenjivac, $mesalica);
    foreach($artikli as $artikal) {
      if ($artikal != NULL) {
        $cena += $config->get($artikal);
      }
    }
    $cena += $oprema_cena;

    $form['cena']['#title'] = 'Cena ovog kazana bi iznosila ' . $cena . ' RSD.';
    return $form['cena'];
  }

  public function submitForm(array &$form, FormStateInterface $form_state)
  {
    if ($form_state->getValue)

    $message =
      'Specifikacija kazana' . PHP_EOL . PHP_EOL
    . 'Email: ' . $form_state->getValue('emailaddress') . PHP_EOL
    . 'Telefon: ' . $form_state->getValue('phone') . PHP_EOL
    . 'Poruka: ' . $form_state->getValue('message') . PHP_EOL
    . 'Tip: ' . $form_state->getValue('kazani_tipovi') . PHP_EOL
    . 'Zapremina: ' . $form_state->getValue('');
    $mailManager = \Drupal::service('plugin.manager.mail');
    $module = 'kazan_dizajner';
    $key = 'mail_order';
    $to = $form_state->getValue('emailaddress');
    dsm($form_state->getValue('kazani_tipovi'));

  }
}
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter