Skip to content
Snippets Groups Projects
Select Git revision
  • 603a31345624b865eb825f782b25d542ea9320f6
  • master default protected
  • 1.1.0
  • 1.0.2
  • 1.0.1
  • 1.0.0
  • 1.0.0-beta8
  • 1.0.0-beta7
  • 1.0.0-beta6
  • 1.0.0-beta5
  • 1.0.0-beta4
  • 1.0.0-beta3
  • 1.0.0-beta2
  • 1.0.0-beta1
14 results

Labels.php

Blame
  • FieldPersistenceStrategy.php 1.50 KiB
    <?php
    
    namespace WPDesk\Forms\Persistence;
    
    use Psr\Container\NotFoundExceptionInterface;
    use WPDesk\Forms\FieldProvider;
    use WPDesk\Persistence\PersistentContainer;
    
    /**
     * Can save/load provided fields to/from PersistentContainer.
     *
     * @package WPDesk\Forms
     */
    class FieldPersistenceStrategy {
    
    	/** @var PersistentContainer */
    	private $persistence;
    
    	public function __construct( PersistentContainer $persistence ) {
    		$this->persistence = $persistence;
    	}
    
    	/** @return void */
    	public function persist_fields( FieldProvider $fields_provider, array $data ) {
    		foreach ( $fields_provider->get_fields() as $field ) {
    			$field_key = $field->get_name();
    			if ( $field->has_serializer() ) {
    				$this->persistence->set( $field_key, $field->get_serializer()->serialize( $data[ $field_key ] ) );
    			} else {
    				$this->persistence->set( $field_key, $data[ $field_key ] );
    			}
    		}
    	}
    
    	/** @return void */
    	public function load_fields( FieldProvider $fields_provider ): array {
    		$data = [];
    		foreach ( $fields_provider->get_fields() as $field ) {
    			$field_key = $field->get_name();
    			try {
    				if ( $field->has_serializer() ) {
    					$data[ $field_key ] = $field->get_serializer()->unserialize( $this->persistence->get( $field_key ) );
    				} else {
    					$data[ $field_key ] = $this->persistence->get( $field_key );
    				}
    			} catch ( NotFoundExceptionInterface $not_found ) {
    				// TODO: Logger
    				// LoggerFactory::get_logger()->info( "FieldPersistenceStrategy:: Field {$field_key} not found" );
    			}
    		}
    
    		return $data;
    	}
    }