Rewrite changes to run through the keys of the passed in new values array, and handle object methods as well as basic values

pull/2669/head
Isaac Connor 2019-07-24 11:24:14 -04:00
parent 341f4adbdf
commit e3a9d5d488
1 changed files with 35 additions and 11 deletions

View File

@ -171,19 +171,43 @@ class ZM_Object {
public function changes( $new_values ) {
$changes = array();
foreach ( $this->defaults as $field=>$default_value ) {
if ( array_key_exists($field, $new_values) ) {
Logger::Debug("Checking default $field => $default_value exists in new values :".$this->{$field} . " " .$new_values[$field]);
if ( (!array_key_exists($field, $this)) or ( $this->{$field} != $new_values[$field] ) ) {
Logger::Debug("Checking default $field => $default_value changes becaause" . $new_values[$field].' != '.$new_values[$field]);
$changes[$field] = $new_values[$field];
#} else if {
Logger::Debug("Checking default $field => $default_value changes becaause " . $new_values[$field].' != '.$new_values[$field]);
#array_push( $changes, [$field=>$defaults[$field]] );
foreach ( $new_values as $field => $value ) {
if ( method_exists($this, $field) ) {
$old_value = $this->$field();
Logger::Debug("Checking method $field () ".print_r($old_value,true)." => " . print_r($value,true));
if ( is_array($old_value) ) {
$diff = array_recursive_diff($old_value, $value);
Logger::Debug("Checking method $field () diff is".print_r($diff,true));
if ( count($diff) ) {
$changes[$field] = $value;
}
} else if ( $this->$field() != $value ) {
$changes[$field] = $value;
}
} else if ( array_key_exists($field, $this) ) {
Logger::Debug("Checking field $field => ".$this->{$field} . " ?= " .$value);
if ( $this->{$field} != $value ) {
$changes[$field] = $value;
}
} else if ( array_key_exists($field, $this->defaults) ) {
Logger::Debug("Checking default $field => ".$this->defaults[$field] . " " .$value);
if ( $this->defaults[$field] != $value ) {
$changes[$field] = $value;
}
} else {
Logger::Debug("Checking default $field => $default_value not in new_values");
}
#if ( (!array_key_exists($field, $this)) or ( $this->{$field} != $new_values[$field] ) ) {
#Logger::Debug("Checking default $field => $default_value changes becaause" . $new_values[$field].' != '.$new_values[$field]);
#$changes[$field] = $new_values[$field];
##} else if {
#Logger::Debug("Checking default $field => $default_value changes becaause " . $new_values[$field].' != '.$new_values[$field]);
##array_push( $changes, [$field=>$defaults[$field]] );
#}
#} else {
#Logger::Debug("Checking default $field => $default_value not in new_values");
#}
} # end foreach default
return $changes;
} # end public function changes