first upload all files

This commit is contained in:
NW
2023-06-11 13:14:03 +01:00
parent f14dbc52b5
commit c08b36d1b6
1705 changed files with 106852 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
<?php
namespace Modules\Page\Admin;
use Modules\Admin\Ui\Tab;
use Modules\Admin\Ui\Tabs;
class PageTabs extends Tabs
{
public function make()
{
$this->group('page_information', trans('page::pages.tabs.group.page_information'))
->active()
->add($this->general())
->add($this->seo());
}
private function general()
{
return tap(new Tab('general', trans('page::pages.tabs.general')), function (Tab $tab) {
$tab->active();
$tab->weight(5);
$tab->fields(['title', 'body', 'is_active', 'slug']);
$tab->view('page::admin.pages.tabs.general');
});
}
private function seo()
{
return tap(new Tab('seo', trans('page::pages.tabs.seo')), function (Tab $tab) {
$tab->weight(10);
$tab->view('page::admin.pages.tabs.seo');
});
}
}

View File

@@ -0,0 +1,10 @@
<?php
return [
'admin.pages' => [
'index' => 'page::permissions.index',
'create' => 'page::permissions.create',
'edit' => 'page::permissions.edit',
'destroy' => 'page::permissions.destroy',
],
];

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('pages', function (Blueprint $table) {
$table->increments('id');
$table->string('slug')->unique();
$table->boolean('is_active');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('pages');
}
}

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePageTranslationsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('page_translations', function (Blueprint $table) {
$table->increments('id');
$table->integer('page_id')->unsigned();
$table->string('locale');
$table->string('name');
$table->longText('body');
$table->unique(['page_id', 'locale']);
$table->foreign('page_id')->references('id')->on('pages')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('page_translations');
}
}

View File

@@ -0,0 +1,85 @@
<?php
namespace Modules\Page\Entities;
use Modules\Admin\Ui\AdminTable;
use Modules\Support\Eloquent\Model;
use Modules\Meta\Eloquent\HasMetaData;
use Modules\Support\Eloquent\Sluggable;
use Modules\Support\Eloquent\Translatable;
class Page extends Model
{
use Translatable, Sluggable, HasMetaData;
/**
* The relations to eager load on every query.
*
* @var array
*/
protected $with = ['translations'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['slug', 'is_active'];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'is_active' => 'boolean',
];
/**
* The attributes that are translatable.
*
* @var array
*/
protected $translatedAttributes = ['name', 'body'];
/**
* The attribute that will be slugged.
*
* @var string
*/
protected $slugAttribute = 'name';
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted()
{
static::addActiveGlobalScope();
}
public static function urlForPage($id)
{
return static::select('slug')->firstOrNew(['id' => $id])->url();
}
public function url()
{
if (is_null($this->slug)) {
return '#';
}
return localized_url(locale(), $this->slug);
}
/**
* Get table data for the resource
*
* @return \Illuminate\Http\JsonResponse
*/
public function table()
{
return new AdminTable($this->newQuery()->withoutGlobalScope('active'));
}
}

View File

@@ -0,0 +1,15 @@
<?php
namespace Modules\Page\Entities;
use Modules\Support\Eloquent\TranslationModel;
class PageTranslation extends TranslationModel
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'body'];
}

View File

@@ -0,0 +1,40 @@
<?php
namespace Modules\Page\Http\Controllers\Admin;
use Modules\Page\Entities\Page;
use Modules\Admin\Traits\HasCrudActions;
use Modules\Page\Http\Requests\SavePageRequest;
class PageController
{
use HasCrudActions;
/**
* Model for the resource.
*
* @var string
*/
protected $model = Page::class;
/**
* Label of the resource.
*
* @var string
*/
protected $label = 'page::pages.page';
/**
* View path of the resource.
*
* @var string
*/
protected $viewPath = 'page::admin.pages';
/**
* Form requests for the resource.
*
* @var array|string
*/
protected $validation = SavePageRequest::class;
}

View File

