Merge branch 'develop' of https://github.com/tainacan/tainacan into develop

This commit is contained in:
mateuswetah 2018-03-21 08:10:28 -03:00
commit 73319097f6
13 changed files with 1046 additions and 748 deletions

View File

@ -4,8 +4,16 @@
echo 'Watching changes on src/' echo 'Watching changes on src/'
while inotifywait -qqr src -e create,move,modify,delete; do current_OS=`uname`
# For macOS (Darwin) is needed fsevents-tools installed (you can use homebrew install fsevents-tools)
if [ $current_OS == "Darwin" ]; then
echo echo
echo 'Change detected, running build' notifyloop src ./build.sh
./build.sh else
done while inotifywait -qqr src -e create,move,modify,delete; do
echo
echo 'Change detected, running build'
./build.sh
done
fi

View File

@ -113,6 +113,8 @@ return [
'label_collection_items' => __('Collection Items', 'tainacan'), 'label_collection_items' => __('Collection Items', 'tainacan'),
'label_collection_fields' => __('Collection Fields', 'tainacan'), 'label_collection_fields' => __('Collection Fields', 'tainacan'),
'label_collection_filters' => __('Collection Filters', 'tainacan'), 'label_collection_filters' => __('Collection Filters', 'tainacan'),
'label_parent_term' => __('Parent Term', 'tainacan'),
'label_add_new_term' => __('Add New Term', 'tainacan'),
// Instructions. More complex sentences to guide user and placeholders // Instructions. More complex sentences to guide user and placeholders
'instruction_dragndrop_fields_collection' => __('Drag and drop Fields here to Collection.', 'tainacan'), 'instruction_dragndrop_fields_collection' => __('Drag and drop Fields here to Collection.', 'tainacan'),
@ -126,6 +128,7 @@ return [
'instruction_select_a_filter_type' => __('Select a filter type:', 'tainacan'), 'instruction_select_a_filter_type' => __('Select a filter type:', 'tainacan'),
// Info. Other feedback to user. // Info. Other feedback to user.
'info_name_is_required' => __('Name is required.', 'tainacan'),
'info_no_collection_created' => __('No collection was created in this repository.', 'tainacan'), 'info_no_collection_created' => __('No collection was created in this repository.', 'tainacan'),
'info_no_item_created' => __('No item was created in this collection.', 'tainacan'), 'info_no_item_created' => __('No item was created in this collection.', 'tainacan'),
'info_error_deleting_collection' => __('Error on deleting collection.', 'tainacan'), 'info_error_deleting_collection' => __('Error on deleting collection.', 'tainacan'),

View File

@ -0,0 +1,126 @@
<template>
<div>
<span>
<a
class="button"
@click="showForm = !showForm"><b-icon size="is-small" icon="plus"></b-icon>&nbsp;{{ $i18n.get('label_add_new_term') }}</a>
</span>
<div class="columns">
<transition name="fade">
<section
v-if="showForm"
class="column is-one-third"
style="padding-left: 0px;">
<b-field :label="$i18n.get('label_name')">
<b-input v-model="name"></b-input>
</b-field>
<b-field :label="$i18n.get('label_parent_term')">
<b-select
v-model="parent">
<option :value="0" selected> ---{{ $i18n.get('label_parent_term') }}--- </option>
<option
v-for="option,index in options"
:key="index"
:value="option.term_id"
v-html="setSpaces( option.level ) + option.name"></option>
</b-select>
</b-field>
<a
class="button is-primary"
@click="save">{{ $i18n.get('save') }}</a>
</section>
</transition>
</div>
</div>
</template>
<script>
import { tainacan as axios } from '../../../js/axios/axios'
export default {
data(){
return {
name: '',
parent: 0,
showForm: false,
field_id: this.field.field.id
}
},
props: {
id: String,
item_id: [Number,String],
field: [Number,String],
taxonomy_id: [Number,String],
value:[ Array, Boolean, Number ],
options: {
type: Array
}
},
methods: {
setSpaces( level ){
let result = '';
let space = '&nbsp;&nbsp;'
for(let i = 0;i < level; i++)
result += space;
return result;
},
save(){
if( this.name.trim() === ''){
this.$toast.open({
duration: 2000,
message: this.$i18n.get('info_name_is_required'),
position: 'is-bottom',
type: 'is-danger'
})
} else {
const instance = this;
axios.post(`/taxonomy/${this.taxonomy_id}/terms`, {
name: this.name,
parent: this.parent
})
.then( res => {
instance.name = '';
instance.parent = 0;
if( res.data && res.data.term_id || res.term_id ){
let term_id = ( res.term_id ) ? res.term_id : res.data.term_id;
let val = this.value;
if( !Array.isArray( val ) && this.field.field.multiple === 'no' ){
axios.patch(`/item/${this.item_id}/metadata/${this.field_id}`, {
values: term_id,
}).then( res => {
instance.$emit('newTerm', term_id);
})
} else {
val = ( val ) ? val : [];
val.push( term_id );
axios.patch(`/item/${this.item_id}/metadata/${this.field_id}`, {
values: val,
}).then( res => {
instance.$emit('newTerm', val);
})
}
}
});
}
}
}
}
</script>
<style scoped>
button{
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
}
</style>

View File

@ -1,16 +1,29 @@
<template> <template>
<component <div>
:is="getComponent()" <component
v-model="valueComponent" :is="getComponent()"
:allowNew="allowNew" v-model="valueComponent"
:terms="terms" :allowNew="allowNew"
:options="getOptions(0)"></component> :terms="terms"
:options="getOptions(0)"></component>
<add-new-term
class="add-new-term"
v-if="getComponent() !== 'tainacan-category-tag-input' && allowNew"
:taxonomy_id="taxonomy"
:field="field"
:item_id="field.item.id"
:value="valueComponent"
:options="getOptions(0)"
@newTerm="reload"></add-new-term>
</div>
</template> </template>
<script> <script>
import { tainacan as axios } from '../../../js/axios/axios' import { tainacan as axios } from '../../../js/axios/axios'
import TainacanCategoryRadio from './CategoryRadio.vue' import TainacanCategoryRadio from './CategoryRadio.vue'
import TainacanCategoryCheckbox from './CategoryCheckbox.vue' import TainacanCategoryCheckbox from './CategoryCheckbox.vue'
import TainacanCategoryTagInput from './CategoryTaginput.vue' import TainacanCategoryTagInput from './CategoryTaginput.vue'
import TainacanCategorySelectbox from './CategorySelectbox.vue'
import AddNewTerm from './AddNewTerm.vue'
export default { export default {
created(){ created(){
@ -30,7 +43,9 @@
components: { components: {
TainacanCategoryRadio, TainacanCategoryRadio,
TainacanCategoryCheckbox, TainacanCategoryCheckbox,
TainacanCategoryTagInput TainacanCategoryTagInput,
TainacanCategorySelectbox,
AddNewTerm
}, },
data(){ data(){
return { return {
@ -109,7 +124,21 @@
this.inputValue = $event; this.inputValue = $event;
this.$emit('input', this.inputValue); this.$emit('input', this.inputValue);
this.$emit('blur'); this.$emit('blur');
},
reload( val ){
this.valueComponent = val;
this.terms = [];
this.getTermsFromTaxonomy();
this.getTermsId();
} }
} }
} }
</script> </script>
<style scoped>
.add-new-term{
margin-top: 15px;
margin-bottom: 30px;
}
</style>

View File

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<div class="block" v-for="option,index in options"> <div v-for="option,index in options">
<b-checkbox <b-checkbox
:id="id" :id="id"
:style="{ paddingLeft: (option.level * 30) + 'px' }" :style="{ paddingLeft: (option.level * 30) + 'px' }"
@ -11,6 +11,7 @@
border> border>
{{ option.name }} {{ option.name }}
</b-checkbox> </b-checkbox>
<br>
</div> </div>
</div> </div>
</template> </template>
@ -27,6 +28,11 @@
checked: [] checked: []
} }
}, },
watch: {
value( val ){
this.checked = val;
}
},
props: { props: {
options: { options: {
type: Array type: Array

View File

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<div class="block" v-for="option,index in options"> <div v-for="option,index in options">
<b-radio <b-radio
:id="id" :id="id"
:style="{ paddingLeft: (option.level * 30) + 'px' }" :style="{ paddingLeft: (option.level * 30) + 'px' }"
@ -11,6 +11,7 @@
border> border>
{{ option.name }} {{ option.name }}
</b-radio> </b-radio>
<br>
</div> </div>
</div> </div>
</template> </template>
@ -18,13 +19,14 @@
<script> <script>
export default { export default {
created(){
if( this.value )
this.checked = this.value;
},
data(){ data(){
return { return {
checked:'' checked: ( this.value ) ? this.value : ''
}
},
watch: {
value( val ){
this.checked = val;
} }
}, },
props: { props: {

View File

@ -0,0 +1,59 @@
<template>
<div>
<div class="block">
<b-select
:id="id"
v-model="selected"
@input="emitChange()"
:placeholder="$i18n.get('label_select_category')" expanded>
<option
v-for="option,index in options"
:key="index"
:value="option.term_id"
v-html="setSpaces( option.level ) + option.name"></option>
</b-select>
</div>
</div>
</template>
<script>
export default {
created(){
if( this.value )
this.selected = this.value;
},
data(){
return {
selected: ''
}
},
watch: {
value( val ){
this.selected = val;
}
},
props: {
id: String,
options: {
type: Array
},
value: [ Number, String, Array ]
},
methods: {
emitChange() {
this.$emit('input', this.selected);
this.$emit('blur');
},
setSpaces( level ){
let result = '';
let space = '&nbsp;&nbsp;'
for(let i = 0;i < level; i++)
result += space;
return result;
}
}
}
</script>

View File

@ -5,6 +5,7 @@
rounded rounded
icon="magnify" icon="magnify"
:allowNew="allowNew" :allowNew="allowNew"
@input="emitChange"
v-model="selected" v-model="selected"
:data="labels" :data="labels"
field="label" field="label"
@ -22,19 +23,6 @@
} }
}, },
watch: { watch: {
selected( val ){
this.selected = val;
let results = [];
for( let term of val ){
if( term.value ){
results.push( term.value );
} else {
results.push( term );
}
}
this.$emit('input', results);
this.$emit('blur');
},
terms( val ){ terms( val ){
this.selectedValues(); this.selectedValues();
} }
@ -74,6 +62,19 @@
} }
this.selected = selected; this.selected = selected;
} }
},
emitChange(){
let val = this.selected;
let results = [];
for( let term of val ){
if( term.value ){
results.push( term.value );
} else {
results.push( term );
}
}
this.$emit('input', results);
this.$emit('blur');
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
<?php <?php
namespace Tainacan\Repositories; namespace Tainacan\Repositories;
use Tainacan\Entities; use Tainacan\Entities;
defined( 'ABSPATH' ) or die( 'No script kiddies please!' ); defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
@ -8,70 +9,70 @@ defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
class Item_Metadata extends Repository { class Item_Metadata extends Repository {
public $entities_type = '\Tainacan\Entities\Item_Metadata_Entity'; public $entities_type = '\Tainacan\Entities\Item_Metadata_Entity';
public function insert($item_metadata) { public function insert( $item_metadata ) {
$unique = !$item_metadata->is_multiple(); $unique = ! $item_metadata->is_multiple();
$field_type = $item_metadata->get_field()->get_field_type_object(); $field_type = $item_metadata->get_field()->get_field_type_object();
if ($field_type->get_core()) { if ( $field_type->get_core() ) {
$this->save_core_field_value($item_metadata); $this->save_core_field_value( $item_metadata );
} elseif ($field_type->get_primitive_type() == 'term') { } elseif ( $field_type->get_primitive_type() == 'term' ) {
$this->save_terms_field_value($item_metadata); $this->save_terms_field_value( $item_metadata );
} else { } else {
if ($unique) { if ( $unique ) {
update_post_meta($item_metadata->item->get_id(), $item_metadata->field->get_id(), wp_slash( $item_metadata->get_value() ) ); update_post_meta( $item_metadata->item->get_id(), $item_metadata->field->get_id(), wp_slash( $item_metadata->get_value() ) );
} else { } else {
delete_post_meta($item_metadata->item->get_id(), $item_metadata->field->get_id()); delete_post_meta( $item_metadata->item->get_id(), $item_metadata->field->get_id() );
if (is_array($item_metadata->get_value())){ if ( is_array( $item_metadata->get_value() ) ) {
$values = $item_metadata->get_value(); $values = $item_metadata->get_value();
foreach ($values as $value){ foreach ( $values as $value ) {
add_post_meta($item_metadata->item->get_id(), $item_metadata->field->get_id(), wp_slash( $value )); add_post_meta( $item_metadata->item->get_id(), $item_metadata->field->get_id(), wp_slash( $value ) );
} }
} }
} }
} }
do_action( 'tainacan-insert', $item_metadata );
do_action( 'tainacan-insert-Item_Metadata_Entity', $item_metadata );
do_action('tainacan-insert', $item_metadata); return new Entities\Item_Metadata_Entity( $item_metadata->get_item(), $item_metadata->get_field() );
do_action('tainacan-insert-Item_Metadata_Entity', $item_metadata); }
return new Entities\Item_Metadata_Entity($item_metadata->get_item(), $item_metadata->get_field());
}
/** /**
* @param $item_metadata * @param $item_metadata
* *
* @return mixed|void * @return mixed|void
*/ */
public function delete($item_metadata){} public function delete( $item_metadata ) {
}
public function save_core_field_value(\Tainacan\Entities\Item_Metadata_Entity $item_metadata) { public function save_core_field_value( \Tainacan\Entities\Item_Metadata_Entity $item_metadata ) {
$field_type = $item_metadata->get_field()->get_field_type_object();
if ($field_type->get_core()) {
$item = $item_metadata->get_item();
$set_method = 'set_' . $field_type->get_related_mapped_prop();
$value = $item_metadata->get_value();
$item->$set_method( is_array( $value ) ? $value[0] : $value );
if ($item->validate_core_fields()) {
global $Tainacan_Items;
$Tainacan_Items->insert($item);
} else {
throw new \Exception('Item metadata should be validated beforehand');
}
}
}
public function save_terms_field_value($item_metadata) {
$field_type = $item_metadata->get_field()->get_field_type_object(); $field_type = $item_metadata->get_field()->get_field_type_object();
if ($field_type->get_primitive_type() == 'term') { if ( $field_type->get_core() ) {
$item = $item_metadata->get_item();
$set_method = 'set_' . $field_type->get_related_mapped_prop();
$value = $item_metadata->get_value();
$item->$set_method( is_array( $value ) ? $value[0] : $value );
if ( $item->validate_core_fields() ) {
global $Tainacan_Items;
$Tainacan_Items->update( $item );
} else {
throw new \Exception( 'Item metadata should be validated beforehand' );
}
}
}
public function save_terms_field_value( $item_metadata ) {
$field_type = $item_metadata->get_field()->get_field_type_object();
if ( $field_type->get_primitive_type() == 'term' ) {
$new_terms = $item_metadata->get_value(); $new_terms = $item_metadata->get_value();
$taxonomy = new Entities\Taxonomy( $field_type->get_option('taxonomy_id') ); $taxonomy = new Entities\Taxonomy( $field_type->get_option( 'taxonomy_id' ) );
if( $taxonomy ){ if ( $taxonomy ) {
wp_set_object_terms($item_metadata->get_item()->get_id(), $new_terms, $taxonomy->get_db_identifier() ); wp_set_object_terms( $item_metadata->get_item()->get_id(), $new_terms, $taxonomy->get_db_identifier() );
} }
} }
@ -85,78 +86,87 @@ class Item_Metadata extends Repository {
* @return array * @return array
* @throws \Exception * @throws \Exception
*/ */
public function fetch($object, $output = null ){ public function fetch( $object, $output = null ) {
if($object instanceof Entities\Item){ if ( $object instanceof Entities\Item ) {
global $Tainacan_Items, $Tainacan_Fields; global $Tainacan_Items, $Tainacan_Fields;
$collection = $object->get_collection(); $collection = $object->get_collection();
if (!$collection instanceof Entities\Collection){ if ( ! $collection instanceof Entities\Collection ) {
return []; return [];
} }
$meta_list = $Tainacan_Fields->fetch_by_collection($collection, [], 'OBJECT' ); $meta_list = $Tainacan_Fields->fetch_by_collection( $collection, [], 'OBJECT' );
$return = []; $return = [];
if (is_array($meta_list)) { if ( is_array( $meta_list ) ) {
foreach ($meta_list as $meta) { foreach ( $meta_list as $meta ) {
$return[] = new Entities\Item_Metadata_Entity($object, $meta); $return[] = new Entities\Item_Metadata_Entity( $object, $meta );
} }
} }
return $return; return $return;
}else{ } else {
return []; return [];
} }
} }
/** /**
* Get the value for a Item field. * Get the value for a Item field.
* *
* @param Entities\Item_Metadata_Entity $item_metadata * @param Entities\Item_Metadata_Entity $item_metadata
* @return mixed *
*/ * @return mixed
public function get_value(Entities\Item_Metadata_Entity $item_metadata) { */
$unique = ! $item_metadata->is_multiple(); public function get_value( Entities\Item_Metadata_Entity $item_metadata ) {
$unique = ! $item_metadata->is_multiple();
$field_type = $item_metadata->get_field()->get_field_type_object(); $field_type = $item_metadata->get_field()->get_field_type_object();
if ($field_type->get_core()) { if ( $field_type->get_core() ) {
$item = $item_metadata->get_item(); $item = $item_metadata->get_item();
$get_method = 'get_' . $field_type->get_related_mapped_prop(); $get_method = 'get_' . $field_type->get_related_mapped_prop();
return $item->$get_method();
} elseif ($field_type->get_primitive_type() == 'term') { return $item->$get_method();
if( is_numeric( $field_type->get_option('taxonomy_id') ) ){ } elseif ( $field_type->get_primitive_type() == 'term' ) {
$taxonomy = new Entities\Taxonomy( $field_type->get_option('taxonomy_id') );
if( $taxonomy ){
$taxonomy_slug = $taxonomy->get_db_identifier();
} else {
return null;
}
} else {
return null;
}
$terms = wp_get_object_terms($item_metadata->get_item()->get_id(), $taxonomy_slug ); if ( is_numeric( $field_type->get_option( 'taxonomy_id' ) ) ) {
$taxonomy = new Entities\Taxonomy( $field_type->get_option( 'taxonomy_id' ) );
if ( $taxonomy ) {
$taxonomy_slug = $taxonomy->get_db_identifier();
} else {
return null;
}
} else {
return null;
}
if ($unique) $terms = wp_get_object_terms( $item_metadata->get_item()->get_id(), $taxonomy_slug );
$terms = reset($terms);
if ( $unique ) {
$terms = reset( $terms );
}
return $terms; return $terms;
} else { } else {
return get_post_meta($item_metadata->item->get_id(), $item_metadata->field->get_id(), $unique); return get_post_meta( $item_metadata->item->get_id(), $item_metadata->field->get_id(), $unique );
} }
} }
public function register_post_type() { } public function register_post_type() {
}
public function get_map() { return []; } public function get_map() {
public function get_default_properties($map) { return []; } return [];
}
public function get_default_properties( $map ) {
return [];
}
/** /**
* @param $object * @param $object
@ -164,15 +174,17 @@ class Item_Metadata extends Repository {
* @return mixed * @return mixed
*/ */
public function update( $object, $new_values = null ) { public function update( $object, $new_values = null ) {
return $this->insert($object); return $this->insert( $object );
} }
/** /**
* Suggest a value to be inserted as a item Field value, return a pending log * Suggest a value to be inserted as a item Field value, return a pending log
* @param Entities\Item_Metadata_Entity $item_metadata *
* @return Entities\Log * @param Entities\Item_Metadata_Entity $item_metadata
*/ *
public function suggest($item_metadata) { * @return Entities\Log
return Entities\Log::create(false, '', $item_metadata, null, 'pending'); */
public function suggest( $item_metadata ) {
return Entities\Log::create( false, '', $item_metadata, null, 'pending' );
} }
} }

View File

@ -145,12 +145,12 @@ class Items extends Repository {
// iterate through the native post properties // iterate through the native post properties
foreach ( $map as $prop => $mapped ) { foreach ( $map as $prop => $mapped ) {
if ( $mapped['map'] != 'meta' && $mapped['map'] != 'meta_multi' && $mapped['map'] != 'terms' && $mapped['map'] != 'thumbnail_id' ) { if ( $mapped['map'] != 'meta' && $mapped['map'] != 'meta_multi' && $mapped['map'] != 'terms' ) {
$item->WP_Post->{$mapped['map']} = $item->get_mapped_property( $prop ); $item->WP_Post->{$mapped['map']} = $item->get_mapped_property( $prop );
} }
} }
// save post and geet its ID // save post and get its ID
$item->WP_Post->post_type = $cpt; $item->WP_Post->post_type = $cpt;
//$item->WP_Post->post_status = 'publish'; //$item->WP_Post->post_status = 'publish';

View File

@ -107,14 +107,6 @@ class DevInterface {
); );
add_meta_box(
$col->get_db_identifier() . '_metadata_js',
__('Field Components', 'tainacan'),
array(&$this, 'metadata_components_metabox'),
$col->get_db_identifier(), //post type
'normal'
);
} }

View File

@ -8,88 +8,132 @@ namespace Tainacan\Tests;
* @package Test_Tainacan * @package Test_Tainacan
*/ */
use Tainacan\Entities; class CoreFieldTypes extends TAINACAN_UnitApiTestCase {
/**
* Sample test case.
*/
class CoreFieldTypes extends TAINACAN_UnitTestCase {
function test_core_field_types() { function test_core_field_types() {
global $Tainacan_Item_Metadata, $Tainacan_Items; global $Tainacan_Item_Metadata, $Tainacan_Items;
$collection = $this->tainacan_entity_factory->create_entity( $collection = $this->tainacan_entity_factory->create_entity(
'collection', 'collection',
array( array(
'name' => 'test', 'name' => 'test',
), ),
true true
); );
$field = $this->tainacan_entity_factory->create_entity( $field = $this->tainacan_entity_factory->create_entity(
'field', 'field',
array( array(
'name' => 'metadado', 'name' => 'metadado',
'description' => 'title', 'description' => 'title',
'collection' => $collection, 'collection' => $collection,
'field_type' => 'Tainacan\Field_Types\Core_Title' 'field_type' => 'Tainacan\Field_Types\Core_Title'
), ),
true true
); );
$fieldDescription = $this->tainacan_entity_factory->create_entity( $fieldDescription = $this->tainacan_entity_factory->create_entity(
'field', 'field',
array( array(
'name' => 'metadado_desc', 'name' => 'metadado_desc',
'description' => 'description', 'description' => 'description',
'collection' => $collection, 'collection' => $collection,
'field_type' => 'Tainacan\Field_Types\Core_Description' 'field_type' => 'Tainacan\Field_Types\Core_Description'
), ),
true true
); );
$i = $this->tainacan_entity_factory->create_entity( $i = $this->tainacan_entity_factory->create_entity(
'item', 'item',
array( array(
'title' => 'item test', 'title' => 'item test',
'description' => 'adasdasdsa', 'description' => 'adasdasdsa',
'collection' => $collection 'collection' => $collection
), ),
true true
); );
$item_metadata = new \Tainacan\Entities\Item_Metadata_Entity($i, $field); $item_metadata = new \Tainacan\Entities\Item_Metadata_Entity( $i, $field );
$item_metadata->set_value('changed title'); $item_metadata->set_value( 'changed title' );
$item_metadata->validate(); $item_metadata->validate();
$Tainacan_Item_Metadata->insert($item_metadata); $Tainacan_Item_Metadata->insert( $item_metadata );
$checkItem = $Tainacan_Items->fetch($i->get_id()); $checkItem = $Tainacan_Items->fetch( $i->get_id() );
$this->assertEquals('changed title', $checkItem->get_title()); $this->assertEquals( 'changed title', $checkItem->get_title() );
$check_item_metadata = new \Tainacan\Entities\Item_Metadata_Entity($checkItem, $field); $check_item_metadata = new \Tainacan\Entities\Item_Metadata_Entity( $checkItem, $field );
$this->assertEquals('changed title', $check_item_metadata->get_value()); $this->assertEquals( 'changed title', $check_item_metadata->get_value() );
// description // description
$item_metadata = new \Tainacan\Entities\Item_Metadata_Entity($i, $fieldDescription); $item_metadata = new \Tainacan\Entities\Item_Metadata_Entity( $i, $fieldDescription );
$item_metadata->set_value('changed description'); $item_metadata->set_value( 'changed description' );
$item_metadata->validate(); $item_metadata->validate();
$Tainacan_Item_Metadata->insert($item_metadata); $Tainacan_Item_Metadata->insert( $item_metadata );
$checkItem = $Tainacan_Items->fetch($i->get_id()); $checkItem = $Tainacan_Items->fetch( $i->get_id() );
$this->assertEquals('changed description', $checkItem->get_description()); $this->assertEquals( 'changed description', $checkItem->get_description() );
$check_item_metadata = new \Tainacan\Entities\Item_Metadata_Entity($checkItem, $fieldDescription); $check_item_metadata = new \Tainacan\Entities\Item_Metadata_Entity( $checkItem, $fieldDescription );
$this->assertEquals('changed description', $check_item_metadata->get_value()); $this->assertEquals( 'changed description', $check_item_metadata->get_value() );
} }
protected function get_fields( $collection ) {
$request_fields = new \WP_REST_Request( 'GET', $this->namespace . '/collection/' . $collection->get_id() . '/fields' );
$response = $this->server->dispatch( $request_fields );
$data = $response->get_data();
return $data;
}
public function test_update_core_fields_status() {
$collection = $this->tainacan_entity_factory->create_entity(
'collection',
array(
'name' => 'test',
),
true
);
// GET
$data1 = self::get_fields( $collection );
// PATCH
$field_id = $data1[0]['id'];
$body = json_encode( array(
'status' => 'private'
) );
$request = new \WP_REST_Request( 'PATCH', $this->namespace . '/collection/' . $collection->get_id() . '/fields/' . $field_id );
$request->set_body( $body );
$response = $this->server->dispatch( $request );
$data2 = $response->get_data();
$this->assertEquals('private', $data2['status']);
// GET
$data3 = self::get_fields( $collection );
$this->assertCount(2, $data3);
$statuses = [$data3[0]['status'], $data3[1]['status']];
$this->assertContains('private', $statuses);
$this->assertContains('publish', $statuses);
}
} }