From 6dfe3e067792663429c001a2e69e4ac4927f1e10 Mon Sep 17 00:00:00 2001 From: ericli1018 Date: Fri, 13 Jun 2025 12:24:35 +0800 Subject: [PATCH] release --- .../Controllers/Admin/EventCrudController.php | 15 ++- .../Admin/HomeCarouselCrudController.php | 33 ++++- .../Controllers/Admin/NewsCrudController.php | 12 +- .../Admin/ProductCrudController.php | 63 ++++++++-- ...pportDistributionPartnerCrudController.php | 3 +- .../SupportEcosystemPartnerCrudController.php | 3 +- .../Controllers/Admin/UserCrudController.php | 20 +++ app/Http/Controllers/EventsController.php | 2 +- app/Http/Controllers/HomeController.php | 54 +++++++- app/Http/Controllers/LoginController.php | 56 +++++++++ app/Http/Controllers/LogoutController.php | 24 ++++ app/Http/Controllers/ProductsController.php | 13 +- app/Http/Controllers/RegisterController.php | 36 ++++++ .../SupportDistributionPartnersController.php | 2 +- .../SupportEcosystemPartnersController.php | 13 +- .../SupportSalesInquiryController.php | 38 +++++- .../SupportTechnicalController.php | 25 +++- app/Http/Kernel.php | 1 + app/Http/Middleware/AddCspNonceToScripts.php | 85 +++++++++++++ app/Http/Requests/LoginRequest.php | 71 +++++++++++ .../Requests/ProductApplicationRequest.php | 4 +- app/Http/Requests/ProductCatalogRequest.php | 2 +- app/Http/Requests/ProductRequest.php | 2 +- app/Http/Requests/RegisterRequest.php | 33 +++++ app/Http/Requests/SupportSaleRequest.php | 3 +- app/Http/Requests/SupportTechnicalRequest.php | 3 +- app/Mail/CustomerServiceMail.php | 55 ++++++++ app/Mail/SalesInquiryMail.php | 55 ++++++++ app/Mail/SubscripeionMail.php | 55 ++++++++ app/Models/Event.php | 1 + app/Models/HomeCarousel.php | 24 ++++ app/Models/Product.php | 7 +- app/Models/User.php | 4 + app/Support/MyCustomPolicy.php | 43 +++++++ composer.json | 1 + composer.lock | 88 ++++++++++++- config/backpack/theme-tabler.php | 4 +- config/csp.php | 35 ++++++ .../2024_02_29_020350_create_events_table.php | 1 + ...3_05_010521_create_home_carousel_table.php | 1 + ...te_product_product_related_pivot_table.php | 33 +++++ ...4_03_13_074737_add_info_to_users_table.php | 34 +++++ lang/en/backend.php | 11 +- lang/zh-TW/backend.php | 118 +++++++++++++++++- public/assets/css/banner.css | 76 +++++------ public/assets/css/footer.css | 2 +- public/assets/css/header-index.css | 11 +- public/assets/css/header.css | 12 +- public/assets/css/index.css | 13 +- public/assets/img/index/about-img.png | Bin 286642 -> 301612 bytes public/assets/img/index/about-img2.png | Bin 0 -> 286642 bytes public/assets/img/index/about-img3.png | Bin 0 -> 268450 bytes public/assets/img/logo.png | Bin 7098 -> 5973 bytes public/assets/img/logo2.png | Bin 8010 -> 7240 bytes resources/views/about.blade.php | 15 +-- resources/views/auth/login.blade.php | 56 +++++++++ .../views/components/heading_navbar.blade.php | 10 +- resources/views/events.blade.php | 8 +- resources/views/events_detail.blade.php | 14 ++- resources/views/home.blade.php | 41 ++++-- resources/views/layouts/master.blade.php | 32 +++-- .../views/mail/customer_service.blade.php | 5 + resources/views/mail/sales_inquery.blade.php | 5 + .../views/mail/subscribe_inquery.blade.php | 5 + resources/views/news.blade.php | 6 +- resources/views/news_detail.blade.php | 13 +- resources/views/products.blade.php | 13 +- resources/views/products_detail.blade.php | 114 ++++++----------- .../support-distribution-partners.blade.php | 12 +- .../support-ecosystem-partners.blade.php | 12 +- .../views/support-sales-inquiry.blade.php | 14 ++- resources/views/support-technical.blade.php | 16 ++- .../backpack/ui/inc/menu_items.blade.php | 19 ++- routes/web.php | 40 +++++- 74 files changed, 1497 insertions(+), 253 deletions(-) create mode 100644 app/Http/Controllers/LoginController.php create mode 100644 app/Http/Controllers/LogoutController.php create mode 100644 app/Http/Controllers/RegisterController.php create mode 100644 app/Http/Middleware/AddCspNonceToScripts.php create mode 100644 app/Http/Requests/LoginRequest.php create mode 100644 app/Http/Requests/RegisterRequest.php create mode 100644 app/Mail/CustomerServiceMail.php create mode 100644 app/Mail/SalesInquiryMail.php create mode 100644 app/Mail/SubscripeionMail.php create mode 100644 app/Support/MyCustomPolicy.php create mode 100644 config/csp.php create mode 100644 database/migrations/2024_03_13_051830_create_product_product_related_pivot_table.php create mode 100644 database/migrations/2024_03_13_074737_add_info_to_users_table.php create mode 100644 public/assets/img/index/about-img2.png create mode 100644 public/assets/img/index/about-img3.png create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/mail/customer_service.blade.php create mode 100644 resources/views/mail/sales_inquery.blade.php create mode 100644 resources/views/mail/subscribe_inquery.blade.php diff --git a/app/Http/Controllers/Admin/EventCrudController.php b/app/Http/Controllers/Admin/EventCrudController.php index cfe4fc0..0746e99 100644 --- a/app/Http/Controllers/Admin/EventCrudController.php +++ b/app/Http/Controllers/Admin/EventCrudController.php @@ -82,11 +82,13 @@ class EventCrudController extends CrudController 'label' => trans('backend.columnName.post_at'), 'type' => 'datetime', 'format' => 'YYYY/MM/DD HH:mm:SS', + 'default' => \Carbon\Carbon::now(), ], [ 'name' => 'is_front_show', 'label' => trans('backend.columnName.is_front_show'), - 'type' => 'boolean' + 'type' => 'boolean', + 'default' => true, ], [ 'name' => 'title', @@ -104,6 +106,13 @@ class EventCrudController extends CrudController 'showSingleChoise' => '0', // 0=hidden, 1=show(default) 'showComment' => '0', // 0=hidden, 1=show(default) ], + [ + 'name' => 'event_at', + 'label' => trans('backend.columnName.event_at'), + 'type' => 'datetime', + 'format' => 'YYYY/MM/DD HH:mm:SS', + 'default' => \Carbon\Carbon::now(), + ], [ 'name' => 'venue', 'label' => trans('backend.columnName.venue'), @@ -122,9 +131,9 @@ class EventCrudController extends CrudController 'options' => [ //'selector' => 'textarea.tinymce', //'skin' => 'dick-light', - 'plugins' => 'lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help', + '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' => 'undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link', + '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', ], diff --git a/app/Http/Controllers/Admin/HomeCarouselCrudController.php b/app/Http/Controllers/Admin/HomeCarouselCrudController.php index 5978f83..0d40c5c 100644 --- a/app/Http/Controllers/Admin/HomeCarouselCrudController.php +++ b/app/Http/Controllers/Admin/HomeCarouselCrudController.php @@ -19,7 +19,17 @@ class HomeCarouselCrudController extends CrudController use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; //use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation; - + use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation { destroy as traitDestroy; } + public function destroy($id) + { + //CRUD::hasAccessOrFail('delete'); + if (\App\Models\HomeCarousel::count() <= 7) + { + $this->crud->allowAccess('create'); + } + + return CRUD::delete($id); + } /** * Configure the CrudPanel object. Apply settings to all operations. * @@ -31,6 +41,7 @@ class HomeCarouselCrudController extends CrudController CRUD::setRoute(config('backpack.base.route_prefix') . '/home-carousel'); CRUD::setEntityNameStrings(trans('backend.home_carousel.content.item'), trans('backend.home_carousel.content.items')); + } protected function setupReorderOperation() @@ -51,6 +62,15 @@ class HomeCarouselCrudController extends CrudController $this->crud->orderBy('lft', 'asc')->orderBy('id', 'desc'); } + if (\App\Models\HomeCarousel::count() >= 6) + { + $this->crud->denyAccess('create'); + } + else + { + $this->crud->allowAccess('create'); + } + $this->crud->addColumns([ [ 'name' => 'is_front_show', @@ -96,6 +116,17 @@ class HomeCarouselCrudController extends CrudController 'label' => trans('backend.columnName.link'), 'type' => 'text' ], + [ + 'name' => 'featured_photos', + 'label' => trans('backend.columnName.featured_img'), + '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' => 'photos', 'label' => trans('backend.columnName.cover'), diff --git a/app/Http/Controllers/Admin/NewsCrudController.php b/app/Http/Controllers/Admin/NewsCrudController.php index 671bf70..22ad5a1 100644 --- a/app/Http/Controllers/Admin/NewsCrudController.php +++ b/app/Http/Controllers/Admin/NewsCrudController.php @@ -82,16 +82,20 @@ class NewsCrudController extends CrudController 'label' => trans('backend.columnName.post_at'), 'type' => 'datetime', 'format' => 'YYYY/MM/DD HH:mm:SS', + 'default' => \Carbon\Carbon::now(), ], [ 'name' => 'is_front_show', 'label' => trans('backend.columnName.is_front_show'), - 'type' => 'boolean' + 'type' => 'boolean', + 'default' => true, + ], [ 'name' => 'title', 'label' => trans('backend.columnName.title'), - 'type' => 'text' + 'type' => 'text', + ], [ 'name' => 'photos', @@ -117,9 +121,9 @@ class NewsCrudController extends CrudController 'options' => [ //'selector' => 'textarea.tinymce', //'skin' => 'dick-light', - 'plugins' => 'lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help', + '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' => 'undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link', + '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', ], diff --git a/app/Http/Controllers/Admin/ProductCrudController.php b/app/Http/Controllers/Admin/ProductCrudController.php index 8e154be..fe48329 100644 --- a/app/Http/Controllers/Admin/ProductCrudController.php +++ b/app/Http/Controllers/Admin/ProductCrudController.php @@ -132,7 +132,8 @@ class ProductCrudController extends CrudController [ 'name' => 'is_front_show', 'label' => trans('backend.columnName.is_front_show'), - 'type' => 'boolean' + 'type' => 'boolean', + 'default' => true, ], [ 'name' => 'tip', @@ -168,9 +169,9 @@ class ProductCrudController extends CrudController 'options' => [ //'selector' => 'textarea.tinymce', //'skin' => 'dick-light', - 'plugins' => 'lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help', + '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' => 'undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link', + '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', ], @@ -183,9 +184,9 @@ class ProductCrudController extends CrudController 'options' => [ //'selector' => 'textarea.tinymce', //'skin' => 'dick-light', - 'plugins' => 'lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help', + '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' => 'undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link', + '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', ], @@ -199,13 +200,61 @@ class ProductCrudController extends CrudController 'options' => [ //'selector' => 'textarea.tinymce', //'skin' => 'dick-light', - 'plugins' => 'lists advlist image link media anchor table hr imagetools importcss insertdatetime paste searchreplace textcolor textpattern help', + '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' => 'undo redo bold italic alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image media link', + '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' => 'feature_resource', + 'lable' => trans('backend.columnName.feature_resource'), + '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' => 'feature_related_part', + 'lable' => trans('backend.columnName.feature_related_part'), + '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' => 'productRelateds', + 'label' => trans('backend.columnName.product_related'), + 'type' => 'select2_multiple', + 'entity' => 'productRelateds', + 'attribute' => 'title', + 'model' => 'App\Models\Product', + 'pivot' => true, + 'allows_null' => true, + 'select_all' => true, + 'options' => (function ($query) { + $id = \Route::current()->parameter('id'); + return $query->where('id', '<>', $id)->orderBy('title', 'ASC')->get(); + }), + ], [ 'name' => 'seo_keyword', diff --git a/app/Http/Controllers/Admin/SupportDistributionPartnerCrudController.php b/app/Http/Controllers/Admin/SupportDistributionPartnerCrudController.php index be2cae1..3f3d0c2 100644 --- a/app/Http/Controllers/Admin/SupportDistributionPartnerCrudController.php +++ b/app/Http/Controllers/Admin/SupportDistributionPartnerCrudController.php @@ -97,7 +97,8 @@ class SupportDistributionPartnerCrudController extends CrudController [ 'name' => 'is_front_show', 'label' => trans('backend.columnName.is_front_show'), - 'type' => 'boolean' + 'type' => 'boolean', + 'default' => true, ], [ 'name' => 'photos', diff --git a/app/Http/Controllers/Admin/SupportEcosystemPartnerCrudController.php b/app/Http/Controllers/Admin/SupportEcosystemPartnerCrudController.php index 6c311f0..951170c 100644 --- a/app/Http/Controllers/Admin/SupportEcosystemPartnerCrudController.php +++ b/app/Http/Controllers/Admin/SupportEcosystemPartnerCrudController.php @@ -97,7 +97,8 @@ class SupportEcosystemPartnerCrudController extends CrudController [ 'name' => 'is_front_show', 'label' => trans('backend.columnName.is_front_show'), - 'type' => 'boolean' + 'type' => 'boolean', + 'default' => true, ], [ 'name' => 'photos', diff --git a/app/Http/Controllers/Admin/UserCrudController.php b/app/Http/Controllers/Admin/UserCrudController.php index 77389c2..0e7cc41 100644 --- a/app/Http/Controllers/Admin/UserCrudController.php +++ b/app/Http/Controllers/Admin/UserCrudController.php @@ -24,6 +24,26 @@ class UserCrudController extends OrgController 'label' => trans('backpack::permissionmanager.email'), 'type' => 'email', ], + [ + 'name' => 'phone', + 'label' => trans('backend.columnName.phone'), + 'type' => 'text', + ], + [ + 'name' => 'country', + 'label' => trans('backend.columnName.country'), + 'type' => 'text', + ], + [ + 'name' => 'company', + 'label' => trans('backend.columnName.company'), + 'type' => 'text', + ], + [ + 'name' => 'job_title', + 'label' => trans('backend.columnName.job_title'), + 'type' => 'text', + ], [ // n-n relationship (with pivot table) 'label' => trans('backpack::permissionmanager.roles'), // Table column heading 'type' => 'select_multiple', diff --git a/app/Http/Controllers/EventsController.php b/app/Http/Controllers/EventsController.php index ac9c72f..18b090f 100644 --- a/app/Http/Controllers/EventsController.php +++ b/app/Http/Controllers/EventsController.php @@ -15,7 +15,7 @@ class EventsController extends Controller $dataRows = \App\Models\Event::where('is_front_show', '=', true) ->orderBy('post_at', 'desc') - ->select('id', 'title', 'venue', 'contact', 'photos', 'post_at'); + ->select('id', 'title', 'venue', 'event_at', 'contact', 'photos', 'post_at'); return view('events', [ 'dataRows' => $dataRows->skip($pageOffset)->take($perPageItems)->get(), diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 27491f1..a58a354 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Mail; +use App\Mail\SubscripeionMail; +use Validator; class HomeController extends Controller { @@ -14,7 +17,7 @@ class HomeController extends Controller $newsRows = \App\Models\News::where('is_front_show', '=', true) ->orderBy('post_at', 'desc') ->take('3'); - $eventRows = \App\Models\News::where('is_front_show', '=', true) + $eventRows = \App\Models\Event::where('is_front_show', '=', true) ->orderBy('post_at', 'desc') ->take('3'); return view('home', [ @@ -23,4 +26,53 @@ class HomeController extends Controller 'eventRows' => $eventRows->get(), ]); } + + public function indexPost(Request $request) + { + $message = ''; + $result = 'success'; + $subscribeInquery = $request->input('subscribeInquery'); + if ($subscribeInquery) + { + try + { + //$request->validate(); + $validator = Validator::make($request->all(), [ + 'subscribeInquery' => 'required|email', + ], $messages = [ + 'required' => 'The :attribute field is required.', + 'email' => 'The :attribute field is not a email address.', + ]); + if ($validator->fails()) + { + $result = 'errorSubscribe'; + $message = 'Opps! Please try again.'; + } + else + { + // + Mail::to('newsletter.cri@coreality-inc.com')->send( + new SubscripeionMail($subscribeInquery) + ); + $result = 'successSubscribe'; + $message = 'We have received your subscribe inquiry!'; + } + } + catch (Exception $ex) + { + $result = 'errorSubscribe'; + $message = 'Opps! Please try again.'; + } + + + } + + if ($message != '') + { + return redirect()->back()->with($result, $message); + } + else + return redirect()->back(); + + } } diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php new file mode 100644 index 0000000..4e6810e --- /dev/null +++ b/app/Http/Controllers/LoginController.php @@ -0,0 +1,56 @@ +getCredentials(); + + if(!Auth::validate($credentials)): + return redirect()->to('login') + ->withErrors(trans('auth.failed')); + endif; + + $user = Auth::getProvider()->retrieveByCredentials($credentials); + + Auth::login($user); + + return $this->authenticated($request, $user); + } + + /** + * Handle response after user authenticated + * + * @param Request $request + * @param Auth $user + * + * @return \Illuminate\Http\Response + */ + protected function authenticated(Request $request, $user) + { + return redirect()->intended(); + } +} diff --git a/app/Http/Controllers/LogoutController.php b/app/Http/Controllers/LogoutController.php new file mode 100644 index 0000000..60af0a7 --- /dev/null +++ b/app/Http/Controllers/LogoutController.php @@ -0,0 +1,24 @@ +orderByRaw("CASE - WHEN tip = 'none' THEN 1 - WHEN tip = 'new' THEN 2 - WHEN tip = 'on_sale' THEN 3 - END DESC") - ->orderBy('id', 'DESC'); + ->orderByRaw("CASE WHEN tip LIKE 'on_sale' THEN 1 WHEN tip LIKE 'new' THEN 2 ELSE 3 END"); + //->orderBy('id', 'DESC'); $dataCatalogs = \App\Models\ProductCatalog::where('is_front_show', '=', true) ->orderBy('lft', 'asc') @@ -61,7 +57,9 @@ class ProductsController extends Controller $productCount = $productRows->count(); - $productRows = $productRows->skip($pageOffset)->take($perPageItems)->get(); + $productRows = $productRows->skip($pageOffset)->take($perPageItems); + //var_dump($productRows->toSql()); + $productRows = $productRows->get(); foreach ($productRows as $row) { $row->{'applications'} = \App\Models\Product::find($row->id)->productApplications()->get(); @@ -105,6 +103,7 @@ class ProductsController extends Controller 'catalogName' => $catalogName, 'catalogSlug' => $catalogSlug, 'productApplications' => $dataRow->productApplications()->get(), + 'productRelateds' => $dataRow->productRelateds()->get(), ]); } diff --git a/app/Http/Controllers/RegisterController.php b/app/Http/Controllers/RegisterController.php new file mode 100644 index 0000000..8ed43ba --- /dev/null +++ b/app/Http/Controllers/RegisterController.php @@ -0,0 +1,36 @@ +validated()); + + auth()->login($user); + + return redirect('/')->with('success', "Account successfully registered."); + } +} diff --git a/app/Http/Controllers/SupportDistributionPartnersController.php b/app/Http/Controllers/SupportDistributionPartnersController.php index 6fe7c0a..18c0b3c 100644 --- a/app/Http/Controllers/SupportDistributionPartnersController.php +++ b/app/Http/Controllers/SupportDistributionPartnersController.php @@ -32,7 +32,7 @@ class SupportDistributionPartnersController extends Controller $dataRows = \App\Models\SupportDistributionPartner::where('support_distribution_partner_catalog_id', '=', $catalogId) ->where('is_front_show', '=', true) - ->orderBy('title', 'desc') + ->orderBy('title', 'asc') ->select('id', 'title', 'description', 'photos', 'website'); return view('support-distribution-partners', [ diff --git a/app/Http/Controllers/SupportEcosystemPartnersController.php b/app/Http/Controllers/SupportEcosystemPartnersController.php index a2a30ab..c71afae 100644 --- a/app/Http/Controllers/SupportEcosystemPartnersController.php +++ b/app/Http/Controllers/SupportEcosystemPartnersController.php @@ -21,12 +21,21 @@ class SupportEcosystemPartnersController extends Controller ->orderBy('lft', 'asc') ->orderBy('id', 'desc') ->select('id', 'name'); + if ($catalogId == 0) + { + $catalogRowsGet = $catalogRows->get(); + foreach ($catalogRowsGet as $row) + { + $catalogId = $row->id; + break; + } + } $dataRows = \App\Models\SupportEcosystemPartner::where('support_ecosystem_partner_catalog_id', '=', $catalogId) ->where('is_front_show', '=', true) - ->orderBy('title', 'desc') + ->orderBy('title', 'asc') ->select('id', 'title', 'description', 'photos', 'website'); - + return view('support-ecosystem-partners', [ 'catalogRows' => $catalogRows->get(), 'catalogCurrentId' => $catalogId, diff --git a/app/Http/Controllers/SupportSalesInquiryController.php b/app/Http/Controllers/SupportSalesInquiryController.php index 9756106..8557c56 100644 --- a/app/Http/Controllers/SupportSalesInquiryController.php +++ b/app/Http/Controllers/SupportSalesInquiryController.php @@ -5,16 +5,26 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use \App\Http\Requests\SupportSaleRequest; use Carbon\Carbon; +use Illuminate\Support\Facades\Mail; +use App\Mail\SalesInquiryMail; class SupportSalesInquiryController extends Controller { public function index(Request $request) { + $product = ''; $pid = $request->get('pid'); - $product = \App\Models\Product::where('id', '=', $pid)->where('is_front_show', '=', true)->first(); - if ($product) + if ($pid > 0) { - $product = 'I am interested in ' . $product->title; + $product = \App\Models\Product::where('id', '=', $pid)->where('is_front_show', '=', true)->first(); + if ($product) + { + $product = 'I am interested in ' . $product->title; + } + } + else if ($request->has('comment')) + { + $product = $request->get('comment'); } return view('support-sales-inquiry',[ 'productName' => $product, @@ -34,6 +44,28 @@ class SupportSalesInquiryController extends Controller 'comments' => $request->input('comments'), 'created_at' => Carbon::now(), ]); + + try + { + $data = 'First Name: ' . $request->input('name_first') . "\n"; + $data .= 'Last Name: ' . $request->input('name_last') . "\n"; + $data .= 'Company Name: ' . $request->input('company_name') . "\n"; + $data .= 'Job Title: ' . $request->input('job_title') . "\n"; + $data .= 'Email: ' . $request->input('email') . "\n"; + $data .= 'Phone: ' . $request->input('phone') . "\n"; + $data .= 'Contry: ' . $request->input('contry') . "\n"; + $data .= 'Comments: ' . $request->input('comments') . "\n"; + $data .= 'Created At ' . Carbon::now() . "\n"; + + Mail::to('sales.cri@coreality-inc.com')->send( + new SalesInquiryMail($data) + ); + } + catch (Exception $ex) + { + + } + return redirect()->back()->with('success', 'We have received your sales inquiry!'); } } diff --git a/app/Http/Controllers/SupportTechnicalController.php b/app/Http/Controllers/SupportTechnicalController.php index 911b4e6..5d6577a 100644 --- a/app/Http/Controllers/SupportTechnicalController.php +++ b/app/Http/Controllers/SupportTechnicalController.php @@ -5,6 +5,8 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use \App\Http\Requests\SupportTechnicalRequest; use Carbon\Carbon; +use Illuminate\Support\Facades\Mail; +use App\Mail\CustomerServiceMail; class SupportTechnicalController extends Controller { @@ -26,6 +28,27 @@ class SupportTechnicalController extends Controller 'comments' => $request->input('comments'), 'created_at' => Carbon::now(), ]); - return redirect()->back()->with('success', 'We have received your technical inquiry!'); + + try + { + $data = 'First Name: ' . $request->input('name_first') . "\n"; + $data .= 'Last Name: ' . $request->input('name_last') . "\n"; + $data .= 'Company Name: ' . $request->input('company_name') . "\n"; + $data .= 'Job Title: ' . $request->input('job_title') . "\n"; + $data .= 'Email: ' . $request->input('email') . "\n"; + $data .= 'Phone: ' . $request->input('phone') . "\n"; + $data .= 'Contry: ' . $request->input('contry') . "\n"; + $data .= 'Comments: ' . $request->input('comments') . "\n"; + $data .= 'Created At ' . Carbon::now() . "\n"; + + Mail::to('service.cri@coreality-inc.com')->send( + new CustomerServiceMail($data) + ); + } + catch (Exception $ex) + { + + } + return redirect()->back()->with('success', 'We have received your customer sercvice inquiry!'); } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index a8fbd23..05f912e 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -22,6 +22,7 @@ class Kernel extends HttpKernel \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \Spatie\CookieConsent\CookieConsentMiddleware::class, + \App\Http\Middleware\AddCspNonceToScripts::class, ]; /** diff --git a/app/Http/Middleware/AddCspNonceToScripts.php b/app/Http/Middleware/AddCspNonceToScripts.php new file mode 100644 index 0000000..94dc434 --- /dev/null +++ b/app/Http/Middleware/AddCspNonceToScripts.php @@ -0,0 +1,85 @@ +headers->get('Content-Type') === 'text/html; charset=UTF-8') { + $content = $response->getContent(); + + // 儲存提取出的樣式內容 + $styles = []; + $styleCounter = 0; + + // 第一步:處理內聯樣式,將 style 轉換為 class + $content = preg_replace_callback( + '/<([a-z][a-z0-9]*)\b([^>]*)style=["\']([^"\']+)["\']([^>]*)>/i', + function ($matches) use (&$styles, &$styleCounter) { + $tag = $matches[1]; // 標籤名稱,例如 div + $beforeAttrs = trim($matches[2]); // style 前的屬性 + $styleContent = $matches[3]; // 內聯樣式內容 + $afterAttrs = trim($matches[4]); // style 後的屬性 + + // 生成唯一的 class 名稱 + $className = 'inline-style-' . $styleCounter++; + $styles[$className] = $styleContent; + + // 組合新的標籤,保留其他屬性並添加 class + $newAttrs = $beforeAttrs . ($beforeAttrs ? ' ' : '') . 'class="' . $className . '"' . ($afterAttrs ? ' ' : '') . $afterAttrs; + return '<' . $tag . ' ' . trim($newAttrs) . '>'; + }, + $content + ); + + // 第二步:為 +@endsection \ No newline at end of file diff --git a/resources/views/components/heading_navbar.blade.php b/resources/views/components/heading_navbar.blade.php index f3d09e9..08fdf5b 100644 --- a/resources/views/components/heading_navbar.blade.php +++ b/resources/views/components/heading_navbar.blade.php @@ -1,17 +1,17 @@
More News
diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php index ebed472..1b8f2dd 100644 --- a/resources/views/layouts/master.blade.php +++ b/resources/views/layouts/master.blade.php @@ -14,8 +14,8 @@ - - + + @yield('title')Coretronic Reality Inc. @@ -56,9 +56,9 @@ +
+ @csrf +
diff --git a/resources/views/mail/customer_service.blade.php b/resources/views/mail/customer_service.blade.php new file mode 100644 index 0000000..a9e6e90 --- /dev/null +++ b/resources/views/mail/customer_service.blade.php @@ -0,0 +1,5 @@ + Hi, Got a customer service from website
+ +
+{{ $data }}
+
\ No newline at end of file diff --git a/resources/views/mail/sales_inquery.blade.php b/resources/views/mail/sales_inquery.blade.php new file mode 100644 index 0000000..8e0f84f --- /dev/null +++ b/resources/views/mail/sales_inquery.blade.php @@ -0,0 +1,5 @@ + Hi, Got a sales inquery from website
+ +
+{{ $data }}
+
\ No newline at end of file diff --git a/resources/views/mail/subscribe_inquery.blade.php b/resources/views/mail/subscribe_inquery.blade.php new file mode 100644 index 0000000..d914d60 --- /dev/null +++ b/resources/views/mail/subscribe_inquery.blade.php @@ -0,0 +1,5 @@ + Hi, Got a subscribe inquery from website
+ +
+ email: {{ $data }} +
\ No newline at end of file diff --git a/resources/views/news.blade.php b/resources/views/news.blade.php index da9659d..c3d5d5a 100644 --- a/resources/views/news.blade.php +++ b/resources/views/news.blade.php @@ -1,7 +1,7 @@ @extends('layouts.heading-page') @section('title') - News - +News - @endsection @section('seo_keywords') @@ -11,7 +11,7 @@ @endsection @section('css') - + @endsection @section('breadcrumbs') @@ -45,9 +45,11 @@ @endphp
+
{{ $img_memo }}
+

{{ $row->title }}

diff --git a/resources/views/news_detail.blade.php b/resources/views/news_detail.blade.php index a915808..554248f 100644 --- a/resources/views/news_detail.blade.php +++ b/resources/views/news_detail.blade.php @@ -1,19 +1,19 @@ @extends('layouts.heading-page') @section('title') - News - +News - @endsection @section('seo_keywords') - {{ $dataRow->seo_keyword }} +{{ $dataRow->seo_keyword }} @endsection @section('seo_description') - {{ $dataRow->seo_description }} +{{ $dataRow->seo_description }} @endsection @section('css') - + @endsection @section('breadcrumbs') @@ -44,7 +44,7 @@ } } @endphp - + {!! $dataRow->body !!}
@php @@ -61,10 +61,9 @@ @endforeach @endforeach - +
@endif -
Return to list page
diff --git a/resources/views/products.blade.php b/resources/views/products.blade.php index 6800c28..558b6e0 100644 --- a/resources/views/products.blade.php +++ b/resources/views/products.blade.php @@ -1,7 +1,7 @@ @extends('layouts.heading-page') @section('title') - Products - +Products - @endsection @section('seo_keywords') @@ -11,7 +11,7 @@ @endsection @section('css') - + @endsection @section('breadcrumbs') @@ -145,14 +145,19 @@
-

