File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/Admin/AccountController.php
<?php
namespace App\Http\Controllers\Refactor\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\Language;
use App\Model\Contact;
class AccountController extends Controller
{
/**
* Save admin color scheme preference (AJAX, returns JSON).
*/
public function saveColorScheme(Request $request)
{
$admin = $request->user()->admin;
$allowed = ['default', 'blue', 'green', 'brown', 'pink', 'grey', 'white'];
$scheme = $request->input('color_scheme', 'default');
if (!in_array($scheme, $allowed)) {
$scheme = 'default';
}
$admin->color_scheme = $scheme;
$admin->save();
return response()->json(['status' => 'success', 'scheme' => $scheme]);
}
/**
* Get available languages for the language switcher popup.
*/
public function languages(Request $request)
{
$admin = $request->user()->admin;
$languages = Language::where('status', Language::STATUS_ACTIVE)->orderBy('name')->get();
$currentLang = $admin->language;
return view('refactor.pages.admin.account.languages', [
'languages' => $languages,
'currentLang' => $currentLang,
]);
}
/**
* Change the admin's language (AJAX, returns JSON).
*/
public function changeLanguage(Request $request)
{
$admin = $request->user()->admin;
$language = Language::findByUid($request->uid);
if (!$language) {
return response()->json([
'status' => 'error',
'message' => trans('refactor/admin_common.error.language_not_found'),
], 404);
}
$admin->language_id = $language->id;
$admin->save();
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_common.flash.language_changed_to', ['name' => $language->name]),
'code' => $language->code,
]);
}
/**
* Admin profile page (GET/POST).
*/
public function profile(Request $request)
{
$admin = $request->user()->admin;
$user = $request->user();
if ($request->isMethod('post')) {
$rules = [
'email' => 'required|email|unique:users,email,' . $user->id . ',id',
'first_name' => 'required',
'last_name' => 'required',
];
if ($request->password) {
$rules['password'] = 'min:5|confirmed';
}
$validator = \Validator::make($request->all(), $rules);
if ($validator->fails()) {
return back()->withErrors($validator)->withInput();
}
$user->fill($request->all());
if (!empty($request->password)) {
$user->password = bcrypt($request->password);
}
$user->save();
$admin->fill($request->all());
// Upload profile image
if ($request->hasFile('image') && $request->file('image')->isValid()) {
$user->uploadProfileImage($request->file('image'));
}
// Remove image
if ($request->_remove_image == 'true') {
$user->removeProfileImage();
}
$admin->save();
return redirect()->route('refactor.admin.account.profile')
->with('alert-success', trans('refactor/admin_account.flash.profile_updated'));
}
return view('refactor.pages.admin.admin-account.profile', [
'admin' => $admin,
'user' => $user,
]);
}
/**
* Admin contact page (GET/POST).
*/
public function contact(Request $request)
{
$admin = $request->user()->admin;
if ($admin->contact) {
$contact = $admin->contact;
} else {
$contact = new Contact([
'first_name' => $request->user()->first_name,
'last_name' => $request->user()->last_name,
'email' => $request->user()->email,
]);
}
if ($request->isMethod('post')) {
$validator = \Validator::make($request->all(), Contact::$rules);
if ($validator->fails()) {
return back()->withErrors($validator)->withInput();
}
$contact->fill($request->all());
if ($contact->save()) {
$admin->contact_id = $contact->id;
$admin->save();
}
return redirect()->route('refactor.admin.account.contact')
->with('alert-success', trans('refactor/admin_account.flash.contact_updated'));
}
return view('refactor.pages.admin.admin-account.contact', [
'admin' => $admin,
'contact' => $contact,
]);
}
/**
* Admin API token page.
*/
public function api(Request $request)
{
return view('refactor.pages.admin.admin-account.api');
}
/**
* Renew admin API token.
*/
public function renewToken(Request $request)
{
$user = $request->user();
$user->api_token = str_random(60);
$user->save();
return response()->json([
'message' => trans('refactor/admin_account.flash.token_renewed'),
'reload' => true,
]);
}
/**
* Admin 2FA settings page.
*/
public function twoFactor(Request $request)
{
$user = $request->user();
return view('refactor.pages.admin.admin-account.two_factor', [
'user' => $user,
]);
}
/**
* Enable/disable 2FA (AJAX).
*/
public function twoFactorEnable(Request $request)
{
$user = $request->user();
$user->enable_2fa = true;
$user->save();
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_account.flash.2fa_enabled'),
]);
}
public function twoFactorDisable(Request $request)
{
$user = $request->user();
$user->enable_2fa = false;
$user->enable_2fa_email = false;
$user->enable_2fa_google_authenticator = false;
$user->save();
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_account.flash.2fa_disabled'),
]);
}
/**
* Save 2FA methods (AJAX).
*/
public function twoFactorSave(Request $request)
{
$user = $request->user();
$user->enable_2fa = $request->enable_2fa;
$user->enable_2fa_email = $request->enable_2fa_email;
$user->enable_2fa_google_authenticator = $request->enable_2fa_google_authenticator;
$user->save();
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_account.flash.2fa_saved'),
]);
}
/**
* Generate Google Authenticator key.
*/
public function twoFactorGenerateKey(Request $request)
{
$user = $request->user();
$google2fa = app('pragmarx.google2fa');
$secret = $google2fa->generateSecretKey();
$qrCodeUrl = $google2fa->getQRCodeUrl(
config('app.name'),
$user->email,
$secret
);
return response()->json([
'status' => 'success',
'secret' => $secret,
'qr_url' => $qrCodeUrl,
]);
}
/**
* Save Google Authenticator key.
*/
public function twoFactorSaveKey(Request $request)
{
$user = $request->user();
$google2fa = app('pragmarx.google2fa');
$valid = $google2fa->verifyKey($request->secret, $request->code);
if (!$valid) {
return response()->json([
'status' => 'error',
'message' => 'Invalid verification code.',
], 422);
}
$user->google2fa_secret = $request->secret;
$user->enable_2fa_google_authenticator = true;
$user->save();
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_account.flash.2fa_google_saved'),
]);
}
}