firstcommit
This commit is contained in:
45
app/Console/Commands/ResetRefreshDatabaseCommand.php
Normal file
45
app/Console/Commands/ResetRefreshDatabaseCommand.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class ResetRefreshDatabaseCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'db:reset';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Resets/Refresh the database(ie: dp wipe, migrate, seed)';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
//-- Wipe the database
|
||||
$this->call('db:wipe');
|
||||
|
||||
//-- Migrate the database
|
||||
$this->call('migrate');
|
||||
|
||||
//-- Seed the database
|
||||
$this->call('db:seed');
|
||||
|
||||
//-- Clear Cache
|
||||
$this->call('optimize:clear');
|
||||
|
||||
//-- Flush Session
|
||||
// $this->call('session:flush');
|
||||
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
}
|
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');
|
||||
}
|
||||
}
|
46
app/Exceptions/Handler.php
Normal file
46
app/Exceptions/Handler.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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) {
|
||||
//
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function render($request, Throwable $exception)
|
||||
{
|
||||
if ($this->isHttpException($exception)) {
|
||||
if ($exception->getStatusCode() == 404) {
|
||||
return response()->view('theme.spade.errors.404', [], 404);
|
||||
}
|
||||
if ($exception->getStatusCode() == 500) {
|
||||
return response()->view('theme.spade.errors.500', [], 500);
|
||||
}
|
||||
}
|
||||
return parent::render($request, $exception);
|
||||
}
|
||||
}
|
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;
|
||||
}
|
256
app/Http/Controllers/HomeController.php
Normal file
256
app/Http/Controllers/HomeController.php
Normal file
@@ -0,0 +1,256 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\FAQ\app\Models\Faq;
|
||||
use Modules\Blog\app\Models\Blog;
|
||||
use Modules\Page\app\Models\Page;
|
||||
use Modules\Post\app\Models\Post;
|
||||
use PhpParser\Node\Expr\FuncCall;
|
||||
use App\Services\ContactUsService;
|
||||
use App\Services\SubscriptionService;
|
||||
use Modules\Client\app\Models\Client;
|
||||
use Modules\Service\app\Models\Service;
|
||||
use Doctrine\Inflector\Rules\Transformations;
|
||||
use Modules\TeamMember\app\Models\TeamMember;
|
||||
use Modules\Testimonial\app\Models\Testimonial;
|
||||
use Modules\Consultation\app\Models\Consultation;
|
||||
use Modules\Subscription\app\Models\Subscription;
|
||||
use Modules\Transformation\app\Models\Transformation;
|
||||
use Modules\ContactUs\app\Http\Requests\CreateContactUsRequest;
|
||||
use Modules\Consultation\app\Http\Controllers\ConsultationController;
|
||||
use Modules\Consultation\app\Http\Requests\CreateConsultationRequest;
|
||||
|
||||
class HomeController extends Controller
|
||||
{
|
||||
|
||||
protected $subscriptionService;
|
||||
protected $contactUsService;
|
||||
|
||||
public function __construct(SubscriptionService $subscriptionService, ContactUsService $contactUsService)
|
||||
{
|
||||
$this->subscriptionService = $subscriptionService;
|
||||
$this->contactUsService = $contactUsService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Main landing page
|
||||
*/
|
||||
public function home()
|
||||
{
|
||||
$data['homePage'] = Page::where('code', 'homepage')->first();
|
||||
$data['transformations'] = Transformation::all();
|
||||
$data['videoTestimonials'] = Testimonial::where('status', 'active')->where('link', '!=', '')->orderBy('ordering', 'asc')->get();
|
||||
$data['normalTestimonials'] = Testimonial::where('status', 'active')->where('link', null)->orderBy('ordering', 'asc')->get();
|
||||
$data['teamMembers'] = TeamMember::orderBy('id', 'asc')->take(4)->get();
|
||||
$data['aboutPage'] = Page::where('code', 'about_us')->first();
|
||||
$data['blogs'] = Blog::orderBy('id', 'desc')->get();
|
||||
|
||||
return view("theme.spade.index", $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* About us page
|
||||
*/
|
||||
public function aboutUs()
|
||||
{
|
||||
$data['aboutPage'] = Page::where('code', 'about_us')->first();
|
||||
$data['services'] = Service::where('status', 'active')->get();
|
||||
|
||||
return view('theme.spade.pages.about-us', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hair cluster page
|
||||
*/
|
||||
public function hairTransplant()
|
||||
{
|
||||
$page = Page::where('code', 'hair_transplant')->first();
|
||||
|
||||
$data['subPage'] = false;
|
||||
$data['pageDetail'] = $page;
|
||||
$data['posts'] = $page->posts->where('sidebar_flag', '11')->sortBy('order');
|
||||
$data['ageGroupOptions'] = Consultation::AGE_GROUP_OPTIONS;
|
||||
$data['procedureOptions'] = Consultation::PROCEDURE_OPTIONS;
|
||||
$data['transformations'] = Transformation::all();
|
||||
|
||||
return view('theme.spade.pages.hair-transplant.cluster', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hair single page
|
||||
*/
|
||||
public function hairTransplantChild($slug)
|
||||
{
|
||||
$page = Page::where('code', 'hair_transplant')->first();
|
||||
|
||||
$data['subPage'] = true;
|
||||
$data['pageDetail'] = $page;
|
||||
$data['posts'] = $page->posts->where('sidebar_flag', '11')->sortBy('order');
|
||||
$data['ageGroupOptions'] = Consultation::AGE_GROUP_OPTIONS;
|
||||
$data['procedureOptions'] = Consultation::PROCEDURE_OPTIONS;
|
||||
$data['post'] = Post::where('slug', $slug)->first();
|
||||
$data['transformations'] = Transformation::all();
|
||||
|
||||
return view('theme.spade.pages.hair-transplant.child', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Service page
|
||||
*/
|
||||
public function service($slug)
|
||||
{
|
||||
$data['service'] = Service::with('serviceMeta')->where('slug', $slug)->where('status', 'active')->first();
|
||||
$data['otherServices'] = Service::where('slug', '!=', $slug)->where('status', 'active')->get();
|
||||
|
||||
return view('theme.spade.pages.service', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Team member page
|
||||
*/
|
||||
public function doctorProvider()
|
||||
{
|
||||
$data['teamMembers'] = TeamMember::orderBy('id', 'asc')->get()->groupBy('group_id');
|
||||
|
||||
return view('theme.spade.pages.doctor-provider.grid', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Team member appointment page
|
||||
*/
|
||||
public function appointment(Request $request)
|
||||
{
|
||||
$id = $request->input('id');
|
||||
$data['teamMemberDetail'] = TeamMember::where('id', $id)->first();
|
||||
|
||||
return view('theme.spade.pages.doctor-provider.appointment', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Blogs page
|
||||
*/
|
||||
public function blogs()
|
||||
{
|
||||
$data['blogs'] = Blog::where('status', 'active')
|
||||
->orderBy('id', 'desc')
|
||||
->paginate(env('LIMIT_PER_PAGE'));
|
||||
|
||||
return view('theme.spade.pages.blog.grid', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Blog single page
|
||||
*/
|
||||
public function singleBlog($slug)
|
||||
{
|
||||
$data['page'] = Page::where('slug', 'blog-single')->first();
|
||||
$data['blog'] = Blog::with('blogMeta')->where('slug', $slug)->first();
|
||||
$data['ageGroupOptions'] = Consultation::AGE_GROUP_OPTIONS;
|
||||
$data['procedureOptions'] = Consultation::PROCEDURE_OPTIONS;
|
||||
$data['otherBlogs'] = Blog::where('slug', '!=', $slug)->where('status', 'active')->orderBy('id', 'desc')->limit(7)->get();
|
||||
|
||||
return view('theme.spade.pages.blog.detail', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Faq page
|
||||
*/
|
||||
public function faqs()
|
||||
{
|
||||
$data['faqs'] = Faq::where('status', 'active')->orderBy('ordering', 'asc')->get();
|
||||
|
||||
return view('theme.spade.pages.faq', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Contact us page
|
||||
*/
|
||||
public function contactUs()
|
||||
{
|
||||
$data = array();
|
||||
|
||||
return view("theme.spade.pages.contact-us", $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Privacy policy page
|
||||
*/
|
||||
public function privacyPolicy()
|
||||
{
|
||||
$data = [];
|
||||
|
||||
return view('theme.spade.pages.privacy-policy', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Terms and condition page
|
||||
*/
|
||||
public function termsOfService()
|
||||
{
|
||||
$data = [];
|
||||
|
||||
return view('theme.spade.pages.term-and-condition', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extra page
|
||||
*/
|
||||
public function extraPage($slug)
|
||||
{
|
||||
$data['page'] = Page::with('pageMeta')->where('slug', $slug)->where('status', 'active')->first();
|
||||
|
||||
return view('theme.spade.pages.extra', $data);
|
||||
}
|
||||
|
||||
public function storeSubscription(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'email' => 'required|email',
|
||||
]);
|
||||
|
||||
// Check if a subscription with the provided email already exists
|
||||
$existingSubscription = Subscription::where('email', $request->email)->exists();
|
||||
|
||||
if ($existingSubscription) {
|
||||
// Subscription already exists, return message or redirect with error
|
||||
toastr()->error("Wow! It's seems like you already subscribe. Thanks for subscription...");
|
||||
return back();
|
||||
}
|
||||
|
||||
// Proceed with storing the new subscription
|
||||
$validated = ['email' => $request->email];
|
||||
$this->subscriptionService->storeSubscription($validated);
|
||||
|
||||
toastr()->success('Thanks for subscribing');
|
||||
return back();
|
||||
}
|
||||
|
||||
public function storeContactUs(CreateContactUsRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
try {
|
||||
$this->contactUsService->storeContactUs($validated);
|
||||
|
||||
toastr()->success('Thanks for contacting us...');
|
||||
return back();
|
||||
} catch (\Throwable $th) {
|
||||
report($th);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function storeConsultation(CreateConsultationRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
try {
|
||||
$consultationController = new ConsultationController();
|
||||
$consultationController->store($request);
|
||||
toastr()->success('Thanks for consulting us...');
|
||||
return back();
|
||||
} catch (\Throwable $th) {
|
||||
report($th);
|
||||
}
|
||||
}
|
||||
}
|
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');
|
||||
}
|
||||
}
|
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 = [
|
||||
//
|
||||
];
|
||||
}
|
39
app/Jobs/ReplyToMailJob.php
Normal file
39
app/Jobs/ReplyToMailJob.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Jobs;
|
||||
|
||||
use App\Mail\ReplyToMail;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class ReplyToMailJob implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*/
|
||||
private $citizenEmail;
|
||||
private $content;
|
||||
private $siteLogo;
|
||||
public function __construct($citizenEmail, $content, $siteLogo)
|
||||
{
|
||||
$this->citizenEmail = $citizenEmail;
|
||||
$this->content = $content;
|
||||
$this->siteLogo = $siteLogo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
Mail::to($this->citizenEmail)
|
||||
->send((new ReplyToMail(content: $this->content, siteLogo:$this->siteLogo))
|
||||
->replyTo($this->citizenEmail));
|
||||
}
|
||||
}
|
39
app/Jobs/SendNewBlogNotification.php
Normal file
39
app/Jobs/SendNewBlogNotification.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Jobs;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use App\Mail\NewBlogNotificationMail;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Modules\Subscription\app\Models\Subscription;
|
||||
|
||||
class SendNewBlogNotification implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*/
|
||||
protected $blog;
|
||||
|
||||
public function __construct($blog)
|
||||
{
|
||||
$this->blog = $blog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$subscribers = Subscription::all();
|
||||
|
||||
foreach ($subscribers as $subscriber) {
|
||||
Mail::to($subscriber->email)->send(new NewBlogNotificationMail($this->blog));
|
||||
}
|
||||
}
|
||||
}
|
40
app/Jobs/SendSubscriptionMailJob.php
Normal file
40
app/Jobs/SendSubscriptionMailJob.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Jobs;
|
||||
|
||||
use App\Mail\SendSubscriptionMail;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class SendSubscriptionMailJob implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*/
|
||||
|
||||
private $citizenEmail;
|
||||
private $siteLogo;
|
||||
private $thumbImage;
|
||||
|
||||
public function __construct($citizenEmail, $siteLogo, $thumbImage)
|
||||
{
|
||||
$this->citizenEmail = $citizenEmail;
|
||||
$this->siteLogo = $siteLogo;
|
||||
$this->thumbImage = $thumbImage;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
Mail::to($this->citizenEmail)->send(new SendSubscriptionMail(citizenEmail:$this->citizenEmail, siteLogo:$this->siteLogo, thumbImage:$this->thumbImage));
|
||||
}
|
||||
}
|
63
app/Mail/NewBlogNotificationMail.php
Normal file
63
app/Mail/NewBlogNotificationMail.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?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 NewBlogNotificationMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
protected $blog;
|
||||
|
||||
public function __construct($blog)
|
||||
{
|
||||
$this->blog = $blog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
subject: 'New Blog Notification Mail',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
// return new Content(
|
||||
// view: 'view.name',
|
||||
// );
|
||||
|
||||
return new Content(
|
||||
view: 'mail.new_blog_notification',
|
||||
with: [
|
||||
'blogTitle' => $this->blog->title,
|
||||
'blogContent' => $this->blog->content,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
62
app/Mail/ReplyToMail.php
Normal file
62
app/Mail/ReplyToMail.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?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 ReplyToMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
|
||||
private $content;
|
||||
private $siteLogo;
|
||||
|
||||
public function __construct($content, $siteLogo)
|
||||
{
|
||||
$this->content = $content;
|
||||
$this->siteLogo = $siteLogo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
subject: 'Reply To Mail',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
return new Content(
|
||||
view: 'mail.reply_to_mail',
|
||||
with: [
|
||||
'content' => $this->content,
|
||||
'siteLogo' => $this->siteLogo,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
66
app/Mail/SendSubscriptionMail.php
Normal file
66
app/Mail/SendSubscriptionMail.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?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 SendSubscriptionMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
private $citizenEmail;
|
||||
private $siteLogo;
|
||||
private $thumbImage;
|
||||
|
||||
public function __construct($citizenEmail, $siteLogo, $thumbImage)
|
||||
{
|
||||
$this->citizenEmail = $citizenEmail;
|
||||
$this->siteLogo = $siteLogo;
|
||||
$this->thumbImage = $thumbImage;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
subject: 'Send Subscription Mail',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
|
||||
return new Content(
|
||||
view: 'mail.send_subscription_mail',
|
||||
with: [
|
||||
'citizenEmail' => $this->citizenEmail,
|
||||
'siteLogo' => $this->siteLogo,
|
||||
'thumbImage' => $this->thumbImage,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
45
app/Models/User.php
Normal file
45
app/Models/User.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
// 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;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
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',
|
||||
];
|
||||
}
|
199
app/Providers/AppServiceProvider.php
Normal file
199
app/Providers/AppServiceProvider.php
Normal file
@@ -0,0 +1,199 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Modules\Blog\app\Models\Blog;
|
||||
use Modules\Page\app\Models\Page;
|
||||
use Modules\Post\app\Models\Post;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Modules\Service\app\Models\Service;
|
||||
use Modules\Setting\app\Models\Setting;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
Schema::defaultStringLength(191);
|
||||
|
||||
$this->getSeoSetting();
|
||||
$this->getGeneralSetting();
|
||||
$this->getAdditionalSetting();
|
||||
|
||||
//-- Social media
|
||||
$this->socialMediaShare();
|
||||
|
||||
//-- Social media
|
||||
|
||||
//-- Blog
|
||||
$this->blog();
|
||||
|
||||
//-- Site Logo
|
||||
$this->getSiteImage();
|
||||
$this->getMultipleSiteImage();
|
||||
|
||||
$this->getHairPosts();
|
||||
$this->getAllServices();
|
||||
$this->getExtraPages();
|
||||
|
||||
}
|
||||
|
||||
public function getSeoSetting()
|
||||
{
|
||||
if (Schema::hasTable('settings')) {
|
||||
$seoSettings = Setting::where('setting_name', 'seo_setting')->get();
|
||||
if ($seoSettings->isNotEmpty()) {
|
||||
$settings = [];
|
||||
foreach ($seoSettings as $setting) {
|
||||
$settings[$setting->name] = $setting->detail;
|
||||
}
|
||||
view()->share('seoSetting', $settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getGeneralSetting()
|
||||
{
|
||||
if (Schema::hasTable('settings')) {
|
||||
$generalSettings = Setting::where('setting_name', 'general_setting')->get();
|
||||
if ($generalSettings->isNotEmpty()) {
|
||||
$settings = [];
|
||||
foreach ($generalSettings as $setting) {
|
||||
$settings[$setting->name] = $setting->detail;
|
||||
}
|
||||
view()->share('generalSetting', $settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getAdditionalSetting()
|
||||
{
|
||||
if (Schema::hasTable('settings')) {
|
||||
$additionalSettings = Setting::where('setting_name', 'additional_setting')->get();
|
||||
if ($additionalSettings->isNotEmpty()) {
|
||||
$settings = [];
|
||||
foreach ($additionalSettings as $setting) {
|
||||
$settings[$setting->name] = $setting->detail;
|
||||
}
|
||||
view()->share('additionalSetting', $settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-- Social media share
|
||||
public function socialMediaShare()
|
||||
{
|
||||
if (Schema::hasTable('settings')) {
|
||||
$socialMediaShares = Setting::where('setting_name', 'social_setting')->get();
|
||||
if ($socialMediaShares->isNotEmpty()) {
|
||||
view()->share('socialMediaShareKey', compact('socialMediaShares'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-- Social media share
|
||||
|
||||
|
||||
//-- Blog
|
||||
public function blog()
|
||||
{
|
||||
if (Schema::hasTable('blogs')) {
|
||||
$blogs = Blog::latest()->take(3)->get();
|
||||
if ($blogs->isNotEmpty()) {
|
||||
view()->share('blogkey', compact('blogs'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-- Get site logo for backend
|
||||
public function getSiteImage()
|
||||
{
|
||||
View::composer('admin::layouts.master', function ($view) {
|
||||
$siteLogoSetting = Setting::where('setting_name', 'general_setting')
|
||||
->whereIn('name', ['primary_image', 'secondary_image'])
|
||||
->orderBy('id', 'ASC')
|
||||
->get();
|
||||
|
||||
if ($siteLogoSetting->isNotEmpty()) {
|
||||
$imageSetting = $siteLogoSetting->where('name', 'primary_image')->first();
|
||||
|
||||
if (is_null($imageSetting) || is_null($imageSetting->detail) || empty($imageSetting->detail)) {
|
||||
$imageSetting = $siteLogoSetting->where('name', 'secondary_image')->first();
|
||||
}
|
||||
|
||||
$siteLogo = asset('storage/uploads/' . optional($imageSetting)->detail);
|
||||
} else {
|
||||
$siteLogo = asset('backend/uploads/site_logo/defaultLogo.png');
|
||||
}
|
||||
|
||||
$view->with('siteLogo', $siteLogo);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//-- Get site logo for Frontend
|
||||
public function getMultipleSiteImage()
|
||||
{
|
||||
View::composer(
|
||||
// 'frontend.layouts.partials.header',
|
||||
'frontend.layouts.main',
|
||||
function ($view) {
|
||||
$view->with('primaryLogo', $this->getSiteLogo('primary_image'));
|
||||
$view->with('secondaryLogo', $this->getSiteLogo('secondary_image'));
|
||||
}
|
||||
);
|
||||
}
|
||||
public function getSiteLogo($imageName)
|
||||
{
|
||||
$siteLogoSetting = Setting::where('setting_name', 'general_setting')
|
||||
->whereIn('name', [$imageName])
|
||||
->first();
|
||||
|
||||
if ($siteLogoSetting && is_null($siteLogoSetting->detail) || empty($siteLogoSetting->detail)) {
|
||||
return asset('backend/uploads/site_logo/defaultLogo.png');
|
||||
} else {
|
||||
return asset('storage/uploads/' . $siteLogoSetting->detail);
|
||||
}
|
||||
}
|
||||
|
||||
public function getHairPosts()
|
||||
{
|
||||
if (Schema::hasTable('posts')) {
|
||||
$posts = Post::where('navbar_flag', '11')->orderBy('order', 'asc')->get();
|
||||
if ($posts->isNotEmpty()) {
|
||||
view()->share('hairPosts', $posts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getAllServices()
|
||||
{
|
||||
if (Schema::hasTable('services')) {
|
||||
$services = Service::where('status', 'active')->get();
|
||||
if ($services->isNotEmpty()) {
|
||||
view()->share('services', $services);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getExtraPages()
|
||||
{
|
||||
if (Schema::hasTable('pages')) {
|
||||
$models = Page::where('code', 'normal')->where('status', 'active')->get();
|
||||
if ($models->isNotEmpty()) {
|
||||
view()->share('extraPages', $models);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
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');
|
||||
}
|
||||
}
|
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'));
|
||||
});
|
||||
}
|
||||
}
|
20
app/Services/ContactUsService.php
Normal file
20
app/Services/ContactUsService.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Modules\ContactUs\app\Repositories\ContactUsRepository;
|
||||
|
||||
class ContactUsService
|
||||
{
|
||||
protected $contactUsRepository;
|
||||
|
||||
public function __construct(ContactUsRepository $contactUsRepository)
|
||||
{
|
||||
$this->contactUsRepository = $contactUsRepository;
|
||||
}
|
||||
|
||||
public function storeContactUs(array $validated)
|
||||
{
|
||||
return $this->contactUsRepository->storeContactUsList($validated);
|
||||
}
|
||||
}
|
26
app/Services/LogoService.php
Normal file
26
app/Services/LogoService.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Modules\Setting\app\Models\Setting;
|
||||
|
||||
class LogoService
|
||||
{
|
||||
public function getSiteLogo()
|
||||
{
|
||||
$siteLogo = null;
|
||||
|
||||
$siteLogoData = Setting::where('setting_name', 'general_setting')
|
||||
->whereIn('name', ['primary_image', 'secondary_image'])
|
||||
->get()
|
||||
->keyBy('name');
|
||||
|
||||
if (!empty($siteLogoData['primary_image']->detail)) {
|
||||
$siteLogo = asset('storage/uploads/' . $siteLogoData['primary_image']->detail);
|
||||
} elseif (!empty($siteLogoData['secondary_image']->detail)) {
|
||||
$siteLogo = asset('storage/uploads/' . $siteLogoData['secondary_image']->detail);
|
||||
}
|
||||
|
||||
return $siteLogo;
|
||||
}
|
||||
}
|
20
app/Services/SubscriptionService.php
Normal file
20
app/Services/SubscriptionService.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Modules\Subscription\app\Repositories\SubscriptionRepository;
|
||||
|
||||
class SubscriptionService
|
||||
{
|
||||
protected $subscriptionRepository;
|
||||
|
||||
public function __construct(SubscriptionRepository $subscriptionRepository)
|
||||
{
|
||||
$this->subscriptionRepository = $subscriptionRepository;
|
||||
}
|
||||
|
||||
public function storeSubscription(array $validated)
|
||||
{
|
||||
return $this->subscriptionRepository->storeSubscription($validated);
|
||||
}
|
||||
}
|
33
app/View/Components/BlogInfo.php
Normal file
33
app/View/Components/BlogInfo.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\View\Component;
|
||||
use Modules\Blog\app\Models\Blog;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Modules\Setting\app\Models\Setting;
|
||||
use Modules\TeamMember\app\Models\SocialShare;
|
||||
|
||||
class BlogInfo extends Component
|
||||
{
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*/
|
||||
public $authorIntro;
|
||||
|
||||
public function __construct($authorIntroduction)
|
||||
{
|
||||
$this->authorIntro = $authorIntroduction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*/
|
||||
public function render(): View|Closure|string
|
||||
{
|
||||
$data['blogs'] = Blog::where('status', 'active')->latest()->take(6)->get();
|
||||
$data['socialMediaShares'] = Setting::where('setting_name', 'social_media_share')->take(6)->get();
|
||||
return view('components.blog-info', $data);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user