diff --git a/app/Http/Controllers/V1/Admin/Settings/CompanyController.php b/app/Http/Controllers/V1/Admin/Settings/CompanyController.php index 5bc05160..5be1269e 100644 --- a/app/Http/Controllers/V1/Admin/Settings/CompanyController.php +++ b/app/Http/Controllers/V1/Admin/Settings/CompanyController.php @@ -3,48 +3,13 @@ namespace App\Http\Controllers\V1\Admin\Settings; use App\Http\Controllers\Controller; -use App\Http\Requests\AvatarRequest; use App\Http\Requests\CompanyLogoRequest; use App\Http\Requests\CompanyRequest; -use App\Http\Requests\ProfileRequest; use App\Http\Resources\CompanyResource; -use App\Http\Resources\UserResource; use App\Models\Company; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; class CompanyController extends Controller { - /** - * Retrive the Admin account. - * - * @return JsonResponse - */ - public function getUser(Request $request) - { - return new UserResource($request->user()); - } - - /** - * Update the Admin profile. - * Includes name, email and (or) password - * - * @return JsonResponse - */ - public function updateProfile(ProfileRequest $request) - { - $user = $request->user(); - - $user->update($request->validated()); - - return new UserResource($user); - } - - /** - * Update Admin Company Details - * - * @return JsonResponse - */ public function updateCompany(CompanyRequest $request) { $company = Company::find($request->header('company')); @@ -58,11 +23,6 @@ class CompanyController extends Controller return new CompanyResource($company); } - /** - * Upload the company logo to storage. - * - * @return JsonResponse - */ public function uploadCompanyLogo(CompanyLogoRequest $request) { $company = Company::find($request->header('company')); @@ -90,35 +50,4 @@ class CompanyController extends Controller 'success' => true, ]); } - - /** - * Upload the Admin Avatar to public storage. - * - * @return JsonResponse - */ - public function uploadAvatar(AvatarRequest $request) - { - $user = auth()->user(); - - if (isset($request->is_admin_avatar_removed) && (bool) $request->is_admin_avatar_removed) { - $user->clearMediaCollection('admin_avatar'); - } - if ($user && $request->hasFile('admin_avatar')) { - $user->clearMediaCollection('admin_avatar'); - - $user->addMediaFromRequest('admin_avatar') - ->toMediaCollection('admin_avatar'); - } - - if ($user && $request->has('avatar')) { - $data = json_decode($request->avatar); - $user->clearMediaCollection('admin_avatar'); - - $user->addMediaFromBase64($data->data) - ->usingFileName($data->name) - ->toMediaCollection('admin_avatar'); - } - - return new UserResource($user); - } } diff --git a/app/Http/Controllers/V1/Admin/Settings/UserProfileController.php b/app/Http/Controllers/V1/Admin/Settings/UserProfileController.php new file mode 100644 index 00000000..a5329963 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Settings/UserProfileController.php @@ -0,0 +1,52 @@ +user()); + } + + public function update(ProfileRequest $request) + { + $user = $request->user(); + + $user->update($request->validated()); + + return new UserResource($user); + } + + public function uploadAvatar(AvatarRequest $request) + { + $user = auth()->user(); + + if (isset($request->is_admin_avatar_removed) && (bool) $request->is_admin_avatar_removed) { + $user->clearMediaCollection('admin_avatar'); + } + if ($user && $request->hasFile('admin_avatar')) { + $user->clearMediaCollection('admin_avatar'); + + $user->addMediaFromRequest('admin_avatar') + ->toMediaCollection('admin_avatar'); + } + + if ($user && $request->has('avatar')) { + $data = json_decode($request->avatar); + $user->clearMediaCollection('admin_avatar'); + + $user->addMediaFromBase64($data->data) + ->usingFileName($data->name) + ->toMediaCollection('admin_avatar'); + } + + return new UserResource($user); + } +} diff --git a/config/invoiceshelf.php b/config/invoiceshelf.php index 74148ac4..4fc2e7b5 100644 --- a/config/invoiceshelf.php +++ b/config/invoiceshelf.php @@ -130,16 +130,6 @@ return [ * List of setting menu */ 'setting_menu' => [ - [ - 'title' => 'settings.menu_title.account_settings', - 'group' => '', - 'name' => 'Account Settings', - 'link' => '/admin/settings/account-settings', - 'icon' => 'UserIcon', - 'owner_only' => false, - 'ability' => '', - 'model' => '', - ], [ 'title' => 'settings.menu_title.company_information', 'group' => '', diff --git a/lang/en.json b/lang/en.json index 168a94fb..93991e99 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1133,12 +1133,14 @@ } }, "account_settings": { - "profile_picture": "Profile Picture", + "profile_picture": "Profile Photo", "name": "Name", "email": "Email", "password": "Password", "confirm_password": "Confirm Password", - "account_settings": "Account Settings", + "account_settings": "User Settings", + "general": "General", + "security": "Security", "save": "Save", "section_description": "You can update your name, email & password using the form below.", "updated_message": "Account Settings updated successfully" diff --git a/resources/scripts/admin/admin-router.js b/resources/scripts/admin/admin-router.js index 3f18fa2b..20d73670 100644 --- a/resources/scripts/admin/admin-router.js +++ b/resources/scripts/admin/admin-router.js @@ -23,8 +23,8 @@ const CustomerView = () => import('@/scripts/admin/views/customers/View.vue') //Settings const SettingsIndex = () => import('@/scripts/admin/views/settings/SettingsIndex.vue') -const AccountSetting = () => - import('@/scripts/admin/views/settings/AccountSetting.vue') +const UserSettingsIndex = () => + import('@/scripts/admin/views/user-settings/UserSettingsIndex.vue') const CompanyInfo = () => import('@/scripts/admin/views/settings/CompanyInfoSettings.vue') const Preferences = () => @@ -243,17 +243,19 @@ export default [ component: PaymentView, }, + // user settings + { + path: 'user-settings', + name: 'user.settings', + component: UserSettingsIndex, + }, + //settings { path: 'settings', name: 'settings', component: SettingsIndex, children: [ - { - path: 'account-settings', - name: 'account.settings', - component: AccountSetting, - }, { path: 'company-info', name: 'company.info', diff --git a/resources/scripts/admin/layouts/partials/TheSiteHeader.vue b/resources/scripts/admin/layouts/partials/TheSiteHeader.vue index 3db6081c..640e5ff4 100644 --- a/resources/scripts/admin/layouts/partials/TheSiteHeader.vue +++ b/resources/scripts/admin/layouts/partials/TheSiteHeader.vue @@ -147,7 +147,7 @@ /> - + -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ $t('settings.company_info.save') }} - - -
- - - diff --git a/resources/scripts/admin/views/settings/SettingsIndex.vue b/resources/scripts/admin/views/settings/SettingsIndex.vue index 2ccd3496..42728de7 100644 --- a/resources/scripts/admin/views/settings/SettingsIndex.vue +++ b/resources/scripts/admin/views/settings/SettingsIndex.vue @@ -5,7 +5,7 @@ @@ -75,7 +75,7 @@ const dropdownMenuItems = computed(() => { watchEffect(() => { if (route.path === '/admin/settings') { - router.push('/admin/settings/account-settings') + router.push('/admin/settings/company-info') } const item = dropdownMenuItems.value.find((item) => { diff --git a/resources/scripts/admin/views/user-settings/GeneralTab.vue b/resources/scripts/admin/views/user-settings/GeneralTab.vue new file mode 100644 index 00000000..24d3e6e0 --- /dev/null +++ b/resources/scripts/admin/views/user-settings/GeneralTab.vue @@ -0,0 +1,121 @@ + + + diff --git a/resources/scripts/admin/views/user-settings/ProfilePhotoTab.vue b/resources/scripts/admin/views/user-settings/ProfilePhotoTab.vue new file mode 100644 index 00000000..c30c3526 --- /dev/null +++ b/resources/scripts/admin/views/user-settings/ProfilePhotoTab.vue @@ -0,0 +1,78 @@ + + + diff --git a/resources/scripts/admin/views/user-settings/SecurityTab.vue b/resources/scripts/admin/views/user-settings/SecurityTab.vue new file mode 100644 index 00000000..cffa139b --- /dev/null +++ b/resources/scripts/admin/views/user-settings/SecurityTab.vue @@ -0,0 +1,105 @@ + + + diff --git a/resources/scripts/admin/views/user-settings/UserSettingsIndex.vue b/resources/scripts/admin/views/user-settings/UserSettingsIndex.vue new file mode 100644 index 00000000..71490947 --- /dev/null +++ b/resources/scripts/admin/views/user-settings/UserSettingsIndex.vue @@ -0,0 +1,47 @@ + + + diff --git a/routes/api.php b/routes/api.php index 9b25b9ab..7b783fe3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -61,6 +61,7 @@ use App\Http\Controllers\V1\Admin\Settings\CompanyCurrencyCheckTransactionsContr use App\Http\Controllers\V1\Admin\Settings\CompanyMailConfigurationController; use App\Http\Controllers\V1\Admin\Settings\CompanySettingsController; use App\Http\Controllers\V1\Admin\Settings\TaxTypesController; +use App\Http\Controllers\V1\Admin\Settings\UserProfileController; use App\Http\Controllers\V1\Admin\Settings\UserSettingsController; use App\Http\Controllers\V1\Admin\Users\UsersController; use App\Http\Controllers\V1\Customer\Auth\ForgotPasswordController as AuthForgotPasswordController; @@ -378,15 +379,15 @@ Route::prefix('/v1')->group(function () { // Settings // ---------------------------------- - Route::get('/me', [CompanyController::class, 'getUser']); + Route::get('/me', [UserProfileController::class, 'show']); - Route::put('/me', [CompanyController::class, 'updateProfile']); + Route::put('/me', [UserProfileController::class, 'update']); Route::get('/me/settings', [UserSettingsController::class, 'show']); Route::put('/me/settings', [UserSettingsController::class, 'update']); - Route::post('/me/upload-avatar', [CompanyController::class, 'uploadAvatar']); + Route::post('/me/upload-avatar', [UserProfileController::class, 'uploadAvatar']); Route::put('/company', [CompanyController::class, 'updateCompany']); diff --git a/tests/Feature/Admin/CompanySettingTest.php b/tests/Feature/Admin/CompanySettingTest.php index d6f03199..1f1c95a4 100644 --- a/tests/Feature/Admin/CompanySettingTest.php +++ b/tests/Feature/Admin/CompanySettingTest.php @@ -1,6 +1,7 @@ assertActionUsesFormRequest( - CompanyController::class, - 'updateProfile', + UserProfileController::class, + 'update', ProfileRequest::class ); });