@@ -0,0 +1,16 @@
<?php
namespace Modules\Page\Http\Controllers;
class HomeController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('public.home.index');
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace Modules\Page\Http\Controllers;
use Modules\Page\Entities\Page;
use Modules\Media\Entities\File;
class PageController
{
/**
* Display page for the slug.
*
* @param string $slug
* @return \Illuminate\Http\Response
*/
public function show($slug)
{
$logo = File::findOrNew(setting('storefront_header_logo'))->path;
$page = Page::where('slug', $slug)->firstOrFail();
return view('public.pages.show', compact('page', 'logo'));
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace Modules\Page\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Page\Entities\Page;
use Modules\Core\Http\Requests\Request;
class SavePageRequest extends Request
{
/**
* Available attributes.
*
* @var array
*/
protected $availableAttributes = 'page::attributes';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'slug' => $this->getSlugRules(),
'name' => 'required',
'body' => 'required',
'is_active' => 'required|boolean',
];
}
private function getSlugRules()
{
$rules = $this->route()->getName() === 'admin.pages.update'
? ['required']
: ['sometimes'];
$slug = Page::withoutGlobalScope('active')->where('id', $this->id)->value('slug');
$rules[] = Rule::unique('pages', 'slug')->ignore($slug, 'slug');
return $rules;
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace Modules\Page\Providers;
use Modules\Page\Admin\PageTabs;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
use Modules\Admin\Ui\Facades\TabManager;
use Modules\Page\Http\Controllers\PageController;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class PageServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
TabManager::register('pages', PageTabs::class);
$this->registerPageRoute();
}
private function registerPageRoute()
{
$this->app->booted(function () {
Route::get('{slug}', [PageController::class, 'show'])
->prefix(LaravelLocalization::setLocale())
->middleware(['localize', 'locale_session_redirect', 'localization_redirect', 'web'])
->name('pages.show');
});
}
}

View File

@@ -0,0 +1,8 @@
<?php
return [
'name' => 'Name',
'slug' => 'URL',
'body' => 'Body',
'is_active' => 'Status',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
'page' => 'Page',
'pages' => 'Pages',
'table' => [
'name' => 'Name',
],
'tabs' => [
'group' => [
'page_information' => 'Page Information',
],
'general' => 'General',
'seo' => 'SEO',
],
'form' => [
'enable_the_page' => 'Enable the page',
],
];

View File

@@ -0,0 +1,8 @@
<?php
return [
'index' => 'Index Pages',
'create' => 'Create Pages',
'edit' => 'Edit Pages',
'destroy' => 'Delete Pages',
];

View File

@@ -0,0 +1,5 @@
<?php
return [
'pages' => 'Pages',
];

View File

@@ -0,0 +1,18 @@
@extends('admin::layout')
@component('admin::components.page.header')
@slot('title', trans('admin::resource.create', ['resource' => trans('page::pages.page')]))
<li><a href="{{ route('admin.pages.index') }}">{{ trans('page::pages.pages') }}</a></li>
<li class="active">{{ trans('admin::resource.create', ['resource' => trans('page::pages.page')]) }}</li>
@endcomponent
@section('content')
<form method="POST" action="{{ route('admin.pages.store') }}" class="form-horizontal" id="page-create-form" novalidate>
{{ csrf_field() }}
{!! $tabs->render(compact('page')) !!}
</form>
@endsection
@include('page::admin.pages.partials.shortcuts')

View File

@@ -0,0 +1,20 @@
@extends('admin::layout')
@component('admin::components.page.header')
@slot('title', trans('admin::resource.edit', ['resource' => trans('page::pages.page')]))
@slot('subtitle', $page->title)
<li><a href="{{ route('admin.pages.index') }}">{{ trans('page::pages.pages') }}</a></li>
<li class="active">{{ trans('admin::resource.edit', ['resource' => trans('page::pages.page')]) }}</li>
@endcomponent
@section('content')
<form method="POST" action="{{ route('admin.pages.update', $page) }}" class="form-horizontal" id="page-edit-form" novalidate>
{{ csrf_field() }}
{{ method_field('put') }}
{!! $tabs->render(compact('page')) !!}
</form>
@endsection
@include('page::admin.pages.partials.shortcuts')

View File

@@ -0,0 +1,38 @@
@extends('admin::layout')
@component('admin::components.page.header')
@slot('title', trans('page::pages.pages'))
<li class="active">{{ trans('page::pages.pages') }}</li>
@endcomponent
@component('admin::components.page.index_table')
@slot('resource', 'pages')
@slot('buttons', ['create'])
@slot('name', trans('page::pages.page'))
@slot('thead')
<tr>
@include('admin::partials.table.select_all')
<th>{{ trans('admin::admin.table.id') }}</th>
<th>{{ trans('page::pages.table.name') }}</th>
<th>{{ trans('admin::admin.table.status') }}</th>
<th data-sort>{{ trans('admin::admin.table.created') }}</th>
</tr>
@endslot
@endcomponent
@push('scripts')
<script>
new DataTable('#pages-table .table', {
columns: [
{ data: 'checkbox', orderable: false, searchable: false, width: '3%' },
{ data: 'id', width: '5%' },
{ data: 'name', name: 'translations.name', orderable: false, defaultContent: '' },
{ data: 'status', name: 'is_active', searchable: false },
{ data: 'created', name: 'created_at' },
],
});
</script>
@endpush

