do not get thumb from entity with no post ID, add diff function to entities and repositories, simple collection diff test

This commit is contained in:
Jacson Passold 2018-02-13 21:41:00 -02:00
parent b1cf8c385c
commit 6e13222ad1
3 changed files with 78 additions and 2 deletions

View File

@ -361,4 +361,14 @@ class Entity {
return get_post_type_capabilities((object) $args);
}
/**
* Compare this entity props with self old values or with $which other entity
* @param Entity|integer|\WP_Post $which default ($which = 0) to self compare with stored entity
* @return array
*/
public function diff($which = 0) {
global ${$this->repository};
return ${$this->repository}->diff($which, $this);
}
}

View File

@ -285,7 +285,9 @@ abstract class Repository {
$property = get_term_meta($entity->WP_Term->term_id, $prop, true);
} elseif ( isset( $entity->WP_Post )) {
if($mapped == 'thumbnail'){
$property = get_the_post_thumbnail_url($entity->WP_Post->ID, 'full');
if(isset($entity->WP_Post->ID)) {
$property = get_the_post_thumbnail_url($entity->WP_Post->ID, 'full');
}
} else {
$property = isset($entity->WP_Post->$mapped) ? $entity->WP_Post->$mapped : null;
}
@ -317,7 +319,7 @@ abstract class Repository {
/**
*
* @param integer|\WP_Post $post
* @param integer|\WP_Post $post|Entity
* @throws \Exception
* @return \Tainacan\Entities\Entity|boolean
*/
@ -503,6 +505,45 @@ abstract class Repository {
return user_can($user, $entity_cap->publish_posts, $entity->get_id());
}
/**
* Compare two repository entities
*
* @param Entity|integer|\WP_Post $old default ($which = 0) to self compare with stored entity
* @param Entity|integer|\WP_Post $new
*
* @return array List of diff values
*/
public function diff($old = 0, $new) {
$old_entity = null;
if($old === 0) { // self diff or other entity?
$id = $new->get_id();
if(!empty($id)) { // there is a repository entity?
$old_entity = $this->get_entity_by_post($new->WP_Post->ID);
}
else {
$entity_type = get_class($new);
$old_entity = new $entity_type; // there is no saved entity, let compare with a new empty one
}
}
else { // get entity from repository
$old_entity = $this->get_entity_by_post($old);
}
$new_entity = $this->get_entity_by_post($new);
$map = $this->get_map();
$diff = [];
foreach ($map as $prop => $mapped) {
if($old_entity->get_mapped_property($prop) != $new_entity->get_mapped_property($prop) ) {
$diff[$prop] = ['new' => $new_entity->get_mapped_property($prop), 'old' => $old_entity->get_mapped_property($prop)];
}
}
$diff = apply_filters('tainacan-entity-diff', $diff, $new, $old);
return $diff;
}
}
?>

View File

@ -219,4 +219,29 @@ class Collections extends TAINACAN_UnitTestCase {
global $Tainacan_Collections;
$this->assertTrue(has_action('init', array($Tainacan_Collections, 'register_post_type')) !== false, 'Collections Init is not registred!');
}
/**
* @group diff
*/
function test_diff() {
$x = $this->tainacan_entity_factory->create_entity(
'collection',
array(
'name' => 'testeDiff',
'description' => 'adasdasdsa',
'default_order' => 'DESC'
),
true
);
$x->set_name('OtherValue');
$x->set_description('testeDiff2');
$diff = $x->diff();
$this->assertEquals(2, count($diff));
$this->assertEquals($diff['name']['new'], 'OtherValue');
$this->assertEquals($diff['name']['old'], 'testeDiff');
$this->assertEquals($diff['description']['new'], 'testeDiff2');
$this->assertEquals($diff['description']['old'], 'adasdasdsa');
}
}