<?php
namespace App\Http\Controllers;
use App\Jobs\SendGeneralEmail;
use App\Traits\ImageStore;
use App\User;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Session;
use Modules\Appointment\Repositories\Interfaces\AppointmentRepositoryInterface;
use Modules\Localization\Entities\Language;
use Modules\Newsletter\Http\Controllers\AcelleController;
use Modules\Newsletter\Http\Controllers\GetResponseController;
use Modules\Newsletter\Http\Controllers\MailchimpController;
use Modules\SystemSetting\Entities\Currency;
class UserController extends Controller
{
use ImageStore;
public function __construct()
{
}
public function changePassword(Request $request)
{
try {
$user = User::where('id', Auth::id())->with('role')->first();
$currencies = Currency::whereStatus('1')->get();
$languages = Language::whereStatus('1')->get();
$countries = DB::table('countries')->whereActiveStatus(1)->get();
$states = DB::table('states')->where('country_id', $user->country)->where('id', $user->state)->select('id', 'name')->get();
$cities = DB::table('spn_cities')->where('state_id', $user->state)->where('id', $user->city)->select('id', 'name')->get();
if (isModuleActive('Appointment') && auth()->user()->role_id == 2) {
$interface = App::make(AppointmentRepositoryInterface::class);
$data = $interface->requiredData();
$data['type'] = $request->type;
return view('appointment::instructor.profile_update', compact('cities', 'user', 'currencies', 'languages', 'countries', 'states'))->with($data);
}
return view('backend.changePassword', compact('cities', 'user', 'currencies', 'languages', 'countries', 'states'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function updatePassword(Request $request)
{
$request->validate([
'current_password' => "required",
'new_password' => "required|same:confirm_password|min:8|different:current_password",
'confirm_password' => 'required|min:8'
]);
try {
if (demoCheck()) {
return redirect()->back();
}
$user = Auth::user();
if (Hash::check($request->current_password, $user->password)) {
$user->password = Hash::make($request->new_password);
$result = $user->save();
if ($result) {
SendGeneralEmail::dispatch($user, $type = 'PASS_UPDATE', $shortcodes = ['time' => now()->format(Settings('active_date_format') . ' H:i:s A')]);
Auth::logout();
session(['role_id' => '']);
Session::flush();
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} else {
Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
return redirect()->back();
}
} else {
Toastr::error('Current password not match!', 'Failed');
return redirect()->back();
}
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function update_user(Request $request)
{
$request->validate([
'name' => "required",
'email' => "required|unique:users,email," . Auth::id(),
'phone' => 'nullable|string|regex:/^([0-9\s\-\+\(\)]*)$/|min:1|unique:users,phone,' . Auth::id(),
]);
try {
if (demoCheck()) {
return redirect()->back();
}
$user = Auth::user();
$user->name = $request->name;
$user->email = $request->email;
$user->phone = $request->phone;
$user->city = $request->city;
$user->state = $request->state;
$user->zip = $request->zip;
$user->currency_id = $request->currency;
$user->language_id = $request->language;
$language = Language::find($request->language);
$user->language_code = $language->code;
$user->language_name = $language->name;
$user->country = $request->country;
$user->facebook = $request->facebook;
$user->twitter = $request->twitter;
$user->linkedin = $request->linkedin;
$user->instagram = $request->instagram;
$user->short_details = $request->short_details;
$user->subscription_method = $request->subscription_method;
$user->subscription_api_key = $request->subscription_api_key;
$sub_status = false;
if ($request->subscription_method == "Mailchimp") {
$mailchimp = new MailchimpController();
$mailchimp->mailchimp($request->subscription_api_key);
$sub_status = $mailchimp->connected;
} elseif ($request->subscription_method == "GetResponse") {
$getResponse = new GetResponseController();
$getResponse->getResponseApi($request->subscription_api_key);
$sub_status = $getResponse->connected;
} elseif ($request->subscription_method == "Acelle") {
$acelleController = new AcelleController();
$acelle = $acelleController->getAcelleApiResponse();
$sub_status = $acelleController->connected;
}
if ($request->file('image') != "") {
$user->image = $this->saveImage($request->file('image'));
}
$user->subscription_api_status = $sub_status;
if (!empty($request->about)) {
$user->about = $request->about;
}
if (isModuleActive('Appointment')) {
$user->gender = $request->gender;
$user->hour_rate = $request->hour_rate;
$user->types = json_encode($request->type);
$user->is_available = $request->available == 'on' ? 1 : 0;
$user->headline = $request->headline;
$user->short_video_link = $request->video_link;
$user->available_msg = $request->available_message;
}
$user->save();
if (isModuleActive('Appointment')) {
$interface = App::make(AppointmentRepositoryInterface::class);
$interface->instructorStoreData($request->all(), $user->id);
}
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function changeLanguage($language_code)
{
$language = Language::where('status', 1)->where('code', $language_code)->first();
if ($language) {
if (Auth::check()) {
//set session & set user
$user = Auth::user();
$user->language_id = $language->id;
$user->language_code = $language->code;
$user->language_name = $language->name;
$user->language_rtl = $language->rtl;
$user->save();
} else {
Session::put('locale', $language->code);
Session::put('language_name', $language->name);
Session::put('language_rtl', $language->rtl);
}
App::setLocale($language->code);
$success_msg = trans('setting.Successfully changed language');
Toastr::success($success_msg, trans('common.Success'));
return redirect()->back();
} else {
Toastr::error('Failed to change language', trans('common.Failed'));
return redirect()->back();
}
}
}