Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Admin/UserController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Helpers\Helper;

use DB, Exception, Setting, Hash, Storage, Excel;

use App\Models\{ User, Wishlist };

use App\Http\Requests\Admin\User\{ UserPostRequest, UserGetRequest };

use App\Services\{ EmailService };

use App\Exports\{ UsersExport };

class UserController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(Request $request)
    {
        $this->middleware('auth:admin');

        $this->skip = $request->skip ?: 0;
       
        $this->take = $request->take ?: (Setting::get('admin_take_count') ?: TAKE_COUNT);
    }

    /**
     * @method users_index()
     *
     * @uses to list the users
     *
     * @created Karthick
     *
     * @updated  
     *
     * @param
     *
     * @return to users index page
     */

    public function users_index(Request $request) {

        $base_query = User::orderBy('created_at','DESC');

        if($request->filled('search_key')) {

            $base_query = $base_query->where(function ($query) use ($request) {
                                $query->where('name', "LIKE", "%" . $request->search_key . "%");
                                $query->orWhere('email', "LIKE", "%" . $request->search_key . "%");
                                $query->orWhere('mobile', "LIKE", "%" . $request->search_key . "%");
                            });
        }

        if($request->filled('status')) {

            $base_query = $base_query->where('status', $request->status);
            
        } 

        if(isset($request->is_email_verified)) {

            $base_query = $base_query->where('is_email_verified', $request->is_email_verified); 
        } 

        $users = $base_query->paginate($this->take);
        
        return view('admin.users.index')
                    ->with('page', 'users')
                    ->with('sub_page', 'users-view')
                    ->with('users', $users);
    
    }

    /**
     * @method users_create()
     *
     * @uses To create a new user
     *
     * @created  Karthick
     *
     * @updated 
     *
     * @param create a new object
     * 
     * @return to create user page
     *
     */
    public function users_create() {

        $user = new User;

        return view('admin.users.create')
                    ->with('page', 'users')
                    ->with('sub_page', 'users-create')
                    ->with('user', $user);           
    }

    /**
     * @method users_edit()
     *
     * @uses to edit user details based on the user_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - user_id
     * 
     * @return to edit user page 
     *
     */
    public function users_edit(UserGetRequest $request) {

        try {

            $user = User::find($request->user_id);

            return view('admin.users.edit')
                    ->with('page' , 'users')
                    ->with('sub_page','users-create')
                    ->with('user' , $user); 
            
        } catch(Exception $e) {

            return redirect()->route('admin.users.index')->with('flash_error', $e->getMessage());
        }
    
    }

    /**
     * @method users_save()
     *
     * @uses to save the user details of new/existing object based on user_id
     *
     * @created Karthick
     *
     * @updated
     *
     * @param object $request - user_id
     *
     * @return view user page
     *
     */
    public function users_save(UserPostRequest $request) {
            
        try {

            DB::begintransaction();

            $user = User::updateOrCreate(['id' => $request->user_id], $request->validated());
            
            if($request->hasFile('picture')) {

                $request->user_id ? Helper::storage_delete_file($user->picture, PROFILE_PATH_USER) : ''; 

                $user->picture = Helper::storage_upload_file($request->file('picture'), PROFILE_PATH_USER);
          
            }

            if($request->hasFile('cover')) {

                $request->user_id ? Helper::storage_delete_file($user->cover, PROFILE_PATH_USER) : ''; 

                $user->cover = Helper::storage_upload_file($request->file('cover'), PROFILE_PATH_USER);
            
            }

            if($user->save()) {

                DB::commit();

                if($user->wasRecentlyCreated) {

                    EmailService::send_admin_welcome_email($user);
                }

                $message = $request->user_id ? tr('user_updated_success') : tr('user_created_success');

                return redirect(route('admin.users.view', ['user_id' => $user->id ]))->with('flash_success', $message);

            }

            throw new Exception(tr('user_save_failed'));
            
        } catch(Exception $e){ 

            DB::rollback();

            return back()->withInput()->with('flash_error', $e->getMessage());

        } 

    }

    /**
     * @method users_view()
     *
     * @uses to view the user details based on user_id
     *
     * @created Karthick 
     *
     * @updated 
     *
     * @param object $request - user_id
     * 
     * @return View page
     *
     */
    public function users_view(UserGetRequest $request) {
       
        try {
      
            $user = User::withCount(['userWithdrawals', 'walletTransactions', 'wishlists', 'orders'])->find($request->user_id);   

            return view('admin.users.view')
                        ->with('page', 'users')
                        ->with('sub_page', 'users-view')
                        ->with('user',$user);
            
        } catch (Exception $e) {

            return redirect()->route('admin.users.index')->with('flash_error', $e->getMessage());
        }
    
    }


    /**
     * @method users_status
     *
     * @uses to change user status as DECLINED/APPROVED based on user_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - user_id
     * 
     * @return response success/failure message
     *
     **/
    public function users_status(UserGetRequest $request) {

        try {

            DB::beginTransaction();

            $user = User::find($request->user_id);

            $result = $user->update(['status' => $user->status ? DECLINED : APPROVED]);

            if($result) {

                DB::commit();

                $message = $user->status ? tr('user_approve_success') : tr('user_decline_success');

                return back()->with('flash_success', $message);
            }
            
            throw new Exception(tr('user_status_change_failed'));

        } catch(Exception $e) {

            DB::rollback();

            return redirect()->route('admin.users.index')->with('flash_error', $e->getMessage());

        }

    }

    /**
     * @method users_delete()
     *
     * @uses to delete the user details based on user_id
     *
     * @created Karthick 
     *
     * @updated  
     *
     * @param object $request - user_id
     * 
     * @return response of success/failure details with view page
     *
     */
    public function users_delete(UserGetRequest $request) {

        try {

            DB::begintransaction();

            $user = User::find($request->user_id);

            if($user->delete()) {

                DB::commit();

                return redirect()->route('admin.users.index')->with('flash_success',tr('user_deleted_success'));   

            } 
            
            throw new Exception(tr('user_delete_failed'));
            
        } catch(Exception $e){

            DB::rollback();

            return back()->with('flash_error', $e->getMessage());

        }       
         
    }

        /**
     * @method users_send_welcome_email()
     *
     * @uses to send a admin welcome email (With reset password link)
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - user_id
     * 
     * @return to edit user page 
     *
     */
    public function users_send_welcome_email(UserGetRequest $request) {

        try {

            $user = User::find($request->user_id);

            if($user->reset_password_step == COMPLETED) {

                throw new Exception(tr('user_already_completed_reset_password_step'));
            }

            EmailService::send_admin_welcome_email($user);

            return redirect(route('admin.users.view', ['user_id' => $user->id ]))->with('flash_success',tr('welcome_email_send_successfully')); 
            
        } catch(Exception $e) {

            return redirect()->route('admin.users.index')->with('flash_error', $e->getMessage());
        }
    
    }

    /**
     * @method wishlists()
     *
     * @uses to view the wishlists of user based on user_id
     *
     * @created Karthick 
     *
     * @updated 
     *
     * @param object $request - user_id
     * 
     * @return View page
     *
     */
    public function wishlists(UserGetRequest $request) {
       
        try {  

            $user = User::find($request->user_id, ['name']);

            $wishlists = Wishlist::with(['product:id,name'])->where(['user_id' => $request->user_id])->paginate($this->take);

            return view('admin.users.wishlists')
                        ->with('page', 'users')
                        ->with('sub_page', 'users-view')
                        ->with(compact(['wishlists', 'user']));
            
        } catch (Exception $e) {

            return redirect()->route('admin.users.index')->with('flash_error', $e->getMessage());
        }
    
    }

    /**
     * @method users_export()
     *
     * @uses to export users in excel format
     *
     * @created Karthick 
     *
     * @updated  
     *
     * @param
     * 
     * @return
     *
     */
    public function users_export(Request $request) {

        try {

            $file_format = $request->file_format ? : '.xlsx';

            $filename = routefreestring(Setting::get('site_name'))."-".now()."-".uniqid().$file_format;

            return Excel::download(new UsersExport($request), $filename);

        } catch(\Exception $e) {

            return redirect()->route('admin.users.index')->with('flash_error' , $e->getMessage());

        }

    }

      /**
     * @method users_email_status()
     *
     * @uses verify the user email
     *
     * @created Shakthi
     *
     * @updated
     *
     * @param object $request - User Id
     *
     * @return redirect back page with status of the user email verification
     */
    public function users_email_status(UserGetRequest $request) {

        try {

            DB::beginTransaction();

            $user = User::find($request->user_id);
            
            $result = $user->update(['is_email_verified' => $user->is_email_verified ? USER_EMAIL_NOT_VERIFIED : USER_EMAIL_VERIFIED]);

            throw_if(!$result, new Exception(tr('user_verify_status_update_failed')));

            $message = $user->is_email_verified ? tr('user_email_verify_success') : tr('user_email_unverify_success');

            DB::commit();

            return back()->with('flash_success', $message);
            
        } catch(Exception $e) {

            DB::rollback();

            return back()->with('flash_error', $e->getMessage());

        }
    }

            /**
     * @method users_two_step_status()
     *
     * @uses verify the user two step auth disable
     *
     * @created Shakthi
     *
     * @updated
     *
     * @param object $request - User Id
     *
     * @return redirect back page with status of the user two step auth disable
     */
    public function users_two_step_status(UserGetRequest $request) {

        try {

            DB::beginTransaction();

            $user = User::find($request->user_id);

            throw_if($user->is_two_step_auth_enabled == NO, new Exception(tr('two_step_auth_not_enable')));
            
            $result = $user->update(['is_two_step_auth_enabled' => NO]);

            throw_if(!$result, new Exception(tr('two_step_auth_disable_failed')));

            DB::commit();

            return back()->with('flash_success', tr('two_step_auth_disable_success'));
            
        } catch(Exception $e) {

            DB::rollback();

            return back()->with('flash_error', $e->getMessage());

        }
    
    }
}
Back to Directory File Manager