8, 'element' => $this->key, 'attributes' => array( 'type' => 'single', // single|radio|checkbox|select 'name' => 'payment_input', 'value' => '10', ), 'settings' => array( 'container_class' => '', 'label' => __('Payment Item', 'fluentform'), 'admin_field_label' => '', 'label_placement' => '', 'display_type' => '', 'help_message' => '', 'is_payment_field' => 'yes', 'pricing_options' => array( [ 'label' => 'Payment Item 1', 'value' => 10, 'image' => '' ] ), 'dynamic_default_value' => '', 'price_label' => __('Price:', 'fluentform'), 'enable_quantity' => false, 'enable_image_input' => false, 'is_element_lock' => false, 'layout_class' => '', 'validation_rules' => array( 'required' => array( 'value' => false, 'global' => true, 'message' => Helper::getGlobalDefaultMessage('required'), 'global_message' => Helper::getGlobalDefaultMessage('required'), ), ), 'conditional_logics' => array(), ), 'editor_options' => array( 'title' => __('Payment Item', 'fluentform'), 'icon_class' => 'ff-edit-shopping-cart', 'element' => 'input-radio', 'template' => 'inputMultiPayment' ) ); } public function getGeneralEditorElements() { return [ 'label', 'label_placement', 'admin_field_label', 'placeholder', 'pricing_options', 'validation_rules', ]; } public function getAdvancedEditorElements() { return [ 'container_class', 'help_message', 'name', 'layout_class', 'dynamic_default_value', 'conditional_logics' ]; } function render($data, $form) { $type = ArrayHelper::get($data, 'attributes.type'); if(!$this->app){ $this->app = wpFluentForm(); } if ($type == 'single') { $this->renderSingleItem($data, $form); return ''; } $this->renderMultiProduct($data, $form); } public function renderSingleItem($data, $form) { $elementName = $data['element']; $label = ArrayHelper::get($data, 'settings.label'); $data = apply_filters_deprecated( 'fluentform_rendering_field_data_' . $elementName, [ $data, $form ], FLUENTFORM_FRAMEWORK_UPGRADE, 'fluentform/rendering_field_data_' . $elementName, 'Use fluentform/rendering_field_data_' . $elementName . ' instead of fluentform_rendering_field_data_' . $elementName ); $data = apply_filters('fluentform/rendering_field_data_' . $elementName, $data, $form); $priceLabel = ArrayHelper::get($data, 'settings.price_label'); $productPrice = ArrayHelper::get($data, 'attributes.value'); if ($dynamicValues = $this->extractDynamicValues($data, $form)) { $productPrice = ArrayHelper::get($dynamicValues, '0'); } if (!$productPrice || !is_numeric($productPrice)) { $productPrice = apply_filters('fluentform/single_payment_item_fallback_value', 0, $data, $form); } $inputAttributes = [ 'type' => 'hidden', 'id' => $this->makeElementId($data, $form), 'name' => $data['attributes']['name'], 'value' => $productPrice, 'class' => 'ff_payment_item', 'data-payment_item' => 'yes', 'data-payment_value' => $productPrice, 'data-payment_label' => $label, 'data-quantity_remaining' => ArrayHelper::get($data, 'settings.quantity_remaining', false) ]; $money = PaymentHelper::formatMoney( $productPrice * 100, PaymentHelper::getFormCurrency($form->id) ); $elMarkup = $input = "buildAttributes($inputAttributes, $form) . ">"; $elMarkup .= '' . $priceLabel . ''; $elMarkup .= ' ' . $money . ''; $html = $this->buildElementMarkup($elMarkup, $data, $form); $html = apply_filters_deprecated( 'fluentform_rendering_field_html_' . $elementName, [ $html, $data, $form ], FLUENTFORM_FRAMEWORK_UPGRADE, 'fluentform/rendering_field_html_' . $elementName, 'Use fluentform/rendering_field_html_' . $elementName . ' instead of fluentform_rendering_field_html_' . $elementName ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Content is escaped by the filter echo apply_filters('fluentform/rendering_field_html_' . $elementName, $html, $data, $form); } public function renderMultiProduct($data, $form) { $elementName = $data['element']; $data = apply_filters_deprecated( 'fluentform_rendering_field_data_' . $elementName, [ $data, $form ], FLUENTFORM_FRAMEWORK_UPGRADE, 'fluentform/rendering_field_data_' . $elementName, 'Use fluentform/rendering_field_data_' . $elementName . ' instead of fluentform_rendering_field_data_' . $elementName ); $data = apply_filters('fluentform/rendering_field_data_' . $elementName, $data, $form); $data['attributes']['class'] = trim( 'ff-el-form-check-input ' . 'ff-el-form-check-'.$data['attributes']['type'].' '. ArrayHelper::get($data, 'attributes.class') ); if ($data['attributes']['type'] == 'checkbox') { $data['attributes']['name'] = $data['attributes']['name'] . '[]'; } $defaultValues = (array)$this->extractValueFromAttributes($data); if ($dynamicValues = $this->extractDynamicValues($data, $form)) { $defaultValues = $dynamicValues; } $elMarkup = ''; $firstTabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex(); $formattedOptions = ArrayHelper::get($data, 'settings.pricing_options'); $formattedOptions = apply_filters_deprecated( 'fluentform_payment_field_' . $elementName . '_pricing_options', [ $formattedOptions, $data, $form ], FLUENTFORM_FRAMEWORK_UPGRADE, 'fluentform/payment_field_' . $elementName . '_pricing_options', 'Use fluentform/payment_field_' . $elementName . '_pricing_options instead of fluentform_payment_field_' . $elementName . '_pricing_options' ); $formattedOptions = apply_filters('fluentform/payment_field_' . $elementName . '_pricing_options', $formattedOptions, $data, $form); $hasImageOption = ArrayHelper::get($data, 'settings.enable_image_input'); $type = ArrayHelper::get($data, 'attributes.type'); if ($type == 'select') { $selectAtts = [ 'name' => $data['attributes']['name'], 'class' => 'ff-el-form-control ff_payment_item', 'data-payment_item' => 'yes', 'data-name' => $data['attributes']['name'], 'id' => $this->getUniqueid(str_replace(['[', ']'], ['', ''], $data['attributes']['name'])) ]; if ($firstTabIndex) { $selectAtts['tabindex'] = $firstTabIndex; } $elMarkup .= ' {$option['label']}{$quantityLabel}"; $elMarkup .= ""; } if ($type == 'select') { $elMarkup .= ''; } else if ($hasImageOption) { $elMarkup .= ' '; } if($layoutClass = ArrayHelper::get($data, 'settings.layout_class')) { $data['settings']['container_class'] = $data['settings']['container_class'].' '.$layoutClass; } $html = $this->buildElementMarkup($elMarkup, $data, $form); $html = apply_filters_deprecated( 'fluentform_rendering_field_html_' . $elementName, [ $html, $data, $form ], FLUENTFORM_FRAMEWORK_UPGRADE, 'fluentform/rendering_field_html_' . $elementName, 'Use fluentform/rendering_field_html_' . $elementName . ' instead of fluentform_rendering_field_html_' . $elementName ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Content is escaped by the filter echo apply_filters('fluentform/rendering_field_html_' . $elementName, $html, $data, $form); } }