Adds validation to terms. Impovements in field item validation and sorting actions.
This commit is contained in:
parent
5d618064ff
commit
333a12001b
|
@ -26,18 +26,17 @@
|
|||
v-for="(column, index) in tableFields"
|
||||
:key="index"
|
||||
:custom-key="column.slug"
|
||||
:label="column.label"
|
||||
:label="column.name"
|
||||
:visible="column.visible"
|
||||
:width="column.field == 'row_actions' ? 78 : column.field == 'featured_image' ? 55 : undefined ">
|
||||
|
||||
<router-link
|
||||
tag="span"
|
||||
class="clickable-row"
|
||||
:to="{path: $routerHelper.getItemPath(collectionId, props.row.id)}">
|
||||
<template v-if="column.field != 'featured_image' && column.field != 'row_actions'">
|
||||
{{ showValue( props.row.metadata[column.slug] ) }}
|
||||
</template>
|
||||
</router-link>
|
||||
<template>
|
||||
<span
|
||||
class="clickable-row"
|
||||
@click.prevent="goToItemPage(props.row.id)"
|
||||
v-if="column.field != 'featured_image' && column.field != 'row_actions'"
|
||||
v-html="renderMetadata( props.row.metadata[column.slug] )" />
|
||||
</template>
|
||||
|
||||
<template v-if="column.field == 'featured_image'">
|
||||
<router-link
|
||||
|
@ -85,7 +84,7 @@
|
|||
</div>
|
||||
</section>
|
||||
</template>
|
||||
</b-table>
|
||||
</b-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -179,20 +178,14 @@ export default {
|
|||
goToItemEditPage(itemId) {
|
||||
this.$router.push(this.$routerHelper.getItemEditPath(this.collectionId, itemId));
|
||||
},
|
||||
showValue( metadata ){
|
||||
renderMetadata( metadata ){
|
||||
|
||||
if( ! metadata || metadata.value === false || metadata.value == undefined || metadata.value == '' )
|
||||
if( ! metadata || metadata.value === false || metadata.value == undefined )
|
||||
return '';
|
||||
|
||||
if( metadata.value instanceof Array ){
|
||||
let result = [];
|
||||
for( let val of metadata.value ){
|
||||
result.push( ( val.name ) ? val.name : val )
|
||||
}
|
||||
return result.join(', ');
|
||||
} else {
|
||||
return metadata.value.name ? metadata.value.name : metadata.value
|
||||
}
|
||||
else if (metadata)
|
||||
return metadata.value_as_html;
|
||||
else
|
||||
return metadata.value_as_html;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
class="control"
|
||||
custom>
|
||||
<b-checkbox
|
||||
@input="onChangeTableFields(column)"
|
||||
v-model="column.visible"
|
||||
:native-value="column.field">
|
||||
{{ column.label }}
|
||||
|
@ -29,10 +28,10 @@
|
|||
:placeholder="$i18n.get('label_sorting')">
|
||||
<option
|
||||
v-for="(field, index) in tableFields"
|
||||
v-if="field.id != undefined"
|
||||
v-if="field.id != undefined && field.field_type != 'Tainacan\Field_Types\Core_Description'"
|
||||
:value="field"
|
||||
:key="index">
|
||||
{{ field.label }}
|
||||
{{ field.name }}
|
||||
</option>
|
||||
</b-select>
|
||||
<button
|
||||
|
@ -46,7 +45,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { mapActions, mapGetters } from 'vuex';
|
||||
import { mapGetters } from 'vuex';
|
||||
import { eventSearchBus } from '../../../js/event-search-bus';
|
||||
|
||||
export default {
|
||||
|
@ -74,21 +73,6 @@ export default {
|
|||
'getOrderBy',
|
||||
'getOrder'
|
||||
]),
|
||||
onChangeTableFields(field) {
|
||||
// let prevValue = this.prefTableFields;
|
||||
// let index = this.prefTableFields.findIndex(alteredField => alteredField.slug === field.slug);
|
||||
// if (index >= 0) {
|
||||
// prevValue[index].visible = this.prefTableFields[index].visible ? false : true;
|
||||
// }
|
||||
|
||||
// for (let currentField of this.prefTableFields)
|
||||
// this.$console.log(currentField.slug, currentField.visible);
|
||||
|
||||
// for (let oldField of prevValue)
|
||||
// this.$console.log(oldField.slug, oldField.visible);
|
||||
|
||||
// this.$userPrefs.set('table_columns_' + this.collectionId, this.prefTableFields, prevValue);
|
||||
},
|
||||
onChangeOrderBy(field) {
|
||||
eventSearchBus.setOrderBy(field);
|
||||
},
|
||||
|
|
|
@ -87,14 +87,12 @@ export default {
|
|||
|
||||
this.fetchFields({ collectionId: this.collectionId, isRepositoryLevel: this.isRepositoryLevel, isContextEdit: false }).then((res) => {
|
||||
let rawFields = res;
|
||||
this.tableFields.push({ label: this.$i18n.get('label_thumbnail'), field: 'featured_image', field_type: undefined, slug: 'featured_image', id: undefined, visible: true });
|
||||
this.tableFields.push({ name: this.$i18n.get('label_thumbnail'), field: 'featured_image', field_type: undefined, slug: 'featured_image', id: undefined, visible: true });
|
||||
for (let field of rawFields) {
|
||||
this.tableFields.push(
|
||||
{ label: field.name, field: field.description, slug: field.slug, field_type: field.field_type, id: field.id, visible: true }
|
||||
);
|
||||
this.tableFields.push(field);
|
||||
}
|
||||
this.tableFields.push({ label: this.$i18n.get('label_actions'), field: 'row_actions', field_type: undefined, slug: 'actions', id: undefined, visible: true });
|
||||
this.prefTableFields = this.tableFields;
|
||||
this.tableFields.push({ name: this.$i18n.get('label_actions'), field: 'row_actions', field_type: undefined, slug: 'actions', id: undefined, visible: true });
|
||||
//this.prefTableFields = this.tableFields;
|
||||
// this.$userPrefs.get('table_columns_' + this.collectionId)
|
||||
// .then((value) => {
|
||||
// this.prefTableFields = value;
|
||||
|
|
|
@ -368,6 +368,10 @@ class Item extends Entity {
|
|||
|
||||
$is_valid = true;
|
||||
|
||||
if ( parent::validate() === false ) {
|
||||
$is_valid = false;
|
||||
}
|
||||
|
||||
$arrayItemMetadata = $this->get_fields();
|
||||
if ( $arrayItemMetadata ) {
|
||||
foreach ( $arrayItemMetadata as $itemMetadata ) {
|
||||
|
|
|
@ -174,6 +174,57 @@ class Term extends Entity {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* {@inheritDoc}
|
||||
* @see \Tainacan\Entities\Entity::validate()
|
||||
*/
|
||||
function validate() {
|
||||
|
||||
if (!parent::validate())
|
||||
return false;
|
||||
|
||||
$parent = $this->get_parent();
|
||||
$name = $this->get_name();
|
||||
$taxonomy = $this->get_taxonomy();
|
||||
|
||||
/**
|
||||
* Code from WordPress Core, taxonomy.php#2070
|
||||
*/
|
||||
|
||||
/*
|
||||
* Prevent the creation of terms with duplicate names at the same level of a taxonomy hierarchy,
|
||||
* unless a unique slug has been explicitly provided.
|
||||
*/
|
||||
$name_matches = get_terms( $taxonomy, array(
|
||||
'name' => $name,
|
||||
'hide_empty' => false,
|
||||
'parent' => $parent,
|
||||
) );
|
||||
|
||||
/*
|
||||
* The `name` match in `get_terms()` doesn't differentiate accented characters,
|
||||
* so we do a stricter comparison here.
|
||||
*/
|
||||
$name_match = null;
|
||||
if ( $name_matches ) {
|
||||
foreach ( $name_matches as $_match ) {
|
||||
if ( strtolower( $name ) === strtolower( $_match->name ) ) {
|
||||
$name_match = $_match;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($name_match) {
|
||||
$this->add_error( 'repeated', __('You can not have two terms with the same name at the same level', 'tainacan') );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public function __toHtml() {
|
||||
|
||||
$return = '';
|
||||
|
|
|
@ -41,8 +41,8 @@ export const setOrderBy = ({ commit }, orderBy ) => {
|
|||
});
|
||||
commit('setPostQueryAttribute', { attr: 'meta_key', value: orderBy.id } );
|
||||
commit('setPostQueryAttribute', { attr: 'orderby', value: 'meta_value_num' } );
|
||||
} else if (orderBy.field_type == 'Tainacan\\Field_Types\\Core_Title') {
|
||||
commit('setPostQueryAttribute', { attr: 'orderby', value: 'title' } );
|
||||
} else if (orderBy.field_type == orderBy.field_type_object.core) {
|
||||
commit('setPostQueryAttribute', { attr: 'orderby', value: orderBy.field_type_object.related_mapped_prop } );
|
||||
} else {
|
||||
commit('addMetaQuery', {
|
||||
field_id: orderBy.id
|
||||
|
|
Loading…
Reference in New Issue