View File

@@ -0,0 +1,14 @@
@push('shortcuts')
<dl class="dl-horizontal">
<dt><code>b</code></dt>
<dd>{{ trans('admin::admin.shortcuts.back_to_index', ['name' => trans('page::pages.page')]) }}</dd>
</dl>
@endpush
@push('scripts')
<script>
keypressAction([
{ key: 'b', route: "{{ route('admin.pages.index') }}" },
]);
</script>
@endpush

View File

@@ -0,0 +1,8 @@
{{ Form::text('name', trans('page::attributes.name'), $errors, $page, ['labelCol' => 2, 'required' => true]) }}
{{ Form::wysiwyg('body', trans('page::attributes.body'), $errors, $page, ['labelCol' => 2, 'required' => true]) }}
<div class="row">
<div class="col-md-8">
{{ Form::checkbox('is_active', trans('page::attributes.is_active'), trans('page::pages.form.enable_the_page'), $errors, $page) }}
</div>
</div>

View File

@@ -0,0 +1,5 @@
<div class="row">
<div class="col-md-8">
@include('meta::admin.meta_fields', ['entity' => $page])
</div>
</div>

View File

@@ -0,0 +1,39 @@
<?php
use Illuminate\Support\Facades\Route;
Route::get('pages', [
'as' => 'admin.pages.index',
'uses' => 'PageController@index',
'middleware' => 'can:admin.pages.index',
]);
Route::get('pages/create', [
'as' => 'admin.pages.create',
'uses' => 'PageController@create',
'middleware' => 'can:admin.pages.create',
]);
Route::post('pages', [
'as' => 'admin.pages.store',
'uses' => 'PageController@store',
'middleware' => 'can:admin.pages.create',
]);
Route::get('pages/{id}/edit', [
'as' => 'admin.pages.edit',
'uses' => 'PageController@edit',
'middleware' => 'can:admin.pages.edit',
]);
Route::put('pages/{id}/edit', [
'as' => 'admin.pages.update',
'uses' => 'PageController@update',
'middleware' => 'can:admin.pages.edit',
]);
Route::delete('pages/{ids?}', [
'as' => 'admin.pages.destroy',
'uses' => 'PageController@destroy',
'middleware' => 'can:admin.pages.destroy',
]);

View File

@@ -0,0 +1,5 @@
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', 'HomeController@index')->name('home');

View File

@@ -0,0 +1,25 @@
<?php
namespace Modules\Page\Sidebar;
use Maatwebsite\Sidebar\Item;
use Maatwebsite\Sidebar\Menu;
use Maatwebsite\Sidebar\Group;
use Modules\Admin\Sidebar\BaseSidebarExtender;
class SidebarExtender extends BaseSidebarExtender
{
public function extend(Menu $menu)
{
$menu->group(trans('admin::sidebar.content'), function (Group $group) {
$group->item(trans('page::sidebar.pages'), function (Item $item) {
$item->icon('fa fa-file');
$item->weight(25);
$item->route('admin.pages.index');
$item->authorize(
$this->auth->hasAccess('admin.pages.index')
);
});
});
}
}

View File

@@ -0,0 +1,27 @@
{
"name": "fleetcart/page-module",
"description": "The FleetCart Page Module.",
"authors": [
{
"name": "Envay Soft",
"email": "envaysoft@gmail.com"
}
],
"require": {
"php": "^8.0.2"
},
"autoload": {
"psr-4": {
"Modules\\Page\\": ""
}
},
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"config": {
"sort-packages": true
},
"minimum-stability": "dev"
}

9
Modules/Page/module.json Normal file
View File

@@ -0,0 +1,9 @@
{
"name": "Page",
"alias": "page",
"description": "Managing pages.",
"priority": 9999,
"providers": [
"Modules\\Page\\Providers\\PageServiceProvider"
]
}