function testGetFormArrangements() { $plugin = new Arrangement(); $arrangements = $plugin->getArrangementsForContactForm('demo', 1); $this->assertGreaterThan(0, count($arrangements), 'Existing contact form should return a non-empty array'); }
/** * Generate a contact form * * @param int $formID * @param array $formFields * @param array $options * * @return string */ public static function generateForm($formID, $formFields, $options) { $arrangementen = []; $html = ''; if ($options['formTitle']) { $html .= '<h2>' . $options['formTitle'] . '</h2>'; } // Contact forms need a unique ID, otherwise problems occur when you have multiple of the same forms on one page $generatedFormID = uniqid('F' . $formID); $html .= '<form class="recras-contact" id="recras-form' . $generatedFormID . '" data-formid="' . $formID . '">'; $html .= self::generateStartTag($options['element']); foreach ($formFields as $field) { if ($field->soort_invoer !== 'header' && ($field->soort_invoer !== 'boeking.arrangement' || is_null($options['arrangement']))) { //TODO: this fails when arrangement is set but invalid $html .= self::generateLabel($options['element'], $field, $options['showLabels']); if ($field->verplicht && $options['showLabels']) { $html .= '<span class="recras-required">*</span>'; } } switch ($field->soort_invoer) { case 'boeking.arrangement': // It is possible that an arrangement was valid for this contact form in the past, not not in the present. // So we show only arrangements that are valid for this form. if (empty($arrangementen)) { $classArrangement = new Arrangement(); $arrangementen = $classArrangement->getArrangementsForContactForm($options['subdomain'], $formID); } // The isset() is in case an arrangement is set, but it is not valid if (is_null($options['arrangement']) || !isset($arrangementen[$options['arrangement']])) { $html .= self::generateSubTag($options['element']) . self::generateSelect($field, $arrangementen, ['placeholder' => $options['placeholders']]); } else { $html .= self::generateInput($field, ['placeholder' => $options['placeholders'], 'type' => 'hidden', 'value' => $options['arrangement']]); } break; case 'boeking.datum': $html .= self::generateSubTag($options['element']) . self::generateInput($field, ['class' => 'recras-input-date', 'pattern' => '[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])', 'placeholder' => 'yyyy-mm-dd', 'type' => 'date']); break; case 'boeking.groepsgrootte': $html .= self::generateSubTag($options['element']) . self::generateInput($field, ['placeholder' => $options['placeholders'], 'raw' => ['min' => 1], 'type' => 'number']); break; case 'boeking.starttijd': $html .= self::generateSubTag($options['element']) . self::generateInput($field, ['class' => 'recras-input-time', 'pattern' => '(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9])', 'placeholder' => 'hh:mm', 'type' => 'time']); break; case 'contactpersoon.geslacht': $html .= self::generateSubTag($options['element']) . self::generateSelect($field, ['onbekend' => __('Unknown', Plugin::TEXT_DOMAIN), 'man' => __('Male', Plugin::TEXT_DOMAIN), 'vrouw' => __('Female', Plugin::TEXT_DOMAIN)], ['placeholder' => $options['placeholders']]); break; case 'header': if (strpos($html, '<dt') !== false || strpos($html, '<li') !== false || strpos($html, '<tr') !== false) { $html .= self::generateEndTag($options['element']); } $html .= '<h3>' . $field->naam . '</h3>'; if (strpos($html, '<dt') !== false || strpos($html, '<li') !== false || strpos($html, '<tr') !== false) { $html .= self::generateStartTag($options['element']); } break; case 'keuze': $keuzes = []; foreach ($field->mogelijke_keuzes as $keuze) { $keuzes[$keuze] = $keuze; } $html .= self::generateSubTag($options['element']) . self::generateChoices($field, $keuzes); break; case 'veel_tekst': $html .= self::generateSubTag($options['element']) . self::generateTextarea($field, ['placeholder' => $options['placeholders']]); break; default: $html .= self::generateSubTag($options['element']) . self::generateInput($field, ['placeholder' => $options['placeholders']]); } //$html .= print_r($field, true); //DEBUG } $plugin = new Plugin(); $html .= self::generateEndTag($options['element']); $html .= '<input type="submit" value="' . $options['submitText'] . '">'; $html .= '</form>'; $html .= '<script>jQuery(document).ready(function(){ jQuery("#recras-form' . $generatedFormID . '").on("submit", function(e){ e.preventDefault(); return submitRecrasForm( "' . $generatedFormID . '", "' . $options['subdomain'] . '", "' . $plugin->baseUrl . '/", "' . $options['redirect'] . '" ); }); });</script>'; return $html; }