app = wpFluentForm(); } /** * Build unique ID concatenating form id and name attribute * * @param array $data $form * * @return string for id value */ protected function makeElementId($data, $form) { if (isset($data['attributes']['name'])) { $formInstance = \FluentForm\App\Helpers\Helper::$formInstance; if (!empty($data['attributes']['id'])) { return $data['attributes']['id']; } $elementName = $data['attributes']['name']; $elementName = str_replace(['[', ']', ' '], '_', $elementName); $suffix = esc_attr($form->id); if ($formInstance > 1) { $suffix = $suffix . '_' . $formInstance; } $suffix .= '_' . $elementName; return 'ff_' . esc_attr($suffix); } } /** * Build attributes for any html element * * @param array $attributes * * @return string [Compiled key='value' attributes] */ protected function buildAttributes($attributes, $form = null) { $atts = ''; foreach ($attributes as $key => $value) { if ($value || 0 === $value || '0' === $value) { $value = htmlspecialchars($value); $atts .= esc_attr($key) . '="' . $value . '" '; } } return $atts; } /** * Extract value attribute from attribute list * * @param array &$element * * @return string */ protected function extractValueFromAttributes(&$element) { $value = ''; if (isset($element['attributes']['value'])) { $value = $element['attributes']['value']; unset($element['attributes']['value']); } return $value; } protected function extractDynamicValues($data, $form) { $defaultValues = []; if ($dynamicDefaultValue = ArrayHelper::get($data, 'settings.dynamic_default_value')) { $parseValue = $this->parseEditorSmartCode($dynamicDefaultValue, $form); if (is_array($parseValue)) { $defaultValues = $parseValue; } elseif (!empty($parseValue) && is_string($parseValue)) { $defaultValues = explode(',', $parseValue); $defaultValues = array_map('trim', $defaultValues); } } return $defaultValues; } /** * Determine if the given element has conditions bound * * @param array $element [Html element being compiled] * * @return bool */ protected function hasConditions($element) { $conditionals = ArrayHelper::get($element, 'settings.conditional_logics'); if (isset($conditionals['status']) && $conditionals['status']) { if (isset($conditionals['type']) && $conditionals['type'] === 'group') { $groups = ArrayHelper::get($conditionals, 'condition_groups'); if (!is_array($groups)) { return false; } $groups = array_filter($groups, function ($group) { $rules = ArrayHelper::get($group, 'rules', []); return !empty(array_filter($rules, fn($rule) => !empty($rule['field']) && !empty($rule['operator']))); }); return !!$groups; } return !!array_filter($conditionals['conditions'], function ($item) { return $item['field'] && $item['operator']; }); } return false; } /** * Generate a unique id for an element * * @param string $str [preix] * * @return string [Unique id] */ protected function getUniqueId($str) { return $str . '_' . md5(uniqid(wp_rand(), true)); } /** * Get a default class for each form element wrapper * @return string */ protected function getDefaultContainerClass() { return 'ff-el-group '; } /** * Get required class for form element wrapper * * @param array $rules [Validation rules] * * @return mixed */ protected function getRequiredClass($rules) { if (isset($rules['required'])) { return $rules['required']['value'] ? 'ff-el-is-required ' : ''; } } /** * Get asterisk placement for the required form elements * @return string */ protected function getAsteriskPlacement($form) { // for older version compatibility $asteriskPlacement = 'asterisk-right'; if (isset($form->settings['layout']['asteriskPlacement'])) { $asteriskPlacement = $form->settings['layout']['asteriskPlacement']; } return $asteriskPlacement . ' '; } /** * Generate a label for any element * * @param array $data * * @return string [label Html element] */ protected function buildElementLabel($data, $form) { $helpMessage = ''; $helpMessagePlacement = ArrayHelper::get($form->settings, 'layout.helpMessagePlacement', 'with_label'); if ('with_label' == $helpMessagePlacement) { $helpMessage = $this->getLabelHelpMessage($data); } $id = isset($data['attributes']['id']) ? $data['attributes']['id'] : ''; $label = isset($data['settings']['label']) ? $data['settings']['label'] : ''; $requiredClass = $this->getRequiredClass(ArrayHelper::get($data, 'settings.validation_rules', [])); $classes = trim('ff-el-input--label ' . $requiredClass . $this->getAsteriskPlacement($form)); return "