diff --git a/Http/Controllers/Api/MenusController.php b/Http/Controllers/Api/MenusController.php new file mode 100644 index 0000000..67b7003 --- /dev/null +++ b/Http/Controllers/Api/MenusController.php @@ -0,0 +1,28 @@ + "Taxonomy", - "namespace" => "WebReinvent\\VaahCms\\Entities\\Taxonomy", + "namespace" => "WebReinvent\\VaahCms\\Models\\Taxonomy", "options" => TaxonomyType::getListInTreeFormat(), "filter_by" => 'vh_taxonomy_type_id', "add_url" => route('vh.backend')."#/vaah/manage/taxonomies/create", diff --git a/Models/ContentTypeBase.php b/Models/ContentTypeBase.php index 3e4d801..1342862 100644 --- a/Models/ContentTypeBase.php +++ b/Models/ContentTypeBase.php @@ -331,7 +331,6 @@ public static function getItemWithRelations($id) }]) ->withTrashed() ->first(); - $response['status'] = 'success'; $response['data'] = $item; diff --git a/Models/FieldType.php b/Models/FieldType.php new file mode 100644 index 0000000..cc6a5b5 --- /dev/null +++ b/Models/FieldType.php @@ -0,0 +1,111 @@ +format($date_time_format); + + } + //------------------------------------------------- + //------------------------------------------------- + public function setMetaAttribute($value) + { + if($value) + { + $this->attributes['meta'] = json_encode($value); + } else{ + $this->attributes['meta'] = null; + } + } + //------------------------------------------------- + public function getMetaAttribute($value) + { + if($value) + { + return json_decode($value); + } + return null; + } + //------------------------------------------------- + public function getTableColumns() { + return $this->getConnection()->getSchemaBuilder() + ->getColumnListing($this->getTable()); + } + //------------------------------------------------- + public function scopeExclude($query, $columns) + { + return $query->select( array_diff( $this->getTableColumns(),$columns) ); + } + //------------------------------------------------- + public function scopeIsPublished($query) + { + return $query->where( 'is_published', 1 ); + } + //------------------------------------------------- + public function createdByUser() + { + return $this->belongsTo(User::class, + 'created_by', 'id' + )->select('id', 'uuid', 'first_name', 'last_name', 'email'); + } + + //------------------------------------------------- + public function updatedByUser() + { + return $this->belongsTo(User::class, + 'updated_by', 'id' + )->select('id', 'uuid', 'first_name', 'last_name', 'email'); + } + //------------------------------------------------- + public function deletedByUser() + { + return $this->belongsTo(User::class, + 'deleted_by', 'id' + )->select('id', 'uuid', 'first_name', 'last_name', 'email'); + } + //------------------------------------------------- + //------------------------------------------------- + +} diff --git a/Models/FormGroup.php b/Models/FormGroup.php index 2aeb177..91053e7 100644 --- a/Models/FormGroup.php +++ b/Models/FormGroup.php @@ -205,7 +205,6 @@ public static function syncWithFormFields(FormGroup $group, $fields_array) ->first(); - if(isset($field['type']) && isset($field['type']['slug']) ) { $type = FieldType::where('slug', $field['type']['slug'])->first(); diff --git a/Resources/views/backend/pages/app.blade.php b/Resources/views/backend/pages/app.blade.php index fd9435f..e76c24a 100644 --- a/Resources/views/backend/pages/app.blade.php +++ b/Resources/views/backend/pages/app.blade.php @@ -15,7 +15,7 @@ @if(env('MODULE_CMS_ENV') == 'develop') @else - + @endif @endsection diff --git a/Routes/api.php b/Routes/api.php index 2be9861..6a074ea 100644 --- a/Routes/api.php +++ b/Routes/api.php @@ -29,3 +29,5 @@ function () { Route::any( '/contents/{singular_slug}/{content_slug}', 'ContentsController@getContentItem' ); //------------------------------------------------ }); + +include('api/api-routes-menus.php'); diff --git a/Routes/api/api-routes-menus.php b/Routes/api/api-routes-menus.php index e7ff350..daa0d20 100644 --- a/Routes/api/api-routes-menus.php +++ b/Routes/api/api-routes-menus.php @@ -6,64 +6,15 @@ Route::group( [ 'prefix' => 'cms/menus', - 'namespace' => 'Backend', + 'namespace' => 'Api', ], function () { - - /** - * Get Assets - */ - Route::get('/assets', 'MenusController@getAssets') - ->name('vh.backend.cms.api.menus.assets'); /** * Get List */ - Route::get('/', 'MenusController@getList') + Route::get('/{menu_slug}', 'MenusController@getList') ->name('vh.backend.cms.api.menus.list'); - /** - * Update List - */ - Route::match(['put', 'patch'], '/', 'MenusController@updateList') - ->name('vh.backend.cms.api.menus.list.update'); - /** - * Delete List - */ - Route::delete('/', 'MenusController@deleteList') - ->name('vh.backend.cms.api.menus.list.delete'); - - - /** - * Create Item - */ - Route::post('/', 'MenusController@createItem') - ->name('vh.backend.cms.api.menus.create'); - /** - * Get Item - */ - Route::get('/{id}', 'MenusController@getItem') - ->name('vh.backend.cms.api.menus.read'); - /** - * Update Item - */ - Route::match(['put', 'patch'], '/{id}', 'MenusController@updateItem') - ->name('vh.backend.cms.api.menus.update'); - /** - * Delete Item - */ - Route::delete('/{id}', 'MenusController@deleteItem') - ->name('vh.backend.cms.api.menus.delete'); - /** - * List Actions - */ - Route::any('/action/{action}', 'MenusController@listAction') - ->name('vh.backend.cms.api.menus.list.action'); - - /** - * Item actions - */ - Route::any('/{id}/action/{action}', 'MenusController@itemAction') - ->name('vh.backend.cms.api.menus.item.action'); diff --git a/Vue/pages/contenttypes/Contentstructure.vue b/Vue/pages/contenttypes/Contentstructure.vue index e863f37..f4d40d5 100644 --- a/Vue/pages/contenttypes/Contentstructure.vue +++ b/Vue/pages/contenttypes/Contentstructure.vue @@ -1,13 +1,14 @@ + @@ -67,18 +74,25 @@ const toggleItemMenu = (event) => { + data-testid="contetntypes-is_repeatable" + /> + Is Repeatable + class="p-button-sm" + /> + + @click="store.removeGroup(item,idx)" + /> + { item-key="id"> - + { - - - - - - - - - - - - - - - - Is repeatable - - - - - - - - - - Is Searchable - - - - - - - - - Excerpt + + + + + Is repeatable - - - - - - Opening Tag + + + - - - - - - Closing Tag + + + + + Is searchable - - + + + - - - Is Hidden + + + + Excerpt - - - - - - - - Is - Hidden + + + - - - + + + + + + + + + + + + + + {{ useVaah.toLabel(meta_index) }} + + + + + + + + + + + + + + + + + + + @@ -220,8 +249,8 @@ const toggleItemMenu = (event) => { - - + + Content Fields diff --git a/Vue/pages/contenttypes/components/Actions.vue b/Vue/pages/contenttypes/components/Actions.vue index 648a99b..32912a1 100644 --- a/Vue/pages/contenttypes/components/Actions.vue +++ b/Vue/pages/contenttypes/components/Actions.vue @@ -90,6 +90,7 @@ const toggleBulkMenuState = (event) => { icon="pi pi-search"/> @@ -99,6 +100,7 @@ const toggleBulkMenuState = (event) => { + dataKey="id" + class="p-datatable-sm" + v-model:selection="store.action.items" + stripedRows + responsiveLayout="scroll" + > - + v-if="store.isContentStructure()" + headerStyle="width: 3em" + /> - - + - + :sortable="true" + > - {{prop.data.name}} + severity="danger" + /> + {{ prop.data.name }} - - - + - - {{prop.data.plural}} + {{ prop.data.plural }} - - - + - - {{prop.data.singular}} + {{ prop.data.singular }} - - + :sortable="true" + > - {{useVaah.ago(prop.data.updated_at)}} + {{ useVaah.ago(prop.data.updated_at) }} - - + header="Is Published" + > - + @input="store.toggleIsActive(prop.data)" + /> - - + :header="store.getActionLabel()" + > - - + + icon="pi pi-align-left" + /> + + icon="pi pi-eye" + /> + icon="pi pi-pencil" + /> + icon="pi pi-trash" + /> - - + icon="pi pi-replay" + /> - - - - - @@ -144,10 +142,8 @@ const useVaah = vaah(); - + :rowsPerPageOptions="store.rows_per_page" + /> - - diff --git a/Vue/stores/store-contenttypes.js b/Vue/stores/store-contenttypes.js index bdaa1d5..79bc316 100644 --- a/Vue/stores/store-contenttypes.js +++ b/Vue/stores/store-contenttypes.js @@ -111,8 +111,8 @@ export const useContentTypeStore = defineStore({ this.list_view_width = 12; break; case 'contenttypes.contentstructure': - this.view = 'large'; - this.list_view_width = 4; + this.view = 'content structure'; + this.list_view_width = 3; break; default: this.view = 'small'; @@ -197,6 +197,7 @@ export const useContentTypeStore = defineStore({ },{deep: true} ); } + }, //--------------------------------------------------------------------- async getAssets() { @@ -706,6 +707,11 @@ export const useContentTypeStore = defineStore({ return this.view === 'large'; }, //--------------------------------------------------------------------- + isContentStructure() + { + return this.view !== 'content structure'; + }, + //--------------------------------------------------------------------- getIdWidth() { let width = 50; @@ -979,8 +985,9 @@ export const useContentTypeStore = defineStore({ } }, //--------------------------------------------------------------------- - toContentStructure(item) { + async toContentStructure(item) { this.item = vaah().clone(item); + await this.getContentStrucutre(this.item.id); this.$router.push({name: 'contenttypes.contentstructure', params: {id: item.id}}); }, @@ -992,7 +999,8 @@ export const useContentTypeStore = defineStore({ }, //--------------------------------------------------------------------- removeField(idx,i) { - this.item.groups[i].content_types.splice(idx, 1); + this.item.groups[i].fields.splice(idx, 1); + vaah().toastErrors(['Removed']); }, //--------------------------------------------------------------------- getCopy(value) @@ -1041,6 +1049,11 @@ export const useContentTypeStore = defineStore({ return item; }, //--------------------------------------------------------------------- + groupsFieldsSlug(item){ + console.log(item.name); + item.slug = vaah().strToSlug(item.name); + }, + //--------------------------------------------------------------------- } });
Is Repeatable