_name = $name; } /** * Return the name of model class if the field holds model instances. * * @return string Class name or null if the value is not a model. */ public function getValueModelClass() { return $this->_valueModelClass; } /** * Set the name of model class if the field holds model instances. * * @param string $classname The name of the class that is used as model for this field or null. * @return Field Fluent interface. */ public function setValueModelClass($classname) { $this->_valueModelClass = $classname; return $this; } public function getName() { return $this->_name; } /** * Set the name of the model class that owns the field. * @param string $classname The name of the class that owns the field. * @return Field Fluent interface. */ public function setOwningModelClass($classname) { $this->_owningModelClass = $classname; return $this; } public function setValue($value) { // If the fields value is not going to change, leave. if (is_object($value) === true) { // weak comparison for objects // TODO: DateTimeZone == DateTimeZone always returns true in weak equal check! Why? if ($value == $this->_value) { return $this; } } else { // strong comparison for other values if ($value === $this->_value) { return $this; } } // if (true === is_array($value) and 1 === count($value)) { // //$value = array_pop($value); // } if (true === is_array($value) and 0 === count($value)) { $value = null; } elseif (is_bool($value)) { // make sure 'false' is not converted to '' (empty string), but 0 for database $value = (int)$value; } // if null is given, delete dependent objects if (null === $value) { //$this->_deleteDependentModels(); } else { $multiValueCondition = $this->hasMultipleValues(); $arrayCondition = is_array($value); // arrayfy value $values = $value; if (false === $arrayCondition) { $values = array($value); } // remove wrapper array if multivalue condition is not given if (false === $multiValueCondition) { $value = $values[0]; } $this->_value = $value; return $this; } } public function getValue($index = null) { // wrap start value in array if multivalue option is set for this field $this->_value = $this->_wrapValueInArrayIfRequired($this->_value); // Caller requested a specific array index //if (!is_null($index)) { // if (true === is_array($this->_value)) { // if (true === isset($this->_value[$index])) { // return $this->_value[$index]; // } // else { // throw new \Exception('Unvalid index: ' . $index); // } // } // else { // throw new \Exception('Invalid index (' . $index . '). Requested value is not an array.'); // } //} return $this->_value; } private function _wrapValueInArrayIfRequired($value) { if (is_array($value) or !$this->hasMultipleValues()) { return $value; } if (is_null($value)) { return array(); } return array($value); } public function hasMultipleValues() { return $this->_hasMultipleValues; } public function setMultiplicity($max) { if ($max !== '*') { if ((is_int($max) === false) or ($max < 1)) { throw new \Exception('Only integer values > 1 or "*" allowed.'); } } $this->_multiplicity = $max; $this->_hasMultipleValues = (($max > 1) or ($max === '*')); return $this; } /** * Return the name of model class if the field holds link model instances. * * @return string Class name or null if the value is not a model. */ public function getLinkModelClass() { return $this->_linkModelClass; } }