File "HomeController.php"

Full Path: /home/isoftco/public_html/hrm/app/Http/Controllers/Site/HomeController.php
File size: 4.4 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Site;


use App\Classes\Reply;
use App\Events\CompanyCreated;
use App\Http\Controllers\SiteBaseController;
use App\Http\Requests\Site\ContactSubmitRequest;
use App\Http\Requests\Site\SignupRequest;
use App\Mail\CompanySignedUp;
use App\Mail\SupportReceived;
use App\Mail\SupportSent;
use App\Mail\VerifyEmail;
use App\Models\Admin;
use App\Models\Company;
use App\Models\ContactRequest;
use App\Models\Country;
use App\Models\FaqCategory;
use App\Models\Feature;
use App\Models\Pages;
use App\Models\Plan;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;


class HomeController extends SiteBaseController
{

    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        return view("site.home", $this->data);
    }

    public function features()
    {
        $this->features =  Feature::all();
        return view("site.features", $this->data);
    }

    public function pricing()
    {
        $this->data["plans"] = Plan::all();
        $this->data["max_users"] = Plan::max('end_user_count');

        return view("site.pricing", $this->data);
    }

    public function support()
    {
        $this->faqCategories = FaqCategory::with('faq')->where('status', 'active')->get();
        return view("site.support", $this->data);
    }

    public function termsOfService()
    {
        return view("site.termsofservice", $this->data);
    }

    public function privacyPolicy()
    {
        return view("site.privacypolicy", $this->data);
    }
    public function page($slug)
    {
        $this->page = Pages::where('slug',$slug)->first();
        return view("site.page", $this->data);
    }


    public function signup()
    {
        $this->countries = Country::where('currency_symbol', '!=', 'null')->groupBy('currency_code')->get();
        $this->countrieslist = Country::all();

        $email = request()->get("email");
        $plan = request()->get("plan");

        $this->data["email"] = $email;
        $this->data["plan"] = $plan;

        return view("site.signup", $this->data);
    }

    public function submitSignup(SignupRequest $request)
    {
        \DB::beginTransaction();

        $company = Company::create($request->all());

        if (module_enabled('Subdomain')) {
            $company->sub_domain = $request->sub_domain;
            $company->save();
        }

        $code = Str::random(60);

        $admin = $this->createAdmin($request,$company,$code);


        \DB::commit();

        $inputs = $request->all();
        $inputs["name"] = $admin->name;
        $inputs["email"] = $admin->email;
        $inputs["login_url"] = route('login');
        $inputs["email_token"] = $code;
        $inputs["verify_link"] = route('admin.verify_email', $code);
        $inputs['fromEmail'] = $this->setting->email;
        $inputs['fromName'] = $this->setting->main_name;

        // Send email of account creation
        Mail::to($admin->email)->queue(new CompanySignedUp($inputs));

        // Send verification email
        Mail::to($admin->email)->queue(new VerifyEmail($inputs));

        $url = env('APP_ADDRESS');

        return Reply::success('Company registered successfully', ['url' => $url]);

    }

    public function contactSubmit(ContactSubmitRequest $request)
    {
        $inputs = $request->all();
        $inputs['fromEmail'] = $this->setting->email;
        $inputs['fromName'] = $this->setting->main_name;

        $contact = new ContactRequest();
        $contact->name = $request->name;
        $contact->email = $request->email;
        $contact->category = $request->category;
        $contact->details = $request->details;
        $contact->status = "Pending";
        $contact->save();

        Mail::to($inputs["email"])->send(new SupportReceived($inputs));

        Mail::to($inputs['fromEmail'])->send(new SupportSent($inputs));

        return Reply::redirect(route('thank.you'), 'Thank you for contacting us');
    }

    public function thankYou()
    {
        return view('site.thankyou', $this->data);
    }

    private function createAdmin($request, $company,$code)
    {
        $admin = new Admin();
        $admin->name = $request->name;
        $admin->email = $request->email;
        $admin->password = Hash::make($request->password);
        $admin->company_id = $company->id;

        $admin->email_token = $code;
        $admin->save();

        return $admin;

    }
}