Viewing File: /home/ubuntu/shop-website-base/app/Http/Controllers/Admin/UserController.php

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use App\Helpers\Helper, App\Helpers\EnvEditorHelper;

use DB, Hash, Exception, File, Setting, Validator;

use App\Models\User, App\Models\Settings;

use App\Jobs\SendEmailJob;

use Carbon\Carbon;

class UserController extends Controller {
    
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    protected $paginate_count;

    public function __construct() {

        $this->middleware('auth:admin');
        
        $this->paginate_count = 10;
    }

    /**
     * @method users_index()
     *
     * @uses To list out users details 
     *
     * @created Arun
     *
     * @updated Arun
     *
     * @param 
     * 
     * @return return view page
     *
     */
    public function users_index(Request $request) {

        $base_query = User::orderBy('updated_at','desc');

        if($request->search_key) {

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

        if($request->today_users){

            $base_query->whereDate('created_at', Carbon::today());
        }

        $users = $base_query->paginate($this->paginate_count);

        return view('admin.users.index')
                    ->with('main_page','users_crud')
                    ->with('page','users')
                    ->with('sub_page' , 'users-index')
                    ->with('users' , $users);
    }

        /**
     * @method users_create()
     *
     * @uses To create user details
     *
     * @created Arun
     *
     * @updated Arun
     *
     * @param 
     * 
     * @return return view 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_save()
     *
     * @uses To save the users details of new/existing user object based on details
     *
     * @created Arun
     *
     * @updated Arun
     *
     * @param object request - User Form Data
     *
     * @return success message
     *
     */
    public function users_save(Request $request) {

        try {

            DB::begintransaction();

            $rules = [
                'name' => 'required|max:191',
                'email' => $request->user_id ? 'nullable|email|max:191|unique:users,email,'.$request->user_id.',id' : 'nullable|email|max:191|unique:users,email,NULL,id',
                'password' => $request->user_id ? "" : 'required|min:6',
                'mobile' =>  $request->user_id ? 'required|digits_between:6,13|unique:users,mobile,'.$request->user_id.',id' : 'required|digits_between:6,13|unique:users,mobile,NULL,id',
                'picture'=> 'mimes:jpg,png,jpeg|max:2048|nullable',
                'user_id' => 'nullable|exists:users,id',
            ];

            Helper::custom_validator($request->all(), $rules);

            if (strlen($request->mobile) == substr_count($request->mobile, 0)) {
                return redirect()->back()->withInput()->with('flash_error', tr('mobile_validate_0'));
            }

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

            $is_new_user = NO;

            if($user->id) {

                $message = tr('user_updated_success'); 

            } else {

                $is_new_user = YES;

                $user->password = ($request->password) ? \Hash::make($request->password) : null;

                $message = tr('user_created_success');

                $user->email_verified_at = date('Y-m-d H:i:s');

                $user->is_verified = USER_EMAIL_VERIFIED;

                $user->login_by = 'manual';

            }

            $user->name = $request->name ?: $user->name;

            $user->email = $request->email ?: $user->email;

            $user->mobile = $request->mobile ?: '';

            $user->about = $request->about ?: '';

            $user->gender = $request->gender ?? 'male';

            // Upload picture
            
            if($request->hasFile('picture')) {

                if($request->user_id) {

                    Helper::storage_delete_file($user->picture, FILE_PATH_USER); 
                    // Delete the old pic
                }

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

            if($user->save()) {

                if($is_new_user == YES) {

                    if(!$request->user_id && $request->email!=''){

                        $email_data['subject'] = tr('user_welcome_title').' '.Setting::get('site_name');

                        $email_data['page'] = "emails.users.welcome";
        
                        $email_data['data'] = $user;
        
                        $email_data['email'] = $user->email;
        
                        $email_data['name'] = $user->name;
        
                        $email_data['verification_code'] = $user->verification_code;
        
                        $this->dispatch(new \App\Jobs\SendEmailJob($email_data));

                    }

                    $user->is_verified = USER_EMAIL_VERIFIED;

                    $user->save();

                }

                    
                DB::commit(); 

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

            } 

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

            DB::rollback();

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

        } 

    }

        /**
     * @method users_view()
     *
     * @uses view the user details based on users id
     *
     * @created Arun 
     *
     * @updated Arun
     *
     * @param object $request - User Id
     * 
     * @return View page
     *
     */
    public function users_view(Request $request) {
       
        try {
      
            $user = User::find($request->user_id);

            if(!$user) { 

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

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

    /**
     * @method users_edit()
     *
     * @uses To display and update user details based on the user id
     *
     * @created Arun
     *
     * @updated Arun
     *
     * @param object $request - User Id
     * 
     * @return redirect view page 
     *
     */
    public function users_edit(Request $request) {

        try {

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

            if(!$user) { 

                throw new Exception(tr('user_not_found'), 101);
            }

            return view('admin.users.edit')
                    ->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 update user status as DECLINED/APPROVED based on users id
     *
     * @created Arun
     *
     * @updated 
     *
     * @param object $request - User Id
     * 
     * @return response success/failure message
     *
     **/
    public function users_status(Request $request) {

        try {

            DB::beginTransaction();

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

            if(!$user) {

                throw new Exception(tr('user_not_found'), 101);
                
            }

            $user->status = $user->status ? DECLINED : APPROVED ;

            if($user->save()) {

                DB::commit();

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

                return redirect()->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 delete the user details based on user id
     *
     * @created Arun
     *
     * @updated  
     *
     * @param object $request - User Id
     * 
     * @return response of success/failure details with view page
     *
     */
    public function users_delete(Request $request) {

        try {

            DB::begintransaction();

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

                throw new Exception(tr('user_not_found'), 101);                
            }

            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 redirect()->back()->with('flash_error', $e->getMessage());

        }       
         
    }

    /**
     * @method users_verify_status()
     *
     * @uses verify for the user
     *
     * @created Arun
     *
     * @updated
     *
     * @param integer $request id
     *
     * @return redirect back page with status of the user verification
     */
    public function users_verify_status(Request $request) {

        try {

            DB::beginTransaction();

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

            if(!$user) {

                throw new Exception(tr('user_not_found'), 101);
                
            }

            $user->is_verified = $user->is_verified ? USER_EMAIL_NOT_VERIFIED : USER_EMAIL_VERIFIED;

            if($user->save()) {

                DB::commit();

                $message = $user->is_verified ? tr('user_verify_success') : tr('user_unverify_success');

                return redirect()->route('admin.users.index')->with('flash_success', $message);
            }
            
            throw new Exception(tr('user_verify_change_failed'));

        } catch(Exception $e) {

            DB::rollback();

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

        }
    
    }

    /**
     * @method user_refunds()
     *
     * @uses view provider redeems
     *
     * @created Arun
     *
     * @updated
     *
     * @param Integer $request - provider id
     * 
     * @return view page
     *
     **/
    public function user_refunds(Request $request) {

        $base_query = UserRefund::orderBy('updated_at','desc');

        if($request->user_id) {
                       
            $base_query = $base_query->where('user_refunds.user_id',$request->user_id);
        }

        $search_key = $request->search_key;

        if($search_key) {

            $base_query = $base_query 
                ->whereHas('user', function($q) use ($search_key) {
                    return $q->Where('users.name','LIKE','%'.$search_key.'%');
                });
               
        }
        
        $user_refunds = $base_query->paginate($this->paginate_count);

        foreach ($user_refunds as $key => $user_refund) {

            $user_refund->paid_date = common_date($user_refund->paid_date);

        }

        return view('admin.revenues.user_refunds')
                    ->with('page', 'revenues')
                    ->with('sub_page','revenues-user_refunds')
                    ->with('user_refunds', $user_refunds);
    
    }

    /**
     * @method user_refunds_payment()
     *
     * @uses view provider redeems
     *
     * @created Arun
     *
     * @updated
     *
     * @param Integer $request - provider id
     * 
     * @return view page
     *
     **/
    public function user_refunds_payment(Request $request) {

        try {

            DB::beginTransaction();

            $rules = [
                'amount' => 'required|numeric|gt:0',
            ];

            Helper::custom_validator($request->all(), $rules);

            $user_refund = UserRefund::find($request->user_refund_id);

            if(!$user_refund) {

                throw new Exception(api_error(231), 231);
                
            }
            
            $user_refund->paid_date = date('Y-m-d H:i:s');

            $user_refund->paid += $request->amount;

            $user_refund->remaining = $user_refund->total - $user_refund->paid;

            if($user_refund->save()) {

                DB::commit();

                //Email Notification for user - Refund Payments
                if (Setting::get('is_email_notification') == YES) {

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

                    $email_data['subject'] = Setting::get('site_name').' '.tr('user_refund_success');

                    $email_data['page'] = "emails.users.refund_payment";

                    $email_data['email'] = $user->email;

                    $data['refund_amount'] = $request->amount;

                    $data['user'] = $user->toArray();
                    
                    $email_data['data'] = $data;

                    $this->dispatch(new SendEmailJob($email_data));

                }

                return redirect()->back()->with('flash_success', api_success(224));
            }

        } catch(Exception $e) {

            DB::rollback();

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

        }
    
    }


    /**
     * @method user_wallets_index()
     *
     * @uses To list out users wishlist details 
     *
     * @created Arun
     *
     * @updated Arun
     *
     * @param 
     * 
     * @return return view page
     *
     */
    public function user_wallets_index(Request $request) {

        try {

            $user_wallets = UserWallet::where('user_id',$request->user_id)->orderBy('updated_at','desc')->paginate($this->paginate_count);

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

        } catch (Exception $e) {

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

    /**
     * @method wishlists_index()
     *
     * @uses To list out users wishlist details 
     *
     * @created Arun
     *
     * @updated Arun
     *
     * @param 
     * 
     * @return return view page
     *
     */
    public function wishlists_index(Request $request) {

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

            if(!$user) {

                throw new Exception(tr('user_not_found'), 101);        
            }

            $wishlists = Wishlist::where('user_id',$request->user_id)->orderBy('updated_at','desc')->paginate($this->paginate_count);

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

        } catch (Exception $e) {

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

    /**
     * @method wishlists_delete()
     *
     * @uses delete the wishlist details based on wishlist id
     *
     * @created Arun
     *
     * @updated  
     *
     * @param object $request - wishlist Id
     * 
     * @return response of success/failure details with view page
     *
     */
    public function wishlists_delete(Request $request) {

        try {

            DB::begintransaction();

            $wishlist = Wishlist::find($request->wishlist_id);
            
            if(!$wishlist) {

                throw new Exception(tr('wishlist_not_found'), 101);                
            }

            if($wishlist->delete()) {

                DB::commit();

                return redirect()->back()->with('flash_success',tr('wishlist_deleted_success'));   
            } 
            
            throw new Exception(tr('wishlist_delete_failed'));
            
        } catch(Exception $e){

            DB::rollback();

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

        }       
         
    }


}
Back to Directory File Manager