Viewing file: SettingsController.php (12.83 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Customer;
use App\Http\Controllers\Controller;
use App\Models\AuthorizationToken;
use App\Models\Customer;
use App\Models\CustomerSettings;
use App\Models\EmailTemplate;
use App\Models\SmsTemplate;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
class SettingsController extends Controller
{
public function index()
{
$data['customer']=$customer = auth('customer')->user();
$settings=$customer->settings;
$customer_settings=[];
foreach ($settings as $setting){
$customer_settings[$setting->name]=$setting->value;
}
$data['sms_templates']= SmsTemplate::where('customer_id',$customer->id)->get();
$data['customer_settings']=$customer_settings;
$data['gateway']=isset($customer_settings['payment_gateway'])?json_decode($customer_settings['payment_gateway']):[];
$data['otp_setting']=isset($customer_settings['otp_setting'])?json_decode($customer_settings['otp_setting']):[];
$gatewaysValues =auth('customer')->user()->settings()->where('name', 'payment_gateway_values')->first();
$data['gateway_values'] = isset($gatewaysValues->value)?json_decode($gatewaysValues->value):'';
$data['domain']=[];
$data['verification']=[];
$data['gateways']=$customer->settings->where('name', 'payment_gateway')->first();
$data['admin_otp_setting'] = get_settings('otp_setting') ? json_decode(get_settings('otp_setting')) : '';
$data['authorizationToken']= AuthorizationToken::where('customer_id', $customer->id)->first();
return view('customer.settings.index', $data);
}
public function local_setting(Request $request){
$request->validate([
'language' => 'required',
'date_time_format' => 'required',
'date_time_separator' => 'required',
'timezone' => 'required',
]);
$availableLang = get_available_languages();
$type = $request->language;
if (!in_array($type, $availableLang)){
abort('404');
}
session()->put('locale', $type);
app()->setLocale($type);
$localSetting = $request->only( 'language', 'date_time_format', 'date_time_separator', 'timezone');
$data = ['name' => 'local_setting'];
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = json_encode($localSetting);
$setting->save();
cache()->flush();
return redirect()->back()->with('success', trans('admin.message.local_setting_updated'));
}
public function smtp_update(Request $request){
$request->validate([
'from'=>'required|email',
'host'=>'required',
'name'=>'required',
'username'=>'required',
'password'=>'required',
'port'=>'required|numeric',
'encryption'=>'required|in:ssl,tls',
]);
unset($request['_token']);
$body = "Hi,\n\nHow are you?";
$host = $request->host;
$port = $request->port;
$username = $request->username;
$password = $request->password;
$config = array(
'driver' => 'smtp',
'host' => $host,
'port' => $port,
'from' => array('address' => $request->from, 'name' => $request->name),
'encryption' => $request->encryption,
'username' => $username,
'password' => $password,
);
Config::set('mail', $config);
try {
Mail::send('sendMail', ['htmlData' => $body], function ($message) {
$message->to("tuhin.picotech@gmail.com")->subject
("Setting check");
});
} catch (\Exception $ex) {
return redirect()->back()->withErrors(['msg' => trans('Invalid email credentials')]);
}
foreach ($request->all() as $key => $req) {
$data = ['name' => 'mail_' . $key];
$setting = auth()->user()->settings()->firstOrNew($data);
$setting->value = $request->$key;
$setting->save();
}
//we need to flush the cache as settings are from cache
cache()->flush();
return back()->with('success', 'SMTP configuration successfully updated');
}
public function app_update(Request $request)
{
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$request->validate([
'app_name' => 'required',
'logo'=>'image',
'favicon'=>'image',
]);
//TODO:: in future update the settings dynamically
//update application name
$data = ['name' => 'app_name'];
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = $request->app_name;
$setting->save();
//update favicon
if ($request->hasFile('favicon')) {
$file = $request->file('favicon');
$favicon_name = time() . '.' . $file->getClientOriginalExtension();
$file->move(public_path('/uploads'), $favicon_name);
$data = ['name' => 'app_favicon'];
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = $favicon_name;
$setting->save();
}
//update logo
if ($request->hasFile('logo')) {
$file = $request->file('logo');
$logo_name = time() . '.' . $file->getClientOriginalExtension();
$file->move(public_path('/uploads'), $logo_name);
$data = ['name' => 'app_logo'];
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = $logo_name;
$setting->save();
}
cache()->flush();
return redirect()->back()->with('success', 'Application successfully updated');
}
public function sending_setting(Request $request){
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$data=['name'=>'daily_send_limit'];
$sendData=$request->only('send_limit');
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = json_encode($sendData);
$setting->save();
$sendLimit=['name'=>'minute_send_limit'];
$sendLimitData=$request->only('message_limit','minute_limit');
$setting = auth('customer')->user()->settings()->firstOrNew($sendLimit);
$setting->value = json_encode($sendLimitData);
$setting->save();
$days=[];
if($request->offday){
foreach ($request->offday as $key=>$day){
$days[]= strtolower($day);
}
}
$request['offdays']= json_encode($days);
$sendingSetting=['name'=>'sending_setting'];
$sendingSettingData=$request->only('start_time','end_time','offdays');
$setting = auth('customer')->user()->settings()->firstOrNew($sendingSetting);
$setting->value = json_encode($sendingSettingData);
$setting->save();
cache()->flush();
return redirect()->back()->with('success', 'Sending setting successfully updated');
}
public function profile_update(Request $request)
{
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$request->validate([
'first_name' => 'required',
'email' => 'required|unique:customers,email,' . auth('customer')->id(),
'profile'=>'image'
]);
$user = auth('customer')->user();
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
if ($request->hasFile('profile')){
$file=$request->file('profile');
$imageName = time().'.'.$file->getClientOriginalExtension();
$file->move(public_path('/uploads'), $imageName);
$user->profile_picture=$imageName;
}
$user->save();
return redirect()->back()->with('success', 'Profile successfully updated');
}
public function password_update(Request $request)
{
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$request->validate([
'old_password' => 'required',
'new_password' => 'required|min:6|confirmed',
]);
$customer = auth('customer')->user();
if (!Hash::check($request->old_password, $customer->password)) {
return back()->with('fail', 'Invalid old password. Please try with valid password');
}
$customer->password = bcrypt($request->new_password); //remove the bcrypt
$customer->save();
return redirect()->back()->with('success', 'Password successfully changed');
}
public function notification_update(Request $request)
{
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$request->validate([
'isChecked' => 'required|in:true,false'
]);
$data = [
'name' => 'email_notification',
];
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = $request->isChecked;
$setting->save();
return response()->json(['status' => 'success', 'message' => 'Email notification updated']);
}
public function webhookUpdate(Request $request)
{
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$request->validate([
'type'=>'required|in:get,post',
]);
$data = [
'name' => 'webhook',
];
$customerNumbers = auth('customer')->user()->numbers;
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$updatedId= [];
foreach ($customerNumbers as $customerNumber){
if (!$customerNumber->webhook_url || isset(json_decode($setting->value)->url) && $customerNumber->webhook_url == json_decode($setting->value)->url) {
$updatedId[] = $customerNumber->id;
}
}
$setting->value = json_encode($request->only('url','type'));
$setting->save();
$customerNumberUpdate = $customerNumbers->whereIn('id', $updatedId);
foreach ($customerNumberUpdate as $update){
$update->webhook_url = $request->url;
$update->webhook_method = $request->type;
$update->save();
}
return response()->json(['status' => 'success', 'message' => 'Webhook updated successfully']);
}
public function dataPosting(Request $request)
{
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$request->validate([
'type'=>'required|in:get,post',
]);
$data = [
'name' => 'data_posting',
];
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = json_encode($request->only('url','type'));
$setting->save();
cache()->flush();
return response()->json(['status' => 'success', 'message' => 'Data Posting URL updated successfully']);
}
public function downloadSample($type,Request $request){
if($type=='group'){
return response()->download(public_path('csv/sample-group.csv'));
}
}
public function otpSettings(Request $request)
{
if (env("APP_DEMO")){
return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]);
}
$data = [
'name' => 'otp_setting',
];
$setting = auth('customer')->user()->settings()->firstOrNew($data);
$setting->value = json_encode($request->only('phone_number','from_type','sender_id','status'));
$setting->save();
return redirect()->back()->with('success','OTP Settings Successfully Updated');
}
public function setLocale($type){
$availableLang = get_available_languages();
if (!in_array($type, $availableLang)) abort(400);
session()->put('locale', $type);
return redirect()->back();
}
}
|