Viewing file: EmailServerController.php (8.09 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Admin;
use App\EmailProvider\SendMailProcess; use App\Http\Controllers\Controller; use App\Models\Customer; use App\Models\Message; use App\Models\SendingServer; use Illuminate\Http\Request; use Illuminate\Support\Str;
class EmailServerController extends Controller { public function index() { return view('admin.servers.index'); }
public function getAll() { $sending_servers = auth()->user()->sending_servers()->where('sending_type', 'production')->select(['id', 'title', 'from', 'status', 'created_at']); return datatables()->of($sending_servers) ->addColumn('created_at', function ($q) { return $q->created_at->format('d-m-Y'); }) ->addColumn('from', function ($q) { return format_field_name($q->from); }) ->addColumn('action', function ($q) { return "<a class='btn btn-sm btn-info' href='" . route('admin.servers.edit', [$q->id]) . "'>Edit</a> " . '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to delete this server?" data-action=' . route('admin.servers.destroy', [$q]) . ' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm">Delete</button>'; }) ->rawColumns(['action']) ->toJson(); }
public function getFields(Request $request) { return servers_fields($request->sending_server); }
public function create() { return view('admin.servers.create'); }
public function store(Request $request) { $request->validate([ 'title' => 'required', 'from' => 'required|in:' . implode(',', available_servers()), 'status' => 'required|in:active,inactive', 'priority' => 'required|integer|gt:0', 'hourly_limit' => 'required|integer|gt:17', 'daily_limit' => 'required|integer|gt:17', 'monthly_limit' => 'required|integer|gt:17', 'from_email' => 'required' ], [ 'from.in' => 'Invalid server selected' ]);
auth()->user()->sending_servers()->create([ 'title' => $request->title, 'from' => $request->from, 'value' => json_encode($request->only(servers_fields($request->from))), 'status' => $request->status, 'hourly_limit' => $request->hourly_limit, 'daily_limit' => $request->daily_limit, 'monthly_limit' => $request->monthly_limit, 'from_email' => $request->from_email, 'delay_send' => $request->delay_send, 'priority' => $request->priority, 'sending_type' => 'production', ]);
return redirect()->route('admin.servers.index')->with('success', 'Server successfully added'); }
public function edit(SendingServer $server) { $data['server'] = $server; return view('admin.servers.edit', $data); }
public function update(SendingServer $server, Request $request) { $request->validate([ 'title' => 'required', 'from' => 'required|in:' . implode(',', available_servers()), 'status' => 'required|in:active,inactive', 'priority' => 'required|integer|gt:0', 'hourly_limit' => 'required|integer|gt:17', 'daily_limit' => 'required|integer|gt:17', 'monthly_limit' => 'required|integer|gt:17', 'from_email' => 'required' ], [ 'from.in' => 'Invalid server selected' ]);
auth()->user()->sending_servers()->where('id', $server->id)->update([ 'title' => $request->title, 'value' => json_encode($request->only(servers_fields($request->from))), 'status' => $request->status, 'hourly_limit' => $request->hourly_limit, 'daily_limit' => $request->daily_limit, 'monthly_limit' => $request->monthly_limit, 'from_email' => $request->from_email, 'delay_send' => $request->delay_send, 'priority' => $request->priority, ]);
return back()->with('success', 'Server successfully updated'); }
public function destroy(SendingServer $server) { $sendingServer = auth()->user()->sending_servers()->where('id', $server->id)->first();
//TODO:: check customer servers /* if ($sendingServer->customer_servers->isNotEmpty()) { return back()->with('fail', 'Sorry server is already in used'); }*/ $sendingServer->delete(); return back()->with('success', 'Server successfully deleted'); }
public function testConnection(Request $request) { $request->validate([ 'title' => 'required', 'from' => 'required|in:' . implode(',', available_servers()), 'priority' => 'required|integer|gt:0', 'hourly_limit' => 'required|integer|gt:17', 'daily_limit' => 'required|integer|gt:17', 'monthly_limit' => 'required|integer|gt:17', 'from_email' => 'required|email' ], [ 'from.in' => 'Invalid server selected' ]); $customer = Customer::where('id', 1)->firstOrfail();
$preSendingServer = auth()->user()->sending_servers()->where('sending_type', 'test')->first(); if ($preSendingServer) { $customer->email_queues()->where('sending_server_id', $preSendingServer->id)->delete(); $preSendingServer->delete(); }
$sendingServer = auth()->user()->sending_servers()->create([ 'title' => $request->title, 'from' => $request->from, 'value' => json_encode($request->only(servers_fields($request->from))), 'status' => $request->status, 'hourly_limit' => $request->hourly_limit, 'daily_limit' => $request->daily_limit, 'monthly_limit' => $request->monthly_limit, 'from_email' => $request->from_email, 'delay_send' => $request->delay_send, 'priority' => 1, 'sending_type' => 'test', ]);
//Generating dynamic validation $availableFields = servers_fields($request->from); $validation = []; foreach ($availableFields as $field) { $validation[$field] = 'required'; } $request->validate($validation); $body = 'Hi, Welcome! If you got this email then your configuration working perfectly. Thanks.'; $to = $request->to_mail; $from_email = $request->from_email; $subject = 'Testing Sending Server';
$newMessage = $customer->messages()->create([ 'body' => $body, 'emails' => json_encode(['from' => $from_email, 'to' => [$to]]), 'type' => 'sent', 'schedule_datetime' => now(), ]);
$email_queue = [ 'random_ref_key' => Str::random(), 'message_id' => $newMessage->id, 'sending_server_id' => $sendingServer->id, 'from' => $from_email, 'to' => $to, 'schedule_datetime' => now(), 'schedule_completed' =>'yes', 'body' => $body, 'reply_to' => $from_email, 'from_name' => getNameFromEmail($from_email), 'created_at' => now(), 'updated_at' => now(), 'subject' => $subject, 'type' => 'sent', ]; $smsQueue = $customer->email_queues()->create($email_queue); $customer->message_logs()->create($email_queue); $server_config_value[$request->from] = $sendingServer;
$sendEmail = new SendMailProcess(); $sendEmail->setProvider($request->from) ->serverConfig($server_config_value) ->setMessage($smsQueue) ->process();
return response()->json(['message' => "The test email has been queued. Please make sure you have setup CronJob"], 200); } }
|