Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class MappedForm
00016 {
00017 private $form = null;
00018 private $type = null;
00019
00020 private $map = array();
00021
00025 public static function create(Form $form)
00026 {
00027 return new self($form);
00028 }
00029
00030 public function __construct(Form $form)
00031 {
00032 $this->form = $form;
00033 }
00034
00038 public function getForm()
00039 {
00040 return $this->form;
00041 }
00042
00046 public function setDefaultType(RequestType $type)
00047 {
00048 $this->type = $type;
00049
00050 return $this;
00051 }
00052
00056 public function addSource($primitiveName, RequestType $type)
00057 {
00058 $this->checkExistence($primitiveName);
00059
00060 $this->map[$primitiveName][] = $type;
00061
00062 return $this;
00063 }
00064
00068 public function importOne($name, HttpRequest $request)
00069 {
00070 $this->checkExistence($name);
00071
00072 $scopes = array();
00073
00074 if (isset($this->map[$name])) {
00075 foreach ($this->map[$name] as $type) {
00076 $scopes[] = $request->getByType($type);
00077 }
00078 } elseif ($this->type) {
00079 $scopes[] = $request->getByType($this->type);
00080 }
00081
00082 $first = true;
00083 foreach ($scopes as $scope) {
00084 if ($first) {
00085 $this->form->importOne($name, $scope);
00086 $first = false;
00087 } else
00088 $this->form->importOneMore($name, $scope);
00089 }
00090
00091 return $this;
00092 }
00093
00097 public function import(HttpRequest $request)
00098 {
00099 foreach ($this->form->getPrimitiveNames() as $name) {
00100 $this->importOne($name, $request);
00101 }
00102
00103 $this->form->checkRules();
00104
00105 return $this;
00106 }
00107
00111 public function export(RequestType $type)
00112 {
00113 $result = array();
00114
00115 $default = ($this->type == $type);
00116
00117 foreach ($this->form->getPrimitiveList() as $name => $prm) {
00118 if (
00119 (
00120 isset($this->map[$name])
00121 && in_array($type, $this->map[$name])
00122 )
00123 || (
00124 !isset($this->map[$name])
00125 && $default
00126 )
00127 ) {
00128 if ($prm->getValue())
00129 $result[$name] = $prm->exportValue();
00130 }
00131 }
00132
00133 return $result;
00134 }
00135
00139 private function checkExistence($name)
00140 {
00141 if (!$this->form->primitiveExists($name))
00142 throw new MissingElementException(
00143 "there is no '{$name}' primitive"
00144 );
00145
00146 return $this;
00147 }
00148 }
00149 ?>