flexible-shipping
/
vendor_prefixed
/
wpdesk
/
wp-forms
/
src
/
Persistence
/
FieldPersistenceStrategy.php
FieldPersistenceStrategy.php
54 lines
| 1 | <?php |
| 2 | |
| 3 | namespace FSVendor\WPDesk\Forms\Persistence; |
| 4 | |
| 5 | use FSVendor\Psr\Container\NotFoundExceptionInterface; |
| 6 | use FSVendor\WPDesk\Forms\FieldProvider; |
| 7 | use FSVendor\WPDesk\Persistence\PersistentContainer; |
| 8 | /** |
| 9 | * Can save/load provided fields to/from PersistentContainer. |
| 10 | * |
| 11 | * @package WPDesk\Forms |
| 12 | */ |
| 13 | class FieldPersistenceStrategy |
| 14 | { |
| 15 | /** @var PersistentContainer */ |
| 16 | private $persistence; |
| 17 | public function __construct(PersistentContainer $persistence) |
| 18 | { |
| 19 | $this->persistence = $persistence; |
| 20 | } |
| 21 | /** |
| 22 | * Save fields data. |
| 23 | * |
| 24 | * @param FieldProvider $fields_provider |
| 25 | * @param array $data |
| 26 | */ |
| 27 | public function persist_fields(FieldProvider $fields_provider, array $data) |
| 28 | { |
| 29 | foreach ($fields_provider->get_fields() as $field) { |
| 30 | $field_key = $field->get_name(); |
| 31 | $this->persistence->set($field_key, $field->get_serializer()->serialize($data[$field_key])); |
| 32 | } |
| 33 | } |
| 34 | /** |
| 35 | * Load fields data. |
| 36 | * |
| 37 | * @return array |
| 38 | */ |
| 39 | public function load_fields(FieldProvider $fields_provider) |
| 40 | { |
| 41 | $data = []; |
| 42 | foreach ($fields_provider->get_fields() as $field) { |
| 43 | $field_key = $field->get_name(); |
| 44 | try { |
| 45 | $data[$field_key] = $field->get_serializer()->unserialize($this->persistence->get($field_key)); |
| 46 | } catch (NotFoundExceptionInterface $not_found) { |
| 47 | // TODO: Logger |
| 48 | // LoggerFactory::get_logger()->info( "FieldPersistenceStrategy:: Field {$field_key} not found" ); |
| 49 | } |
| 50 | } |
| 51 | return $data; |
| 52 | } |
| 53 | } |
| 54 |