first commit
This commit is contained in:
18
.editorconfig
Normal file
18
.editorconfig
Normal file
@ -0,0 +1,18 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[docker-compose.yml]
|
||||
indent_size = 4
|
61
.env.example
Normal file
61
.env.example
Normal file
@ -0,0 +1,61 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:+yprEO2olPYKOgE6LbqOzBEHDaqvP7c6p5Uh4R0i978=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://dph-tycg-event.styledesign.com.tw
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=mysql8.0
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=laravel_dph-tycg-event_styledesign_com_tw
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=secret
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_HOST=redis6
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=mailpit
|
||||
MAIL_PORT=1025
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_HOST=
|
||||
PUSHER_PORT=443
|
||||
PUSHER_SCHEME=https
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
VITE_APP_NAME="${APP_NAME}"
|
||||
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
VITE_PUSHER_HOST="${PUSHER_HOST}"
|
||||
VITE_PUSHER_PORT="${PUSHER_PORT}"
|
||||
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
|
||||
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
# SYSTEM PHP VERSION
|
||||
SYS_PHP_VER=8.1
|
11
.gitattributes
vendored
Normal file
11
.gitattributes
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
* text=auto eol=lf
|
||||
|
||||
*.blade.php diff=html
|
||||
*.css diff=css
|
||||
*.html diff=html
|
||||
*.md diff=markdown
|
||||
*.php diff=php
|
||||
|
||||
/.github export-ignore
|
||||
CHANGELOG.md export-ignore
|
||||
.styleci.yml export-ignore
|
19
.gitignore
vendored
Normal file
19
.gitignore
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
/.phpunit.cache
|
||||
/node_modules
|
||||
/public/build
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/vendor
|
||||
.env
|
||||
.env.backup
|
||||
.env.production
|
||||
.phpunit.result.cache
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
auth.json
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
/.fleet
|
||||
/.idea
|
||||
/.vscode
|
66
README.md
Normal file
66
README.md
Normal file
@ -0,0 +1,66 @@
|
||||
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
|
||||
</p>
|
||||
|
||||
## About Laravel
|
||||
|
||||
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
|
||||
|
||||
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
||||
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
||||
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
||||
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
|
||||
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
|
||||
- [Robust background job processing](https://laravel.com/docs/queues).
|
||||
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
|
||||
|
||||
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
||||
|
||||
## Learning Laravel
|
||||
|
||||
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
|
||||
|
||||
You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch.
|
||||
|
||||
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
|
||||
|
||||
## Laravel Sponsors
|
||||
|
||||
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
|
||||
|
||||
### Premium Partners
|
||||
|
||||
- **[Vehikl](https://vehikl.com/)**
|
||||
- **[Tighten Co.](https://tighten.co)**
|
||||
- **[WebReinvent](https://webreinvent.com/)**
|
||||
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
|
||||
- **[64 Robots](https://64robots.com)**
|
||||
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
|
||||
- **[Cyber-Duck](https://cyber-duck.co.uk)**
|
||||
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
|
||||
- **[Jump24](https://jump24.co.uk)**
|
||||
- **[Redberry](https://redberry.international/laravel/)**
|
||||
- **[Active Logic](https://activelogic.com)**
|
||||
- **[byte5](https://byte5.de)**
|
||||
- **[OP.GG](https://op.gg)**
|
||||
|
||||
## Contributing
|
||||
|
||||
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
|
||||
|
||||
## Security Vulnerabilities
|
||||
|
||||
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
|
||||
|
||||
## License
|
||||
|
||||
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
27
app/Console/Kernel.php
Normal file
27
app/Console/Kernel.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*/
|
||||
protected function schedule(Schedule $schedule): void
|
||||
{
|
||||
// $schedule->command('inspire')->hourly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*/
|
||||
protected function commands(): void
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
30
app/Exceptions/Handler.php
Normal file
30
app/Exceptions/Handler.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Exceptions;
|
||||
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Throwable;
|
||||
|
||||
class Handler extends ExceptionHandler
|
||||
{
|
||||
/**
|
||||
* The list of the inputs that are never flashed to the session on validation exceptions.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $dontFlash = [
|
||||
'current_password',
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
|
||||
/**
|
||||
* Register the exception handling callbacks for the application.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
$this->reportable(function (Throwable $e) {
|
||||
//
|
||||
});
|
||||
}
|
||||
}
|
37
app/Fields/IframeField.php
Normal file
37
app/Fields/IframeField.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Fields;
|
||||
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudField;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade;
|
||||
|
||||
class IframeField
|
||||
{
|
||||
/**
|
||||
* Create an iframe custom field.
|
||||
*
|
||||
* @param string $name Field name (not used for display, only for form data)
|
||||
* @param string $label Field label
|
||||
* @param array $options Additional options (url, width, height, extra_attributes, hint)
|
||||
* @return CrudField
|
||||
*/
|
||||
public static function make(string $name, string $label, array $options = [])
|
||||
{
|
||||
$url = isset($options['url']) && is_callable($options['url'])
|
||||
? $options['url'](CrudPanelFacade::getFacadeRoot())
|
||||
: ($options['url'] ?? null);
|
||||
|
||||
$field = [
|
||||
'name' => $name,
|
||||
'label' => $label,
|
||||
'type' => 'iframe',
|
||||
'url' => $url, // URL to display in iframe
|
||||
'width' => $options['width'] ?? '', // Iframe width
|
||||
'height' => $options['height'] ?? '', // Iframe height
|
||||
'extra_attributes' => $options['extra_attributes'] ?? [], // Additional iframe attributes
|
||||
'hint' => $options['hint'] ?? null, // Help text
|
||||
];
|
||||
|
||||
return \Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade::field($field);
|
||||
}
|
||||
}
|
@ -0,0 +1,269 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\EventHealthAllowanceRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
use App\Mail\EventNotifyMail;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class EventHealthAllowanceCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class EventHealthAllowanceCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation { update as traitUpdate; }
|
||||
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\EventHealthAllowance::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/event-health-allowance');
|
||||
CRUD::setEntityNameStrings('活動:反轉代謝新人生', '活動:反轉代謝新人生');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
$this->crud->addColumns([
|
||||
[
|
||||
'name' => 'created_at',
|
||||
'label' => '登記時間',
|
||||
'type' => 'datetime',
|
||||
'format' => 'YYYY/MM/DD HH:mm:SS'
|
||||
],
|
||||
[
|
||||
'name' => 'check_state',
|
||||
'label' => '審核狀態',
|
||||
'type' => 'select_from_array',
|
||||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖'],
|
||||
],
|
||||
[
|
||||
'name' => 'twid',
|
||||
'label' => '身份證',
|
||||
'type' => 'text'
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'label' => '姓名',
|
||||
'type' => 'text'
|
||||
],
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(EventHealthAllowanceRequest::class);
|
||||
$this->crud->addFields([
|
||||
[
|
||||
'name' => 'hospital_name',
|
||||
'label' => '就醫院所',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'label' => '姓名',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'twid',
|
||||
'label' => '身份證',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'phone',
|
||||
'label' => '手機號碼',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'email',
|
||||
'label' => 'Email',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'address',
|
||||
'label' => '地址',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'check_state',
|
||||
'label' => "審核狀態",
|
||||
'type' => 'select_from_array',
|
||||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖'],
|
||||
'allows_null' => false,
|
||||
'default' => '1',
|
||||
],
|
||||
[
|
||||
'name' => 'check_reson',
|
||||
'label' => "審核回應(未通過原因)",
|
||||
'type' => 'text',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
|
||||
CRUD::iframe('record_card_img_src', '記錄小卡', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->record_card_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('twid_front_img_src', '身份證正面', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->twid_front_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('twid_back_img_src', '身份證反面', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->twid_back_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('exam_1st_img_src', '檢驗檢查報告1', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->exam_1st_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('exam_2nd_img_src', '檢驗檢查報告2', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->exam_2nd_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
$entry = $this->crud->getCurrentEntry();
|
||||
$org_check_state = $entry->check_state;
|
||||
// do something before validation, before save, before everything
|
||||
$response = $this->traitUpdate();
|
||||
// do something after save
|
||||
$entry = $this->crud->getCurrentEntry();
|
||||
if ($entry->check_state != $org_check_state) {
|
||||
switch($entry->check_state) {
|
||||
case '2': //過通
|
||||
try {
|
||||
Mail::to($entry->email)->send(new EventNotifyMail([
|
||||
"title" => "反轉代謝新人生 皮蛇疫苗加碼補 審核通過!",
|
||||
"body" => "恭喜您審核通過!"
|
||||
."\n\n登記資料:"
|
||||
."\n就醫院所:".$entry->hospital_name
|
||||
."\n姓名:".$entry->name
|
||||
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)
|
||||
."\n行動電話:".$entry->phone
|
||||
."\n電子信箱:".$entry->email
|
||||
."\n收件地址:".$entry->address
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
break;
|
||||
case '3': //未通過
|
||||
try {
|
||||
Mail::to($entry->email)->send(new EventNotifyMail([
|
||||
"title" => "反轉代謝新人生 皮蛇疫苗加碼補 未通過審核!",
|
||||
"body" => "抱歉,您的審核未通過!"
|
||||
."\n請依以下理由重新上活動網站登記"
|
||||
."\n理由:".$entry->check_reson
|
||||
."\n\n登記資料:"
|
||||
."\n就醫院所:".$entry->hospital_name
|
||||
."\n姓名:".$entry->name
|
||||
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)
|
||||
."\n行動電話:".$entry->phone
|
||||
."\n電子信箱:".$entry->email
|
||||
."\n收件地址:".$entry->address
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
}
|
252
app/Http/Controllers/Admin/EventImprovedHealthCrudController.php
Normal file
252
app/Http/Controllers/Admin/EventImprovedHealthCrudController.php
Normal file
@ -0,0 +1,252 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\EventImprovedHealthRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
use App\Mail\EventNotifyMail;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class EventImprovedHealthCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class EventImprovedHealthCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation { update as traitUpdate; }
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\EventImprovedHealth::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/event-improved-health');
|
||||
CRUD::setEntityNameStrings('活動:健康達標GO', '活動:健康達標GO');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
$this->crud->addColumns([
|
||||
[
|
||||
'name' => 'created_at',
|
||||
'label' => '登記時間',
|
||||
'type' => 'datetime',
|
||||
'format' => 'YYYY/MM/DD HH:mm:SS'
|
||||
],
|
||||
[
|
||||
'name' => 'check_state',
|
||||
'label' => '審核狀態',
|
||||
'type' => 'select_from_array',
|
||||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖'],
|
||||
],
|
||||
[
|
||||
'name' => 'twid',
|
||||
'label' => '身份證',
|
||||
'type' => 'text'
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'label' => '姓名',
|
||||
'type' => 'text'
|
||||
],
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(EventImprovedHealthRequest::class);
|
||||
$this->crud->addFields([
|
||||
[
|
||||
'name' => 'hospital_name',
|
||||
'label' => '就醫院所',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'label' => '姓名',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'twid',
|
||||
'label' => '身份證',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'phone',
|
||||
'label' => '手機號碼',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'email',
|
||||
'label' => 'Email',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'address',
|
||||
'label' => '地址',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'check_state',
|
||||
'label' => "審核狀態",
|
||||
'type' => 'select_from_array',
|
||||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖'],
|
||||
'allows_null' => false,
|
||||
'default' => '1',
|
||||
],
|
||||
[
|
||||
'name' => 'check_reson',
|
||||
'label' => "審核回應(未通過原因)",
|
||||
'type' => 'text',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
CRUD::iframe('record_card_img_src', '記錄小卡', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->record_card_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('twid_front_img_src', '身份證正面', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->twid_front_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('twid_back_img_src', '身份證反面', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->twid_back_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('exam_img_src', '檢查報告', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->exam_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
$entry = $this->crud->getCurrentEntry();
|
||||
$org_check_state = $entry->check_state;
|
||||
// do something before validation, before save, before everything
|
||||
$response = $this->traitUpdate();
|
||||
// do something after save
|
||||
$entry = $this->crud->getCurrentEntry();
|
||||
if ($entry->check_state != $org_check_state) {
|
||||
switch($entry->check_state) {
|
||||
case '2': //過通
|
||||
try {
|
||||
Mail::to($entry->email)->send(new EventNotifyMail([
|
||||
"title" => "健康達標GO 大獎汽車不是夢 審核通過!",
|
||||
"body" => "恭喜您審核通過!"
|
||||
."\n\n登記資料:"
|
||||
."\n就醫院所:".$entry->hospital_name
|
||||
."\n姓名:".$entry->name
|
||||
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)
|
||||
."\n行動電話:".$entry->phone
|
||||
."\n電子信箱:".$entry->email
|
||||
."\n收件地址:".$entry->address
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
break;
|
||||
case '3': //未通過
|
||||
try {
|
||||
Mail::to($entry->email)->send(new EventNotifyMail([
|
||||
"title" => "健康達標GO 大獎汽車不是夢 未通過審核!",
|
||||
"body" => "抱歉,您的審核未通過!"
|
||||
."\n請依以下理由重新上活動網站登記"
|
||||
."\n理由:".$entry->check_reson
|
||||
."\n\n登記資料:"
|
||||
."\n就醫院所:".$entry->hospital_name
|
||||
."\n姓名:".$entry->name
|
||||
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)
|
||||
."\n行動電話:".$entry->phone
|
||||
."\n電子信箱:".$entry->email
|
||||
."\n收件地址:".$entry->address
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
}
|
240
app/Http/Controllers/Admin/EventMetabolismCrudController.php
Normal file
240
app/Http/Controllers/Admin/EventMetabolismCrudController.php
Normal file
@ -0,0 +1,240 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\EventMetabolismRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
use App\Mail\EventNotifyMail;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class EventMetabolismCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class EventMetabolismCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation { update as traitUpdate; }
|
||||
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\EventMetabolism::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/event-metabolism');
|
||||
CRUD::setEntityNameStrings('活動:符合代謝新收案', '活動:符合代謝新收案');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
$this->crud->addColumns([
|
||||
[
|
||||
'name' => 'created_at',
|
||||
'label' => '登記時間',
|
||||
'type' => 'datetime',
|
||||
'format' => 'YYYY/MM/DD HH:mm:SS'
|
||||
],
|
||||
[
|
||||
'name' => 'check_state',
|
||||
'label' => '審核狀態',
|
||||
'type' => 'select_from_array',
|
||||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖'],
|
||||
],
|
||||
[
|
||||
'name' => 'twid',
|
||||
'label' => '身份證',
|
||||
'type' => 'text'
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'label' => '姓名',
|
||||
'type' => 'text'
|
||||
],
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(EventMetabolismRequest::class);
|
||||
$this->crud->addFields([
|
||||
[
|
||||
'name' => 'hospital_name',
|
||||
'label' => '就醫院所',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'label' => '姓名',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'twid',
|
||||
'label' => '身份證',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'phone',
|
||||
'label' => '手機號碼',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'email',
|
||||
'label' => 'Email',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'address',
|
||||
'label' => '地址',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'check_state',
|
||||
'label' => "審核狀態",
|
||||
'type' => 'select_from_array',
|
||||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖'],
|
||||
'allows_null' => false,
|
||||
'default' => '1',
|
||||
],
|
||||
[
|
||||
'name' => 'check_reson',
|
||||
'label' => "審核回應(未通過原因)",
|
||||
'type' => 'text',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
|
||||
CRUD::iframe('record_card_img_src', '記錄小卡', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->record_card_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('twid_front_img_src', '身份證正面', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->twid_front_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
|
||||
CRUD::iframe('twid_back_img_src', '身份證反面', [
|
||||
'url' => function ($crud) {
|
||||
$entry = $crud->getCurrentEntry();
|
||||
$path = str_replace("uploads/", "", $entry->twid_back_img_src);
|
||||
return $path ? route('storage.serve', $path) : "about:blank";
|
||||
},
|
||||
'width' => '400px',
|
||||
'height' => '300px',
|
||||
'extra_attributes' => [
|
||||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||||
'allow' => 'fullscreen',
|
||||
],
|
||||
'hint' => '',
|
||||
]);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
$entry = $this->crud->getCurrentEntry();
|
||||
$org_check_state = $entry->check_state;
|
||||
|
||||
// do something before validation, before save, before everything
|
||||
$response = $this->traitUpdate();
|
||||
// do something after save
|
||||
$entry = $this->crud->getCurrentEntry();
|
||||
if ($entry->check_state != $org_check_state) {
|
||||
switch($entry->check_state) {
|
||||
case '2': //過通
|
||||
try {
|
||||
Mail::to($entry->email)->send(new EventNotifyMail([
|
||||
"title" => "符合代謝新收案 早鳥報名最划算 審核通過!",
|
||||
"body" => "恭喜您審核通過!"
|
||||
."\n\n登記資料:"
|
||||
."\n就醫院所:".$entry->hospital_name
|
||||
."\n姓名:".$entry->name
|
||||
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)
|
||||
."\n行動電話:".$entry->phone
|
||||
."\n電子信箱:".$entry->email
|
||||
."\n收件地址:".$entry->address
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
break;
|
||||
case '3': //未通過
|
||||
try {
|
||||
Mail::to($entry->email)->send(new EventNotifyMail([
|
||||
"title" => "符合代謝新收案 早鳥報名最划算 未通過審核!",
|
||||
"body" => "抱歉,您的審核未通過!"
|
||||
."\n請依以下理由重新上活動網站登記"
|
||||
."\n理由:".$entry->check_reson
|
||||
."\n\n登記資料:"
|
||||
."\n就醫院所:".$entry->hospital_name
|
||||
."\n姓名:".$entry->name
|
||||
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)
|
||||
."\n行動電話:".$entry->phone
|
||||
."\n電子信箱:".$entry->email
|
||||
."\n收件地址:".$entry->address
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\EventRegistrationInfoRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
/**
|
||||
* Class EventRegistrationInfoCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class EventRegistrationInfoCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation { update as traitUpdate; }
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\EventRegistrationInfo::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/event-registration-info');
|
||||
CRUD::setEntityNameStrings('活動設定', '活動設定');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
CRUD::setFromDb(); // set columns from db columns.
|
||||
|
||||
/**
|
||||
* Columns can be defined using the fluent syntax:
|
||||
* - CRUD::column('price')->type('number');
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(EventRegistrationInfoRequest::class);
|
||||
CRUD::setFromDb(); // set fields from db columns.
|
||||
|
||||
/**
|
||||
* Fields can be defined using the fluent syntax:
|
||||
* - CRUD::field('price')->type('number');
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
// do something before validation, before save, before everything
|
||||
$response = $this->traitUpdate();
|
||||
$entry = $this->crud->getCurrentEntry();
|
||||
// do something after save
|
||||
Cache::forget('event-info-cache-'.$entry->id);
|
||||
//Cache::put('event-info-cache-'.$entry->id, null, 0);
|
||||
//Cache::flush();
|
||||
|
||||
$eventInfo = Cache::get('event-info-cache-'.$entry->id, function () use ($entry) {
|
||||
return ['enable'=>$entry->enable,'limit' => $entry->limit, 'start_at' => $entry->event_start_date, 'end_at' => $entry->event_end_date ];
|
||||
});
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
93
app/Http/Controllers/Admin/FaqCatalogCrudController.php
Normal file
93
app/Http/Controllers/Admin/FaqCatalogCrudController.php
Normal file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\FaqCatalogRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class FaqCatalogCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class FaqCatalogCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\FaqCatalog::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/faq-catalog');
|
||||
CRUD::setEntityNameStrings('faq catalog', 'faq catalogs');
|
||||
}
|
||||
|
||||
protected function setupReorderOperation()
|
||||
{
|
||||
CRUD::set('reorder.label', 'name');
|
||||
CRUD::set('reorder.max_level', 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
if (! $this->crud->getRequest()->has('order')){
|
||||
$this->crud->orderBy('lft', 'asc')->orderBy('id', 'desc');
|
||||
}
|
||||
|
||||
CRUD::addColumn('#');
|
||||
CRUD::column('is_front_show')->label(trans('backend.columnName.is_front_show'))->type('checkbox');
|
||||
CRUD::column('name')->label(trans('backend.columnName.name'))->type('textarea_nl2br')->escaped(false)->searchLogic('text');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(FaqCatalogRequest::class);
|
||||
CRUD::addFields([
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'lable' => 'Name',
|
||||
'type' => 'text',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
159
app/Http/Controllers/Admin/FaqCrudController.php
Normal file
159
app/Http/Controllers/Admin/FaqCrudController.php
Normal file
@ -0,0 +1,159 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\FaqRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class FaqCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class FaqCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\Faq::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/faq');
|
||||
CRUD::setEntityNameStrings('常見問題', '常見問題');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
$this->crud->addColumns([
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime',
|
||||
//'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'checkbox'
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text'
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(FaqRequest::class);
|
||||
$this->crud->addFields([
|
||||
[
|
||||
'name' => 'news_catalog_id',
|
||||
'label' => trans('backend.columnName.catalog'),
|
||||
'type' => 'select2_nested',
|
||||
'entity' => 'faqCatalog',
|
||||
'attribute' => 'name',
|
||||
'model' => 'App\Models\FaqCatalog',
|
||||
],
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime_picker',
|
||||
'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
'default' => \Carbon\Carbon::now(),
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text',
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'photos',
|
||||
'label' => trans('backend.columnName.cover'),
|
||||
'type' => 'upload_img_multiple',
|
||||
'upload' => true,
|
||||
'disk' => 'public',
|
||||
'hint' => '',
|
||||
'qty' => 1, // 0=no limit, >0=limit
|
||||
'showSingleChoise' => '0', // 0=hidden, 1=show(default)
|
||||
'showComment' => '0', // 0=hidden, 1=show(default)
|
||||
],
|
||||
// [
|
||||
// 'name' => 'description',
|
||||
// 'label' => trans('backend.columnName.description'),
|
||||
// 'type' => 'textarea'
|
||||
// ],
|
||||
[
|
||||
'name' => 'body',
|
||||
'lable' => trans('backend.columnName.body'),
|
||||
'type' => 'tinymce',
|
||||
// optional overwrite of the configuration array
|
||||
'options' => [
|
||||
//'selector' => 'textarea.tinymce',
|
||||
//'skin' => 'dick-light',
|
||||
'plugins' => 'code lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help',
|
||||
'menubar' => 'edit insert view format help',
|
||||
'toolbar' => 'code undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link',
|
||||
'language' => str_replace('-', '_', app()->getLocale()),
|
||||
'height' => '500px',
|
||||
],
|
||||
],
|
||||
// [
|
||||
// 'name' => 'source_links',
|
||||
// 'lable' => 'Source Links',
|
||||
// 'type' => 'key_val_multiple',
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_keyword',
|
||||
// 'label' => trans('backend.columnName.seo_keyword'),
|
||||
// 'type' => 'text'
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_description',
|
||||
// 'label' => trans('backend.columnName.seo_description'),
|
||||
// 'type' => 'textarea'
|
||||
// ],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\HealthInfoCatalogRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class HealthInfoCatalogCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class HealthInfoCatalogCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\HealthInfoCatalog::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/health-info-catalog');
|
||||
CRUD::setEntityNameStrings('health info catalog', 'health info catalogs');
|
||||
}
|
||||
|
||||
protected function setupReorderOperation()
|
||||
{
|
||||
CRUD::set('reorder.label', 'name');
|
||||
CRUD::set('reorder.max_level', 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
if (! $this->crud->getRequest()->has('order')){
|
||||
$this->crud->orderBy('lft', 'asc')->orderBy('id', 'desc');
|
||||
}
|
||||
|
||||
CRUD::addColumn('#');
|
||||
CRUD::column('is_front_show')->label(trans('backend.columnName.is_front_show'))->type('checkbox');
|
||||
CRUD::column('name')->label(trans('backend.columnName.name'))->type('textarea_nl2br')->escaped(false)->searchLogic('text');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(HealthInfoCatalogRequest::class);
|
||||
CRUD::addFields([
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'lable' => 'Name',
|
||||
'type' => 'text',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
160
app/Http/Controllers/Admin/HealthInfoCrudController.php
Normal file
160
app/Http/Controllers/Admin/HealthInfoCrudController.php
Normal file
@ -0,0 +1,160 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\HealthInfoRequest;
|
||||
use App\Models\HealthInfo;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class HealthInfoCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class HealthInfoCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\HealthInfo::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/health-info');
|
||||
CRUD::setEntityNameStrings('健康資訊', '健康資訊');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
$this->crud->addColumns([
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime',
|
||||
//'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'checkbox'
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text'
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(HealthInfoRequest::class);
|
||||
$this->crud->addFields([
|
||||
[
|
||||
'name' => 'news_catalog_id',
|
||||
'label' => trans('backend.columnName.catalog'),
|
||||
'type' => 'select2_nested',
|
||||
'entity' => 'healthInfoCatalog',
|
||||
'attribute' => 'name',
|
||||
'model' => 'App\Models\HealthInfoCatalog',
|
||||
],
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime_picker',
|
||||
'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
'default' => \Carbon\Carbon::now(),
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text',
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'photos',
|
||||
'label' => trans('backend.columnName.cover'),
|
||||
'type' => 'upload_img_multiple',
|
||||
'upload' => true,
|
||||
'disk' => 'public',
|
||||
'hint' => '',
|
||||
'qty' => 1, // 0=no limit, >0=limit
|
||||
'showSingleChoise' => '0', // 0=hidden, 1=show(default)
|
||||
'showComment' => '0', // 0=hidden, 1=show(default)
|
||||
],
|
||||
// [
|
||||
// 'name' => 'description',
|
||||
// 'label' => trans('backend.columnName.description'),
|
||||
// 'type' => 'textarea'
|
||||
// ],
|
||||
[
|
||||
'name' => 'body',
|
||||
'lable' => trans('backend.columnName.body'),
|
||||
'type' => 'tinymce',
|
||||
// optional overwrite of the configuration array
|
||||
'options' => [
|
||||
//'selector' => 'textarea.tinymce',
|
||||
//'skin' => 'dick-light',
|
||||
'plugins' => 'code lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help',
|
||||
'menubar' => 'edit insert view format help',
|
||||
'toolbar' => 'code undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link',
|
||||
'language' => str_replace('-', '_', app()->getLocale()),
|
||||
'height' => '500px',
|
||||
],
|
||||
],
|
||||
// [
|
||||
// 'name' => 'source_links',
|
||||
// 'lable' => 'Source Links',
|
||||
// 'type' => 'key_val_multiple',
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_keyword',
|
||||
// 'label' => trans('backend.columnName.seo_keyword'),
|
||||
// 'type' => 'text'
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_description',
|
||||
// 'label' => trans('backend.columnName.seo_description'),
|
||||
// 'type' => 'textarea'
|
||||
// ],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
93
app/Http/Controllers/Admin/NewsCatalogCrudController.php
Normal file
93
app/Http/Controllers/Admin/NewsCatalogCrudController.php
Normal file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\NewsCatalogRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class NewsCatalogCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class NewsCatalogCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\NewsCatalog::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/news-catalog');
|
||||
CRUD::setEntityNameStrings('news catalog', 'news catalogs');
|
||||
}
|
||||
|
||||
protected function setupReorderOperation()
|
||||
{
|
||||
CRUD::set('reorder.label', 'name');
|
||||
CRUD::set('reorder.max_level', 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
if (! $this->crud->getRequest()->has('order')){
|
||||
$this->crud->orderBy('lft', 'asc')->orderBy('id', 'desc');
|
||||
}
|
||||
|
||||
CRUD::addColumn('#');
|
||||
CRUD::column('is_front_show')->label(trans('backend.columnName.is_front_show'))->type('checkbox');
|
||||
CRUD::column('name')->label(trans('backend.columnName.name'))->type('textarea_nl2br')->escaped(false)->searchLogic('text');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(NewsCatalogRequest::class);
|
||||
CRUD::addFields([
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'lable' => 'Name',
|
||||
'type' => 'text',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
161
app/Http/Controllers/Admin/NewsCrudController.php
Normal file
161
app/Http/Controllers/Admin/NewsCrudController.php
Normal file
@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\NewsRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class NewsCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class NewsCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
//use \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation;
|
||||
//use \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\News::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/news');
|
||||
CRUD::setEntityNameStrings('最新消息', '最新消息');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
$this->crud->addColumns([
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime',
|
||||
//'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'checkbox'
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text'
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(NewsRequest::class);
|
||||
$this->crud->addFields([
|
||||
[
|
||||
'name' => 'news_catalog_id',
|
||||
'label' => trans('backend.columnName.catalog'),
|
||||
'type' => 'select2_nested',
|
||||
'entity' => 'newsCatalog',
|
||||
'attribute' => 'name',
|
||||
'model' => 'App\Models\NewsCatalog',
|
||||
],
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime_picker',
|
||||
'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
'default' => \Carbon\Carbon::now(),
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text',
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'photos',
|
||||
'label' => trans('backend.columnName.cover'),
|
||||
'type' => 'upload_img_multiple',
|
||||
'upload' => true,
|
||||
'disk' => 'public',
|
||||
'hint' => '',
|
||||
'qty' => 1, // 0=no limit, >0=limit
|
||||
'showSingleChoise' => '0', // 0=hidden, 1=show(default)
|
||||
'showComment' => '0', // 0=hidden, 1=show(default)
|
||||
],
|
||||
//[
|
||||
// 'name' => 'description',
|
||||
// 'label' => trans('backend.columnName.description'),
|
||||
// 'type' => 'textarea'
|
||||
//],
|
||||
[
|
||||
'name' => 'body',
|
||||
'lable' => trans('backend.columnName.body'),
|
||||
'type' => 'tinymce',
|
||||
// optional overwrite of the configuration array
|
||||
'options' => [
|
||||
//'selector' => 'textarea.tinymce',
|
||||
//'skin' => 'dick-light',
|
||||
'plugins' => 'code lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help',
|
||||
'menubar' => 'edit insert view format help',
|
||||
'toolbar' => 'code undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link',
|
||||
'language' => str_replace('-', '_', app()->getLocale()),
|
||||
'height' => '500px',
|
||||
],
|
||||
],
|
||||
// [
|
||||
// 'name' => 'source_links',
|
||||
// 'lable' => 'Source Links',
|
||||
// 'type' => 'key_val_multiple',
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_keyword',
|
||||
// 'label' => trans('backend.columnName.seo_keyword'),
|
||||
// 'type' => 'text'
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_description',
|
||||
// 'label' => trans('backend.columnName.seo_description'),
|
||||
// 'type' => 'textarea'
|
||||
// ],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
93
app/Http/Controllers/Admin/NoticeCatalogCrudController.php
Normal file
93
app/Http/Controllers/Admin/NoticeCatalogCrudController.php
Normal file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\NoticeCatalogRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class NoticeCatalogCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class NoticeCatalogCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\NoticeCatalog::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/notice-catalog');
|
||||
CRUD::setEntityNameStrings('notice catalog', 'notice catalogs');
|
||||
}
|
||||
|
||||
protected function setupReorderOperation()
|
||||
{
|
||||
CRUD::set('reorder.label', 'name');
|
||||
CRUD::set('reorder.max_level', 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
if (! $this->crud->getRequest()->has('order')){
|
||||
$this->crud->orderBy('lft', 'asc')->orderBy('id', 'desc');
|
||||
}
|
||||
|
||||
CRUD::addColumn('#');
|
||||
CRUD::column('is_front_show')->label(trans('backend.columnName.is_front_show'))->type('checkbox');
|
||||
CRUD::column('name')->label(trans('backend.columnName.name'))->type('textarea_nl2br')->escaped(false)->searchLogic('text');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(NoticeCatalogRequest::class);
|
||||
CRUD::addFields([
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'name',
|
||||
'lable' => 'Name',
|
||||
'type' => 'text',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
159
app/Http/Controllers/Admin/NoticeCrudController.php
Normal file
159
app/Http/Controllers/Admin/NoticeCrudController.php
Normal file
@ -0,0 +1,159 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\NoticeRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class NoticeCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class NoticeCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\Notice::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/notice');
|
||||
CRUD::setEntityNameStrings('注意事項', '注意事項');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
$this->crud->addColumns([
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime',
|
||||
//'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'checkbox'
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text'
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(NoticeRequest::class);
|
||||
$this->crud->addFields([
|
||||
[
|
||||
'name' => 'news_catalog_id',
|
||||
'label' => trans('backend.columnName.catalog'),
|
||||
'type' => 'select2_nested',
|
||||
'entity' => 'noticeCatalog',
|
||||
'attribute' => 'name',
|
||||
'model' => 'App\Models\NoticeCatalog',
|
||||
],
|
||||
[
|
||||
'name' => 'post_at',
|
||||
'label' => trans('backend.columnName.post_at'),
|
||||
'type' => 'datetime_picker',
|
||||
'format' => 'YYYY/MM/DD HH:mm:SS',
|
||||
'default' => \Carbon\Carbon::now(),
|
||||
],
|
||||
[
|
||||
'name' => 'is_front_show',
|
||||
'label' => trans('backend.columnName.is_front_show'),
|
||||
'type' => 'boolean',
|
||||
'default' => true,
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => trans('backend.columnName.title'),
|
||||
'type' => 'text',
|
||||
|
||||
],
|
||||
[
|
||||
'name' => 'photos',
|
||||
'label' => trans('backend.columnName.cover'),
|
||||
'type' => 'upload_img_multiple',
|
||||
'upload' => true,
|
||||
'disk' => 'public',
|
||||
'hint' => '',
|
||||
'qty' => 1, // 0=no limit, >0=limit
|
||||
'showSingleChoise' => '0', // 0=hidden, 1=show(default)
|
||||
'showComment' => '0', // 0=hidden, 1=show(default)
|
||||
],
|
||||
// [
|
||||
// 'name' => 'description',
|
||||
// 'label' => trans('backend.columnName.description'),
|
||||
// 'type' => 'textarea'
|
||||
// ],
|
||||
[
|
||||
'name' => 'body',
|
||||
'lable' => trans('backend.columnName.body'),
|
||||
'type' => 'tinymce',
|
||||
// optional overwrite of the configuration array
|
||||
'options' => [
|
||||
//'selector' => 'textarea.tinymce',
|
||||
//'skin' => 'dick-light',
|
||||
'plugins' => 'code lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help',
|
||||
'menubar' => 'edit insert view format help',
|
||||
'toolbar' => 'code undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link',
|
||||
'language' => str_replace('-', '_', app()->getLocale()),
|
||||
'height' => '500px',
|
||||
],
|
||||
],
|
||||
// [
|
||||
// 'name' => 'source_links',
|
||||
// 'lable' => 'Source Links',
|
||||
// 'type' => 'key_val_multiple',
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_keyword',
|
||||
// 'label' => trans('backend.columnName.seo_keyword'),
|
||||
// 'type' => 'text'
|
||||
// ],
|
||||
// [
|
||||
// 'name' => 'seo_description',
|
||||
// 'label' => trans('backend.columnName.seo_description'),
|
||||
// 'type' => 'textarea'
|
||||
// ],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
41
app/Http/Controllers/Admin/StorageController.php
Normal file
41
app/Http/Controllers/Admin/StorageController.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Facades\Response;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
|
||||
|
||||
class StorageController extends Controller
|
||||
{
|
||||
public function serve(Request $request, $file_path)
|
||||
{
|
||||
$allowed_directory = 'uploads';
|
||||
$file_path = str_replace(['../', '..\\'], '', $file_path);
|
||||
$full_path = storage_path("app/{$allowed_directory}/{$file_path}");
|
||||
|
||||
if (is_dir($full_path)) {
|
||||
throw new NotFoundHttpException('檔案不存在');
|
||||
}
|
||||
|
||||
if (!Storage::disk('local')->exists("{$allowed_directory}/{$file_path}")) {
|
||||
throw new NotFoundHttpException('檔案不存在');
|
||||
}
|
||||
|
||||
$real_path = realpath($full_path);
|
||||
$allowed_base_path = realpath(storage_path("app/{$allowed_directory}"));
|
||||
if (!$real_path || strpos($real_path, $allowed_base_path) !== 0) {
|
||||
throw new AccessDeniedHttpException('無權訪問該檔案');
|
||||
}
|
||||
$mime_type = mime_content_type($full_path) ?: 'application/octet-stream';
|
||||
return Response::file($full_path, [
|
||||
'Content-Type' => $mime_type,
|
||||
'Content-Disposition' => 'inline; filename="' . basename($file_path) . '"',
|
||||
'X-Frame-Options' => 'SAMEORIGIN', // Allow same-origin framing
|
||||
'Content-Security-Policy' => "frame-ancestors 'self'", // Allow iframe on same domain
|
||||
]);
|
||||
}
|
||||
}
|
77
app/Http/Controllers/Admin/UserCrudController.php
Normal file
77
app/Http/Controllers/Admin/UserCrudController.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\UserRequest;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||||
|
||||
/**
|
||||
* Class UserCrudController
|
||||
* @package App\Http\Controllers\Admin
|
||||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||||
*/
|
||||
class UserCrudController extends CrudController
|
||||
{
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||||
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||||
|
||||
/**
|
||||
* Configure the CrudPanel object. Apply settings to all operations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setup()
|
||||
{
|
||||
CRUD::setModel(\App\Models\User::class);
|
||||
CRUD::setRoute(config('backpack.base.route_prefix') . '/user');
|
||||
CRUD::setEntityNameStrings('使用者', '使用者');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the List operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
* @return void
|
||||
*/
|
||||
protected function setupListOperation()
|
||||
{
|
||||
CRUD::setFromDb(); // set columns from db columns.
|
||||
|
||||
/**
|
||||
* Columns can be defined using the fluent syntax:
|
||||
* - CRUD::column('price')->type('number');
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Create operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
* @return void
|
||||
*/
|
||||
protected function setupCreateOperation()
|
||||
{
|
||||
CRUD::setValidation(UserRequest::class);
|
||||
CRUD::setFromDb(); // set fields from db columns.
|
||||
|
||||
/**
|
||||
* Fields can be defined using the fluent syntax:
|
||||
* - CRUD::field('price')->type('number');
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Define what happens when the Update operation is loaded.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
* @return void
|
||||
*/
|
||||
protected function setupUpdateOperation()
|
||||
{
|
||||
$this->setupCreateOperation();
|
||||
}
|
||||
}
|
12
app/Http/Controllers/Controller.php
Normal file
12
app/Http/Controllers/Controller.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, ValidatesRequests;
|
||||
}
|
28
app/Http/Controllers/FaqController.php
Normal file
28
app/Http/Controllers/FaqController.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FaqController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$perPageItems = 999;
|
||||
$page = $request->get("p");
|
||||
$page = (!$page || $page < 1) ? 1 : $page;
|
||||
$pageOffset = $perPageItems * ($page - 1);
|
||||
|
||||
$dataRows = \App\Models\Faq::where('is_front_show', '=', true)
|
||||
->orderBy('post_at', 'desc');
|
||||
//->select('id', 'title', 'description', 'body', 'photos', 'post_at');
|
||||
|
||||
return view('faqs', [
|
||||
'dataRows' => $dataRows->skip($pageOffset)->take($perPageItems)->get(),
|
||||
'dataCurrentPage' => $page,
|
||||
'dataPerPageItems' => $perPageItems,
|
||||
'dataTotalCount' => $dataRows->count(),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
405
app/Http/Controllers/HealthAllowanceFillFormController.php
Normal file
405
app/Http/Controllers/HealthAllowanceFillFormController.php
Normal file
@ -0,0 +1,405 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\EventHealthAllowanceCheckRequest;
|
||||
use App\Http\Requests\EventHealthAllowanceRequest;
|
||||
use App\Models\EventHealthAllowance;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\EventMetabolism;
|
||||
use App\Mail\EventNotifyMail;
|
||||
use App\Models\EventRegistrationInfo;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Intervention\Image\ImageManager;
|
||||
use Intervention\Image\Drivers\Gd\Driver;
|
||||
|
||||
class HealthAllowanceFillFormController extends Controller
|
||||
{
|
||||
/**
|
||||
* Handle the incoming request.
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$enable = true;
|
||||
$eventInfo = Cache::get('event-info-cache-3', function () {
|
||||
$entry = EventRegistrationInfo::where('id', 3)->first();
|
||||
if ($entry) {
|
||||
return ['enable' => $entry->enable,'limit' => $entry->limit, 'start_at' => $entry->event_start_date, 'end_at' => $entry->event_end_date ];
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
if ($eventInfo) {
|
||||
if ($eventInfo['enable'] != "1") {
|
||||
$enable = false;
|
||||
}
|
||||
$date_now = new \DateTime("now");
|
||||
$date_start = new \DateTime($eventInfo['start_at']);
|
||||
$date_end = new \DateTime($eventInfo['end_at']);
|
||||
|
||||
if ($date_now > $date_start && $date_end > $date_now ) {
|
||||
//
|
||||
} else {
|
||||
$enable = false;
|
||||
}
|
||||
}
|
||||
|
||||
return view('health_allowance', [
|
||||
'enable' => $enable
|
||||
]);
|
||||
}
|
||||
|
||||
public function doGet(Request $request)
|
||||
{
|
||||
return view('health_allowance_fill_form');
|
||||
}
|
||||
|
||||
public function doPostOk(Request $request)
|
||||
{
|
||||
return view('health_allowance_fill_form_ok');
|
||||
}
|
||||
|
||||
public function doPost(EventHealthAllowanceRequest $request)
|
||||
{
|
||||
try
|
||||
{
|
||||
$eventInfo = Cache::get('event-info-cache-3', function () {
|
||||
$entry = EventRegistrationInfo::where('id', 3)->first();
|
||||
if ($entry) {
|
||||
return ['enable' => $entry->enable,'limit' => $entry->limit, 'start_at' => $entry->event_start_date, 'end_at' => $entry->event_end_date ];
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
if ($eventInfo) {
|
||||
if ($eventInfo['enable'] != "1") {
|
||||
throw new \Exception('活動已截止。');
|
||||
}
|
||||
$date_now = new \DateTime("now");
|
||||
$date_start = new \DateTime($eventInfo['start_at']);
|
||||
$date_end = new \DateTime($eventInfo['end_at']);
|
||||
|
||||
if ($date_now > $date_start && $date_end > $date_now ) {
|
||||
//
|
||||
} else {
|
||||
throw new \Exception('活動已截止。');
|
||||
}
|
||||
}
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
//$checkPhone = EventMetabolism::where('phone', '=', $request->input('phone'))->first();
|
||||
//if ($checkPhone) {
|
||||
// throw new \Exception('本電話號碼已經登記。');
|
||||
//}
|
||||
$twid = Str::upper($request->input('twid'));
|
||||
$eventItem = EventHealthAllowance::where('twid', '=', $twid)->first();
|
||||
if (!$eventItem) {
|
||||
$eventItem = new EventHealthAllowance();
|
||||
$eventItem->twid = $twid;
|
||||
}
|
||||
if ($eventItem->check_state == 1) {
|
||||
throw new \Exception('您已經登記審查,請等待審查完成。');
|
||||
}
|
||||
if ($eventItem->check_state == 2) {
|
||||
throw new \Exception('您已經登記審查通過。');
|
||||
}
|
||||
$eventItem->hospital_name = $request->input('hospital_name');
|
||||
$eventItem->name = $request->input('name');
|
||||
$eventItem->phone = $request->input('phone');
|
||||
$eventItem->email = $request->input('email');
|
||||
$eventItem->address = $request->input('address');
|
||||
|
||||
$uploadPath = 'uploads/health_allowance';
|
||||
$acceptExt = ['jpg', 'jpeg', 'png', 'pdf'];
|
||||
$finfo = new \finfo(FILEINFO_MIME_TYPE);
|
||||
$allowedMimeTypes = [
|
||||
'image/png', // PNG
|
||||
'image/jpeg', // JPG/JPEG
|
||||
'application/pdf' // PDF
|
||||
];
|
||||
$manager = new ImageManager(Driver::class);
|
||||
$uploadTime = time();
|
||||
|
||||
$fileName = $request->input('fileRecordCardFileName');
|
||||
if ($fileName && $request->filled('fileRecordCardBase64')) {
|
||||
$fileBase64 = $request->input('fileRecordCardBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('記錄小卡檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('記錄小卡檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->record_card_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->record_card_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_RecordCard_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->record_card_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳記錄小卡。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileTwidFrontFileName');
|
||||
if ($fileName && $request->filled('fileTwidFrontBase64')) {
|
||||
$fileBase64 = $request->input('fileTwidFrontBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('身份證正面檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('身份證正面檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->twid_front_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->twid_front_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_TwidFront_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->twid_front_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳身份證正面。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileTwidBackFileName');
|
||||
if ($fileName && $request->filled('fileTwidBackBase64')) {
|
||||
$fileBase64 = $request->input('fileTwidBackBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('身份證背面檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('身份證背面檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->twid_back_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->twid_back_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_TwidBack_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->twid_back_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳身份證背面。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileExam1stFileName');
|
||||
if ($fileName && $request->filled('fileExam1stBase64')) {
|
||||
$fileBase64 = $request->input('fileExam1stBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('檢驗檢查報告1檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('檢驗檢查報告1檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->exam_1st_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->exam_1st_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_Exam1st_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->exam_1st_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳檢驗檢查報告1。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileExam2ndFileName');
|
||||
if ($fileName && $request->filled('fileExam2ndBase64')) {
|
||||
$fileBase64 = $request->input('fileExam2ndBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('檢驗檢查報告2檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('檢驗檢查報告2檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->exam_2nd_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->exam_2nd_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_Exam2nd_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->exam_2nd_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳檢驗檢查報告2。');
|
||||
}
|
||||
|
||||
// $file = $request->file('fileRecordCard');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_RecordCard." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->record_card_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳記錄小卡。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileTwidFront');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_TwidFront." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->twid_front_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳身份證正面。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileTwidBack');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_TwidBack." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->twid_back_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳身份證背面。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileExam1st');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_Exam1st." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->exam_1st_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳檢驗檢查報告1。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileExam2nd');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_Exam2nd." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->exam_2nd_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳檢驗檢查報告2。');
|
||||
// }
|
||||
|
||||
$eventItem->check_state = 1;
|
||||
$eventItem->save();
|
||||
|
||||
DB::commit();
|
||||
|
||||
try {
|
||||
Mail::to($request->input('email'))->send(new EventNotifyMail([
|
||||
"title" => "反轉代謝新人生 皮蛇疫苗加碼補 登記成功!",
|
||||
"body" => "登記資料:"
|
||||
."\n就醫院所:".$request->input('hospital_name')
|
||||
."\n姓名:".$request->input('name')
|
||||
."\n身份證字號:".substr($request->input('twid'),0,2)."xxxx".substr($request->input('twid'),-4)
|
||||
."\n行動電話:".$request->input('phone')
|
||||
."\n電子信箱:".$request->input('email')
|
||||
."\n收件地址:".$request->input('address')
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
}
|
||||
catch (\Exception $ex) {
|
||||
DB::rollBack();
|
||||
return redirect()->back()->withErrors([$ex->getMessage()])->withInput(Request()->all());
|
||||
}
|
||||
//return redirect()->back()->with('success', '登記成功!');
|
||||
return view('health_allowance_fill_form_ok');
|
||||
}
|
||||
|
||||
public function doCheckGet(Request $request)
|
||||
{
|
||||
return view('health_allowance_check');
|
||||
}
|
||||
|
||||
public function doCheckPost(EventHealthAllowanceCheckRequest $request)
|
||||
{
|
||||
$rejectReason = '';
|
||||
try
|
||||
{
|
||||
|
||||
$twid = Str::upper($request->input('twid'));
|
||||
$phone = $request->input('phone');
|
||||
$eventItem = EventHealthAllowance::where('twid', 'like', '%'.$twid)->where('phone', 'like', '%'.$phone)->first();
|
||||
if (!$eventItem) {
|
||||
throw new \Exception('找不到您登記的資料,請確認是否資訊正確。');
|
||||
}
|
||||
if ($eventItem->check_state == 1) {
|
||||
throw new \Exception('您已經登記審查,請等待審查完成。');
|
||||
}
|
||||
if ($eventItem->check_state == 2) {
|
||||
$rejectReason = $eventItem->check_reson;
|
||||
throw new \Exception('您的審查未通過,請依以下原因說明重新登記。');
|
||||
}
|
||||
|
||||
}
|
||||
catch (\Exception $ex) {
|
||||
return redirect()->back()->withErrors([$ex->getMessage(), $rejectReason])->withInput(Request()->all());
|
||||
}
|
||||
return redirect()->back()->with('success', '您已審格通過!');
|
||||
}
|
||||
}
|
28
app/Http/Controllers/HealthInfoController.php
Normal file
28
app/Http/Controllers/HealthInfoController.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class HealthInfoController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$perPageItems = 999;
|
||||
$page = $request->get("p");
|
||||
$page = (!$page || $page < 1) ? 1 : $page;
|
||||
$pageOffset = $perPageItems * ($page - 1);
|
||||
|
||||
$dataRows = \App\Models\HealthInfo::where('is_front_show', '=', true)
|
||||
->orderBy('post_at', 'desc');
|
||||
//->select('id', 'title', 'description', 'body', 'photos', 'post_at');
|
||||
|
||||
return view('health_infos', [
|
||||
'dataRows' => $dataRows->skip($pageOffset)->take($perPageItems)->get(),
|
||||
'dataCurrentPage' => $page,
|
||||
'dataPerPageItems' => $perPageItems,
|
||||
'dataTotalCount' => $dataRows->count(),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
364
app/Http/Controllers/ImprovedHealthFillFormController.php
Normal file
364
app/Http/Controllers/ImprovedHealthFillFormController.php
Normal file
@ -0,0 +1,364 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\EventImprovedHealthCheckRequest;
|
||||
use App\Http\Requests\EventImprovedHealthRequest;
|
||||
use App\Models\EventImprovedHealth;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Carbon\Carbon;
|
||||
use App\Mail\EventNotifyMail;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use App\Models\EventMetabolism;
|
||||
use App\Models\EventRegistrationInfo;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Intervention\Image\ImageManager;
|
||||
use Intervention\Image\Drivers\Gd\Driver;
|
||||
|
||||
class ImprovedHealthFillFormController extends Controller
|
||||
{
|
||||
/**
|
||||
* Handle the incoming request.
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$enable = true;
|
||||
$eventInfo = Cache::get('event-info-cache-2', function () {
|
||||
$entry = EventRegistrationInfo::where('id', 2)->first();
|
||||
if ($entry) {
|
||||
return ['enable' => $entry->enable,'limit' => $entry->limit, 'start_at' => $entry->event_start_date, 'end_at' => $entry->event_end_date ];
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
if ($eventInfo) {
|
||||
if ($eventInfo['enable'] != "1") {
|
||||
$enable = false;
|
||||
}
|
||||
$date_now = new \DateTime("now");
|
||||
$date_start = new \DateTime($eventInfo['start_at']);
|
||||
$date_end = new \DateTime($eventInfo['end_at']);
|
||||
|
||||
if ($date_now > $date_start && $date_end > $date_now ) {
|
||||
//
|
||||
} else {
|
||||
$enable = false;
|
||||
}
|
||||
}
|
||||
|
||||
return view('improved_health', [
|
||||
'enable' => $enable
|
||||
]);
|
||||
}
|
||||
|
||||
public function doGet(Request $request)
|
||||
{
|
||||
return view('improved_health_fill_form');
|
||||
}
|
||||
|
||||
public function doPostOk(Request $request)
|
||||
{
|
||||
return view('improved_health_fill_form_ok');
|
||||
}
|
||||
|
||||
public function doPost(EventImprovedHealthRequest $request)
|
||||
{
|
||||
try
|
||||
{
|
||||
$eventInfo = Cache::get('event-info-cache-2', function () {
|
||||
$entry = EventRegistrationInfo::where('id', 2)->first();
|
||||
if ($entry) {
|
||||
return ['enable' => $entry->enable,'limit' => $entry->limit, 'start_at' => $entry->event_start_date, 'end_at' => $entry->event_end_date ];
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
if ($eventInfo) {
|
||||
if ($eventInfo['enable'] != "1") {
|
||||
throw new \Exception('活動已截止。');
|
||||
}
|
||||
$date_now = new \DateTime("now");
|
||||
$date_start = new \DateTime($eventInfo['start_at']);
|
||||
$date_end = new \DateTime($eventInfo['end_at']);
|
||||
|
||||
if ($date_now > $date_start && $date_end > $date_now ) {
|
||||
//
|
||||
} else {
|
||||
throw new \Exception('活動已截止。');
|
||||
}
|
||||
}
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
//$checkPhone = EventMetabolism::where('phone', '=', $request->input('phone'))->first();
|
||||
//if ($checkPhone) {
|
||||
// throw new \Exception('本電話號碼已經登記。');
|
||||
//}
|
||||
$twid = Str::upper($request->input('twid'));
|
||||
$eventItem = EventImprovedHealth::where('twid', '=', $twid)->first();
|
||||
if (!$eventItem) {
|
||||
$eventItem = new EventImprovedHealth();
|
||||
$eventItem->twid = $twid;
|
||||
}
|
||||
if ($eventItem->check_state == 1) {
|
||||
throw new \Exception('您已經登記審查,請等待審查完成。');
|
||||
}
|
||||
if ($eventItem->check_state == 2) {
|
||||
throw new \Exception('您已經登記審查通過。');
|
||||
}
|
||||
$eventItem->hospital_name = $request->input('hospital_name');
|
||||
$eventItem->name = $request->input('name');
|
||||
$eventItem->phone = $request->input('phone');
|
||||
$eventItem->email = $request->input('email');
|
||||
$eventItem->address = $request->input('address');
|
||||
|
||||
$uploadPath = 'uploads/improved_health';
|
||||
$acceptExt = ['jpg', 'jpeg', 'png', 'pdf'];
|
||||
$finfo = new \finfo(FILEINFO_MIME_TYPE);
|
||||
$allowedMimeTypes = [
|
||||
'image/png', // PNG
|
||||
'image/jpeg', // JPG/JPEG
|
||||
'application/pdf' // PDF
|
||||
];
|
||||
$manager = new ImageManager(Driver::class);
|
||||
$uploadTime = time();
|
||||
|
||||
$fileName = $request->input('fileRecordCardFileName');
|
||||
if ($fileName && $request->filled('fileRecordCardBase64')) {
|
||||
$fileBase64 = $request->input('fileRecordCardBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('記錄小卡檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('記錄小卡檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->record_card_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->record_card_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_RecordCard_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->record_card_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳記錄小卡。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileTwidFrontFileName');
|
||||
if ($fileName && $request->filled('fileTwidFrontBase64')) {
|
||||
$fileBase64 = $request->input('fileTwidFrontBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('身份證正面檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('身份證正面檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->twid_front_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->twid_front_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_TwidFront_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->twid_front_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳身份證正面。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileTwidBackFileName');
|
||||
if ($fileName && $request->filled('fileTwidBackBase64')) {
|
||||
$fileBase64 = $request->input('fileTwidBackBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('身份證背面檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('身份證背面檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->twid_back_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->twid_back_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_TwidBack_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->twid_back_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳身份證背面。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileExamFileName');
|
||||
if ($fileName && $request->filled('fileExamBase64')) {
|
||||
$fileBase64 = $request->input('fileExamBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('檢查報告檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('檢查報告檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->exam_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->exam_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_Exam_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->exam_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳檢查報告。');
|
||||
}
|
||||
|
||||
// $file = $request->file('fileRecordCard');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_RecordCard." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->record_card_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳記錄小卡。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileTwidFront');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_TwidFront." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->twid_front_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳身份證正面。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileTwidBack');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_TwidBack." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->twid_back_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳身份證背面。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileExam');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_Exam." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->exam_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳檢查報告。');
|
||||
// }
|
||||
|
||||
$eventItem->check_state = 1;
|
||||
$eventItem->save();
|
||||
|
||||
DB::commit();
|
||||
|
||||
try {
|
||||
Mail::to($request->input('email'))->send(new EventNotifyMail([
|
||||
"title" => "健康達標GO 大獎汽車不是夢 登記成功!",
|
||||
"body" => "登記資料:"
|
||||
."\n就醫院所:".$request->input('hospital_name')
|
||||
."\n姓名:".$request->input('name')
|
||||
."\n身份證字號:".substr($request->input('twid'),0,2)."xxxx".substr($request->input('twid'),-4)
|
||||
."\n行動電話:".$request->input('phone')
|
||||
."\n電子信箱:".$request->input('email')
|
||||
."\n收件地址:".$request->input('address')
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
}
|
||||
catch (\Exception $ex) {
|
||||
DB::rollBack();
|
||||
return redirect()->back()->withErrors([$ex->getMessage()])->withInput(Request()->all());
|
||||
}
|
||||
//return redirect()->back()->with('success', '登記成功!');
|
||||
return view('improved_health_fill_form_ok');
|
||||
}
|
||||
|
||||
public function doCheckGet(Request $request)
|
||||
{
|
||||
return view('improved_health_check');
|
||||
}
|
||||
|
||||
public function doCheckPost(EventImprovedHealthCheckRequest $request)
|
||||
{
|
||||
$rejectReason = '';
|
||||
try
|
||||
{
|
||||
|
||||
$twid = Str::upper($request->input('twid'));
|
||||
$phone = $request->input('phone');
|
||||
$eventItem = EventImprovedHealth::where('twid', 'like', '%'.$twid)->where('phone', 'like', '%'.$phone)->first();
|
||||
if (!$eventItem) {
|
||||
throw new \Exception('找不到您登記的資料,請確認是否資訊正確。');
|
||||
}
|
||||
if ($eventItem->check_state == 1) {
|
||||
throw new \Exception('您已經登記審查,請等待審查完成。');
|
||||
}
|
||||
if ($eventItem->check_state == 2) {
|
||||
$rejectReason = $eventItem->check_reson;
|
||||
throw new \Exception('您的審查未通過,請依以下原因說明重新登記。');
|
||||
}
|
||||
|
||||
}
|
||||
catch (\Exception $ex) {
|
||||
return redirect()->back()->withErrors([$ex->getMessage(), $rejectReason])->withInput(Request()->all());
|
||||
}
|
||||
return redirect()->back()->with('success', '您已審格通過!');
|
||||
}
|
||||
}
|
18
app/Http/Controllers/MailController.php
Normal file
18
app/Http/Controllers/MailController.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Mail;
|
||||
use App\Mail\EventNotifyMail;
|
||||
|
||||
class MailController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
Mail::to('ericli1018@gmail.com')->send(new EventNotifyMail([
|
||||
"title" => "Test Notify",
|
||||
"body" => "The Body\n1\n2\n",
|
||||
]));
|
||||
}
|
||||
}
|
321
app/Http/Controllers/MetabolismFillFormController.php
Normal file
321
app/Http/Controllers/MetabolismFillFormController.php
Normal file
@ -0,0 +1,321 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\EventMetabolismRequest;
|
||||
use App\Http\Requests\EventMetabolismCheckRequest;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\EventMetabolism;
|
||||
use App\Mail\EventNotifyMail;
|
||||
use App\Models\EventRegistrationInfo;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Exception;
|
||||
use Intervention\Image\ImageManager;
|
||||
use Intervention\Image\Drivers\Gd\Driver;
|
||||
|
||||
class MetabolismFillFormController extends Controller
|
||||
{
|
||||
/**
|
||||
* Handle the incoming request.
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
//
|
||||
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$enable = true;
|
||||
$eventInfo = Cache::get('event-info-cache-1', function () {
|
||||
$entry = EventRegistrationInfo::where('id', 1)->first();
|
||||
if ($entry) {
|
||||
return ['enable' => $entry->enable,'limit' => $entry->limit, 'start_at' => $entry->event_start_date, 'end_at' => $entry->event_end_date ];
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
if ($eventInfo) {
|
||||
if ($eventInfo['enable'] != "1") {
|
||||
$enable = false;
|
||||
}
|
||||
$date_now = new \DateTime("now");
|
||||
$date_start = new \DateTime($eventInfo['start_at']);
|
||||
$date_end = new \DateTime($eventInfo['end_at']);
|
||||
|
||||
if ($date_now > $date_start && $date_end > $date_now ) {
|
||||
//
|
||||
} else {
|
||||
$enable = false;
|
||||
}
|
||||
}
|
||||
|
||||
return view('metabolism', [
|
||||
'enable' => $enable
|
||||
]);
|
||||
}
|
||||
|
||||
public function doGet(Request $request)
|
||||
{
|
||||
return view('metabolism_fill_form');
|
||||
}
|
||||
|
||||
public function doPostOk(Request $request)
|
||||
{
|
||||
return view('metabolism_fill_form_ok');
|
||||
}
|
||||
|
||||
public function doPost(EventMetabolismRequest $request)
|
||||
{
|
||||
try
|
||||
{
|
||||
$eventInfo = Cache::get('event-info-cache-1', function () {
|
||||
$entry = EventRegistrationInfo::where('id', 1)->first();
|
||||
if ($entry) {
|
||||
return ['enable' => $entry->enable,'limit' => $entry->limit, 'start_at' => $entry->event_start_date, 'end_at' => $entry->event_end_date ];
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
if ($eventInfo) {
|
||||
if ($eventInfo['enable'] != "1") {
|
||||
throw new \Exception('活動已截止。');
|
||||
}
|
||||
$date_now = new \DateTime("now");
|
||||
$date_start = new \DateTime($eventInfo['start_at']);
|
||||
$date_end = new \DateTime($eventInfo['end_at']);
|
||||
|
||||
if ($date_now > $date_start && $date_end > $date_now ) {
|
||||
//
|
||||
} else {
|
||||
throw new \Exception('活動已截止。');
|
||||
}
|
||||
}
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
//$checkPhone = EventMetabolism::where('phone', '=', $request->input('phone'))->first();
|
||||
//if ($checkPhone) {
|
||||
// throw new \Exception('本電話號碼已經登記。');
|
||||
//}
|
||||
$twid = Str::upper($request->input('twid'));
|
||||
$eventItem = EventMetabolism::where('twid', '=', $twid)->first();
|
||||
if (!$eventItem) {
|
||||
$eventItem = new EventMetabolism();
|
||||
$eventItem->twid = $twid;
|
||||
}
|
||||
if ($eventItem->check_state == 1) {
|
||||
throw new \Exception('您已經登記審查,請等待審查完成。');
|
||||
}
|
||||
if ($eventItem->check_state == 2) {
|
||||
throw new \Exception('您已經登記審查通過。');
|
||||
}
|
||||
$eventItem->hospital_name = $request->input('hospital_name');
|
||||
$eventItem->name = $request->input('name');
|
||||
$eventItem->phone = $request->input('phone');
|
||||
$eventItem->email = $request->input('email');
|
||||
$eventItem->address = $request->input('address');
|
||||
|
||||
$uploadPath = 'uploads/metabolism';
|
||||
$acceptExt = ['jpg', 'jpeg', 'png', 'pdf'];
|
||||
$finfo = new \finfo(FILEINFO_MIME_TYPE);
|
||||
$allowedMimeTypes = [
|
||||
'image/png', // PNG
|
||||
'image/jpeg', // JPG/JPEG
|
||||
'application/pdf' // PDF
|
||||
];
|
||||
$manager = new ImageManager(Driver::class);
|
||||
$uploadTime = time();
|
||||
|
||||
$fileName = $request->input('fileRecordCardFileName');
|
||||
if ($fileName && $request->filled('fileRecordCardBase64')) {
|
||||
$fileBase64 = $request->input('fileRecordCardBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('記錄小卡檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('記錄小卡檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->record_card_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->record_card_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_RecordCard_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->record_card_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳記錄小卡。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileTwidFrontFileName');
|
||||
if ($fileName && $request->filled('fileTwidFrontBase64')) {
|
||||
$fileBase64 = $request->input('fileTwidFrontBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('身份證正面檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('身份證正面檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->twid_front_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->twid_front_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_TwidFront_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->twid_front_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳身份證正面。');
|
||||
}
|
||||
|
||||
$fileName = $request->input('fileTwidBackFileName');
|
||||
if ($fileName && $request->filled('fileTwidBackBase64')) {
|
||||
$fileBase64 = $request->input('fileTwidBackBase64');
|
||||
$fileData = base64_decode($fileBase64);
|
||||
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
|
||||
if (!in_array($fileExt, $acceptExt)) {
|
||||
throw new \Exception('身份證背面檔案 副檔名錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
$mimeType = $finfo->buffer($fileData);
|
||||
if (!in_array($mimeType, $allowedMimeTypes)) {
|
||||
throw new \Exception('身份證背面檔案 檔案類型錯誤,只接受.jpg/.jpeg/.png/.pdf');
|
||||
}
|
||||
if ($mimeType != 'application/pdf') {
|
||||
$image = $manager->read($fileData);
|
||||
$image->scaleDown(2048, 2048);
|
||||
$fileData = $image->toJpeg(50);
|
||||
$fileExt = 'jpg';
|
||||
}
|
||||
if ($eventItem->twid_back_img_src) {
|
||||
try {
|
||||
Storage::disk('local')->delete($eventItem->twid_back_img_src);
|
||||
} catch (\Exception $ex2) {
|
||||
|
||||
}
|
||||
}
|
||||
$fileName = $eventItem->twid . "_TwidBack_" . $uploadTime . "." . $fileExt;
|
||||
Storage::disk('local')->put($uploadPath. '/' . $fileName, $fileData);
|
||||
$eventItem->twid_back_img_src = $uploadPath.'/'.$fileName;
|
||||
} else {
|
||||
throw new \Exception('請上傳身份證背面。');
|
||||
}
|
||||
|
||||
// $file = $request->file('fileRecordCard');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_RecordCard." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->record_card_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳記錄小卡。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileTwidFront');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_TwidFront." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->twid_front_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳身份證正面。');
|
||||
// }
|
||||
|
||||
// $file = $request->file('fileTwidBack');
|
||||
// if ($file) {
|
||||
// $fileExt = $file->getClientOriginalExtension();
|
||||
// $fileName = $eventItem->twid . "_TwidBack." . $fileExt;
|
||||
// $path = $file->storeAs($uploadPath, $fileName);
|
||||
// $eventItem->twid_back_img_src = $uploadPath.'/'.$fileName;
|
||||
// } else {
|
||||
// throw new \Exception('請上傳身份證背面。');
|
||||
// }
|
||||
|
||||
$eventItem->check_state = 1;
|
||||
$eventItem->save();
|
||||
|
||||
DB::commit();
|
||||
|
||||
try {
|
||||
Mail::to($request->input('email'))->send(new EventNotifyMail([
|
||||
"title" => "符合代謝新收案 早鳥報名最划算 登記成功!",
|
||||
"body" => "登記資料:"
|
||||
."\n就醫院所:".$request->input('hospital_name')
|
||||
."\n姓名:".$request->input('name')
|
||||
."\n身份證字號:".substr($request->input('twid'),0,2)."xxxx".substr($request->input('twid'),-4)
|
||||
."\n行動電話:".$request->input('phone')
|
||||
."\n電子信箱:".$request->input('email')
|
||||
."\n收件地址:".$request->input('address')
|
||||
,
|
||||
]));
|
||||
} catch (Exception $ex) {
|
||||
|
||||
}
|
||||
}
|
||||
catch (\Exception $ex) {
|
||||
DB::rollBack();
|
||||
return redirect()->back()->withErrors([$ex->getMessage()])->withInput(Request()->all());
|
||||
}
|
||||
//return redirect()->back()->with('success', '登記成功!');
|
||||
return view('metabolism_fill_form_ok');
|
||||
}
|
||||
|
||||
public function doCheckGet(Request $request)
|
||||
{
|
||||
return view('metabolism_check');
|
||||
}
|
||||
|
||||
public function doCheckPost(EventMetabolismCheckRequest $request)
|
||||
{
|
||||
$rejectReason = '';
|
||||
try
|
||||
{
|
||||
|
||||
$twid = Str::upper($request->input('twid'));
|
||||
$phone = $request->input('phone');
|
||||
$eventItem = EventMetabolism::where('twid', 'like', '%'.$twid)->where('phone', 'like', '%'.$phone)->first();
|
||||
if (!$eventItem) {
|
||||
throw new \Exception('找不到您登記的資料,請確認是否資訊正確。');
|
||||
}
|
||||
if ($eventItem->check_state == 1) {
|
||||
throw new \Exception('您已經登記審查,請等待審查完成。');
|
||||
}
|
||||
if ($eventItem->check_state == 2) {
|
||||
$rejectReason = $eventItem->check_reson;
|
||||
throw new \Exception('您的審查未通過,請依以下原因說明重新登記。');
|
||||
}
|
||||
|
||||
}
|
||||
catch (\Exception $ex) {
|
||||
return redirect()->back()->withErrors([$ex->getMessage(), $rejectReason])->withInput(Request()->all());
|
||||
}
|
||||
return redirect()->back()->with('success', '您已審格通過!');
|
||||
}
|
||||
}
|
37
app/Http/Controllers/NewsController.php
Normal file
37
app/Http/Controllers/NewsController.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class NewsController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$perPageItems = 999;
|
||||
$page = $request->get("p");
|
||||
$page = (!$page || $page < 1) ? 1 : $page;
|
||||
$pageOffset = $perPageItems * ($page - 1);
|
||||
|
||||
$dataRows = \App\Models\News::where('is_front_show', '=', true)
|
||||
->orderBy('post_at', 'desc');
|
||||
//->select('id', 'title', 'description', 'body', 'photos', 'post_at');
|
||||
|
||||
return view('news', [
|
||||
'dataRows' => $dataRows->skip($pageOffset)->take($perPageItems)->get(),
|
||||
'dataCurrentPage' => $page,
|
||||
'dataPerPageItems' => $perPageItems,
|
||||
'dataTotalCount' => $dataRows->count(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function detail(Request $request, $id)
|
||||
{
|
||||
$dataRow = \App\Models\News::where('id', '=', $id)
|
||||
->where('is_front_show', '=', true);
|
||||
|
||||
return view('news_detail', [
|
||||
'dataRow' => $dataRow->first(),
|
||||
]);
|
||||
}
|
||||
}
|
28
app/Http/Controllers/NoticeController.php
Normal file
28
app/Http/Controllers/NoticeController.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class NoticeController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$perPageItems = 999;
|
||||
$page = $request->get("p");
|
||||
$page = (!$page || $page < 1) ? 1 : $page;
|
||||
$pageOffset = $perPageItems * ($page - 1);
|
||||
|
||||
$dataRows = \App\Models\Notice::where('is_front_show', '=', true)
|
||||
->orderBy('post_at', 'desc');
|
||||
//->select('id', 'title', 'description', 'body', 'photos', 'post_at');
|
||||
|
||||
return view('notices', [
|
||||
'dataRows' => $dataRows->skip($pageOffset)->take($perPageItems)->get(),
|
||||
'dataCurrentPage' => $page,
|
||||
'dataPerPageItems' => $perPageItems,
|
||||
'dataTotalCount' => $dataRows->count(),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
68
app/Http/Kernel.php
Normal file
68
app/Http/Kernel.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array<int, class-string|string>
|
||||
*/
|
||||
protected $middleware = [
|
||||
// \App\Http\Middleware\TrustHosts::class,
|
||||
\App\Http\Middleware\TrustProxies::class,
|
||||
\Illuminate\Http\Middleware\HandleCors::class,
|
||||
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array<string, array<int, class-string|string>>
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
|
||||
'api' => [
|
||||
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
|
||||
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's middleware aliases.
|
||||
*
|
||||
* Aliases may be used instead of class names to conveniently assign middleware to routes and groups.
|
||||
*
|
||||
* @var array<string, class-string|string>
|
||||
*/
|
||||
protected $middlewareAliases = [
|
||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
|
||||
'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
|
||||
'signed' => \App\Http\Middleware\ValidateSignature::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
];
|
||||
}
|
17
app/Http/Middleware/Authenticate.php
Normal file
17
app/Http/Middleware/Authenticate.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Authenticate extends Middleware
|
||||
{
|
||||
/**
|
||||
* Get the path the user should be redirected to when they are not authenticated.
|
||||
*/
|
||||
protected function redirectTo(Request $request): ?string
|
||||
{
|
||||
return $request->expectsJson() ? null : route('login');
|
||||
}
|
||||
}
|
68
app/Http/Middleware/CheckIfAdmin.php
Normal file
68
app/Http/Middleware/CheckIfAdmin.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class CheckIfAdmin
|
||||
{
|
||||
/**
|
||||
* Checked that the logged in user is an administrator.
|
||||
*
|
||||
* --------------
|
||||
* VERY IMPORTANT
|
||||
* --------------
|
||||
* If you have both regular users and admins inside the same table, change
|
||||
* the contents of this method to check that the logged in user
|
||||
* is an admin, and not a regular user.
|
||||
*
|
||||
* Additionally, in Laravel 7+, you should change app/Providers/RouteServiceProvider::HOME
|
||||
* which defines the route where a logged in user (but not admin) gets redirected
|
||||
* when trying to access an admin route. By default it's '/home' but Backpack
|
||||
* does not have a '/home' route, use something you've built for your users
|
||||
* (again - users, not admins).
|
||||
*
|
||||
* @param \Illuminate\Contracts\Auth\Authenticatable|null $user
|
||||
* @return bool
|
||||
*/
|
||||
private function checkIfUserIsAdmin($user)
|
||||
{
|
||||
// return ($user->is_admin == 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Answer to unauthorized access request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
private function respondToUnauthorizedRequest($request)
|
||||
{
|
||||
if ($request->ajax() || $request->wantsJson()) {
|
||||
return response(trans('backpack::base.unauthorized'), 401);
|
||||
} else {
|
||||
return redirect()->guest(backpack_url('login'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (backpack_auth()->guest()) {
|
||||
return $this->respondToUnauthorizedRequest($request);
|
||||
}
|
||||
|
||||
if (! $this->checkIfUserIsAdmin(backpack_user())) {
|
||||
return $this->respondToUnauthorizedRequest($request);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
17
app/Http/Middleware/EncryptCookies.php
Normal file
17
app/Http/Middleware/EncryptCookies.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||
|
||||
class EncryptCookies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the cookies that should not be encrypted.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
17
app/Http/Middleware/PreventRequestsDuringMaintenance.php
Normal file
17
app/Http/Middleware/PreventRequestsDuringMaintenance.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
|
||||
|
||||
class PreventRequestsDuringMaintenance extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be reachable while maintenance mode is enabled.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
30
app/Http/Middleware/RedirectIfAuthenticated.php
Normal file
30
app/Http/Middleware/RedirectIfAuthenticated.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class RedirectIfAuthenticated
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next, string ...$guards): Response
|
||||
{
|
||||
$guards = empty($guards) ? [null] : $guards;
|
||||
|
||||
foreach ($guards as $guard) {
|
||||
if (Auth::guard($guard)->check()) {
|
||||
return redirect(RouteServiceProvider::HOME);
|
||||
}
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
19
app/Http/Middleware/TrimStrings.php
Normal file
19
app/Http/Middleware/TrimStrings.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||
|
||||
class TrimStrings extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the attributes that should not be trimmed.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
'current_password',
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
}
|
20
app/Http/Middleware/TrustHosts.php
Normal file
20
app/Http/Middleware/TrustHosts.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Middleware\TrustHosts as Middleware;
|
||||
|
||||
class TrustHosts extends Middleware
|
||||
{
|
||||
/**
|
||||
* Get the host patterns that should be trusted.
|
||||
*
|
||||
* @return array<int, string|null>
|
||||
*/
|
||||
public function hosts(): array
|
||||
{
|
||||
return [
|
||||
$this->allSubdomainsOfApplicationUrl(),
|
||||
];
|
||||
}
|
||||
}
|
28
app/Http/Middleware/TrustProxies.php
Normal file
28
app/Http/Middleware/TrustProxies.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Middleware\TrustProxies as Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TrustProxies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The trusted proxies for this application.
|
||||
*
|
||||
* @var array<int, string>|string|null
|
||||
*/
|
||||
protected $proxies;
|
||||
|
||||
/**
|
||||
* The headers that should be used to detect proxies.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $headers =
|
||||
Request::HEADER_X_FORWARDED_FOR |
|
||||
Request::HEADER_X_FORWARDED_HOST |
|
||||
Request::HEADER_X_FORWARDED_PORT |
|
||||
Request::HEADER_X_FORWARDED_PROTO |
|
||||
Request::HEADER_X_FORWARDED_AWS_ELB;
|
||||
}
|
22
app/Http/Middleware/ValidateSignature.php
Normal file
22
app/Http/Middleware/ValidateSignature.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Routing\Middleware\ValidateSignature as Middleware;
|
||||
|
||||
class ValidateSignature extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the query string parameters that should be ignored.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
// 'fbclid',
|
||||
// 'utm_campaign',
|
||||
// 'utm_content',
|
||||
// 'utm_medium',
|
||||
// 'utm_source',
|
||||
// 'utm_term',
|
||||
];
|
||||
}
|
17
app/Http/Middleware/VerifyCsrfToken.php
Normal file
17
app/Http/Middleware/VerifyCsrfToken.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||
|
||||
class VerifyCsrfToken extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be excluded from CSRF verification.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
46
app/Http/Requests/EventHealthAllowanceCheckRequest.php
Normal file
46
app/Http/Requests/EventHealthAllowanceCheckRequest.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class EventHealthAllowanceCheckRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'twid' => 'required|min:4|max:4',
|
||||
'phone' => 'required|min:4|max:4',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'twid' => '身份證字號後4碼',
|
||||
'phone' => '行動電話後4碼',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
|
||||
];
|
||||
}
|
||||
}
|
57
app/Http/Requests/EventHealthAllowanceRequest.php
Normal file
57
app/Http/Requests/EventHealthAllowanceRequest.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class EventHealthAllowanceRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'hospital_name' => 'required|min:2',
|
||||
'name' => 'required|min:1|max:128',
|
||||
'twid' => 'required|isNI',
|
||||
'phone' => 'required|phone:TW',
|
||||
'email' => 'required|email',
|
||||
'address' => 'required|min:5',
|
||||
'check_reson' => 'required_if:check_state,3',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'hospital_name' => '就醫院所',
|
||||
'name' => '姓名',
|
||||
'twid' => '身份證字號',
|
||||
'phone' => '行動電話',
|
||||
'email' => '電子信箱',
|
||||
'address' => '收件地址'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
'twid.is_n_i' => '身份證字號驗證有誤',
|
||||
'phone.phone' => '行動電話驗證有誤',
|
||||
'check_reson.required_if' => '當審核狀態為「未通過」時,必需填寫「審核回應」欄位'
|
||||
];
|
||||
}
|
||||
}
|
59
app/Http/Requests/EventImprovedHealthCheckRequest.php
Normal file
59
app/Http/Requests/EventImprovedHealthCheckRequest.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class EventImprovedHealthCheckRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
//return backpack_auth()->check();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'twid' => 'required|min:4|max:4',
|
||||
'phone' => 'required|min:4|max:4',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'twid' => '身份證字號後4碼',
|
||||
'phone' => '行動電話後4碼',
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
|
||||
];
|
||||
}
|
||||
}
|
69
app/Http/Requests/EventImprovedHealthRequest.php
Normal file
69
app/Http/Requests/EventImprovedHealthRequest.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class EventImprovedHealthRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
//return backpack_auth()->check();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'hospital_name' => 'required|min:2',
|
||||
'name' => 'required|min:1|max:128',
|
||||
'twid' => 'required|isNI',
|
||||
'phone' => 'required|phone:TW',
|
||||
'email' => 'required|email',
|
||||
'address' => 'required|min:5',
|
||||
'check_reson' => 'required_if:check_state,3',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'hospital_name' => '就醫院所',
|
||||
'name' => '姓名',
|
||||
'twid' => '身份證字號',
|
||||
'phone' => '行動電話',
|
||||
'email' => '電子信箱',
|
||||
'address' => '收件地址'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
'twid.is_n_i' => '身份證字號驗證有誤',
|
||||
'phone.phone' => '行動電話驗證有誤',
|
||||
'check_reson.required_if' => '當審核狀態為「未通過」時,必需填寫「審核回應」欄位'
|
||||
];
|
||||
}
|
||||
}
|
60
app/Http/Requests/EventMetabolismCheckRequest.php
Normal file
60
app/Http/Requests/EventMetabolismCheckRequest.php
Normal file
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class EventMetabolismCheckRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
//return backpack_auth()->check();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'twid' => 'required|min:4|max:4',
|
||||
'phone' => 'required|min:4|max:4',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'twid' => '身份證字號後4碼',
|
||||
'phone' => '行動電話後4碼',
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
|
||||
|
||||
];
|
||||
}
|
||||
}
|
69
app/Http/Requests/EventMetabolismRequest.php
Normal file
69
app/Http/Requests/EventMetabolismRequest.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class EventMetabolismRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
//return backpack_auth()->check();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'hospital_name' => 'required|min:2',
|
||||
'name' => 'required|min:1|max:128',
|
||||
'twid' => 'required|isNI',
|
||||
'phone' => 'required|phone:TW',
|
||||
'email' => 'required|email',
|
||||
'address' => 'required|min:5',
|
||||
'check_reson' => 'required_if:check_state,3',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'hospital_name' => '就醫院所',
|
||||
'name' => '姓名',
|
||||
'twid' => '身份證字號',
|
||||
'phone' => '行動電話',
|
||||
'email' => '電子信箱',
|
||||
'address' => '收件地址',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
'twid.is_n_i' => '身份證字號驗證有誤',
|
||||
'phone.phone' => '行動電話驗證有誤',
|
||||
'check_reson.required_if' => '當審核狀態為「未通過」時,必需填寫「審核回應」欄位'
|
||||
];
|
||||
}
|
||||
}
|
55
app/Http/Requests/EventRegistrationInfoRequest.php
Normal file
55
app/Http/Requests/EventRegistrationInfoRequest.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class EventRegistrationInfoRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
55
app/Http/Requests/FaqCatalogRequest.php
Normal file
55
app/Http/Requests/FaqCatalogRequest.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class FaqCatalogRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
57
app/Http/Requests/FaqRequest.php
Normal file
57
app/Http/Requests/FaqRequest.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class FaqRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
'title' => 'required|min:2|max:255',
|
||||
'body' => 'required|min:2'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
55
app/Http/Requests/HealthInfoCatalogRequest.php
Normal file
55
app/Http/Requests/HealthInfoCatalogRequest.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class HealthInfoCatalogRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
57
app/Http/Requests/HealthInfoRequest.php
Normal file
57
app/Http/Requests/HealthInfoRequest.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class HealthInfoRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
'title' => 'required|min:2|max:255',
|
||||
'body' => 'required|min:2'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
55
app/Http/Requests/NewsCatalogRequest.php
Normal file
55
app/Http/Requests/NewsCatalogRequest.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class NewsCatalogRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
57
app/Http/Requests/NewsRequest.php
Normal file
57
app/Http/Requests/NewsRequest.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class NewsRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
'title' => 'required|min:2|max:255',
|
||||
'body' => 'required|min:2'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
55
app/Http/Requests/NoticeCatalogRequest.php
Normal file
55
app/Http/Requests/NoticeCatalogRequest.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class NoticeCatalogRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
57
app/Http/Requests/NoticeRequest.php
Normal file
57
app/Http/Requests/NoticeRequest.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class NoticeRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
'title' => 'required|min:2|max:255',
|
||||
'body' => 'required|min:2'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
55
app/Http/Requests/UserRequest.php
Normal file
55
app/Http/Requests/UserRequest.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class UserRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// only allow updates if the user is logged in
|
||||
return backpack_auth()->check();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// 'name' => 'required|min:5|max:255'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation attributes that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation messages that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
56
app/Mail/EventNotifyMail.php
Normal file
56
app/Mail/EventNotifyMail.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Mail\Mailables\Content;
|
||||
use Illuminate\Mail\Mailables\Envelope;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class EventNotifyMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public $data;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
public function __construct($data)
|
||||
{
|
||||
//
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
subject: '桃園市政府衛生局 114年慢性病防治管理暨多元行銷宣導',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
return new Content(
|
||||
view: 'event-notify-mail',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
58
app/Models/EventHealthAllowance.php
Normal file
58
app/Models/EventHealthAllowance.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class EventHealthAllowance extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'event_health_allowances';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
58
app/Models/EventImprovedHealth.php
Normal file
58
app/Models/EventImprovedHealth.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class EventImprovedHealth extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'event_improved_healths';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
58
app/Models/EventMetabolism.php
Normal file
58
app/Models/EventMetabolism.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class EventMetabolism extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'event_metabolisms';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
58
app/Models/EventRegistrationInfo.php
Normal file
58
app/Models/EventRegistrationInfo.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class EventRegistrationInfo extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'event_registration_infos';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
86
app/Models/Faq.php
Normal file
86
app/Models/Faq.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Ericli1018\AwesomeFieldsForBackpack\Models\Traits\HasUploadImgFields;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class Faq extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
use HasUploadImgFields;
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'faqs';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
protected $casts = [
|
||||
'post_at' => 'datetime',
|
||||
'photos' => 'array',
|
||||
];
|
||||
protected $attributes = [
|
||||
'description' => 'N/A',
|
||||
];
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
static::deleting(function($obj) {
|
||||
if (count((array)$obj->photos)) {
|
||||
foreach ($obj->photos as $item) {
|
||||
\Storage::disk('public')->delete($item['file_path']);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function faqCatalog()
|
||||
{
|
||||
return $this->belongsTo(FaqCatalog::class, 'faq_catalog_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function setPhotosAttribute($value)
|
||||
{
|
||||
$attribute_name = "photos";
|
||||
$disk = "public";
|
||||
$destination_path = "faqs";
|
||||
|
||||
$this->uploadImgMultipleFilesToDisk($value, $attribute_name, $disk, $destination_path);
|
||||
}
|
||||
}
|
64
app/Models/FaqCatalog.php
Normal file
64
app/Models/FaqCatalog.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class FaqCatalog extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'faq_catalogs';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function parent()
|
||||
{
|
||||
return $this->belongsTo(FaqCatalog::class, 'parent_id');
|
||||
}
|
||||
|
||||
public function children()
|
||||
{
|
||||
return $this->hasMany(FaqCatalog::class, 'parent_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
86
app/Models/HealthInfo.php
Normal file
86
app/Models/HealthInfo.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Ericli1018\AwesomeFieldsForBackpack\Models\Traits\HasUploadImgFields;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class HealthInfo extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
use HasUploadImgFields;
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'health_infos';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
protected $casts = [
|
||||
'post_at' => 'datetime',
|
||||
'photos' => 'array',
|
||||
];
|
||||
protected $attributes = [
|
||||
'description' => 'N/A',
|
||||
];
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
static::deleting(function($obj) {
|
||||
if (count((array)$obj->photos)) {
|
||||
foreach ($obj->photos as $item) {
|
||||
\Storage::disk('public')->delete($item['file_path']);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function healthInfoCatalog()
|
||||
{
|
||||
return $this->belongsTo(HealthInfoCatalog::class, 'news_catalog_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function setPhotosAttribute($value)
|
||||
{
|
||||
$attribute_name = "photos";
|
||||
$disk = "public";
|
||||
$destination_path = "health_info";
|
||||
|
||||
$this->uploadImgMultipleFilesToDisk($value, $attribute_name, $disk, $destination_path);
|
||||
}
|
||||
}
|
64
app/Models/HealthInfoCatalog.php
Normal file
64
app/Models/HealthInfoCatalog.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class HealthInfoCatalog extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'health_info_catalogs';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function parent()
|
||||
{
|
||||
return $this->belongsTo(HealthInfoCatalog::class, 'parent_id');
|
||||
}
|
||||
|
||||
public function children()
|
||||
{
|
||||
return $this->hasMany(HealthInfoCatalog::class, 'parent_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
86
app/Models/News.php
Normal file
86
app/Models/News.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Ericli1018\AwesomeFieldsForBackpack\Models\Traits\HasUploadImgFields;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class News extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
use HasUploadImgFields;
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'news';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
protected $casts = [
|
||||
'post_at' => 'datetime',
|
||||
'photos' => 'array',
|
||||
];
|
||||
protected $attributes = [
|
||||
'description' => 'N/A',
|
||||
];
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
static::deleting(function($obj) {
|
||||
if (count((array)$obj->photos)) {
|
||||
foreach ($obj->photos as $item) {
|
||||
\Storage::disk('public')->delete($item['file_path']);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function newsCatalog()
|
||||
{
|
||||
return $this->belongsTo(NewsCatalog::class, 'news_catalog_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function setPhotosAttribute($value)
|
||||
{
|
||||
$attribute_name = "photos";
|
||||
$disk = "public";
|
||||
$destination_path = "news";
|
||||
|
||||
$this->uploadImgMultipleFilesToDisk($value, $attribute_name, $disk, $destination_path);
|
||||
}
|
||||
}
|
64
app/Models/NewsCatalog.php
Normal file
64
app/Models/NewsCatalog.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class NewsCatalog extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'news_catalogs';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function parent()
|
||||
{
|
||||
return $this->belongsTo(NewsCatalog::class, 'parent_id');
|
||||
}
|
||||
|
||||
public function children()
|
||||
{
|
||||
return $this->hasMany(NewsCatalog::class, 'parent_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
86
app/Models/Notice.php
Normal file
86
app/Models/Notice.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Ericli1018\AwesomeFieldsForBackpack\Models\Traits\HasUploadImgFields;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class Notice extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasFactory;
|
||||
use HasUploadImgFields;
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'notices';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
protected $casts = [
|
||||
'post_at' => 'datetime',
|
||||
'photos' => 'array',
|
||||
];
|
||||
protected $attributes = [
|
||||
'description' => 'N/A',
|
||||
];
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
static::deleting(function($obj) {
|
||||
if (count((array)$obj->photos)) {
|
||||
foreach ($obj->photos as $item) {
|
||||
\Storage::disk('public')->delete($item['file_path']);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function noticeCatalog()
|
||||
{
|
||||
return $this->belongsTo(NoticeCatalog::class, 'news_catalog_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function setPhotosAttribute($value)
|
||||
{
|
||||
$attribute_name = "photos";
|
||||
$disk = "public";
|
||||
$destination_path = "notices";
|
||||
|
||||
$this->uploadImgMultipleFilesToDisk($value, $attribute_name, $disk, $destination_path);
|
||||
}
|
||||
}
|
64
app/Models/NoticeCatalog.php
Normal file
64
app/Models/NoticeCatalog.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class NoticeCatalog extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
use HasFactory;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected $table = 'notice_catalogs';
|
||||
// protected $primaryKey = 'id';
|
||||
// public $timestamps = false;
|
||||
protected $guarded = ['id'];
|
||||
// protected $fillable = [];
|
||||
// protected $hidden = [];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNCTIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELATIONS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function parent()
|
||||
{
|
||||
return $this->belongsTo(HealthInfoCatalog::class, 'parent_id');
|
||||
}
|
||||
|
||||
public function children()
|
||||
{
|
||||
return $this->hasMany(HealthInfoCatalog::class, 'parent_id');
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| ACCESSORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
}
|
22
app/Models/Traits/LogsActivity.php
Normal file
22
app/Models/Traits/LogsActivity.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Traits;
|
||||
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
use Spatie\Activitylog\Traits\LogsActivity as OriginalLogsActivity;
|
||||
|
||||
trait LogsActivity
|
||||
{
|
||||
use OriginalLogsActivity;
|
||||
|
||||
/**
|
||||
* Spatie Log Options
|
||||
* By default will log only the changes between fillables
|
||||
*
|
||||
* @return LogOptions
|
||||
*/
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()->logAll()->logOnlyDirty();
|
||||
}
|
||||
}
|
49
app/Models/User.php
Normal file
49
app/Models/User.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Backpack\CRUD\app\Models\Traits\CrudTrait;
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
use App\Models\Traits\LogsActivity;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use CrudTrait;
|
||||
use LogsActivity;
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'email',
|
||||
'password',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password',
|
||||
'remember_token',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast.
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
}
|
24
app/Providers/AppServiceProvider.php
Normal file
24
app/Providers/AppServiceProvider.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
26
app/Providers/AuthServiceProvider.php
Normal file
26
app/Providers/AuthServiceProvider.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
// use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||
|
||||
class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The model to policy mappings for the application.
|
||||
*
|
||||
* @var array<class-string, class-string>
|
||||
*/
|
||||
protected $policies = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* Register any authentication / authorization services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
19
app/Providers/BroadcastServiceProvider.php
Normal file
19
app/Providers/BroadcastServiceProvider.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Broadcast;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class BroadcastServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
Broadcast::routes();
|
||||
|
||||
require base_path('routes/channels.php');
|
||||
}
|
||||
}
|
28
app/Providers/CrudServiceProvider.php
Normal file
28
app/Providers/CrudServiceProvider.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Fields\IframeField;
|
||||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class CrudServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
CrudPanelFacade::macro('iframe', function (string $name, string $label, array $options = []) {
|
||||
return IframeField::make($name, $label, $options);
|
||||
});
|
||||
}
|
||||
}
|
38
app/Providers/EventServiceProvider.php
Normal file
38
app/Providers/EventServiceProvider.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
|
||||
class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The event to listener mappings for the application.
|
||||
*
|
||||
* @var array<class-string, array<int, class-string>>
|
||||
*/
|
||||
protected $listen = [
|
||||
Registered::class => [
|
||||
SendEmailVerificationNotification::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Register any events for your application.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if events and listeners should be automatically discovered.
|
||||
*/
|
||||
public function shouldDiscoverEvents(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
40
app/Providers/RouteServiceProvider.php
Normal file
40
app/Providers/RouteServiceProvider.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Cache\RateLimiting\Limit;
|
||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
class RouteServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The path to your application's "home" route.
|
||||
*
|
||||
* Typically, users are redirected here after authentication.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public const HOME = '/home';
|
||||
|
||||
/**
|
||||
* Define your route model bindings, pattern filters, and other route configuration.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
RateLimiter::for('api', function (Request $request) {
|
||||
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
|
||||
});
|
||||
|
||||
$this->routes(function () {
|
||||
Route::middleware('api')
|
||||
->prefix('api')
|
||||
->group(base_path('routes/api.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->group(base_path('routes/web.php'));
|
||||
});
|
||||
}
|
||||
}
|
53
artisan
Executable file
53
artisan
Executable file
@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register The Auto Loader
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Composer provides a convenient, automatically generated class loader
|
||||
| for our application. We just need to utilize it! We'll require it
|
||||
| into the script here so that we do not have to worry about the
|
||||
| loading of any of our classes manually. It's great to relax.
|
||||
|
|
||||
*/
|
||||
|
||||
require __DIR__.'/vendor/autoload.php';
|
||||
|
||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Run The Artisan Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When we run the console application, the current CLI command will be
|
||||
| executed in this console and the response sent back to a terminal
|
||||
| or another output device for the developers. Here goes nothing!
|
||||
|
|
||||
*/
|
||||
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
|
||||
$status = $kernel->handle(
|
||||
$input = new Symfony\Component\Console\Input\ArgvInput,
|
||||
new Symfony\Component\Console\Output\ConsoleOutput
|
||||
);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Shutdown The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Once Artisan has finished running, we will fire off the shutdown events
|
||||
| so that any final work may be done by the application before we shut
|
||||
| down the process. This is the last thing to happen to the request.
|
||||
|
|
||||
*/
|
||||
|
||||
$kernel->terminate($input, $status);
|
||||
|
||||
exit($status);
|
55
bootstrap/app.php
Executable file
55
bootstrap/app.php
Executable file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The first thing we will do is create a new Laravel application instance
|
||||
| which serves as the "glue" for all the components of Laravel, and is
|
||||
| the IoC container for the system binding all of the various parts.
|
||||
|
|
||||
*/
|
||||
|
||||
$app = new Illuminate\Foundation\Application(
|
||||
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
|
||||
);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Bind Important Interfaces
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Next, we need to bind some important interfaces into the container so
|
||||
| we will be able to resolve them when needed. The kernels serve the
|
||||
| incoming requests to this application from both the web and CLI.
|
||||
|
|
||||
*/
|
||||
|
||||
$app->singleton(
|
||||
Illuminate\Contracts\Http\Kernel::class,
|
||||
App\Http\Kernel::class
|
||||
);
|
||||
|
||||
$app->singleton(
|
||||
Illuminate\Contracts\Console\Kernel::class,
|
||||
App\Console\Kernel::class
|
||||
);
|
||||
|
||||
$app->singleton(
|
||||
Illuminate\Contracts\Debug\ExceptionHandler::class,
|
||||
App\Exceptions\Handler::class
|
||||
);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Return The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This script returns the application instance. The instance is given to
|
||||
| the calling script so we can separate the building of the instances
|
||||
| from the actual running of the application and sending responses.
|
||||
|
|
||||
*/
|
||||
|
||||
return $app;
|
2
bootstrap/cache/.gitignore
vendored
Executable file
2
bootstrap/cache/.gitignore
vendored
Executable file
@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
99
composer.json
Normal file
99
composer.json
Normal file
@ -0,0 +1,99 @@
|
||||
{
|
||||
"name": "laravel/laravel",
|
||||
"type": "project",
|
||||
"description": "The skeleton application for the Laravel framework.",
|
||||
"keywords": ["laravel", "framework"],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"backpack/activity-log": "^2.0",
|
||||
"backpack/crud": "^6.8",
|
||||
"backpack/filemanager": "^3.0",
|
||||
"backpack/theme-tabler": "^1.2",
|
||||
"chaoswey/taiwan-id-validator": "^0.1.0",
|
||||
"cviebrock/eloquent-sluggable": "^10.0",
|
||||
"diglactic/laravel-breadcrumbs": "^10.0",
|
||||
"ericli1018/awesome-fields-for-backpack": "^1.1",
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"intervention/image": "^3.11",
|
||||
"laravel/framework": "^10.10",
|
||||
"laravel/sanctum": "^3.3",
|
||||
"laravel/tinker": "^2.8",
|
||||
"laravel/ui": "^4.6",
|
||||
"propaganistas/laravel-phone": "^5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"backpack/generators": "^4.0",
|
||||
"fakerphp/faker": "^1.9.1",
|
||||
"laracasts/generators": "^2.0",
|
||||
"laravel-lang/lang": "^13",
|
||||
"laravel-lang/publisher": "^14",
|
||||
"laravel/pint": "^1.0",
|
||||
"laravel/sail": "^1.18",
|
||||
"mockery/mockery": "^1.4.4",
|
||||
"nunomaduro/collision": "^7.0",
|
||||
"phpunit/phpunit": "^10.1",
|
||||
"spatie/laravel-ignition": "^2.0"
|
||||
},
|
||||
"autoload": {
|
||||
"exclude-from-classmap": [
|
||||
"vendor/backpack/crud/src/helpers.php",
|
||||
"vendor/backpack/crud/src/app/Http/Controllers/ChartController.php",
|
||||
"vendor/backpack/crud/src/app/Http/Controllers/Operations/BulkCloneOperation.php",
|
||||
"vendor/backpack/crud/src/app/Http/Controllers/Operations/BulkDeleteOperation.php",
|
||||
"vendor/backpack/crud/src/app/Http/Controllers/Operations/CloneOperation.php",
|
||||
"vendor/backpack/crud/src/app/Http/Controllers/Operations/FetchOperation.php",
|
||||
"vendor/backpack/crud/src/app/Http/Controllers/Operations/InlineCreateOperation.php"
|
||||
],
|
||||
"files": [
|
||||
"vendor/ericli1018/awesome-fields-for-backpack/src/helpers.php",
|
||||
"vendor/ericli1018/awesome-fields-for-backpack/src/Http/Controllers/ChartController.php",
|
||||
"vendor/ericli1018/awesome-fields-for-backpack/src/Http/Controllers/Operations/BulkCloneOperation.php",
|
||||
"vendor/ericli1018/awesome-fields-for-backpack/src/Http/Controllers/Operations/BulkDeleteOperation.php",
|
||||
"vendor/ericli1018/awesome-fields-for-backpack/src/Http/Controllers/Operations/CloneOperation.php",
|
||||
"vendor/ericli1018/awesome-fields-for-backpack/src/Http/Controllers/Operations/FetchOperation.php",
|
||||
"vendor/ericli1018/awesome-fields-for-backpack/src/Http/Controllers/Operations/InlineCreateOperation.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"App\\": "app/",
|
||||
"Database\\Factories\\": "database/factories/",
|
||||
"Database\\Seeders\\": "database/seeders/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"post-autoload-dump": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||
"@php artisan package:discover --ansi"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
],
|
||||
"post-create-project-cmd": [
|
||||
"@php artisan key:generate --ansi"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"dont-discover": []
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"pestphp/pest-plugin": true,
|
||||
"php-http/discovery": true
|
||||
}
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true
|
||||
}
|
10983
composer.lock
generated
Normal file
10983
composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
52
config/activitylog.php
Normal file
52
config/activitylog.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
* If set to false, no activities will be saved to the database.
|
||||
*/
|
||||
'enabled' => env('ACTIVITY_LOGGER_ENABLED', true),
|
||||
|
||||
/*
|
||||
* When the clean-command is executed, all recording activities older than
|
||||
* the number of days specified here will be deleted.
|
||||
*/
|
||||
'delete_records_older_than_days' => 365,
|
||||
|
||||
/*
|
||||
* If no log name is passed to the activity() helper
|
||||
* we use this default log name.
|
||||
*/
|
||||
'default_log_name' => 'default',
|
||||
|
||||
/*
|
||||
* You can specify an auth driver here that gets user models.
|
||||
* If this is null we'll use the current Laravel auth driver.
|
||||
*/
|
||||
'default_auth_driver' => null,
|
||||
|
||||
/*
|
||||
* If set to true, the subject returns soft deleted models.
|
||||
*/
|
||||
'subject_returns_soft_deleted_models' => false,
|
||||
|
||||
/*
|
||||
* This model will be used to log activity.
|
||||
* It should implement the Spatie\Activitylog\Contracts\Activity interface
|
||||
* and extend Illuminate\Database\Eloquent\Model.
|
||||
*/
|
||||
'activity_model' => \Spatie\Activitylog\Models\Activity::class,
|
||||
|
||||
/*
|
||||
* This is the name of the table that will be created by the migration and
|
||||
* used by the Activity model shipped with this package.
|
||||
*/
|
||||
'table_name' => env('ACTIVITY_LOGGER_TABLE_NAME', 'activity_log'),
|
||||
|
||||
/*
|
||||
* This is the database connection that will be used by the migration and
|
||||
* the Activity model shipped with this package. In case it's not set
|
||||
* Laravel's database.default will be used instead.
|
||||
*/
|
||||
'database_connection' => env('ACTIVITY_LOGGER_DB_CONNECTION'),
|
||||
];
|
189
config/app.php
Normal file
189
config/app.php
Normal file
@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the name of your application. This value is used when the
|
||||
| framework needs to place the application's name in a notification or
|
||||
| any other location as required by the application or its packages.
|
||||
|
|
||||
*/
|
||||
|
||||
'name' => env('APP_NAME', 'Laravel'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Environment
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the "environment" your application is currently
|
||||
| running in. This may determine how you prefer to configure various
|
||||
| services the application utilizes. Set this in your ".env" file.
|
||||
|
|
||||
*/
|
||||
|
||||
'env' => env('APP_ENV', 'production'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Debug Mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When your application is in debug mode, detailed error messages with
|
||||
| stack traces will be shown on every error that occurs within your
|
||||
| application. If disabled, a simple generic error page is shown.
|
||||
|
|
||||
*/
|
||||
|
||||
'debug' => (bool) env('APP_DEBUG', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This URL is used by the console to properly generate URLs when using
|
||||
| the Artisan command line tool. You should set this to the root of
|
||||
| your application so that it is used when running Artisan tasks.
|
||||
|
|
||||
*/
|
||||
|
||||
'url' => env('APP_URL', 'http://localhost'),
|
||||
|
||||
'asset_url' => env('ASSET_URL'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Timezone
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default timezone for your application, which
|
||||
| will be used by the PHP date and date-time functions. We have gone
|
||||
| ahead and set this to a sensible default for you out of the box.
|
||||
|
|
||||
*/
|
||||
|
||||
'timezone' => 'Asia/Taipei',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Locale Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The application locale determines the default locale that will be used
|
||||
| by the translation service provider. You are free to set this value
|
||||
| to any of the locales which will be supported by the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'locale' => 'zh_TW',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Fallback Locale
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The fallback locale determines the locale to use when the current one
|
||||
| is not available. You may change the value to correspond to any of
|
||||
| the language folders that are provided through your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'fallback_locale' => 'zh_TW',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Faker Locale
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This locale will be used by the Faker PHP library when generating fake
|
||||
| data for your database seeds. For example, this will be used to get
|
||||
| localized telephone numbers, street address information and more.
|
||||
|
|
||||
*/
|
||||
|
||||
'faker_locale' => 'en_US',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Encryption Key
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This key is used by the Illuminate encrypter service and should be set
|
||||
| to a random, 32 character string, otherwise these encrypted strings
|
||||
| will not be safe. Please do this before deploying an application!
|
||||
|
|
||||
*/
|
||||
|
||||
'key' => env('APP_KEY'),
|
||||
|
||||
'cipher' => 'AES-256-CBC',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Maintenance Mode Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These configuration options determine the driver used to determine and
|
||||
| manage Laravel's "maintenance mode" status. The "cache" driver will
|
||||
| allow maintenance mode to be controlled across multiple machines.
|
||||
|
|
||||
| Supported drivers: "file", "cache"
|
||||
|
|
||||
*/
|
||||
|
||||
'maintenance' => [
|
||||
'driver' => 'file',
|
||||
// 'store' => 'redis',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Autoloaded Service Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The service providers listed here will be automatically loaded on the
|
||||
| request to your application. Feel free to add your own services to
|
||||
| this array to grant expanded functionality to your applications.
|
||||
|
|
||||
*/
|
||||
|
||||
'providers' => ServiceProvider::defaultProviders()->merge([
|
||||
/*
|
||||
* Package Service Providers...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Application Service Providers...
|
||||
*/
|
||||
App\Providers\AppServiceProvider::class,
|
||||
App\Providers\AuthServiceProvider::class,
|
||||
// App\Providers\BroadcastServiceProvider::class,
|
||||
App\Providers\EventServiceProvider::class,
|
||||
App\Providers\RouteServiceProvider::class,
|
||||
App\Providers\CrudServiceProvider::class,
|
||||
])->toArray(),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Class Aliases
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This array of class aliases will be registered when this application
|
||||
| is started. However, feel free to register as many as you wish as
|
||||
| the aliases are "lazy" loaded so they don't hinder performance.
|
||||
|
|
||||
*/
|
||||
|
||||
'aliases' => Facade::defaultAliases()->merge([
|
||||
// 'Example' => App\Facades\Example::class,
|
||||
])->toArray(),
|
||||
|
||||
];
|
115
config/auth.php
Normal file
115
config/auth.php
Normal file
@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Defaults
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default authentication "guard" and password
|
||||
| reset options for your application. You may change these defaults
|
||||
| as required, but they're a perfect start for most applications.
|
||||
|
|
||||
*/
|
||||
|
||||
'defaults' => [
|
||||
'guard' => 'web',
|
||||
'passwords' => 'users',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Guards
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Next, you may define every authentication guard for your application.
|
||||
| Of course, a great default configuration has been defined for you
|
||||
| here which uses session storage and the Eloquent user provider.
|
||||
|
|
||||
| All authentication drivers have a user provider. This defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| mechanisms used by this application to persist your user's data.
|
||||
|
|
||||
| Supported: "session"
|
||||
|
|
||||
*/
|
||||
|
||||
'guards' => [
|
||||
'web' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'users',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| User Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| All authentication drivers have a user provider. This defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| mechanisms used by this application to persist your user's data.
|
||||
|
|
||||
| If you have multiple user tables or models you may configure multiple
|
||||
| sources which represent each model / table. These sources may then
|
||||
| be assigned to any extra authentication guards you have defined.
|
||||
|
|
||||
| Supported: "database", "eloquent"
|
||||
|
|
||||
*/
|
||||
|
||||
'providers' => [
|
||||
'users' => [
|
||||
'driver' => 'eloquent',
|
||||
'model' => App\Models\User::class,
|
||||
],
|
||||
|
||||
// 'users' => [
|
||||
// 'driver' => 'database',
|
||||
// 'table' => 'users',
|
||||
// ],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Resetting Passwords
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You may specify multiple password reset configurations if you have more
|
||||
| than one user table or model in the application and you want to have
|
||||
| separate password reset settings based on the specific user types.
|
||||
|
|
||||
| The expiry time is the number of minutes that each reset token will be
|
||||
| considered valid. This security feature keeps tokens short-lived so
|
||||
| they have less time to be guessed. You may change this as needed.
|
||||
|
|
||||
| The throttle setting is the number of seconds a user must wait before
|
||||
| generating more password reset tokens. This prevents the user from
|
||||
| quickly generating a very large amount of password reset tokens.
|
||||
|
|
||||
*/
|
||||
|
||||
'passwords' => [
|
||||
'users' => [
|
||||
'provider' => 'users',
|
||||
'table' => 'password_reset_tokens',
|
||||
'expire' => 60,
|
||||
'throttle' => 60,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Confirmation Timeout
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define the amount of seconds before a password confirmation
|
||||
| times out and the user is prompted to re-enter their password via the
|
||||
| confirmation screen. By default, the timeout lasts for three hours.
|
||||
|
|
||||
*/
|
||||
|
||||
'password_timeout' => 10800,
|
||||
|
||||
];
|
194
config/backpack/base.php
Normal file
194
config/backpack/base.php
Normal file
@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Registration Open
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Choose whether new users/admins are allowed to register.
|
||||
| This will show the Register button on the login page and allow access to the
|
||||
| Register functions in AuthController.
|
||||
|
|
||||
| By default the registration is open only on localhost.
|
||||
*/
|
||||
|
||||
'registration_open' => false, //env('BACKPACK_REGISTRATION_OPEN', env('APP_ENV') === 'local'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Routing
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// The prefix used in all base routes (the 'admin' in admin/dashboard)
|
||||
// You can make sure all your URLs use this prefix by using the backpack_url() helper instead of url()
|
||||
'route_prefix' => 'admin',
|
||||
|
||||
// The web middleware (group) used in all base & CRUD routes
|
||||
// If you've modified your "web" middleware group (ex: removed sessions), you can use a different
|
||||
// route group, that has all the the middleware listed below in the comments.
|
||||
'web_middleware' => 'web',
|
||||
// Or you can comment the above, and uncomment the complete list below.
|
||||
// 'web_middleware' => [
|
||||
// \App\Http\Middleware\EncryptCookies::class,
|
||||
// \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
// \Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
// \App\Http\Middleware\VerifyCsrfToken::class,
|
||||
// ],
|
||||
|
||||
// Set this to false if you would like to use your own AuthController and PasswordController
|
||||
// (you then need to setup your auth routes manually in your routes.php file)
|
||||
// Warning: if you disable this, the password recovery routes (below) will be disabled too!
|
||||
'setup_auth_routes' => true,
|
||||
|
||||
// Set this to false if you would like to skip adding the dashboard routes
|
||||
// (you then need to overwrite the login route on your AuthController)
|
||||
'setup_dashboard_routes' => true,
|
||||
|
||||
// Set this to false if you would like to skip adding "my account" routes
|
||||
// (you then need to manually define the routes in your web.php)
|
||||
'setup_my_account_routes' => true,
|
||||
|
||||
// Set this to false if you would like to skip adding the password recovery routes
|
||||
// (you then need to manually define the routes in your web.php)
|
||||
'setup_password_recovery_routes' => false,
|
||||
|
||||
// Set this to true if you would like to enable email verification for your user model.
|
||||
// Make sure your user model implements the MustVerifyEmail contract and your database
|
||||
// table contains the `email_verified_at` column. Read the following before enabling:
|
||||
// https://backpackforlaravel.com/docs/6.x/base-how-to#enable-email-verification-in-backpack-routes
|
||||
'setup_email_verification_routes' => false,
|
||||
|
||||
// When email verification is enabled, automatically add the Verified middleware to Backpack routes?
|
||||
// Set false if you want to use your own Verified middleware in `middleware_class`.
|
||||
'setup_email_verification_middleware' => true,
|
||||
|
||||
// How many times in any given time period should the user be allowed to
|
||||
// request a new verification email?
|
||||
// Defaults to 1,10 - 1 time in 10 minutes.
|
||||
'email_verification_throttle_access' => '3,15',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Security
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Backpack will prevent visitors from requesting password recovery too many times
|
||||
// for a certain email, to make sure they cannot be spammed that way.
|
||||
// How many seconds should a visitor wait, after they've requested a
|
||||
// password reset, before they can try again for the same email?
|
||||
'password_recovery_throttle_notifications' => 600, // time in seconds
|
||||
|
||||
// How much time should the token sent to the user email be considered valid?
|
||||
// After this time expires, user needs to request a new reset token.
|
||||
'password_recovery_token_expiration' => 60, // time in minutes
|
||||
|
||||
// Backpack will prevent an IP from trying to reset the password too many times,
|
||||
// so that a malicious actor cannot try too many emails, too see if they have
|
||||
// accounts or to increase the AWS/SendGrid/etc bill.
|
||||
//
|
||||
// How many times in any given time period should the user be allowed to
|
||||
// attempt a password reset? Take into account that user might wrongly
|
||||
// type an email at first, so at least allow one more try.
|
||||
// Defaults to 3,10 - 3 times in 10 minutes.
|
||||
'password_recovery_throttle_access' => '3,10',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Fully qualified namespace of the User model
|
||||
'user_model_fqn' => config('auth.providers.users.model'),
|
||||
// 'user_model_fqn' => App\User::class, // works on Laravel <= 7
|
||||
// 'user_model_fqn' => App\Models\User::class, // works on Laravel >= 8
|
||||
|
||||
// The classes for the middleware to check if the visitor is an admin
|
||||
// Can be a single class or an array of classes
|
||||
'middleware_class' => [
|
||||
App\Http\Middleware\CheckIfAdmin::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
\Backpack\CRUD\app\Http\Middleware\AuthenticateSession::class,
|
||||
// \Backpack\CRUD\app\Http\Middleware\UseBackpackAuthGuardInsteadOfDefaultAuthGuard::class,
|
||||
],
|
||||
|
||||
// Alias for that middleware
|
||||
'middleware_key' => 'admin',
|
||||
// Note: It's recommended to use the backpack_middleware() helper everywhere, which pulls this key for you.
|
||||
|
||||
// Username column for authentication
|
||||
// The Backpack default is the same as the Laravel default (email)
|
||||
// If you need to switch to username, you also need to create that column in your db
|
||||
'authentication_column' => 'email',
|
||||
'authentication_column_name' => 'Email',
|
||||
|
||||
// Backpack assumes that your "database email column" for operations like Login and Register is called "email".
|
||||
// If your database email column have a different name, you can configure it here. Eg: `user_mail`
|
||||
'email_column' => 'email',
|
||||
|
||||
// The guard that protects the Backpack admin panel.
|
||||
// If null, the config.auth.defaults.guard value will be used.
|
||||
'guard' => 'backpack',
|
||||
|
||||
// The password reset configuration for Backpack.
|
||||
// If null, the config.auth.defaults.passwords value will be used.
|
||||
'passwords' => 'backpack',
|
||||
|
||||
// What kind of avatar will you like to show to the user?
|
||||
// Default: gravatar (automatically use the gravatar for their email)
|
||||
// Other options:
|
||||
// - null (generic image with their first letter)
|
||||
// - example_method_name (specify the method on the User model that returns the URL)
|
||||
'avatar_type' => 'gravatar',
|
||||
|
||||
// Gravatar fallback options are 'identicon', 'monsterid', 'wavatar', 'retro', 'robohash', 'blank'
|
||||
// 'blank' will keep the generic image with the user first letter
|
||||
'gravatar_fallback' => 'blank',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| File System
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Backpack\Base sets up its own filesystem disk, just like you would by
|
||||
// adding an entry to your config/filesystems.php. It points to the root
|
||||
// of your project and it's used throughout all Backpack packages.
|
||||
//
|
||||
// You can rename this disk here. Default: root
|
||||
'root_disk_name' => 'root',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Should we use DB transactions when executing multiple queries? For example when creating an entry and it's relationships.
|
||||
// By wrapping in a database transaction you ensure that either all queries went ok, or if some failed the whole process
|
||||
// is rolled back and considered failed. This is a good setting for data integrity.
|
||||
'useDatabaseTransactions' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Backpack Token Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| If you have access to closed-source Backpack add-ons, please provide
|
||||
| your token username here, if you're getting yellow alerts on your
|
||||
| admin panel's pages. Normally this is not needed, it is
|
||||
| preferred to add this as an environment variable
|
||||
| (most likely in your .env file).
|
||||
|
|
||||
| More info and payment form on:
|
||||
| https://www.backpackforlaravel.com
|
||||
|
|
||||
*/
|
||||
|
||||
'token_username' => env('BACKPACK_TOKEN_USERNAME', false),
|
||||
];
|
480
config/backpack/crud.php
Normal file
480
config/backpack/crud.php
Normal file
@ -0,0 +1,480 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Backpack\CRUD preferences.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|-------------------
|
||||
| TRANSLATABLE CRUDS
|
||||
|-------------------
|
||||
*/
|
||||
|
||||
'show_translatable_field_icon' => true,
|
||||
'translatable_field_icon_position' => 'right', // left or right
|
||||
|
||||
'locales' => [
|
||||
// "af_NA" => "Afrikaans (Namibia)",
|
||||
// "af_ZA" => "Afrikaans (South Africa)",
|
||||
// "af" => "Afrikaans",
|
||||
// "ak_GH" => "Akan (Ghana)",
|
||||
// "ak" => "Akan",
|
||||
// "sq_AL" => "Albanian (Albania)",
|
||||
// "sq" => "Albanian",
|
||||
// "am_ET" => "Amharic (Ethiopia)",
|
||||
// "am" => "Amharic",
|
||||
// "ar_DZ" => "Arabic (Algeria)",
|
||||
// "ar_BH" => "Arabic (Bahrain)",
|
||||
// "ar_EG" => "Arabic (Egypt)",
|
||||
// "ar_IQ" => "Arabic (Iraq)",
|
||||
// "ar_JO" => "Arabic (Jordan)",
|
||||
// "ar_KW" => "Arabic (Kuwait)",
|
||||
// "ar_LB" => "Arabic (Lebanon)",
|
||||
// "ar_LY" => "Arabic (Libya)",
|
||||
// "ar_MA" => "Arabic (Morocco)",
|
||||
// "ar_OM" => "Arabic (Oman)",
|
||||
// "ar_QA" => "Arabic (Qatar)",
|
||||
// "ar_SA" => "Arabic (Saudi Arabia)",
|
||||
// "ar_SD" => "Arabic (Sudan)",
|
||||
// "ar_SY" => "Arabic (Syria)",
|
||||
// "ar_TN" => "Arabic (Tunisia)",
|
||||
// "ar_AE" => "Arabic (United Arab Emirates)",
|
||||
// "ar_YE" => "Arabic (Yemen)",
|
||||
// "ar" => "Arabic",
|
||||
// "hy_AM" => "Armenian (Armenia)",
|
||||
// "hy" => "Armenian",
|
||||
// "as_IN" => "Assamese (India)",
|
||||
// "as" => "Assamese",
|
||||
// "asa_TZ" => "Asu (Tanzania)",
|
||||
// "asa" => "Asu",
|
||||
// "az_Cyrl" => "Azerbaijani (Cyrillic)",
|
||||
// "az_Cyrl_AZ" => "Azerbaijani (Cyrillic, Azerbaijan)",
|
||||
// "az_Latn" => "Azerbaijani (Latin)",
|
||||
// "az_Latn_AZ" => "Azerbaijani (Latin, Azerbaijan)",
|
||||
// "az" => "Azerbaijani",
|
||||
// "bm_ML" => "Bambara (Mali)",
|
||||
// "bm" => "Bambara",
|
||||
// "eu_ES" => "Basque (Spain)",
|
||||
// "eu" => "Basque",
|
||||
// "be_BY" => "Belarusian (Belarus)",
|
||||
// "be" => "Belarusian",
|
||||
// "bem_ZM" => "Bemba (Zambia)",
|
||||
// "bem" => "Bemba",
|
||||
// "bez_TZ" => "Bena (Tanzania)",
|
||||
// "bez" => "Bena",
|
||||
// "bn_BD" => "Bengali (Bangladesh)",
|
||||
// "bn_IN" => "Bengali (India)",
|
||||
// "bn" => "Bengali",
|
||||
// "bs_BA" => "Bosnian (Bosnia and Herzegovina)",
|
||||
// "bs" => "Bosnian",
|
||||
// "bg_BG" => "Bulgarian (Bulgaria)",
|
||||
// "bg" => "Bulgarian",
|
||||
// "my_MM" => "Burmese (Myanmar [Burma])",
|
||||
// "my" => "Burmese",
|
||||
// "ca_ES" => "Catalan (Spain)",
|
||||
// "ca" => "Catalan",
|
||||
// "tzm_Latn" => "Central Morocco Tamazight (Latin)",
|
||||
// "tzm_Latn_MA" => "Central Morocco Tamazight (Latin, Morocco)",
|
||||
// "tzm" => "Central Morocco Tamazight",
|
||||
// "chr_US" => "Cherokee (United States)",
|
||||
// "chr" => "Cherokee",
|
||||
// "cgg_UG" => "Chiga (Uganda)",
|
||||
// "cgg" => "Chiga",
|
||||
// "zh_Hans" => "Chinese (Simplified Han)",
|
||||
// "zh_Hans_CN" => "Chinese (Simplified Han, China)",
|
||||
// "zh_Hans_HK" => "Chinese (Simplified Han, Hong Kong SAR China)",
|
||||
// "zh_Hans_MO" => "Chinese (Simplified Han, Macau SAR China)",
|
||||
// "zh_Hans_SG" => "Chinese (Simplified Han, Singapore)",
|
||||
// "zh_Hant" => "Chinese (Traditional Han)",
|
||||
// "zh_Hant_HK" => "Chinese (Traditional Han, Hong Kong SAR China)",
|
||||
// "zh_Hant_MO" => "Chinese (Traditional Han, Macau SAR China)",
|
||||
"zh_Hant_TW" => "Chinese (Traditional Han, Taiwan)",
|
||||
// "zh" => "Chinese",
|
||||
// "kw_GB" => "Cornish (United Kingdom)",
|
||||
// "kw" => "Cornish",
|
||||
// "hr_HR" => "Croatian (Croatia)",
|
||||
// "hr" => "Croatian",
|
||||
// "cs_CZ" => "Czech (Czech Republic)",
|
||||
// "cs" => "Czech",
|
||||
// "da_DK" => "Danish (Denmark)",
|
||||
// "da" => "Danish",
|
||||
// "nl_BE" => "Dutch (Belgium)",
|
||||
// "nl_NL" => "Dutch (Netherlands)",
|
||||
// "nl" => "Dutch",
|
||||
// "ebu_KE" => "Embu (Kenya)",
|
||||
// "ebu" => "Embu",
|
||||
// "en_AS" => "English (American Samoa)",
|
||||
// "en_AU" => "English (Australia)",
|
||||
// "en_BE" => "English (Belgium)",
|
||||
// "en_BZ" => "English (Belize)",
|
||||
// "en_BW" => "English (Botswana)",
|
||||
// "en_CA" => "English (Canada)",
|
||||
// "en_GU" => "English (Guam)",
|
||||
// "en_HK" => "English (Hong Kong SAR China)",
|
||||
// "en_IN" => "English (India)",
|
||||
// "en_IE" => "English (Ireland)",
|
||||
// "en_JM" => "English (Jamaica)",
|
||||
// "en_MT" => "English (Malta)",
|
||||
// "en_MH" => "English (Marshall Islands)",
|
||||
// "en_MU" => "English (Mauritius)",
|
||||
// "en_NA" => "English (Namibia)",
|
||||
// "en_NZ" => "English (New Zealand)",
|
||||
// "en_MP" => "English (Northern Mariana Islands)",
|
||||
// "en_PK" => "English (Pakistan)",
|
||||
// "en_PH" => "English (Philippines)",
|
||||
// "en_SG" => "English (Singapore)",
|
||||
// "en_ZA" => "English (South Africa)",
|
||||
// "en_TT" => "English (Trinidad and Tobago)",
|
||||
// "en_UM" => "English (U.S. Minor Outlying Islands)",
|
||||
// "en_VI" => "English (U.S. Virgin Islands)",
|
||||
// "en_GB" => "English (United Kingdom)",
|
||||
// "en_US" => "English (United States)",
|
||||
// "en_ZW" => "English (Zimbabwe)",
|
||||
//'en' => 'English',
|
||||
// "eo" => "Esperanto",
|
||||
// "et_EE" => "Estonian (Estonia)",
|
||||
// "et" => "Estonian",
|
||||
// "ee_GH" => "Ewe (Ghana)",
|
||||
// "ee_TG" => "Ewe (Togo)",
|
||||
// "ee" => "Ewe",
|
||||
// "fo_FO" => "Faroese (Faroe Islands)",
|
||||
// "fo" => "Faroese",
|
||||
// "fil_PH" => "Filipino (Philippines)",
|
||||
// "fil" => "Filipino",
|
||||
// "fi_FI" => "Finnish (Finland)",
|
||||
// "fi" => "Finnish",
|
||||
// "fr_BE" => "French (Belgium)",
|
||||
// "fr_BJ" => "French (Benin)",
|
||||
// "fr_BF" => "French (Burkina Faso)",
|
||||
// "fr_BI" => "French (Burundi)",
|
||||
// "fr_CM" => "French (Cameroon)",
|
||||
// "fr_CA" => "French (Canada)",
|
||||
// "fr_CF" => "French (Central African Republic)",
|
||||
// "fr_TD" => "French (Chad)",
|
||||
// "fr_KM" => "French (Comoros)",
|
||||
// "fr_CG" => "French (Congo - Brazzaville)",
|
||||
// "fr_CD" => "French (Congo - Kinshasa)",
|
||||
// "fr_CI" => "French (Côte d’Ivoire)",
|
||||
// "fr_DJ" => "French (Djibouti)",
|
||||
// "fr_GQ" => "French (Equatorial Guinea)",
|
||||
// "fr_FR" => "French (France)",
|
||||
// "fr_GA" => "French (Gabon)",
|
||||
// "fr_GP" => "French (Guadeloupe)",
|
||||
// "fr_GN" => "French (Guinea)",
|
||||
// "fr_LU" => "French (Luxembourg)",
|
||||
// "fr_MG" => "French (Madagascar)",
|
||||
// "fr_ML" => "French (Mali)",
|
||||
// "fr_MQ" => "French (Martinique)",
|
||||
// "fr_MC" => "French (Monaco)",
|
||||
// "fr_NE" => "French (Niger)",
|
||||
// "fr_RW" => "French (Rwanda)",
|
||||
// "fr_RE" => "French (Réunion)",
|
||||
// "fr_BL" => "French (Saint Barthélemy)",
|
||||
// "fr_MF" => "French (Saint Martin)",
|
||||
// "fr_SN" => "French (Senegal)",
|
||||
// "fr_CH" => "French (Switzerland)",
|
||||
// "fr_TG" => "French (Togo)",
|
||||
//'fr' => 'French',
|
||||
// "ff_SN" => "Fulah (Senegal)",
|
||||
// "ff" => "Fulah",
|
||||
// "gl_ES" => "Galician (Spain)",
|
||||
// "gl" => "Galician",
|
||||
// "lg_UG" => "Ganda (Uganda)",
|
||||
// "lg" => "Ganda",
|
||||
// "ka_GE" => "Georgian (Georgia)",
|
||||
// "ka" => "Georgian",
|
||||
// "de_AT" => "German (Austria)",
|
||||
// "de_BE" => "German (Belgium)",
|
||||
// "de_DE" => "German (Germany)",
|
||||
// "de_LI" => "German (Liechtenstein)",
|
||||
// "de_LU" => "German (Luxembourg)",
|
||||
// "de_CH" => "German (Switzerland)",
|
||||
// "de" => "German",
|
||||
// "el_CY" => "Greek (Cyprus)",
|
||||
// "el_GR" => "Greek (Greece)",
|
||||
// "el" => "Greek",
|
||||
// "gu_IN" => "Gujarati (India)",
|
||||
// "gu" => "Gujarati",
|
||||
// "guz_KE" => "Gusii (Kenya)",
|
||||
// "guz" => "Gusii",
|
||||
// "ha_Latn" => "Hausa (Latin)",
|
||||
// "ha_Latn_GH" => "Hausa (Latin, Ghana)",
|
||||
// "ha_Latn_NE" => "Hausa (Latin, Niger)",
|
||||
// "ha_Latn_NG" => "Hausa (Latin, Nigeria)",
|
||||
// "ha" => "Hausa",
|
||||
// "haw_US" => "Hawaiian (United States)",
|
||||
// "haw" => "Hawaiian",
|
||||
// "he_IL" => "Hebrew (Israel)",
|
||||
// "he" => "Hebrew",
|
||||
// "hi_IN" => "Hindi (India)",
|
||||
// "hi" => "Hindi",
|
||||
// "hu_HU" => "Hungarian (Hungary)",
|
||||
// "hu" => "Hungarian",
|
||||
// "is_IS" => "Icelandic (Iceland)",
|
||||
// "is" => "Icelandic",
|
||||
// "ig_NG" => "Igbo (Nigeria)",
|
||||
// "ig" => "Igbo",
|
||||
// "id_ID" => "Indonesian (Indonesia)",
|
||||
// "id" => "Indonesian",
|
||||
// "ga_IE" => "Irish (Ireland)",
|
||||
// "ga" => "Irish",
|
||||
// "it_IT" => "Italian (Italy)",
|
||||
// "it_CH" => "Italian (Switzerland)",
|
||||
//'it' => 'Italian',
|
||||
// "ja_JP" => "Japanese (Japan)",
|
||||
// "ja" => "Japanese",
|
||||
// "kea_CV" => "Kabuverdianu (Cape Verde)",
|
||||
// "kea" => "Kabuverdianu",
|
||||
// "kab_DZ" => "Kabyle (Algeria)",
|
||||
// "kab" => "Kabyle",
|
||||
// "kl_GL" => "Kalaallisut (Greenland)",
|
||||
// "kl" => "Kalaallisut",
|
||||
// "kln_KE" => "Kalenjin (Kenya)",
|
||||
// "kln" => "Kalenjin",
|
||||
// "kam_KE" => "Kamba (Kenya)",
|
||||
// "kam" => "Kamba",
|
||||
// "kn_IN" => "Kannada (India)",
|
||||
// "kn" => "Kannada",
|
||||
// "kk_Cyrl" => "Kazakh (Cyrillic)",
|
||||
// "kk_Cyrl_KZ" => "Kazakh (Cyrillic, Kazakhstan)",
|
||||
// "kk" => "Kazakh",
|
||||
// "km_KH" => "Khmer (Cambodia)",
|
||||
// "km" => "Khmer",
|
||||
// "ki_KE" => "Kikuyu (Kenya)",
|
||||
// "ki" => "Kikuyu",
|
||||
// "rw_RW" => "Kinyarwanda (Rwanda)",
|
||||
// "rw" => "Kinyarwanda",
|
||||
// "kok_IN" => "Konkani (India)",
|
||||
// "kok" => "Konkani",
|
||||
// "ko_KR" => "Korean (South Korea)",
|
||||
// "ko" => "Korean",
|
||||
// "khq_ML" => "Koyra Chiini (Mali)",
|
||||
// "khq" => "Koyra Chiini",
|
||||
// "ses_ML" => "Koyraboro Senni (Mali)",
|
||||
// "ses" => "Koyraboro Senni",
|
||||
// "lag_TZ" => "Langi (Tanzania)",
|
||||
// "lag" => "Langi",
|
||||
// "lv_LV" => "Latvian (Latvia)",
|
||||
// "lv" => "Latvian",
|
||||
// "lt_LT" => "Lithuanian (Lithuania)",
|
||||
// "lt" => "Lithuanian",
|
||||
// "luo_KE" => "Luo (Kenya)",
|
||||
// "luo" => "Luo",
|
||||
// "luy_KE" => "Luyia (Kenya)",
|
||||
// "luy" => "Luyia",
|
||||
// "mk_MK" => "Macedonian (Macedonia)",
|
||||
// "mk" => "Macedonian",
|
||||
// "jmc_TZ" => "Machame (Tanzania)",
|
||||
// "jmc" => "Machame",
|
||||
// "kde_TZ" => "Makonde (Tanzania)",
|
||||
// "kde" => "Makonde",
|
||||
// "mg_MG" => "Malagasy (Madagascar)",
|
||||
// "mg" => "Malagasy",
|
||||
// "ms_BN" => "Malay (Brunei)",
|
||||
// "ms_MY" => "Malay (Malaysia)",
|
||||
// "ms" => "Malay",
|
||||
// "ml_IN" => "Malayalam (India)",
|
||||
// "ml" => "Malayalam",
|
||||
// "mt_MT" => "Maltese (Malta)",
|
||||
// "mt" => "Maltese",
|
||||
// "gv_GB" => "Manx (United Kingdom)",
|
||||
// "gv" => "Manx",
|
||||
// "mr_IN" => "Marathi (India)",
|
||||
// "mr" => "Marathi",
|
||||
// "mas_KE" => "Masai (Kenya)",
|
||||
// "mas_TZ" => "Masai (Tanzania)",
|
||||
// "mas" => "Masai",
|
||||
// "mer_KE" => "Meru (Kenya)",
|
||||
// "mer" => "Meru",
|
||||
// "mfe_MU" => "Morisyen (Mauritius)",
|
||||
// "mfe" => "Morisyen",
|
||||
// "naq_NA" => "Nama (Namibia)",
|
||||
// "naq" => "Nama",
|
||||
// "ne_IN" => "Nepali (India)",
|
||||
// "ne_NP" => "Nepali (Nepal)",
|
||||
// "ne" => "Nepali",
|
||||
// "nd_ZW" => "North Ndebele (Zimbabwe)",
|
||||
// "nd" => "North Ndebele",
|
||||
// "nb_NO" => "Norwegian Bokmål (Norway)",
|
||||
// "nb" => "Norwegian Bokmål",
|
||||
// "nn_NO" => "Norwegian Nynorsk (Norway)",
|
||||
// "nn" => "Norwegian Nynorsk",
|
||||
// "nyn_UG" => "Nyankole (Uganda)",
|
||||
// "nyn" => "Nyankole",
|
||||
// "or_IN" => "Oriya (India)",
|
||||
// "or" => "Oriya",
|
||||
// "om_ET" => "Oromo (Ethiopia)",
|
||||
// "om_KE" => "Oromo (Kenya)",
|
||||
// "om" => "Oromo",
|
||||
// "ps_AF" => "Pashto (Afghanistan)",
|
||||
// "ps" => "Pashto",
|
||||
// "fa_AF" => "Persian (Afghanistan)",
|
||||
// "fa_IR" => "Persian (Iran)",
|
||||
// "fa" => "Persian",
|
||||
// "pl_PL" => "Polish (Poland)",
|
||||
// "pl" => "Polish",
|
||||
// "pt_BR" => "Portuguese (Brazil)",
|
||||
// "pt_GW" => "Portuguese (Guinea-Bissau)",
|
||||
// "pt_MZ" => "Portuguese (Mozambique)",
|
||||
// "pt_PT" => "Portuguese (Portugal)",
|
||||
// "pt" => "Portuguese",
|
||||
// "pa_Arab" => "Punjabi (Arabic)",
|
||||
// "pa_Arab_PK" => "Punjabi (Arabic, Pakistan)",
|
||||
// "pa_Guru" => "Punjabi (Gurmukhi)",
|
||||
// "pa_Guru_IN" => "Punjabi (Gurmukhi, India)",
|
||||
// "pa" => "Punjabi",
|
||||
// "ro_MD" => "Romanian (Moldova)",
|
||||
// "ro_RO" => "Romanian (Romania)",
|
||||
//'ro' => 'Romanian',
|
||||
// "rm_CH" => "Romansh (Switzerland)",
|
||||
// "rm" => "Romansh",
|
||||
// "rof_TZ" => "Rombo (Tanzania)",
|
||||
// "rof" => "Rombo",
|
||||
// "ru_MD" => "Russian (Moldova)",
|
||||
// "ru_RU" => "Russian (Russia)",
|
||||
// "ru_UA" => "Russian (Ukraine)",
|
||||
// "ru" => "Russian",
|
||||
// "rwk_TZ" => "Rwa (Tanzania)",
|
||||
// "rwk" => "Rwa",
|
||||
// "saq_KE" => "Samburu (Kenya)",
|
||||
// "saq" => "Samburu",
|
||||
// "sg_CF" => "Sango (Central African Republic)",
|
||||
// "sg" => "Sango",
|
||||
// "seh_MZ" => "Sena (Mozambique)",
|
||||
// "seh" => "Sena",
|
||||
// "sr_Cyrl" => "Serbian (Cyrillic)",
|
||||
// "sr_Cyrl_BA" => "Serbian (Cyrillic, Bosnia and Herzegovina)",
|
||||
// "sr_Cyrl_ME" => "Serbian (Cyrillic, Montenegro)",
|
||||
// "sr_Cyrl_RS" => "Serbian (Cyrillic, Serbia)",
|
||||
// "sr_Latn" => "Serbian (Latin)",
|
||||
// "sr_Latn_BA" => "Serbian (Latin, Bosnia and Herzegovina)",
|
||||
// "sr_Latn_ME" => "Serbian (Latin, Montenegro)",
|
||||
// "sr_Latn_RS" => "Serbian (Latin, Serbia)",
|
||||
// "sr" => "Serbian",
|
||||
// "sn_ZW" => "Shona (Zimbabwe)",
|
||||
// "sn" => "Shona",
|
||||
// "ii_CN" => "Sichuan Yi (China)",
|
||||
// "ii" => "Sichuan Yi",
|
||||
// "si_LK" => "Sinhala (Sri Lanka)",
|
||||
// "si" => "Sinhala",
|
||||
// "sk_SK" => "Slovak (Slovakia)",
|
||||
// "sk" => "Slovak",
|
||||
// "sl_SI" => "Slovenian (Slovenia)",
|
||||
// "sl" => "Slovenian",
|
||||
// "xog_UG" => "Soga (Uganda)",
|
||||
// "xog" => "Soga",
|
||||
// "so_DJ" => "Somali (Djibouti)",
|
||||
// "so_ET" => "Somali (Ethiopia)",
|
||||
// "so_KE" => "Somali (Kenya)",
|
||||
// "so_SO" => "Somali (Somalia)",
|
||||
// "so" => "Somali",
|
||||
// "es_AR" => "Spanish (Argentina)",
|
||||
// "es_BO" => "Spanish (Bolivia)",
|
||||
// "es_CL" => "Spanish (Chile)",
|
||||
// "es_CO" => "Spanish (Colombia)",
|
||||
// "es_CR" => "Spanish (Costa Rica)",
|
||||
// "es_DO" => "Spanish (Dominican Republic)",
|
||||
// "es_EC" => "Spanish (Ecuador)",
|
||||
// "es_SV" => "Spanish (El Salvador)",
|
||||
// "es_GQ" => "Spanish (Equatorial Guinea)",
|
||||
// "es_GT" => "Spanish (Guatemala)",
|
||||
// "es_HN" => "Spanish (Honduras)",
|
||||
// "es_419" => "Spanish (Latin America)",
|
||||
// "es_MX" => "Spanish (Mexico)",
|
||||
// "es_NI" => "Spanish (Nicaragua)",
|
||||
// "es_PA" => "Spanish (Panama)",
|
||||
// "es_PY" => "Spanish (Paraguay)",
|
||||
// "es_PE" => "Spanish (Peru)",
|
||||
// "es_PR" => "Spanish (Puerto Rico)",
|
||||
// "es_ES" => "Spanish (Spain)",
|
||||
// "es_US" => "Spanish (United States)",
|
||||
// "es_UY" => "Spanish (Uruguay)",
|
||||
// "es_VE" => "Spanish (Venezuela)",
|
||||
// "es" => "Spanish",
|
||||
// "sw_KE" => "Swahili (Kenya)",
|
||||
// "sw_TZ" => "Swahili (Tanzania)",
|
||||
// "sw" => "Swahili",
|
||||
// "sv_FI" => "Swedish (Finland)",
|
||||
// "sv_SE" => "Swedish (Sweden)",
|
||||
// "sv" => "Swedish",
|
||||
// "gsw_CH" => "Swiss German (Switzerland)",
|
||||
// "gsw" => "Swiss German",
|
||||
// "shi_Latn" => "Tachelhit (Latin)",
|
||||
// "shi_Latn_MA" => "Tachelhit (Latin, Morocco)",
|
||||
// "shi_Tfng" => "Tachelhit (Tifinagh)",
|
||||
// "shi_Tfng_MA" => "Tachelhit (Tifinagh, Morocco)",
|
||||
// "shi" => "Tachelhit",
|
||||
// "dav_KE" => "Taita (Kenya)",
|
||||
// "dav" => "Taita",
|
||||
// "ta_IN" => "Tamil (India)",
|
||||
// "ta_LK" => "Tamil (Sri Lanka)",
|
||||
// "ta" => "Tamil",
|
||||
// "te_IN" => "Telugu (India)",
|
||||
// "te" => "Telugu",
|
||||
// "teo_KE" => "Teso (Kenya)",
|
||||
// "teo_UG" => "Teso (Uganda)",
|
||||
// "teo" => "Teso",
|
||||
// "th_TH" => "Thai (Thailand)",
|
||||
// "th" => "Thai",
|
||||
// "bo_CN" => "Tibetan (China)",
|
||||
// "bo_IN" => "Tibetan (India)",
|
||||
// "bo" => "Tibetan",
|
||||
// "ti_ER" => "Tigrinya (Eritrea)",
|
||||
// "ti_ET" => "Tigrinya (Ethiopia)",
|
||||
// "ti" => "Tigrinya",
|
||||
// "to_TO" => "Tonga (Tonga)",
|
||||
// "to" => "Tonga",
|
||||
// "tr_TR" => "Turkish (Turkey)",
|
||||
// "tr" => "Turkish",
|
||||
// "uk_UA" => "Ukrainian (Ukraine)",
|
||||
// "uk" => "Ukrainian",
|
||||
// "ur_IN" => "Urdu (India)",
|
||||
// "ur_PK" => "Urdu (Pakistan)",
|
||||
// "ur" => "Urdu",
|
||||
// "uz_Arab" => "Uzbek (Arabic)",
|
||||
// "uz_Arab_AF" => "Uzbek (Arabic, Afghanistan)",
|
||||
// "uz_Cyrl" => "Uzbek (Cyrillic)",
|
||||
// "uz_Cyrl_UZ" => "Uzbek (Cyrillic, Uzbekistan)",
|
||||
// "uz_Latn" => "Uzbek (Latin)",
|
||||
// "uz_Latn_UZ" => "Uzbek (Latin, Uzbekistan)",
|
||||
// "uz" => "Uzbek",
|
||||
// "vi_VN" => "Vietnamese (Vietnam)",
|
||||
// "vi" => "Vietnamese",
|
||||
// "vun_TZ" => "Vunjo (Tanzania)",
|
||||
// "vun" => "Vunjo",
|
||||
// "cy_GB" => "Welsh (United Kingdom)",
|
||||
// "cy" => "Welsh",
|
||||
// "yo_NG" => "Yoruba (Nigeria)",
|
||||
// "yo" => "Yoruba",
|
||||
// "zu_ZA" => "Zulu (South Africa)",
|
||||
// "zu" => "Zulu"
|
||||
],
|
||||
|
||||
'view_namespaces' => [
|
||||
'buttons' => [
|
||||
'crud::buttons', // falls back to 'resources/views/vendor/backpack/crud/buttons'
|
||||
],
|
||||
'columns' => [
|
||||
'crud::columns', // falls back to 'resources/views/vendor/backpack/crud/columns'
|
||||
],
|
||||
'fields' => [
|
||||
'crud::fields', // falls back to 'resources/views/vendor/backpack/crud/fields'
|
||||
],
|
||||
'filters' => [
|
||||
'crud::filters', // falls back to 'resources/views/vendor/backpack/crud/filters'
|
||||
],
|
||||
],
|
||||
// the uploaders for the `withFiles` macro
|
||||
'uploaders' => [
|
||||
'withFiles' => [
|
||||
'image' => \Backpack\CRUD\app\Library\Uploaders\SingleBase64Image::class,
|
||||
'upload' => \Backpack\CRUD\app\Library\Uploaders\SingleFile::class,
|
||||
'upload_multiple' => \Backpack\CRUD\app\Library\Uploaders\MultipleFiles::class,
|
||||
],
|
||||
],
|
||||
|
||||
'file_name_generator' => \Backpack\CRUD\app\Library\Uploaders\Support\FileNameGenerator::class,
|
||||
|
||||
];
|
44
config/backpack/operations/create.php
Normal file
44
config/backpack/operations/create.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Configurations for Backpack's CreateOperation.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||||
*/
|
||||
|
||||
return [
|
||||
// Define the size/looks of the content div for all CRUDs
|
||||
// To override per view use $this->crud->setCreateContentClass('class-string')
|
||||
'contentClass' => 'col-md-12 bold-labels',
|
||||
|
||||
// When using tabbed forms (create & update), what kind of tabs would you like?
|
||||
'tabsType' => 'horizontal', //options: horizontal, vertical
|
||||
|
||||
// How would you like the validation errors to be shown?
|
||||
'groupedErrors' => true,
|
||||
'inlineErrors' => true,
|
||||
|
||||
// when the page loads, put the cursor on the first input?
|
||||
'autoFocusOnFirstField' => true,
|
||||
|
||||
// Where do you want to redirect the user by default, save?
|
||||
// options: save_and_back, save_and_edit, save_and_new
|
||||
'defaultSaveAction' => 'save_and_back',
|
||||
|
||||
// When the user chooses "save and back" or "save and new", show a bubble
|
||||
// for the fact that the default save action has been changed?
|
||||
'showSaveActionChange' => true, //options: true, false
|
||||
|
||||
// Should we show a cancel button to the user?
|
||||
'showCancelButton' => true,
|
||||
|
||||
// Should we warn the user before leaving the page with unsaved changes?
|
||||
// NOTE: this works by removing all fields from the form data serialization where field name starts with "_" (underscore). Usualy backpack internal attributes.
|
||||
// if you have fields that start with an underscore, you need to change the field name, or this functionality wont detect changes in that field.
|
||||
'warnBeforeLeaving' => false,
|
||||
|
||||
// Before saving the entry, how would you like the request to be stripped?
|
||||
// - false - use Backpack's default (ONLY save inputs that have fields)
|
||||
// - invokable class - custom stripping (the return should be an array with input names)
|
||||
// 'strippedRequest' => App\Http\Requests\StripBackpackRequest::class,
|
||||
];
|
39
config/backpack/operations/form.php
Normal file
39
config/backpack/operations/form.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Default configurations for custom form operations.
|
||||
*/
|
||||
|
||||
return [
|
||||
// Define the size/looks of the content div for all CRUDs
|
||||
// To override per view use $this->crud->setCreateContentClass('class-string')
|
||||
'contentClass' => 'col-md-12 bold-labels',
|
||||
|
||||
// When using tabbed forms (create & update), what kind of tabs would you like?
|
||||
'tabsType' => 'horizontal', //options: horizontal, vertical
|
||||
|
||||
// How would you like the validation errors to be shown?
|
||||
'groupedErrors' => true,
|
||||
'inlineErrors' => true,
|
||||
|
||||
// when the page loads, put the cursor on the first input?
|
||||
'autoFocusOnFirstField' => true,
|
||||
|
||||
// Where do you want to redirect the user by default, save?
|
||||
'defaultSaveAction' => 'save_and_back',
|
||||
|
||||
// When the user chooses "save and back" or "save and new", show a bubble
|
||||
// for the fact that the default save action has been changed?
|
||||
'showSaveActionChange' => false, //options: true, false
|
||||
|
||||
// Should we show a cancel button to the user?
|
||||
'showCancelButton' => true,
|
||||
|
||||
// Should we warn a user before leaving the page with unsaved changes?
|
||||
'warnBeforeLeaving' => false,
|
||||
|
||||
// Before saving the entry, how would you like the request to be stripped?
|
||||
// - false - use Backpack's default (ONLY save inputs that have fields)
|
||||
// - invokable class - custom stripping (the return should be an array with input names)
|
||||
// 'strippedRequest' => App\Http\Requests\StripBackpackRequest::class,
|
||||
];
|
84
config/backpack/operations/list.php
Normal file
84
config/backpack/operations/list.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Configurations for Backpack's ListOperation.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||||
*/
|
||||
|
||||
return [
|
||||
// Define the size/looks of the content div for all CRUDs
|
||||
// To override per view use $this->crud->setListContentClass('class-string')
|
||||
'contentClass' => 'col-md-12',
|
||||
|
||||
// enable the datatables-responsive plugin, which hides columns if they don't fit?
|
||||
// if not, a horizontal scrollbar will be shown instead
|
||||
'responsiveTable' => true,
|
||||
|
||||
// stores pagination and filters in localStorage for two hours
|
||||
// whenever the user tries to see that page, backpack loads the previous pagination and filtration
|
||||
'persistentTable' => true,
|
||||
|
||||
// show search bar in the top-right corner?
|
||||
'searchableTable' => true,
|
||||
|
||||
// how much time should the system wait before triggering the search function after the user stops typing?
|
||||
'searchDelay' => 400,
|
||||
|
||||
// the time the table will be persisted in minutes
|
||||
// after this the table info is cleared from localStorage.
|
||||
// use false to never force localStorage clear. (default)
|
||||
// keep in mind: User can clear their localStorage whenever they want.
|
||||
|
||||
'persistentTableDuration' => false,
|
||||
|
||||
// How many items should be shown by default by the Datatable?
|
||||
// This value can be overwritten on a specific CRUD by calling
|
||||
// $this->crud->setDefaultPageLength(50);
|
||||
'defaultPageLength' => 10,
|
||||
|
||||
// A 1D array of options which will be used for both the displayed option and the value, or
|
||||
// A 2D array in which the first array is used to define the value options and the second array the displayed options
|
||||
// If a 2D array is used, strings in the right hand array will be automatically run through trans()
|
||||
'pageLengthMenu' => [[10, 25, 50, 100, -1], [10, 25, 50, 100, 'backpack::crud.all']],
|
||||
|
||||
// How important is it for the action buttons to be visible?
|
||||
// - 0 - most important
|
||||
// - 1 - as important as bulk buttons
|
||||
// - 2-3 - more important than the rest of the columns
|
||||
// - 4 - less important than most columns
|
||||
'actionsColumnPriority' => 1,
|
||||
|
||||
// Nest action buttons within a dropdown in actions column
|
||||
'lineButtonsAsDropdown' => false,
|
||||
|
||||
// What is the minimum actions for the dropdown to be created
|
||||
// Example: when minimum to drop is «2», any row with less than «2» action buttons
|
||||
// will not create a dropdown, but will show the buttons inline
|
||||
'lineButtonsAsDropdownMinimum' => 1,
|
||||
|
||||
// Force «X» actions to be shown inline before the dropdown is created
|
||||
// Example: when setting this to «2», the first «2» actions will be shown inline
|
||||
// and the rest will be moved to the dropdown
|
||||
'lineButtonsAsDropdownShowBefore' => 0,
|
||||
|
||||
// Show a "Reset" button next to the List operation subheading
|
||||
// (Showing 1 to 25 of 9999 entries. Reset)
|
||||
// that allows the user to erase local storage for that datatable,
|
||||
// thus clearing any searching, filtering or pagination that has been
|
||||
// remembered and persisted using persistentTable
|
||||
'resetButton' => true,
|
||||
|
||||
// The query operator that is used to search on the table.
|
||||
// If you are using PostgreSQL you might want to change
|
||||
// to `ilike` for case-insensitive search
|
||||
'searchOperator' => 'like',
|
||||
|
||||
// Display the `Showing X of XX entries (filtered from X entries)`?
|
||||
// Setting this to false will improve performance on big datasets.
|
||||
'showEntryCount' => true,
|
||||
|
||||
// when list operation load the information from database, should Backpack eager load the relations ?
|
||||
// this setting is enabled by default as it reduces the amount of queries required to load the page
|
||||
'eagerLoadRelationships' => true,
|
||||
];
|
16
config/backpack/operations/reorder.php
Normal file
16
config/backpack/operations/reorder.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Configurations for Backpack ReorderOperation.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-reorder
|
||||
*/
|
||||
|
||||
return [
|
||||
// Define the size/looks of the content div for all CRUDs
|
||||
// To override per Controller use $this->crud->setReorderContentClass('class-string')
|
||||
'contentClass' => 'col-md-12 col-md-offset-2',
|
||||
|
||||
// should the content of the reorder label be escaped?
|
||||
'escaped' => false,
|
||||
];
|
29
config/backpack/operations/show.php
Normal file
29
config/backpack/operations/show.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Configurations for Backpack's ShowOperation.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-show
|
||||
*/
|
||||
|
||||
return [
|
||||
// Define the size/looks of the content div for all CRUDs
|
||||
// To override per Controller use $this->crud->setShowContentClass('class-string')
|
||||
'contentClass' => 'col-md-12',
|
||||
|
||||
// Automatically add all columns from the db table?
|
||||
'setFromDb' => true,
|
||||
|
||||
// Automatically add created_at and updated_at columns, if model has timestamps?
|
||||
'timestamps' => true,
|
||||
|
||||
// If model has SoftDeletes, allow the admin to access the Show page for
|
||||
// soft deleted items & add a deleted_at column to ShowOperation?
|
||||
'softDeletes' => false,
|
||||
|
||||
// Enable to group columns in tabs
|
||||
'tabsEnabled' => false,
|
||||
|
||||
// When using tabbed forms (create & update), what kind of tabs would you like?
|
||||
'tabsType' => 'horizontal', //options: horizontal, vertical
|
||||
];
|
53
config/backpack/operations/update.php
Normal file
53
config/backpack/operations/update.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Configurations for Backpack's UpdateOperation.
|
||||
*
|
||||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||||
*/
|
||||
|
||||
return [
|
||||
// Define the size/looks of the content div for all CRUDs
|
||||
// To override per view use $this->crud->setEditContentClass('class-string')
|
||||
'contentClass' => 'col-md-12 bold-labels',
|
||||
|
||||
// When using tabbed forms (create & update), what kind of tabs would you like?
|
||||
'tabsType' => 'horizontal', //options: horizontal, vertical
|
||||
|
||||
// How would you like the validation errors to be shown?
|
||||
'groupedErrors' => true,
|
||||
'inlineErrors' => true,
|
||||
|
||||
// when the page loads, put the cursor on the first input?
|
||||
'autoFocusOnFirstField' => true,
|
||||
|
||||
// Where do you want to redirect the user by default, save?
|
||||
// options: save_and_back, save_and_edit, save_and_new
|
||||
'defaultSaveAction' => 'save_and_back',
|
||||
|
||||
// When the user chooses "save and back" or "save and new", show a bubble
|
||||
// for the fact that the default save action has been changed?
|
||||
'showSaveActionChange' => true, //options: true, false
|
||||
|
||||
// Should we show a cancel button to the user?
|
||||
'showCancelButton' => true,
|
||||
|
||||
// Should we show the delete button on the edit form?
|
||||
'showDeleteButton' => false,
|
||||
|
||||
// Should we warn a user before leaving the page with unsaved changes?
|
||||
'warnBeforeLeaving' => false,
|
||||
|
||||
// when viewing the update form of an entry in a language that's not translated should Backpack show a notice
|
||||
// that allows the user to fill the form from another language?
|
||||
'showTranslationNotice' => true,
|
||||
|
||||
// when loading an update form, should Backpack eager load the relationship information from database?
|
||||
// this is generally a good thing to enable, as it helps to reduce the number of queries.
|
||||
'eagerLoadRelationships' => false,
|
||||
|
||||
// Before saving the entry, how would you like the request to be stripped?
|
||||
// - false - use Backpack's default (ONLY save inputs that have fields)
|
||||
// - invokable class - custom stripping (the return should be an array with input names)
|
||||
// 'strippedRequest' => App\Http\Requests\StripBackpackRequest::class,
|
||||
];
|
174
config/backpack/theme-tabler.php
Normal file
174
config/backpack/theme-tabler.php
Normal file
@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Theme Configuration Values
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The file provides extra configs on top of config/backpack/ui.php
|
||||
|
|
||||
| Any value set here will override the ones defined in
|
||||
| config/backpack/ui.php when this theme is in use.
|
||||
|
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1st layer of customization
|
||||
*
|
||||
* Simple pick a layout and let Backpack decide the best look for it.
|
||||
* No extra step is required.
|
||||
*
|
||||
* Possible values: horizontal, horizontal_dark, horizontal_overlap, vertical,
|
||||
* vertical_dark, vertical_transparent (legacy theme), right_vertical, right_vertical_dark, right_vertical_transparent
|
||||
*/
|
||||
'layout' => 'vertical',
|
||||
|
||||
/**
|
||||
* Pick a login page layout.
|
||||
* Possible values: default, illustration, cover
|
||||
*/
|
||||
'auth_layout' => 'default', // default, illustration, cover
|
||||
|
||||
/**
|
||||
* Here you can easily load your own extra css styles.
|
||||
* Note: if you want to customize the style to create your own custom skin colors:
|
||||
* - make a copy of the file "vendor/backpack/theme-tabler/resources/assets/css/colors.css" into your project
|
||||
* - adjust colors variables as you wish
|
||||
* - replace "base_path('vendor/backpack/theme-tabler/resources/assets/css/colors.css')," with the path to the file created above
|
||||
* - boom!
|
||||
*/
|
||||
'styles' => [
|
||||
base_path('vendor/backpack/theme-tabler/resources/assets/css/color-adjustments.css'),
|
||||
base_path('vendor/backpack/theme-tabler/resources/assets/css/colors.css'),
|
||||
],
|
||||
|
||||
/**
|
||||
* 2nd Layer of customization
|
||||
*
|
||||
* If you need to further customize the way your panel looks,
|
||||
* these options will help you achieve that.
|
||||
*/
|
||||
'options' => [
|
||||
/**
|
||||
* The available color modes.
|
||||
*/
|
||||
'colorModes' => [
|
||||
'system' => 'la-desktop',
|
||||
'light' => 'la-sun',
|
||||
'dark' => 'la-moon',
|
||||
],
|
||||
|
||||
/**
|
||||
* The color mode used by default.
|
||||
*/
|
||||
'defaultColorMode' => 'light', // system, light, dark
|
||||
|
||||
/**
|
||||
* When true, a switch is displayed to let admins choose their favorite theme mode.
|
||||
* When false, the theme will only use the "defaultColorMode" set above.
|
||||
* In case "defaultColorMode" is null, system is the default.
|
||||
*/
|
||||
'showColorModeSwitcher' => true,
|
||||
|
||||
/**
|
||||
* Fix the top-header component (present in "vertical_transparent") and the menu when the layout type is set as "horizontal".
|
||||
* This value is skipped when the layout type is horizontal-overlap, using false as default.
|
||||
*/
|
||||
'useStickyHeader' => false,
|
||||
|
||||
/**
|
||||
* When true, the content area will take the whole screen width.
|
||||
*/
|
||||
'useFluidContainers' => false,
|
||||
|
||||
/**
|
||||
* When true, the sidebar content for vertical layouts will not scroll with the rest of the content.
|
||||
*/
|
||||
'sidebarFixed' => false,
|
||||
|
||||
/**
|
||||
* When true, horizontal layouts will display the classic top bar on top to free some space when multiple nav items are used.
|
||||
*/
|
||||
'doubleTopBarInHorizontalLayouts' => false,
|
||||
|
||||
/**
|
||||
* When true, the password input will have a toggle button to show/hide the password.
|
||||
*/
|
||||
'showPasswordVisibilityToggler' => false,
|
||||
],
|
||||
|
||||
/**
|
||||
* 3rd Layer of customization
|
||||
*
|
||||
* In case the first two steps were not enough, here you have full control over
|
||||
* the classes that make up the look of your panel.
|
||||
*/
|
||||
'classes' => [
|
||||
/**
|
||||
* Use this to pass classes to the <body> HTML element, on all pages.
|
||||
*/
|
||||
'body' => null,
|
||||
|
||||
/**
|
||||
* For background colors use:
|
||||
* bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info, bg-blue, bg-light-blue,
|
||||
* bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white.
|
||||
*
|
||||
* For links to be visible on different background colors use: "navbar-dark", "navbar-light".
|
||||
*
|
||||
*/
|
||||
'topHeader' => null,
|
||||
|
||||
/**
|
||||
* Applies only for Vertical Menu Layout
|
||||
* For standard sidebar look (transparent):
|
||||
* - Remove "navbar-dark/light"
|
||||
* - Remove "navbar-light/dark" from 'classes.topHeader' and instead use "bg-light"
|
||||
* You can also add a background class like bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success,
|
||||
* bg-info, bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan
|
||||
*/
|
||||
'sidebar' => null,
|
||||
|
||||
/**
|
||||
* Used in the top container menu when the layout is of horizontal type.
|
||||
*/
|
||||
'menuHorizontalContainer' => null,
|
||||
|
||||
/**
|
||||
* Used in the top menu content when the layout is of horizontal type.
|
||||
*/
|
||||
'menuHorizontalContent' => null,
|
||||
|
||||
/**
|
||||
* Make transparent with footer-transparent.
|
||||
* Hide it with d-none.
|
||||
*
|
||||
* Change background color with bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info,
|
||||
* bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white.
|
||||
*/
|
||||
'footer' => null,
|
||||
|
||||
/**
|
||||
* Use this to pass classes to the table displayed in List Operation
|
||||
* It defaults to: "table table-striped table-hover nowrap rounded card-table table-vcenter card-table shadow-xs border-xs"
|
||||
*/
|
||||
'table' => null,
|
||||
|
||||
/**
|
||||
* Use this to pass classes to the table wrapper component displayed in List Operation
|
||||
*/
|
||||
'tableWrapper' => null,
|
||||
],
|
||||
|
||||
/**
|
||||
* 4th Layer of customization
|
||||
*
|
||||
* Alright, if nothing so far met your need, then you still have an easy way to build
|
||||
* a custom layout using the already existing components of this theme.
|
||||
*
|
||||
* 1. Create a new blade file in resources/views/layouts/your-custom-layout.blade.php
|
||||
* 2. Replace the value of layout on this file with "your-custom-layout"
|
||||
* 3. Customize the blade and place components such as sidebar, header, top-bar, where you need them!
|
||||
*/
|
||||
];
|
147
config/backpack/ui.php
Normal file
147
config/backpack/ui.php
Normal file
@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
// IMPORTANT NOTE: The configurations here get overridden by theme config files.
|
||||
//
|
||||
// Eg. If you're using theme-tabler and config/backpack/theme-tabler.php
|
||||
// has "breadcrumbs" set as false, then THAT value will be used instead
|
||||
// of the value in this file.
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Theme (User Interface)
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
// Change the view namespace in order to load a different theme than the one Backpack provides.
|
||||
// You can create child themes yourself, by creating a view folder anywhere in your resources/views
|
||||
// and choosing that view_namespace instead of the default one. Backpack will load a file from there
|
||||
// if it exists, otherwise it will load it from the fallback namespace.
|
||||
|
||||
'view_namespace' => 'backpack.theme-tabler::',
|
||||
'view_namespace_fallback' => 'backpack.theme-tabler::',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Look & feel customizations
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| To make the UI feel yours.
|
||||
|
|
||||
| Note that values set here might be overridden by theme config files
|
||||
| (eg. config/backpack/theme-tabler.php) when that theme is in use.
|
||||
|
|
||||
*/
|
||||
|
||||
// Date & Datetime Format Syntax: https://carbon.nesbot.com/docs/#api-localization
|
||||
'default_date_format' => 'D MMM YYYY',
|
||||
'default_datetime_format' => 'D MMM YYYY, HH:mm',
|
||||
|
||||
// Direction, according to language
|
||||
// (left-to-right vs right-to-left)
|
||||
'html_direction' => 'ltr',
|
||||
|
||||
// ----
|
||||
// HEAD
|
||||
// ----
|
||||
|
||||
// Project name - shown in the window title
|
||||
'project_name' => '桃園衛生局活動網站管理',
|
||||
|
||||
// Content of the HTML meta robots tag to prevent indexing and link following
|
||||
'meta_robots_content' => 'noindex, nofollow',
|
||||
|
||||
// ------
|
||||
// HEADER
|
||||
// ------
|
||||
|
||||
// When clicking on the admin panel's top-left logo/name,
|
||||
// where should the user be redirected?
|
||||
// The string below will be passed through the url() helper.
|
||||
// - default: '' (project root)
|
||||
// - alternative: 'admin' (the admin's dashboard)
|
||||
'home_link' => '',
|
||||
|
||||
// Menu logo. You can replace this with an <img> tag if you have a logo.
|
||||
'project_logo' => '<b>桃園衛生局</b>活動網站管理',
|
||||
|
||||
// Show / hide breadcrumbs on admin panel pages.
|
||||
'breadcrumbs' => true,
|
||||
|
||||
// ------
|
||||
// FOOTER
|
||||
// ------
|
||||
|
||||
// Developer or company name. Shown in footer.
|
||||
'developer_name' => false,
|
||||
|
||||
// Developer website. Link in footer. Type false if you want to hide it.
|
||||
'developer_link' => false,
|
||||
|
||||
// Show powered by Laravel Backpack in the footer? true/false
|
||||
'show_powered_by' => false,
|
||||
|
||||
// ---------
|
||||
// DASHBOARD
|
||||
// ---------
|
||||
|
||||
// Show "Getting Started with Backpack" info block?
|
||||
'show_getting_started' => env('APP_ENV') == 'local',
|
||||
|
||||
// -------------
|
||||
// GLOBAL STYLES
|
||||
// -------------
|
||||
|
||||
// CSS files that are loaded in all pages, using Laravel's asset() helper
|
||||
'styles' => [
|
||||
// 'styles/example.css',
|
||||
// 'https://some-cdn.com/example.css',
|
||||
],
|
||||
|
||||
// CSS files that are loaded in all pages, using Laravel's mix() helper
|
||||
'mix_styles' => [ // file_path => manifest_directory_path
|
||||
// 'css/app.css' => '',
|
||||
],
|
||||
|
||||
// CSS files that are loaded in all pages, using Laravel's @vite() helper
|
||||
// Please note that support for Vite was added in Laravel 9.19. Earlier versions are not able to use this feature.
|
||||
'vite_styles' => [ // resource file_path
|
||||
// 'resources/css/app.css',
|
||||
],
|
||||
|
||||
// --------------
|
||||
// GLOBAL SCRIPTS
|
||||
// --------------
|
||||
|
||||
// JS files that are loaded in all pages, using Laravel's asset() helper
|
||||
'scripts' => [
|
||||
// 'js/example.js',
|
||||
// 'https://cdn.jsdelivr.net/npm/vue@2.4.4/dist/vue.min.js',
|
||||
// 'https://cdn.jsdelivr.net/npm/react@16/umd/react.production.min.js',
|
||||
// 'https://cdn.jsdelivr.net/npm/react-dom@16/umd/react-dom.production.min.js',
|
||||
],
|
||||
|
||||
// JS files that are loaded in all pages, using Laravel's mix() helper
|
||||
'mix_scripts' => [ // file_path => manifest_directory_path
|
||||
// 'js/app.js' => '',
|
||||
],
|
||||
|
||||
// JS files that are loaded in all pages, using Laravel's @vite() helper
|
||||
'vite_scripts' => [ // resource file_path
|
||||
// 'resources/js/app.js',
|
||||
],
|
||||
|
||||
'classes' => [
|
||||
/**
|
||||
* Use this as fallback config for themes to pass classes to the table displayed in List Operation
|
||||
* It defaults to: "table table-striped table-hover nowrap rounded card-table table-vcenter card-table shadow-xs border-xs".
|
||||
*/
|
||||
'table' => null,
|
||||
|
||||
/**
|
||||
* Use this as fallback config for themes to pass classes to the table wrapper component displayed in List Operation.
|
||||
*/
|
||||
'tableWrapper' => null,
|
||||
],
|
||||
|
||||
];
|
71
config/broadcasting.php
Normal file
71
config/broadcasting.php
Normal file
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Broadcaster
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default broadcaster that will be used by the
|
||||
| framework when an event needs to be broadcast. You may set this to
|
||||
| any of the connections defined in the "connections" array below.
|
||||
|
|
||||
| Supported: "pusher", "ably", "redis", "log", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('BROADCAST_DRIVER', 'null'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Broadcast Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define all of the broadcast connections that will be used
|
||||
| to broadcast events to other systems or over websockets. Samples of
|
||||
| each available type of connection are provided inside this array.
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'pusher' => [
|
||||
'driver' => 'pusher',
|
||||
'key' => env('PUSHER_APP_KEY'),
|
||||
'secret' => env('PUSHER_APP_SECRET'),
|
||||
'app_id' => env('PUSHER_APP_ID'),
|
||||
'options' => [
|
||||
'cluster' => env('PUSHER_APP_CLUSTER'),
|
||||
'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com',
|
||||
'port' => env('PUSHER_PORT', 443),
|
||||
'scheme' => env('PUSHER_SCHEME', 'https'),
|
||||
'encrypted' => true,
|
||||
'useTLS' => env('PUSHER_SCHEME', 'https') === 'https',
|
||||
],
|
||||
'client_options' => [
|
||||
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
|
||||
],
|
||||
],
|
||||
|
||||
'ably' => [
|
||||
'driver' => 'ably',
|
||||
'key' => env('ABLY_KEY'),
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => 'default',
|
||||
],
|
||||
|
||||
'log' => [
|
||||
'driver' => 'log',
|
||||
],
|
||||
|
||||
'null' => [
|
||||
'driver' => 'null',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
111
config/cache.php
Normal file
111
config/cache.php
Normal file
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default cache connection that gets used while
|
||||
| using this caching library. This connection is used when another is
|
||||
| not explicitly specified when executing a given caching function.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('CACHE_DRIVER', 'file'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Stores
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define all of the cache "stores" for your application as
|
||||
| well as their drivers. You may even define multiple stores for the
|
||||
| same cache driver to group types of items stored in your caches.
|
||||
|
|
||||
| Supported drivers: "apc", "array", "database", "file",
|
||||
| "memcached", "redis", "dynamodb", "octane", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'stores' => [
|
||||
|
||||
'apc' => [
|
||||
'driver' => 'apc',
|
||||
],
|
||||
|
||||
'array' => [
|
||||
'driver' => 'array',
|
||||
'serialize' => false,
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'table' => 'cache',
|
||||
'connection' => null,
|
||||
'lock_connection' => null,
|
||||
],
|
||||
|
||||
'file' => [
|
||||
'driver' => 'file',
|
||||
'path' => storage_path('framework/cache/data'),
|
||||
'lock_path' => storage_path('framework/cache/data'),
|
||||
],
|
||||
|
||||
'memcached' => [
|
||||
'driver' => 'memcached',
|
||||
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
|
||||
'sasl' => [
|
||||
env('MEMCACHED_USERNAME'),
|
||||
env('MEMCACHED_PASSWORD'),
|
||||
],
|
||||
'options' => [
|
||||
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
|
||||
],
|
||||
'servers' => [
|
||||
[
|
||||
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
||||
'port' => env('MEMCACHED_PORT', 11211),
|
||||
'weight' => 100,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => 'cache',
|
||||
'lock_connection' => 'default',
|
||||
],
|
||||
|
||||
'dynamodb' => [
|
||||
'driver' => 'dynamodb',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
|
||||
'endpoint' => env('DYNAMODB_ENDPOINT'),
|
||||
],
|
||||
|
||||
'octane' => [
|
||||
'driver' => 'octane',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Key Prefix
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing the APC, database, memcached, Redis, or DynamoDB cache
|
||||
| stores there might be other applications using the same cache. For
|
||||
| that reason, you may prefix every cache key to avoid collisions.
|
||||
|
|
||||
*/
|
||||
|
||||
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
|
||||
|
||||
];
|
34
config/cors.php
Normal file
34
config/cors.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cross-Origin Resource Sharing (CORS) Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure your settings for cross-origin resource sharing
|
||||
| or "CORS". This determines what cross-origin operations may execute
|
||||
| in web browsers. You are free to adjust these settings as needed.
|
||||
|
|
||||
| To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
|
||||
|
|
||||
*/
|
||||
|
||||
'paths' => ['api/*', 'sanctum/csrf-cookie'],
|
||||
|
||||
'allowed_methods' => ['*'],
|
||||
|
||||
'allowed_origins' => ['*'],
|
||||
|
||||
'allowed_origins_patterns' => [],
|
||||
|
||||
'allowed_headers' => ['*'],
|
||||
|
||||
'exposed_headers' => [],
|
||||
|
||||
'max_age' => 0,
|
||||
|
||||
'supports_credentials' => false,
|
||||
|
||||
];
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user