{{ $row->title }}{{ trans('backend.product.tip_options.' . $row->tip) }}

+

+ {{ $row->title }} + @if (!!$row->tip && $row->tip != 'none') + {{ trans('backend.product.tip_options.' . $row->tip) }} + @endif +

{{ $row->description }}

    @php foreach ($row->applications as $tag) { @endphp -
  • {{ $tag->name }}
  • +
  • {{ $tag->name }}
  • @php } @endphp diff --git a/resources/views/products_detail.blade.php b/resources/views/products_detail.blade.php index ac9e3d7..45e2011 100644 --- a/resources/views/products_detail.blade.php +++ b/resources/views/products_detail.blade.php @@ -1,15 +1,15 @@ @extends('layouts.heading-page') @section('title') - Products - +Products - @endsection @section('seo_keywords') - {{ $dataRow->seo_keyword }} +{{ $dataRow->seo_keyword }} @endsection @section('seo_description') - {{ $dataRow->seo_description }} +{{ $dataRow->seo_description }} @endsection @section('css') @@ -38,9 +38,13 @@
    -

    {{ $dataRow->title }}{{ trans('backend.product.tip_options.' . $dataRow->tip) }}

    +

    {{ $dataRow->title }} + @if (!!$dataRow->tip && $dataRow->tip != 'none') + {{ trans('backend.product.tip_options.' . $dataRow->tip) }} + @endif +

    - {{ $dataRow->description }} + {!! $dataRow->body !!}
    Applications:
    @@ -60,7 +64,7 @@
    @php $img_memo = ''; - $img_src = '//assets/img/products-item-a01.jpg'; + $img_src = '/assets/img/products-item-a01.jpg'; $imgs = $dataRow->photos; //$imgs = array_filter($dataRow->photos, function($v) { // return $v['is_selected'] == true; @@ -84,9 +88,9 @@
    - @php + @php $img_memo = ''; - $img_src = '//assets/img/products-item-a01.jpg'; + $img_src = '/assets/img/products-item-a01.jpg'; $imgs = $dataRow->photos; //$imgs = array_filter($dataRow->photos, function($v) { // return $v['is_selected'] == true; @@ -134,13 +138,13 @@
    - + {!! $dataRow->feature_resource !!}
    - + {!! $dataRow->feature_related_part !!}
    @@ -152,78 +156,40 @@ diff --git a/resources/views/support-distribution-partners.blade.php b/resources/views/support-distribution-partners.blade.php index eb6dcb5..7fef82d 100644 --- a/resources/views/support-distribution-partners.blade.php +++ b/resources/views/support-distribution-partners.blade.php @@ -1,7 +1,7 @@ @extends('layouts.heading-page') @section('title') - Support - +Support - @endsection @section('seo_keywords') @@ -11,11 +11,11 @@ @endsection @section('css') - + @endsection @section('breadcrumbs') - Support/Distribution Partners + Support/Distribution Partners @endsection @section('page-main') @@ -42,6 +42,7 @@
    +
    @php foreach ($dataRows as $row) { @@ -61,7 +62,7 @@ } } @endphp -
    +
    @@ -76,10 +77,11 @@
    -
    + @php } @endphp +
    @php if ($dataTotalCount > $dataPerPageItems) diff --git a/resources/views/support-ecosystem-partners.blade.php b/resources/views/support-ecosystem-partners.blade.php index d896c86..6dbf81a 100644 --- a/resources/views/support-ecosystem-partners.blade.php +++ b/resources/views/support-ecosystem-partners.blade.php @@ -1,7 +1,7 @@ @extends('layouts.heading-page') @section('title') - Support - +Support - @endsection @section('seo_keywords') @@ -11,11 +11,11 @@ @endsection @section('css') - + @endsection @section('breadcrumbs') - Support/Ecosystem Partners + Support/Ecosystem Partners @endsection @section('page-main') @@ -41,6 +41,7 @@
    +
    @php foreach ($dataRows as $row) { @@ -60,7 +61,7 @@ } } @endphp -
    +
    @@ -75,10 +76,11 @@
    -
    + @php } @endphp +
    @php if ($dataTotalCount > $dataPerPageItems) diff --git a/resources/views/support-sales-inquiry.blade.php b/resources/views/support-sales-inquiry.blade.php index 6abe399..14edebb 100644 --- a/resources/views/support-sales-inquiry.blade.php +++ b/resources/views/support-sales-inquiry.blade.php @@ -1,7 +1,7 @@ @extends('layouts.heading-page') @section('title') - Support - +Support - @endsection @section('seo_keywords') @@ -11,11 +11,11 @@ @endsection @section('css') - + @endsection @section('breadcrumbs') - Support/Sales Inquiry + Support/Sales Inquiry @endsection @section('page-main') @@ -340,6 +340,12 @@ @section('script') @endsection \ No newline at end of file diff --git a/resources/views/support-technical.blade.php b/resources/views/support-technical.blade.php index ae915da..1a00660 100644 --- a/resources/views/support-technical.blade.php +++ b/resources/views/support-technical.blade.php @@ -1,7 +1,7 @@ @extends('layouts.heading-page') @section('title') - Support - +Support - @endsection @section('seo_keywords') @@ -11,11 +11,11 @@ @endsection @section('css') - + @endsection @section('breadcrumbs') - Support/Technical Support + Support/Customer Service @endsection @section('page-main') @@ -23,7 +23,7 @@
    -

    Technical Support

    +

    Customer Service

    @csrf @if ($errors->any()) @@ -341,6 +341,12 @@ @section('script') @endsection \ No newline at end of file diff --git a/resources/views/vendor/backpack/ui/inc/menu_items.blade.php b/resources/views/vendor/backpack/ui/inc/menu_items.blade.php index 8aecb00..074a7b7 100644 --- a/resources/views/vendor/backpack/ui/inc/menu_items.blade.php +++ b/resources/views/vendor/backpack/ui/inc/menu_items.blade.php @@ -15,12 +15,16 @@ + + @@ -33,10 +37,13 @@ - - - - - - + + + + + + + + + diff --git a/routes/web.php b/routes/web.php index ef0df3c..8517ee6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,6 +15,7 @@ use Illuminate\Support\Facades\Route; Route::get('/', [\App\Http\Controllers\HomeController::class, 'index']) ->name('home'); +Route::post('/', [\App\Http\Controllers\HomeController::class, 'indexPost']); Route::get('/news', [\App\Http\Controllers\NewsController::class, 'index']) ->name('news'); @@ -29,9 +30,9 @@ Route::get('/events/detail/{id}', [\App\Http\Controllers\EventsController::class Route::get('/about', [\App\Http\Controllers\AboutController::class, 'index']) ->name('about'); -Route::get('/support/technical', [\App\Http\Controllers\SupportTechnicalController::class, 'index']) - ->name('support/technical'); -Route::post('/support/technical', [\App\Http\Controllers\SupportTechnicalController::class, 'indexPost']); +Route::get('/support/customer', [\App\Http\Controllers\SupportTechnicalController::class, 'index']) + ->name('support/customer'); +Route::post('/support/customer', [\App\Http\Controllers\SupportTechnicalController::class, 'indexPost']); Route::get('/support/sales-inquiry', [\App\Http\Controllers\SupportSalesInquiryController::class, 'index']) ->name('support/sales-inquiry'); @@ -43,8 +44,37 @@ Route::get('/support/distribution-partners', [\App\Http\Controllers\SupportDistr Route::get('/support/ecosystem-partners', [\App\Http\Controllers\SupportEcosystemPartnersController::class, 'index']) ->name('support/ecosystem-partners'); -Route::get('/products', [\App\Http\Controllers\ProductsController::class, 'index']) - ->name('products'); +//Route::get('/products', [\App\Http\Controllers\ProductsController::class, 'index']) +// ->name('products'); +Route::get('/products', function () { + return redirect('https://ec.coreality-inc.com'); +}); + + Route::get('/products/detail/{product}', [\App\Http\Controllers\ProductsController::class, 'detail']); Route::get('/products/{catalogs?}', [\App\Http\Controllers\ProductsController::class, 'catalogs']) ->where('catalogs','^[a-zA-Z0-9-_\/]+$'); + +Route::group(['middleware' => ['guest']], function(){ + /** + * Register Routes + */ + //Route::get('/member/register', [\App\Http\Controllers\RegisterController::class, 'show'])->name('register.show'); + //Route::post('/member/register', [\App\Http\Controllers\RegisterController::class, 'register'])->name('register.perform'); + + /** + * Login Routes + */ + //Route::get('/member/login', [\App\Http\Controllers\LoginController::class, 'show'])->name('login.show'); + Route::get('/member/login', function () { + return redirect('https://ec.coreality-inc.com/my-account/'); + }); + //Route::post('/member/login', [\App\Http\Controllers\LoginController::class, 'login'])->name('login.perform'); +}); + +Route::group(['middleware' => ['auth']], function() { + /** + * Logout Routes + */ + Route::get('/member/logout', [\App\Http\Controllers\LogoutController::class, 'perform'])->name('logout.perform'); +}); \ No newline at end of file