Spamworldpro Mini Shell
Spamworldpro


Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips
System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User : fdshops ( 1003)
PHP Version : 8.2.21
Disable Function : NONE
Directory :  /home/fdshops/public_html/Modules/Spreadsheet/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/fdshops/public_html/Modules/Spreadsheet/Http/Controllers/SpreadsheetController.php
<?php

namespace Modules\Spreadsheet\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use App\Utils\ModuleUtil;
use Illuminate\Support\Facades\DB;
use Modules\Spreadsheet\Entities\Spreadsheet;
use Modules\Spreadsheet\Entities\SpreadsheetShare;
use App\User;
use Modules\Spreadsheet\Notifications\SpreadsheetShared;
use Notification;
use Spatie\Permission\Models\Role;
use App\Category;

class SpreadsheetController extends Controller
{
    /**
     * All Utils instance.
     *
     */
    protected $moduleUtil;

    /**
     * Constructor
     *
     * @param CommonUtil
     * @return void
     */
    public function __construct(ModuleUtil $moduleUtil)
    {
        $this->moduleUtil = $moduleUtil;
    }

    /**
     * Display a listing of the resource.
     * @return Response
     */
    public function index()
    {   
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'spreadsheet_module') && auth()->user()->can('access.spreadsheet')))) {
            abort(403, 'Unauthorized action.');
        }

        $user_id = request()->session()->get('user.id');
        $role_id = User::find($user_id)->roles()->first()->id;
        
        $module_data = $this->moduleUtil->getModuleData('getAssignedTaskForUser', $user_id);
        $todo_ids = $module_data['Essentials'];
        
        $query = Spreadsheet::with(['createdBy', 'shares'])
                    ->where('business_id', $business_id)
                    ->leftJoin('sheet_spreadsheet_shares as SSS', 'sheet_spreadsheets.id', '=', 'SSS.sheet_spreadsheet_id');

        if (!auth()->user()->can('superadmin')) {
            $query->where('created_by', auth()->user()->id)
                    ->orWhere(function ($query) use ($role_id) {
                        $query->where('SSS.shared_id', '=', $role_id)
                            ->where('SSS.shared_with', '=', 'role');
                    })
                    ->orwhere(function ($query) use ($user_id) {
                        $query->where('SSS.shared_id', '=', $user_id)
                            ->where('SSS.shared_with', '=', 'user');
                    });

            if (!empty($todo_ids)) {
                $query->orwhere(function ($query) use ($todo_ids) {
                        $query->whereIn('SSS.shared_id', $todo_ids)
                            ->where('SSS.shared_with', '=', 'todo');
                    });
            }
                    
        }

        $spreadsheets= $query->select('sheet_spreadsheets.id', 'name', 'sheet_spreadsheets.updated_at', 
                            'created_by', 'folder_id')
                        ->orderByDesc('sheet_spreadsheets.updated_at')
                        ->groupBy('sheet_spreadsheets.id')
                        ->get();

        $todos= [];
        if (!empty($module_data['Essentials'])) {
            $todos = $module_data['Essentials'];
        }

        $users = User::forDropdown($business_id, false);
        $roles = $this->moduleUtil->getDropdownForRoles($business_id);

        foreach($spreadsheets as $key => $value) {
            if(count($value->shares) > 0) {
                $shered_users = [];
                $shared_roles = [];
                $shared_todos = [];

                foreach($value->shares as $share) {
                    if($share->shared_with == 'user') {
                        $shered_users[] = $users[$share->shared_id] ?? '';
                    } else if($share->shared_with == 'role') {
                        $shared_roles[] = $roles[$share->shared_id] ?? '';
                    } else if($share->shared_with == 'role') {
                        $shared_todos[] = $todos[$share->shared_id] ?? '';
                    }
                }

                $spreadsheets[$key]->shered_users = $shered_users;
                $spreadsheets[$key]->shared_roles = $shared_roles;
                $spreadsheets[$key]->shared_todos = $shared_todos;
            }
        }

        $folders = Category::where('business_id', $business_id)
                        ->where('category_type', 'spreadsheet')
                        ->orderBy('name', 'asc')
                        ->get();

        return view('spreadsheet::sheet.index')
            ->with(compact('spreadsheets', 'folders'));
    }

    /**
     * Show the form for creating a new resource.
     * @return Response
     */
    public function create()
    {   
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'spreadsheet_module') && auth()->user()->can('create.spreadsheet')))) {
            abort(403, 'Unauthorized action.');
        }
        $folder_id = request()->input('folder_id', null);
        return view('spreadsheet::sheet.create')->with(compact('folder_id'));
    }

    /**
     * Store a newly created resource in storage.
     * @param Request $request
     * @return Response
     */
    public function store(Request $request)
    {   
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'spreadsheet_module') && auth()->user()->can('create.spreadsheet')))) {
            abort(403, 'Unauthorized action.');
        }

        try {

            $input['name'] = !empty($request->input('name')) ? $request->input('name') : 'My Spreasheet';
            $input['sheet_data'] = $request->input('sheet_data');
            $input['business_id'] = $business_id;
            $input['created_by']= auth()->user()->id;
            $input['folder_id'] = $request->input('folder_id');
            DB::beginTransaction();

            Spreadsheet::create($input);

            DB::commit();
            $output = [
                'success' => true,
                'msg' => __('lang_v1.success')
            ];
        } catch (Exception $e) {
            DB::rollBack();

            \Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());

            $output = [
                'success' => false,
                'msg' => __('messages.something_went_wrong')
            ];
        }

        return redirect()
            ->action('\Modules\Spreadsheet\Http\Controllers\SpreadsheetController@index')
            ->with('status', $output);
    }

    /**
     * Show the specified resource.
     * @param int $id
     * @return Response
     */
    public function show($id)
    {   
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || auth()->user()->can('create.spreadsheet') || auth()->user()->can('access.spreadsheet'))) {
            abort(403, 'Unauthorized action.');
        }

        $user_id = request()->session()->get('user.id');
        $role_id = User::find($user_id)->roles()->first()->id;
        
        $module_data = $this->moduleUtil->getModuleData('getAssignedTaskForUser', $user_id);
        $todo_ids = $module_data['Essentials'];
        
        $query = Spreadsheet::where('business_id', $business_id)
                    ->where('sheet_spreadsheets.id', $id)
                    ->leftJoin('sheet_spreadsheet_shares as SSS', 'sheet_spreadsheets.id', '=', 'SSS.sheet_spreadsheet_id');

        if (!auth()->user()->can('superadmin')) {
            $query->where('created_by', auth()->user()->id)
                    ->orWhere(function ($query) use ($role_id) {
                        $query->where('SSS.shared_id', '=', $role_id)
                            ->where('SSS.shared_with', '=', 'role');
                    })
                    ->orwhere(function ($query) use ($user_id) {
                        $query->where('SSS.shared_id', '=', $user_id)
                            ->where('SSS.shared_with', '=', 'user');
                    });

            if (!empty($todo_ids)) {
                $query->orwhere(function ($query) use ($todo_ids) {
                        $query->whereIn('SSS.shared_id', $todo_ids)
                            ->where('SSS.shared_with', '=', 'todo');
                    });
            }
                    
        }

        $spreadsheet = $query
                        ->select('sheet_spreadsheets.business_id', 'sheet_spreadsheets.id', 'sheet_spreadsheets.name', 'sheet_spreadsheets.sheet_data', 'sheet_spreadsheets.created_by')
                        ->firstOrFail();

        return view('spreadsheet::sheet.show')
            ->with(compact('spreadsheet'));
    }

    /**
     * Show the form for editing the specified resource.
     * @param int $id
     * @return Response
     */
    public function edit($id)
    {
        return view('spreadsheet::edit');
    }

    /**
     * Update the specified resource in storage.
     * @param Request $request
     * @param int $id
     * @return Response
     */
    public function update(Request $request, $id)
    {
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || auth()->user()->can('create.spreadsheet'))) {
            abort(403, 'Unauthorized action.');
        }

        try {

            $input['name'] = !empty($request->input('name')) ? $request->input('name') : 'My Spreasheet';
            $input['sheet_data'] = json_encode($request->input('sheet_data'));

            $user_id = request()->session()->get('user.id');
            $role_id = User::find($user_id)->roles()->first()->id;

            $module_data = $this->moduleUtil->getModuleData('getAssignedTaskForUser', $user_id);
            $todo_ids = $module_data['Essentials'];

            DB::beginTransaction();
                $query = Spreadsheet::where('business_id', $business_id)
                        ->where('sheet_spreadsheets.id', $id)
                        ->leftJoin('sheet_spreadsheet_shares as SSS', 'sheet_spreadsheets.id', '=', 'SSS.sheet_spreadsheet_id');

                if (!auth()->user()->can('superadmin')) {
                    $query->where('created_by', auth()->user()->id)
                            ->orWhere(function ($query) use ($role_id) {
                                $query->where('SSS.shared_id', '=', $role_id)
                                    ->where('SSS.shared_with', '=', 'role');
                            })
                            ->orwhere(function ($query) use ($user_id) {
                                $query->where('SSS.shared_id', '=', $user_id)
                                    ->where('SSS.shared_with', '=', 'user');
                            });

                    if (!empty($todo_ids)) {
                        $query->orwhere(function ($query) use ($todo_ids) {
                                $query->whereIn('SSS.shared_id', $todo_ids)
                                    ->where('SSS.shared_with', '=', 'todo');
                            });
                    }
                            
                }

                $spreadsheet = $query
                                ->select('sheet_spreadsheets.business_id', 'sheet_spreadsheets.id', 'sheet_spreadsheets.name', 'sheet_spreadsheets.sheet_data')
                                ->firstOrFail();

                if (!empty($spreadsheet)) {
                    Spreadsheet::where('business_id', $business_id)
                        ->where('id', $id)
                        ->update($input);
                }

            DB::commit();
            $output = [
                'success' => true,
                'msg' => __('lang_v1.success')
            ];
        } catch (Exception $e) {
            DB::rollBack();

            \Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());

            $output = [
                'success' => false,
                'msg' => __('messages.something_went_wrong')
            ];
        }

        return redirect()
            ->action('\Modules\Spreadsheet\Http\Controllers\SpreadsheetController@show', [$id])
            ->with('status', $output);
    }

    /**
     * Remove the specified resource from storage.
     * @param int $id
     * @return Response
     */
    public function destroy($id)
    {
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || auth()->user()->can('create.spreadsheet'))) {
            abort(403, 'Unauthorized action.');
        }

        if (request()->ajax()) {
            try {
                DB::beginTransaction();
                
                Spreadsheet::where('business_id', $business_id)
                    ->where('created_by', auth()->user()->id)
                    ->where('id', $id)
                    ->delete();

                DB::commit();
                $output = [
                    'success' => true,
                    'msg' => __('lang_v1.success')
                ];
            } catch (Exception $e) {
                DB::rollBack();

                \Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());

                $output = [
                    'success' => false,
                    'msg' => __('messages.something_went_wrong')
                ];
            }
        }

        return $output;
    }

    public function getShareSpreadsheet(Request $request, $id)
    {   
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'spreadsheet_module')))) {
            abort(403, 'Unauthorized action.');
        }

        if ($request->ajax()) {
            $module_data = $this->moduleUtil->getModuleData('getTodosDropdown', $business_id);

            $todos= [];
            if (!empty($module_data['Essentials'])) {
                $todos = $module_data['Essentials'];
            }

            $users = User::forDropdown($business_id, false);
            $roles = $this->moduleUtil->getDropdownForRoles($business_id);
            
            $shared_spreadsheets = SpreadsheetShare::where('sheet_spreadsheet_id', $id)
                                    ->get()
                                    ->groupBy('shared_with');

            $shared_todos = [];
            $shared_roles = [];
            $shared_users = [];
            if (!empty($shared_spreadsheets['todo'])) {
                $shared_todos = $shared_spreadsheets['todo']->pluck('shared_id')->toArray();
            }

            if (!empty($shared_spreadsheets['role'])) {
                $shared_roles = $shared_spreadsheets['role']->pluck('shared_id')->toArray();
            }

            if (!empty($shared_spreadsheets['user'])) {
                $shared_users = $shared_spreadsheets['user']->pluck('shared_id')->toArray();
            }

            return view('spreadsheet::sheet.partials.share_sheet')
                ->with(compact('todos', 'id', 'shared_roles', 'roles', 'users', 'shared_todos', 'shared_users'));
        }

    }

    public function postShareSpreadsheet(Request $request)
    {   
        $business_id = request()->session()->get('user.business_id');

        if (!(auth()->user()->can('superadmin') || ($this->moduleUtil->hasThePermissionInSubscription($business_id, 'spreadsheet_module')))) {
            abort(403, 'Unauthorized action.');
        }

        if ($request->ajax()) {
            try {
                $sheet_id = $request->input('sheet_id');
                $shares = $request->input('share');
                DB::beginTransaction();

                    //Update shared spreadsheets based on selected data
                    $notify_to_shared_ids = []; //send notification to users
                    if (!empty($shares)) {
                        foreach ($shares as $shared_with => $shared_ids) {
                            $existing_shared_ids = [];
                            foreach ($shared_ids as $id) {
                                $existing_shared_ids[] = $id;
                                $data = [
                                    'sheet_spreadsheet_id' => $sheet_id,
                                    'shared_with' => $shared_with,
                                    'shared_id' => $id
                                ];

                                $sheet = SpreadsheetShare::firstOrCreate($data, $data);

                                if ($sheet->shared_with == 'user' && $sheet->wasRecentlyCreated) {
                                    $notify_to_shared_ids[] = $sheet->shared_id;
                                }

                                //get users of the role to notify
                                if ($sheet->shared_with == 'role' && $sheet->wasRecentlyCreated) {

                                    $role = Role::where('business_id', $business_id)
                                        ->find($sheet->shared_id);
                                    $users = User::role($role->name)->get()->pluck('id')->toArray();
                                    $notify_to_shared_ids = array_unique(array_merge($notify_to_shared_ids,$users));

                                }
                            }
                            SpreadsheetShare::where('sheet_spreadsheet_id', $sheet_id)
                                ->where('shared_with', $shared_with)
                                ->whereNotIn('shared_id', $existing_shared_ids)
                                ->delete();
                        }
                    }

                    //if shared with is empty then delete whole rows of given sheet & shared with
                    if (empty($shares['todo'])) {
                        SpreadsheetShare::where('sheet_spreadsheet_id', $sheet_id)
                            ->where('shared_with', 'todo')
                            ->delete();
                    } 

                    if (empty($shares['user'])) {
                        SpreadsheetShare::where('sheet_spreadsheet_id', $sheet_id)
                            ->where('shared_with', 'user')
                            ->delete();
                    }

                    if (empty($shares['role'])) {
                        SpreadsheetShare::where('sheet_spreadsheet_id', $sheet_id)
                            ->where('shared_with', 'role')
                            ->delete();
                    }

                    if (!empty($notify_to_shared_ids)) {
                        $this->notifyUsersOfSharedSheets($business_id, $sheet_id, $notify_to_shared_ids);
                    }
                DB::commit();
                $output = [
                    'success' => true,
                    'msg' => __('lang_v1.success')
                ];
            } catch (Exception $e) {
                DB::rollBack();

                \Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());

                $output = [
                    'success' => false,
                    'msg' => __('messages.something_went_wrong')
                ];
            }

            return $output;
        }
    }

    public function notifyUsersOfSharedSheets($business_id, $sheet_id, $shared_ids)
    {   
        $users = User::where('business_id', $business_id)
                    ->find($shared_ids);

        Notification::send($users, new SpreadsheetShared($sheet_id));
    }

    public function addFolder(Request $request)
    {
        try {
            $input = $request->only(['name']);
            if(!empty($request->input('folder_id'))) {
                Category::where('business_id', $request->session()->get('user.business_id'))
                        ->where('id', $request->input('folder_id'))
                        ->where('category_type', 'spreadsheet')
                        ->update($input);
            } else {
                $input['parent_id'] = 0;
                $input['business_id'] = $request->session()->get('user.business_id');
                $input['created_by'] = $request->session()->get('user.id');
                $input['category_type'] = 'spreadsheet';

                Category::create($input);
            }
            
            $output = ['success' => true,
                            'msg' => __("lang_v1.success")
                        ];
        } catch (\Exception $e) {
            \Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage());
            
            $output = ['success' => false,
                            'msg' => __("messages.something_went_wrong")
                        ];
        }

        return redirect()
                ->action('\Modules\Spreadsheet\Http\Controllers\SpreadsheetController@index')
                ->with('status', $output);
    }

    public function moveToFolder(Request $request)
    {
        if(!empty($request->input('move_to_folder'))) {
            $business_id = $request->session()->get('user.business_id');

            Spreadsheet::where('business_id', $business_id)
                    ->where('created_by', auth()->user()->id)
                    ->where('id', $request->input('spreadsheet_id'))
                    ->update(['folder_id' => $request->input('move_to_folder')]);

            $output = ['success' => true,
                    'msg' => __("lang_v1.success")
                ];

            return redirect()
                ->action('\Modules\Spreadsheet\Http\Controllers\SpreadsheetController@index')
                ->with('status', $output);

        }
    }
}

Spamworldpro Mini