Skip to content
Snippets Groups Projects
Select Git revision
  • 573bfb703ee914e0fad2178799fcb0f0834392a2
  • master default protected
  • devel
  • feature/add-escaping-to-templates
  • feature/add-priority-sorting
  • 3.3.0
  • 3.2.1
  • 3.2.0
  • 3.1.0
  • 3.0.0
  • 2.4.12
  • 2.4.11
  • 2.4.10
  • 2.4.9
  • 2.4.8
  • 2.4.7
  • 2.4.6
  • 2.4.5
  • 2.4.4
  • 2.4.2
  • 2.4.1
  • 2.4.0
  • 2.3.2
  • 2.3.1
  • 2.3
25 results

JsonNormalizedRenderer.php

Blame
  • JsonNormalizedRenderer.php 1.96 KiB
    <?php
    
    namespace WPDesk\Forms\Renderer;
    
    use WPDesk\Forms\FieldProvider;
    use WPDesk\Forms\FieldRenderer;
    
    /**
     * Can render form fields as JSON.
     *
     * @package WPDesk\Forms\Renderer
     */
    class JsonNormalizedRenderer implements FieldRenderer {
    	/**
    	 * @param FieldProvider $provider
    	 * @param array $fields_data
    	 * @param string $name_prefix
    	 *
    	 * @return array Normalized fields with data.
    	 */
    	public function render_fields( FieldProvider $provider, array $fields_data, string $name_prefix = '' ): array {
    		$rendered_fields = [];
    		foreach ( $provider->get_fields() as $field ) {
    			$rendered = [
    				'name'     => $field->get_name(),
    				'template' => $field->get_template_name(),
    				'multiple' => $field->is_multiple(),
    				'disabled' => $field->is_disabled(),
    				'readonly' => $field->is_readonly(),
    				'required' => $field->is_required(),
    				'prefix'   => $name_prefix,
    				'value '   => isset( $fields_data[ $field->get_name() ] ) ? $fields_data[ $field->get_name() ] : $field->get_default_value(),
    			];
    
    			if ( $field->has_classes() ) {
    				$rendered['class'] = $field->get_classes();
    			}
    			if ( $field->has_description() ) {
    				$rendered['description'] = $field->get_description();
    			}
    			if ( $field->has_description_tip() ) {
    				$rendered['description_tip'] = $field->get_description_tip();
    			}
    			if ( $field->has_label() ) {
    				$rendered['label'] = $field->get_label();
    			}
    			if ( $field->has_placeholder() ) {
    				$rendered['placeholder'] = $field->get_placeholder();
    			}
    			$options = $field->get_possible_values();
    			if ( $options ) {
    				$rendered['options'] = $options;
    			}
    			if ( $field->has_data() ) {
    				$data             = $field->get_data();
    				$rendered['data'] = [];
    				foreach ( $data as $data_name => $data_value ) {
    					$rendered['data'][] = [
    						'name'  => $data_name,
    						'value' => $data_value,
    					];
    				}
    			}
    			if ( json_encode( $rendered ) !== false ) {
    				$rendered_fields[] = $rendered;
    			}
    		}
    
    		return $rendered_fields;
    	}