/** * @param $class_name string */ public function setClass($class_name) { if ($this->started) { $this->stop(); } $this->class = new Reflection_Class(Builder::className($class_name)); $this->defaults = $this->class->getDefaultProperties(); }
/** * Returns true if any property of $object is set and different than its default value * * @param $object * @return boolean */ public static function isObjectSet($object) { $result = false; $class = new Reflection_Class(get_class($object)); $defaults = $class->getDefaultProperties(); foreach ($class->accessProperties() as $property) { if (!$property->isStatic()) { $value = $property->getValue($object); if (isset($value)) { $default = isset($defaults[$property->name]) ? $defaults[$property->name] : $property->getType()->getDefaultValue(); if (is_object($value) && !self::isObjectSet($value)) { $value = null; } if ($value != $default) { $result = true; break; } } } } return $result; }
/** * Returns true if the element's property value changed since previous value * and if it is not empty * * @param $element object * @param $property_name string * @param $default_value mixed * @return boolean */ protected function valueChanged($element, $property_name, $default_value) { $id_property_name = 'id_' . $property_name; if (!isset($element->{$property_name}) && empty($id_property_name)) { return false; } $element_value = $element->{$property_name}; if (is_object($element_value)) { $class = new Reflection_Class(get_class($element_value)); $defaults = $class->getDefaultProperties(); foreach ($class->getListAnnotation('representative')->values() as $property_name) { if (isset($defaults[$property_name]) && $this->valueChanged($element_value, $property_name, $defaults[$property_name])) { return true; } } return false; } else { return isset($element_value) && strval($element_value) != '' && strval($element_value) != strval($default_value); } }