From fe3a69e9f7465986656e3e8c5410cd2779123745 Mon Sep 17 00:00:00 2001 From: abdul-wahab12345 Date: Sat, 29 Jun 2024 19:15:55 +0000 Subject: [PATCH] Added internal emails and canned response --- app/Helper/helpers.php | 15 +- app/Http/Controllers/Auth/LoginController.php | 34 ++- app/Http/Controllers/InboxController.php | 71 ++++--- .../Controllers/Mailgun/EmailController.php | 2 +- .../Controllers/Mailgun/MailgunController.php | 35 +-- app/Providers/RouteServiceProvider.php | 2 +- public/images/canned.png | Bin 0 -> 21068 bytes public/images/favicon.ico | Bin 0 -> 88722 bytes resources/views/auth/login.blade.php | 4 +- .../views/domains/verify-domain.blade.php | 42 +++- resources/views/inbox-setting.blade.php | 25 ++- resources/views/inbox.blade.php | 201 +++++++++++++++++- resources/views/layouts/app.blade.php | 9 +- resources/views/layouts/master.blade.php | 2 +- resources/views/layouts/setting.blade.php | 2 +- resources/views/partials/action-box.blade.php | 74 ++++++- routes/web.php | 2 +- 17 files changed, 434 insertions(+), 86 deletions(-) create mode 100644 public/images/canned.png create mode 100644 public/images/favicon.ico diff --git a/app/Helper/helpers.php b/app/Helper/helpers.php index 82e0831..8b3fa84 100644 --- a/app/Helper/helpers.php +++ b/app/Helper/helpers.php @@ -83,9 +83,18 @@ function verifyMailgunSignature($token, $timestamp, $signature) if (!function_exists('insertTicket')) { function insertTicket($from_email, $to_email, $subject, $content, $type, $sender_name) { - $check = Ticket::where('subject', $subject) - ->where('from_email',$from_email) - ->where('to_email',$to_email)->first(); + $check = Ticket::where(function ($query) use ($from_email, $to_email) { + $query->where('from_email', $from_email) + ->where('to_email', $to_email); + }) + ->where(function ($query) use ($subject) { + $cleanSubject = trim(str_ireplace('Re:', '', $subject)); // Remove 'Re:' prefix and trim whitespace + $query->where('subject', $cleanSubject) + ->orWhere('subject', 'Re: ' . $cleanSubject); // Consider both with and without 'Re:' + }) + ->first(); + + if(!$check){ diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 389e49d..b0a4543 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -9,6 +9,8 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Session; use Illuminate\Foundation\Auth\AuthenticatesUsers; +use App\Services\MailgunService; +use App\Http\Controllers\Mailgun\MailgunController; class LoginController extends Controller { @@ -37,9 +39,13 @@ class LoginController extends Controller * * @return void */ + + protected $mailgunService; + public function __construct() { $this->middleware('guest')->except('logout'); + $this->mailgunService = app(MailgunService::class); } public function login() @@ -59,8 +65,32 @@ public function storeLogin(Request $request) return redirect('/company-info'); } else { $company = Company::where('user_id', Auth::id())->first(); - Session::put('selected_company', $company->id); - return redirect('/dashboard'); + $domain = $company->domain; + + $mailgunDomain = $this->mailgunService->getDomain($domain); + // dd($mailgunDomain); + + if($mailgunDomain){ + + $state = $mailgunDomain->getDomain()->getState(); + + if($state == 'unverified'){ + return redirect()->route('showDomain',$domain); + }elseif($state == 'active'){ + + if(empty($company->internal_email)){ + + $mailgun = new MailgunController(); + $mailgun->createEmail($domain); + } + + Session::put('selected_company', $company->id); + return redirect('/dashboard'); + + } + } + + } } diff --git a/app/Http/Controllers/InboxController.php b/app/Http/Controllers/InboxController.php index 9066531..de660a2 100644 --- a/app/Http/Controllers/InboxController.php +++ b/app/Http/Controllers/InboxController.php @@ -11,14 +11,21 @@ use Illuminate\Support\Facades\Auth; class InboxController extends Controller + { + public function get_canned_responses(){ + $companyId = Auth::user()->company->id; + return CompanyMeta::where('company_id', $companyId)->where('key', 'canned_responses')->get(); + } + + public function inboxSetting() { $companyId = Auth::user()->company->id; $timezones = Timezone::all(); $languages = Language::all(); $basic_setting = CompanyMeta::where('company_id', $companyId)->where('type', 'Basic Setting')->get(); - $canned_response = CompanyMeta::where('company_id', $companyId)->where('type', 'Canned Response')->first(); + $canned_response = $this->get_canned_responses(); $spam_handling = CompanyMeta::where('company_id', $companyId)->where('type', 'Spam Handling')->first(); $email_signature = CompanyMeta::where('company_id', $companyId)->where('type', 'Email Signature')->first(); return view('inbox-setting', ['timezones' => $timezones, 'basic_setting' => $basic_setting, 'spam_handling' => $spam_handling, @@ -140,33 +147,31 @@ public function cannedResponse(Request $request) $companyId = Auth::user()->company->id; // Collect data into an array - $canned_data = [ + $canned_data = [ 'name' => $request->name, 'text' => $request->text, - ] - ]; + ]; // Retrieve existing canned responses - $existingMeta = CompanyMeta::where('company_id', $companyId) - ->where('key', 'canned_responses') - ->where('type', 'Canned Response') - ->first(); + // $existingMeta = CompanyMeta::where('company_id', $companyId) + // ->where('key', 'canned_responses') + // ->where('type', 'Canned Response') + // ->first(); - // Decode existing JSON data if it exists - if ($existingMeta) { - $existingData = json_decode($existingMeta->value, true); - $canned_data = array_merge($existingData, $canned_data); - } + // // Decode existing JSON data if it exists + // if ($existingMeta) { + // $existingData = json_decode($existingMeta->value, true); + // $canned_data = array_merge($existingData, $canned_data); + // } - // Encode the data array as JSON + // // Encode the data array as JSON $jsonData = json_encode($canned_data); // Update or create the CompanyMeta entry - CompanyMeta::updateOrCreate([ - 'company_id' => $companyId, - 'key' => 'canned_responses', - ], [ + + + CompanyMeta::create([ 'company_id' => $companyId, 'key' => 'canned_responses', 'value' => $jsonData, @@ -180,25 +185,24 @@ public function deleteCannedResponse($index) { $companyId = Auth::user()->company->id; - // Retrieve the existing canned responses - $cannedMeta = CompanyMeta::where('company_id', $companyId) + CompanyMeta::where('company_id', $companyId) ->where('key', 'canned_responses') - ->where('type', 'Canned Response') - ->first(); + ->where('id', $index) + ->delete(); - if ($cannedMeta) { - $canned_data = json_decode($cannedMeta->value, true); + // if ($cannedMeta) { + // $canned_data = json_decode($cannedMeta->value, true); - if (isset($canned_data[$index])) { - unset($canned_data[$index]); + // if (isset($canned_data[$index])) { + // unset($canned_data[$index]); - $canned_data = array_values($canned_data); - $jsonData = json_encode($canned_data); + // $canned_data = array_values($canned_data); + // $jsonData = json_encode($canned_data); - $cannedMeta->value = $jsonData; - $cannedMeta->save(); - } - } + // $cannedMeta->value = $jsonData; + // $cannedMeta->save(); + // } + // } return redirect()->back()->with('success', 'Canned response deleted successfully.'); @@ -320,8 +324,9 @@ public function inbox() $messages = []; + $canned_response = $this->get_canned_responses(); - return view('inbox', ['tickets' => $tickets, 'messages' => $messages]); + return view('inbox', ['tickets' => $tickets, 'messages' => $messages, 'canned_response' => $canned_response]); } public function fetchChatMessages($ticketId) diff --git a/app/Http/Controllers/Mailgun/EmailController.php b/app/Http/Controllers/Mailgun/EmailController.php index 74ef269..51ab80f 100644 --- a/app/Http/Controllers/Mailgun/EmailController.php +++ b/app/Http/Controllers/Mailgun/EmailController.php @@ -35,7 +35,7 @@ public function saveEmail(Request $request){ $company = get_company('email',$to_email); if($company){ - $ticket = insertTicket($data['from_email'], $data['to_email'], $data['subject'], $message,'inbox',$data['from_name'] ); + $ticket = insertTicket($data['from_email'], $company->email, $data['subject'], $message,'inbox',$data['from_name'] ); if($ticket) $response = createResponse($ticket->id,$message); }else{} diff --git a/app/Http/Controllers/Mailgun/MailgunController.php b/app/Http/Controllers/Mailgun/MailgunController.php index 72a5b49..34637a2 100644 --- a/app/Http/Controllers/Mailgun/MailgunController.php +++ b/app/Http/Controllers/Mailgun/MailgunController.php @@ -11,10 +11,18 @@ class MailgunController extends Controller { protected $mailgunService; + protected $cpanelApiService; public function __construct() { $this->mailgunService = app(MailgunService::class); // Resolving through the service container + $this->cpanelApiService = app(CPanelApiService::class); + } + + public function test(){ + $domain = 'test.com'; + $email = "kundesone.$domain@mailgun.kundesone.no"; + dd($this->createEmail($domain,$email)); } public function addDomain($domain) @@ -35,7 +43,7 @@ public function addDomain($domain) $response = $this->mailgunService->addDomain($domain); - return route('showDomain',$domain)->redirect(); + return redirect()->route('showDomain',$domain); }else{ return redirect()->route('showDomain',$domain); @@ -69,19 +77,11 @@ public function verifyDomain(Request $request) if($state == 'unverified'){ return redirect()->route('showDomain',$domain); }elseif($state == 'active'){ - $this->createRoute($request); + //$this->createRoute($request); - $email = "kundesone.$domain@kundesone.no"; - $this->createEmail($domain,$email); + $email = "kundesone.$domain@mailgun.kundesone.no"; + $this->createEmail($domain); - $company = get_company('domain',$domain); - - if($company){ - $company->internal_email = $email; - $company->save(); - } - - return $email; return redirect('/dashboard'); } @@ -96,9 +96,9 @@ public function createRoute(Request $request) return $response; } - public function createEmail($domain,$email){ + public function createEmail($domain){ - + $email = "kundesone.$domain@mailgun.kundesone.no"; $password = Str::random(12); $quota = 0; @@ -108,6 +108,13 @@ public function createEmail($domain,$email){ return false; } + $company = get_company('domain',$domain); + + if($company){ + $company->internal_email = $email; + $company->save(); + } + return $email; } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 1cf5f15..025e874 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - public const HOME = '/home'; + public const HOME = '/dashboard'; /** * Define your route model bindings, pattern filters, and other route configuration. diff --git a/public/images/canned.png b/public/images/canned.png new file mode 100644 index 0000000000000000000000000000000000000000..1a58c97b7d13a592f7f430f88e0ca648a97d60fd GIT binary patch literal 21068 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 z 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 - - + + diff --git a/resources/views/domains/verify-domain.blade.php b/resources/views/domains/verify-domain.blade.php index 3f644a2..dcab299 100644 --- a/resources/views/domains/verify-domain.blade.php +++ b/resources/views/domains/verify-domain.blade.php @@ -31,11 +31,11 @@
-

Domain Verification Response

+

Instructions to verify domain. Read and apply carefully.

-
+
  • Domain is {{$domain->getDomain()->getState()}}
  • @@ -51,15 +51,16 @@
-

Inbound DNS Records

- @foreach($domain->getInboundDnsRecords() as $record) +

Step 1: Add Forwarder

+
-

Type: {{ $record->getType() }}

-

Value: {{ $record->getValue() }}

+

Forward your email to internal email. i.e kundesone.{{ $domain->getDomain()->getName() }}@mailgun.kundesone.no. Make sure you forward only your company email that you added on the time of registration.

+
- @endforeach - -

Outbound DNS Records

+ + + +

Step 2: Add Outbound DNS Records

@foreach($domain->getOutboundDnsRecords() as $record)

Type: {{ $record->getType() }}

@@ -67,6 +68,29 @@

Value: {{ $record->getValue() }}

@endforeach + + +

Step 3: Add Inbound DNS Records

+ @foreach($domain->getInboundDnsRecords() as $record) +
+

Type: {{ $record->getType() }}

+

Name: {{ $domain->getDomain()->getName() }}

+

Value: {{ $record->getValue() }}

+

Priority: 10

+
+ @endforeach + + + +

Note: DNS Propagation Time

+ +
+

DNS Propagation can take upto 48 hours. In this case your domain will not be active.

+ +
+ + +
diff --git a/resources/views/inbox-setting.blade.php b/resources/views/inbox-setting.blade.php index b9211dd..403f84c 100644 --- a/resources/views/inbox-setting.blade.php +++ b/resources/views/inbox-setting.blade.php @@ -30,7 +30,7 @@
- +
info E.g. support@yourcompany.com @@ -38,10 +38,10 @@
- +
info - Updates when you change the email address above + Your kundesone internal email address.
@@ -49,7 +49,7 @@
info - Your internal name. I.e. the email address + Your internal name. I.e. the Inbox
@@ -481,18 +481,25 @@ function toggleClosed(day) {

Canned responses

- @if(!is_null($canned_response)) - @foreach(json_decode($canned_response->value) as $index => $values) + @if(count($canned_response) > 0) + @foreach($canned_response as $index => $value) + + @php + + $result = json_decode($value->value); + + @endphp +
-

{{ $values->name }}

- {{ $values->text }} +

{{ $result->name }}

+ {{ $result->text }}
- +
@endforeach diff --git a/resources/views/inbox.blade.php b/resources/views/inbox.blade.php index b732bec..200f99e 100644 --- a/resources/views/inbox.blade.php +++ b/resources/views/inbox.blade.php @@ -75,8 +75,111 @@ class="form-control input-reply-textarea" id="editor1" required>
+ + + + + + + + + + + @@ -86,9 +189,105 @@ class="form-control input-reply-textarea" id="editor1" required>
+ + + + + + + + + + + + + - \ No newline at end of file + + + \ No newline at end of file diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php index 176a784..eaf5ebd 100644 --- a/resources/views/layouts/master.blade.php +++ b/resources/views/layouts/master.blade.php @@ -14,7 +14,7 @@ integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> - + diff --git a/resources/views/layouts/setting.blade.php b/resources/views/layouts/setting.blade.php index 35e30fb..058ba6a 100644 --- a/resources/views/layouts/setting.blade.php +++ b/resources/views/layouts/setting.blade.php @@ -21,7 +21,7 @@ - + diff --git a/resources/views/partials/action-box.blade.php b/resources/views/partials/action-box.blade.php index 2b02623..56b8ec2 100644 --- a/resources/views/partials/action-box.blade.php +++ b/resources/views/partials/action-box.blade.php @@ -1,3 +1,6 @@ + + +

Administrate

@@ -13,16 +16,50 @@
  • -

    Assign (Assign to me)

    -

    Chevron Right

    +

    Assign:

    +

    + +

    +

  • -

    Priority (Choose Priority)

    -

    Chevron Right

    +

    Priority:

    + +

    + +

    +

    +
  • -
  • +
  • Tags (Choose Tags)

    -

    Chevron Right

    + + + + + + + + + + + +
  • @@ -80,6 +117,31 @@ class="ui button comment--btn bg-light-green-color color-light comment-delete-bt
+ +