PrimitiveFormsList.class.php

Go to the documentation of this file.
00001 <?php
00002 /***************************************************************************
00003  *   Copyright (C) 2007-2008 by Ivan Y. Khvostishkov                       *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Lesser General Public License as        *
00007  *   published by the Free Software Foundation; either version 3 of the    *
00008  *   License, or (at your option) any later version.                       *
00009  *                                                                         *
00010  ***************************************************************************/
00011 
00015     final class PrimitiveFormsList extends PrimitiveForm
00016     {
00017         protected $value = array();
00018         
00022         public function clean()
00023         {
00024             parent::clean();
00025             
00026             $this->value = array();
00027             
00028             return $this;
00029         }
00030         
00031         public function setComposite($composite = true)
00032         {
00033             throw new UnsupportedMethodException(
00034                 'composition is not supported for lists'
00035             );
00036         }
00037         
00038         public function getInnerErrors()
00039         {
00040             $result = array();
00041             
00042             foreach ($this->getValue() as $id => $form) {
00043                 if ($errors = $form->getInnerErrors())
00044                     $result[$id] = $errors;
00045             }
00046             
00047             return $result;
00048         }
00049         
00050         public function import($scope)
00051         {
00052             if (!$this->proto)
00053                 throw new WrongStateException(
00054                     "no proto defined for PrimitiveFormsList '{$this->name}'"
00055                 );
00056             
00057             if (!BasePrimitive::import($scope))
00058                 return null;
00059             
00060             if (!is_array($scope[$this->name]))
00061                 return false;
00062             
00063             $error = false;
00064             
00065             $this->value = array();
00066             
00067             foreach ($scope[$this->name] as $id => $value) {
00068                 $this->value[$id] =
00069                     $this->proto->makeForm()->
00070                         import($value);
00071                 
00072                 if ($this->value[$id]->getErrors())
00073                     $error = true;
00074             }
00075             
00076             return !$error;
00077         }
00078         
00079         public function importValue($value)
00080         {
00081             if ($value !== null)
00082                 Assert::isArray($value);
00083             else
00084                 return null;
00085             
00086             $result = true;
00087             
00088             $resultValue = array();
00089             
00090             foreach ($value as $id => $form) {
00091                 Assert::isInstance($form, 'Form');
00092                 
00093                 $resultValue[$id] = $form;
00094                 
00095                 if ($form->getErrors())
00096                     $result = false;
00097             }
00098             
00099             $this->value = $resultValue;
00100             
00101             return $result;
00102         }
00103         
00104         public function exportValue()
00105         {
00106             if (!$this->isImported())
00107                 return null;
00108             
00109             $result = array();
00110             
00111             foreach ($this->value as $id => $form) {
00112                 $result[$id] = $form->export();
00113             }
00114             
00115             return $result;
00116         }
00117     }
00118 ?>