!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/school.picotech.app/public_html/app/Http/Controllers/   drwxr-xr-x
Free 28.21 GB of 117.98 GB (23.91%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     AdminController.php (178.47 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers;

use 
App\Http\Controllers\CommonController;

use 
App\Models\Admin;

use 
App\Models\BongoBondhuKorner;
use 
App\Models\ClassActivity;
use 
App\Models\Contact;
use 
App\Models\FrontSettings;
use 
App\Models\GlobalSettings;
use 
App\Models\Menu;
use 
App\Models\ExamRoutine;

use 
App\Models\ImportantLink;

use 
App\Models\Page;
use 
App\Models\Result;
use 
App\Models\SubornoJoyonti;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\Hash;
use 
Illuminate\Support\Str;
use 
App\Models\User;
use 
App\Models\Session;
use 
App\Models\School;
use 
App\Models\Subscription;
use 
App\Models\Exam;
use 
App\Models\ExamCategory;
use 
App\Models\Classes;
use 
App\Models\Subject;
use 
App\Models\Gradebook;
use 
App\Models\Grade;
use 
App\Models\Department;
use 
App\Models\ClassRoom;
use 
App\Models\ClassList;
use 
App\Models\Section;
use 
App\Models\Enrollment;
use 
App\Models\DailyAttendances;
use 
App\Models\Routine;
use 
App\Models\Syllabus;
use 
App\Models\ExpenseCategory;
use 
App\Models\Expense;
use 
App\Models\StudentFeeManager;
use 
App\Models\Book;
use 
App\Models\BookIssue;
use 
App\Models\Noticeboard;
use 
App\Models\FrontendEvent;
use 
App\Models\Package;
use 
App\Models\PaymentMethods;
use 
App\Models\Currency;
use 
App\Models\PaymentHistory;
use 
App\Models\TeacherPermission;
use 
App\Models\Payments;
use 
Illuminate\Support\Facades\Auth;
use 
Illuminate\Support\Facades\Redirect;
use 
Illuminate\Support\Facades\Route;

class 
AdminController extends Controller
{

    private 
$user;
    
/**
     * Show the admin dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    
function __construct()
    {
        
$this->middleware(function ($request$next) {
            
$this->user Auth()->user();
            
$this->check_subscription_status(Auth()->user()->school_id);
            return 
$next($request);
        });


    }

    function 
check_subscription_status($school_id "")
    {
        
$current_route Route::currentRouteName();
        
$has_subscription Subscription::where('school_id'$school_id)->where('status'1)->get()->count();
        
$active_subscription Subscription::where('school_id'$school_id)->where('active'1)->first();

        
$today date("Y-m-d");
        
$today_time strtotime($today);

        if (
$has_subscription != 0) {

            
$expiry_status = (int) $active_subscription['expire_date'] < $today_time;

            if (
                (
$current_route != 'admin.subscription' && $expiry_status) &&
                (
$current_route != 'admin.subscription.purchase' && $expiry_status) &&
                (
$current_route != 'admin.subscription.payment' && $expiry_status) &&
                (
$current_route != 'admin.subscription.offline_payment' && $expiry_status)
            ) {
                
redirect()->route('admin.subscription')->send();
            }

        } else {

            if (
                (
$current_route != 'admin.subscription' && $has_subscription == 0) &&
                (
$current_route != 'admin.subscription.purchase' && $has_subscription == 0) &&
                (
$current_route != 'admin.subscription.payment' && $has_subscription == 0) &&
                (
$current_route != 'admin.subscription.offline_payment' && $has_subscription == 0)
            ) {
                
redirect()->route('admin.subscription')->send();
            }
        }
    }

    
/**
     * Show the admin dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    
public function check_admin_subscription($school_id)
    {
        
$validity_of_current_package Subscription::where('school_id'$school_id)->where('active'1)->first();
        if (!empty(
$validity_of_current_package)) {
            
$validity_of_current_package $validity_of_current_package->toArray();


            
$today date("Y-m-d");
            
$today_time strtotime($today);

            if ((int) 
$validity_of_current_package['expire_date'] < $today_time) {


            } else {

                
$this->adminDashboard();
            }


        } else {


        }

    }



    public function 
adminDashboard()
    {
        if (
auth()->user()->role_id != "") {
            return 
view('admin.dashboard');
        } else {
            
redirect()->route('login')
                ->
with('error''You are not logged in.');
        }
    }

    
/**
     * Show the admin list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */


    
public function adminList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$admins User::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'2);
            })->
orWhere(function ($query) use ($search) {
                
$query->where('email''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'2);
            })->
paginate(10);

        } else {
            
$admins User::where('role_id'2)->where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.admin.admin_list'compact('admins''search'));
    }

    
/**
     * Show the admin add modal.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function createModal()
    {
        return 
view('admin.admin.add_admin');
    }

    public function 
adminCreate(Request $request)
    {
        
$data $request->all();

        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$photo '';
        }

        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);

        
User::create([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'password' => Hash::make($data['password']),
            
'role_id' => '2',
            
'school_id' => auth()->user()->school_id,
            
'user_information' => $data['user_information'],
        ]);

        return 
redirect()->back()->with('message''You have successfully add user.');
    }

    public function 
editModal($id)
    {
        
$user User::find($id);
        return 
view('admin.admin.edit_admin', ['user' => $user]);
    }

    public function 
adminUpdate(Request $request$id)
    {
        
$data $request->all();

        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$user_information User::where('id'$id)->value('user_information');
            
$file_name json_decode($user_information)->photo;

            if (
$file_name != '') {
                
$photo $file_name;
            } else {
                
$photo '';
            }
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);
        
User::where('id'$id)->update([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'user_information' => $data['user_information'],
        ]);

        return 
redirect()->back()->with('message''You have successfully update user.');
    }

    public function 
adminDelete($id)
    {
        
$user User::find($id);
        
$user->delete();
        
$admins User::get()->where('role_id'2);
        return 
redirect()->route('admin.admin')->with('message''You have successfully deleted user.');
    }

    
/**
     * Show the teacher list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function teacherList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$teachers User::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'3);
            })->
orWhere(function ($query) use ($search) {
                
$query->where('email''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'3);
            })->
paginate(10);

        } else {
            
$teachers User::where('role_id'3)->where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.teacher.teacher_list'compact('teachers''search'));
    }

    
/**
     * Show the teacher add modal.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function createTeacherModal()
    {
        
$departments Department::get()->where('school_id'auth()->user()->school_id);


        
$designations = [
            
'head_teacher',
            
'senior_assistant_teacher',
            
'assistant_head_teacher',
            
'assistant_teacher',
            
'teacher',
            
'board_of_directors',
            
'officer_employee',
            
'ex_head_teacher'
        
];

            
$sub_designations = [
                
'office_assistant',
                
'office_assistant_mlss',
                
'computer_operator',
                
'cleaner',
                
'night_guard',
                
'security_guard',
                
'aya'
            
];

        return 
view('admin.teacher.add_teacher', ['departments' => $departments'sub_designations' => $sub_designations'designations' => $designations]);
    }

    public function 
adminTeacherCreate(Request $request)
    {
        
$data $request->all();
        
// dd($data);
        
if (!empty($data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$photo '';
        }
        
$designation $request->designation;

        if(
$request->designation=='officer_employee'){
            
$designation $request->sub_designation;
        }


        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'designation' => $designation,
            
'nid_no' => $request->nid_no,
            
'first_join' => $request->first_join,
            
'educational_qualification' => $request->educational_qualification,
            
'training' => $request->training,
            
'join_date' => strtotime($request->join_date),
            
'photo' => $photo,
        );

        
$data['user_information'] = json_encode($info);
        
User::create([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'password' => Hash::make($data['password']),
            
'role_id' => '3',
            
'school_id' => auth()->user()->school_id,
            
'user_information' => $data['user_information'],
            
'department_id' => $data['department_id'],
            
'designation' => $data['designation'],
            
'sub_designation' => $data['sub_designation'],
        ]);
        return 
redirect()->back()->with('message''You have successfully add teacher.');
    }

    public function 
teacherEditModal($id)
    {
        
$user User::find($id);
        
$departments Department::get()->where('school_id'auth()->user()->school_id);

        
$designations = [
            
'head_teacher',
            
'senior_assistant_teacher',
            
'assistant_head_teacher',
            
'assistant_teacher',
            
'teacher',
            
'board_of_directors',
            
'officer_employee',
            
'ex_head_teacher'
        
];

            
$sub_designations = [
                
'office_assistant',
                
'office_assistant_mlss',
                
'computer_operator',
                
'cleaner',
                
'night_guard',
                
'security_guard',
                
'aya'
            
];

        return 
view('admin.teacher.edit_teacher', ['user' => $user'sub_designations' => $sub_designations'designations' => $designations'departments' => $departments]);
    }

    public function 
teacherUpdate(Request $request$id)
    {
        
$data $request->all();
// dd($data);
        
if (!empty($data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$user_information User::where('id'$id)->value('user_information');
            
$file_name json_decode($user_information)->photo;

            if (
$file_name != '') {
                
$photo $file_name;
            } else {
                
$photo '';
            }
        }
        
$designation $request->designation;

        if(
$request->designation=='officer_employee'){
            
$designation $request->sub_designation;
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo,
            
'designation' => $designation,
            
'nid_no' => $request->nid_no,
            
'educational_qualification' => $request->educational_qualification,
            
'training' => $request->training,
            
'first_join' => $request->first_join,
            
'join_date' => strtotime($request->join_date),
        );

        
$data['user_information'] = json_encode($info);
        
User::where('id'$id)->update([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'user_information' => $data['user_information'],
            
'department_id' => $data['department_id'],
            
'designation' => $data['designation'],
        ]);
        return 
redirect()->back()->with('message''You have successfully update teacher.');
    }

    public function 
teacherDelete($id)
    {
        
$user User::find($id);
        
$user->delete();
        
$admins User::get()->where('role_id'3);
        return 
redirect()->route('admin.teacher')->with('message''You have successfully deleted teacher.');
    }

    
/**
     * Show the accountant list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function accountantList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$accountants User::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'4);
            })->
orWhere(function ($query) use ($search) {
                
$query->where('email''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'4);
            })->
paginate(10);

        } else {
            
$accountants User::where('role_id'4)->where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.accountant.accountant_list'compact('accountants''search'));
    }

    public function 
createAccountantModal()
    {
        return 
view('admin.accountant.add_accountant');
    }

    public function 
accountantCreate(Request $request)
    {
        
$data $request->all();
        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$photo '';
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);
        
$data['user_information'] = json_encode($info);

        
User::create([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'password' => Hash::make($data['password']),
            
'role_id' => '4',
            
'school_id' => auth()->user()->school_id,
            
'user_information' => $data['user_information'],
        ]);

        return 
redirect()->back()->with('message''You have successfully add accountant.');
    }

    public function 
accountantEditModal($id)
    {
        
$user User::find($id);
        return 
view('admin.accountant.edit_accountant', ['user' => $user]);
    }

    public function 
accountantUpdate(Request $request$id)
    {
        
$data $request->all();

        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$user_information User::where('id'$id)->value('user_information');
            
$file_name json_decode($user_information)->photo;

            if (
$file_name != '') {
                
$photo $file_name;
            } else {
                
$photo '';
            }
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);

        
User::where('id'$id)->update([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'user_information' => $data['user_information'],
        ]);

        return 
redirect()->back()->with('message''You have successfully update accountant.');
    }

    public function 
accountantDelete($id)
    {
        
$user User::find($id);
        
$user->delete();
        
$admins User::get()->where('role_id'4);
        return 
redirect()->route('admin.accountant')->with('message''You have successfully deleted accountant.');
    }

    
/**
     * Show the librarian list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function librarianList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$librarians User::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'5);
            })->
orWhere(function ($query) use ($search) {
                
$query->where('email''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'5);
            })->
paginate(10);

        } else {
            
$librarians User::where('role_id'5)->where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.librarian.librarian_list'compact('librarians''search'));
    }

    public function 
createLibrarianModal()
    {
        return 
view('admin.librarian.add_librarian');
    }

    public function 
librarianCreate(Request $request)
    {
        
$data $request->all();
        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$photo '';
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);
        
User::create([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'password' => Hash::make($data['password']),
            
'role_id' => '5',
            
'school_id' => auth()->user()->school_id,
            
'user_information' => $data['user_information'],
        ]);
        return 
redirect()->back()->with('message''You have successfully add librarian.');
    }

    public function 
librarianEditModal($id)
    {
        
$user User::find($id);
        return 
view('admin.librarian.edit_librarian', ['user' => $user]);
    }

    public function 
librarianUpdate(Request $request$id)
    {
        
$data $request->all();

        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$user_information User::where('id'$id)->value('user_information');
            
$file_name json_decode($user_information)->photo;

            if (
$file_name != '') {
                
$photo $file_name;
            } else {
                
$photo '';
            }
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);
        
User::where('id'$id)->update([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'user_information' => $data['user_information'],
        ]);
        return 
redirect()->back()->with('message''You have successfully update librarian.');
    }

    public function 
librarianDelete($id)
    {
        
$user User::find($id);
        
$user->delete();
        
$admins User::get()->where('role_id'5);
        return 
redirect()->route('admin.librarian')->with('message''You have successfully deleted librarian.');
    }

    
/**
     * Show the parent list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function parentList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$parents User::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'6);
            })->
orWhere(function ($query) use ($search) {
                
$query->where('email''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('role_id'6);
            })->
paginate(10);

        } else {
            
$parents User::where('role_id'6)->where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.parent.parent_list'compact('parents''search'));
    }

    public function 
createParent()
    {
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.parent.add_parent', ['classes' => $classes]);
    }


    public function 
parentCreate(Request $request)
    {
        
$data $request->all();

        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$photo '';
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);
        
$parent User::create([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'password' => Hash::make($data['password']),
            
'role_id' => '6',
            
'school_id' => auth()->user()->school_id,
            
'user_information' => $data['user_information'],
        ]);

        
$students $data['student_id'];
        
$class_id $data['class_id'];
        
$section_id $data['student_id'];

        foreach (
$students as $student) {
            
$users User::where('id'$student)->get();

            if (
count($users) == 1) {
                
User::where('id'$student)->update([
                    
'parent_id' => $parent->id,
                ]);
            } else {
                if (
count($users) > 1) {
                    foreach (
$users as $user) {
                        
$data Enrollment::where('class_id'$class_id)->where('section_id'$section_id)->where('user_id'$user->id)->where('school_id'auth()->user()->school_id)->first();

                        if (
$data != '') {
                            
User::where('id'$user->id)->update([
                                
'parent_id' => $parent->id,
                            ]);
                        }
                    }
                }
            }
        }

        return 
redirect()->back()->with('message''You have successfully add parent.');
    }


    public function 
parentEditModal($id)
    {
        
$user User::find($id);
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.parent.edit_parent', ['user' => $user'classes' => $classes]);
    }

    public function 
parentUpdate(Request $request$id)
    {
        
$data $request->all();


        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {

            
$user_information User::where('id'$id)->value('user_information');
            
$file_name json_decode($user_information)->photo;

            if (
$file_name != '') {
                
$photo $file_name;
            } else {
                
$photo '';
            }
        }

        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);

        
User::where('id'$id)->update([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'user_information' => $data['user_information'],
        ]);


        
//Previous parent has been empty
        
User::where('parent_id'$id)->update(['parent_id' => null]);


        
$students $data['student_id'];
        foreach (
$students as $student) {
            if (
$student != '') {
                
$user User::where('id'$student)->first();

                if (
$user != '') {
                    
User::where('id'$user->id)->update([
                        
'parent_id' => $id,
                    ]);
                }
            }
        }

        return 
redirect()->back()->with('message''You have successfully update parent.');
    }

    public function 
parentDelete($id)
    {
        
$user User::find($id);
        
$user->delete();
        
$admins User::get()->where('role_id'5);
        return 
redirect()->route('admin.parent')->with('message''You have successfully deleted parent.');
    }

    
/**
     * Show the student list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function studentList(Request $request)
    {
        
$search $request['search'] ?? "";
        
$class_id $request['class_id'] ?? "";
        
$section_id $request['section_id'] ?? "";

        
$users User::where(function ($query) use ($search) {
            
$query->where('users.name''LIKE'"%{$search}%")
                ->
orWhere('users.email''LIKE'"%{$search}%");
        });

        
$users->where('users.school_id'auth()->user()->school_id)
            ->
where('users.role_id'7);

        if (
$section_id == 'all' || $section_id != "") {
            
$users->where('section_id'$section_id);
        }

        if (
$class_id == 'all' || $class_id != "") {
            
$users->where('class_id'$class_id);
        }

        
$students $users->join('enrollments''users.id''=''enrollments.user_id')->select('enrollments.*')->paginate(10);

        
$classes Classes::get()->where('school_id'auth()->user()->school_id);

        return 
view('admin.student.student_list'compact('students''search''classes''class_id''section_id'));
    }

    public function 
createStudentModal()
    {
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.student.add_student', ['classes' => $classes]);
    }

    public function 
studentCreate(Request $request)
    {
        
$data $request->all();
        
$code student_code();
        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$photo '';
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);

        
$data['user_information'] = json_encode($info);
        
User::create([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'password' => Hash::make($data['password']),
            
'code' => student_code(),
            
'role_id' => '7',
            
'school_id' => auth()->user()->school_id,
            
'user_information' => $data['user_information'],
        ]);
        return 
redirect()->back()->with('message''You have successfully add student.');
    }

    public function 
studentIdCardGenerate($id)
    {
        
$student_details = (new CommonController)->get_student_details_by_id($id);
        return 
view('admin.student.id_card', ['student_details' => $student_details]);
    }

    public function 
studentEditModal($id)
    {
        
$user User::find($id);
        
$student_details = (new CommonController)->get_student_details_by_id($id);
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.student.edit_student', ['user' => $user'student_details' => $student_details'classes' => $classes]);
    }

    public function 
studentUpdate(Request $request$id)
    {
        
$data $request->all();
        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$user_information User::where('id'$id)->value('user_information');
            
$file_name json_decode($user_information)->photo;

            if (
$file_name != '') {
                
$photo $file_name;
            } else {
                
$photo '';
            }
        }
        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['birthday']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);
        
$data['user_information'] = json_encode($info);
        
User::where('id'$id)->update([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'user_information' => $data['user_information'],
        ]);

        
Enrollment::where('user_id'$id)->update([
            
'class_id' => $data['class_id'],
            
'section_id' => $data['section_id'],
        ]);

        return 
redirect()->back()->with('message''You have successfully update student.');
    }

    public function 
studentDelete($id)
    {
        
$enroll Enrollment::where('user_id'$id)->first();
        
$enroll->delete();

        
$fee_history StudentFeeManager::get()->where('student_id'$id);
        
$fee_history->map->delete();

        
$attendances DailyAttendances::get()->where('student_id'$id);
        
$attendances->map->delete();

        
$book_issues BookIssue::get()->where('student_id'$id);
        
$book_issues->map->delete();

        
$gradebooks Gradebook::get()->where('student_id'$id);
        
$gradebooks->map->delete();

        
$payments Payments::get()->where('user_id'$id);
        
$payments->map->delete();

        
$payment_history PaymentHistory::get()->where('user_id'$id);
        
$payment_history->map->delete();


        
$user User::find($id);
        
$user->delete();

        
$students User::get()->where('role_id'7);
        return 
redirect()->back()->with('message''Student removed successfully.');
    }


    
/**
     * Show the teacher permission form.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function teacherPermission()
    {
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        
$teachers User::where('role_id'3)
            ->
where('school_id'auth()->user()->school_id)
            ->
get();
        return 
view('admin.permission.index', ['classes' => $classes'teachers' => $teachers]);
    }

    public function 
teacherPermissionList($value "")
    {
        
$data explode('-'$value);
        
$class_id $data[0];
        
$section_id $data[1];
        
$teachers User::where('role_id'3)
            ->
where('school_id'auth()->user()->school_id)
            ->
get();
        return 
view('admin.permission.list', ['teachers' => $teachers'class_id' => $class_id'section_id' => $section_id]);
    }

    public function 
teacherPermissionUpdate(Request $request)
    {
        
$data $request->all();

        
$class_id $data['class_id'];
        
$section_id $data['section_id'];
        
$teacher_id $data['teacher_id'];
        
$column_name $data['column_name'];
        
$value $data['value'];

        
$check_row TeacherPermission::where('class_id'$class_id)
            ->
where('section_id'$section_id)
            ->
where('teacher_id'$teacher_id)
            ->
where('school_id'auth()->user()->school_id)
            ->
get();

        if (
count($check_row) > 0) {

            
TeacherPermission::where('class_id'$class_id)
                ->
where('section_id'$section_id)
                ->
where('teacher_id'$teacher_id)
                ->
where('school_id'auth()->user()->school_id)
                ->
update([
                    
'class_id' => $class_id,
                    
'section_id' => $section_id,
                    
'school_id' => auth()->user()->school_id,
                    
'teacher_id' => $teacher_id,
                    
$column_name => $data['value'],
                ]);


        } else {
            
TeacherPermission::create([
                
'class_id' => $class_id,
                
'section_id' => $section_id,
                
'school_id' => auth()->user()->school_id,
                
'teacher_id' => $teacher_id,
                
$column_name => 1,
            ]);

        }

    }


    
/**
     * Show the offline_admission form.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function offlineAdmissionForm($type '')
    {
        
$data['parents'] = User::where(['role_id' => 6'school_id' => 1])->get();
        
$data['departments'] = Department::get()->where('school_id'auth()->user()->school_id);
        
$data['classes'] = Classes::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.offline_admission.offline_admission', ['aria_expand' => $type'data' => $data]);
    }

    public function 
offlineAdmissionCreate(Request $request)
    {
        
$data $request->all();
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        if (!empty(
$data['photo'])) {

            
$imageName time() . '.' $data['photo']->extension();

            
$data['photo']->move(public_path('assets/uploads/user-images/'), $imageName);

            
$photo $imageName;
        } else {
            
$photo '';
        }

        
$info = array(
            
'gender' => $data['gender'],
            
'blood_group' => $data['blood_group'],
            
'birthday' => strtotime($data['eDefaultDateRange']),
            
'phone' => $data['phone'],
            
'address' => $data['address'],
            
'photo' => $photo
        
);
        
$data['user_information'] = json_encode($info);

        
$duplicate_user_check User::get()->where('email'$data['email']);

        if (
count($duplicate_user_check) == 0) {

            
$user User::create([
                
'name' => $data['name'],
                
'email' => $data['email'],
                
'password' => Hash::make($data['password']),
                
'code' => student_code(),
                
'role_id' => '7',
                
'school_id' => auth()->user()->school_id,
                
'user_information' => $data['user_information'],
            ]);

            
Enrollment::create([
                
'user_id' => $user->id,
                
'class_id' => $data['class_id'],
                
'section_id' => $data['section_id'],
                
'school_id' => auth()->user()->school_id,
                
'session_id' => $active_session,
                
'roll_no' => $request->roll_no,
            ]);

            return 
redirect()->back()->with('message''Admission successfully done.');

        } else {

            return 
redirect()->back()->with('error''Sorry this email has been taken');
        }
    }

    public function 
offlineAdmissionBulkCreate(Request $request)
    {
        
$data $request->all();

        
$duplication_counter 0;
        
$class_id $data['class_id'];
        
$section_id $data['section_id'];
        
$department_id $data['department_id'];

        
$students_name $data['name'];
        
$students_email $data['email'];
        
$students_password $data['password'];
        
$students_gender $data['gender'];
        
$students_parent $data['parent_id'];

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        foreach (
$students_name as $key => $value) {
            
$duplicate_user_check User::get()->where('email'$students_email[$key]);

            if (
count($duplicate_user_check) == 0) {

                
$info = array(
                    
'gender' => $students_gender[$key],
                    
'blood_group' => '',
                    
'birthday' => '',
                    
'phone' => '',
                    
'address' => '',
                    
'photo' => ''
                
);
                
$data['user_information'] = json_encode($info);

                
$user User::create([
                    
'name' => $students_name[$key],
                    
'email' => $students_email[$key],
                    
'password' => Hash::make($students_password[$key]),
                    
'code' => student_code(),
                    
'role_id' => '7',
                    
'parent_id' => $students_parent[$key],
                    
'school_id' => auth()->user()->school_id,
                    
'user_information' => $data['user_information'],
                ]);


                
Enrollment::create([
                    
'user_id' => $user->id,
                    
'class_id' => $class_id,
                    
'section_id' => $section_id,
                    
'school_id' => auth()->user()->school_id,
                    
'department_id' => $department_id,
                    
'session_id' => $active_session,
                ]);

            } else {
                
$duplication_counter++;
            }
        }

        if (
$duplication_counter 0) {

            return 
redirect()->back()->with('warning''Some of the emails have been taken.');

        } else {

            return 
redirect()->back()->with('message''Students added successfully');
        }
    }

    public function 
offlineAdmissionExcelCreate(Request $request)
    {
        
$data $request->all();

        
$class_id $data['class_id'];
        
$section_id $data['section_id'];
        
$school_id auth()->user()->school_id;
        
$session_id get_school_settings(auth()->user()->school_id)->value('running_session');

        
$file $data['csv_file'];
        if (
$file) {
            
$filename $file->getClientOriginalName();
            
$extension $file->getClientOriginalExtension(); //Get extension of uploaded file

            // Upload file
            
$file->move(public_path('assets/csv_file/'), $filename);

            
// In case the uploaded file path is to be stored in the database
            
$filepath asset('public/assets/csv_file/' $filename);
        }

        if ((
$handle fopen($filepath'r')) !== FALSE) { // Check the resource is valid
            
$count 0;
            
$duplication_counter 0;

            while ((
$all_data fgetcsv($handle1000",")) !== FALSE) { // Check opening the file is OK!
                
if ($count 0) {

                    
// check email duplication
                    
$duplicate_user_check User::get()->where('email'$all_data[1]);

                    if (
count($duplicate_user_check) == 0) {

                        
$info = array(
                            
'gender' => $all_data[5],
                            
'blood_group' => $all_data[4],
                            
'birthday' => strtotime($all_data[6]),
                            
'phone' => $all_data[3],
                            
'address' => $all_data[7],
                            
'photo' => ''
                        
);

                        
$data['user_information'] = json_encode($info);

                        
$user User::create([
                            
'name' => $all_data[0],
                            
'email' => $all_data[1],
                            
'password' => Hash::make($all_data[2]),
                            
'code' => student_code(),
                            
'role_id' => '7',
                            
'school_id' => $school_id,
                            
'user_information' => $data['user_information'],
                        ]);


                        
Enrollment::create([
                            
'user_id' => $user->id,
                            
'class_id' => $class_id,
                            
'section_id' => $section_id,
                            
'school_id' => $school_id,
                            
'session_id' => $session_id,
                        ]);

                    } else {
                        
$duplication_counter++;
                    }
                }
                
$count++;
            }
            
fclose($handle);
        }

        if (
$duplication_counter 0) {

            return 
redirect()->back()->with('warning''Some of the emails have been taken.');

        } else {

            return 
redirect()->back()->with('message''Students added successfully');
        }
    }


    
/**
     * Show the exam category list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function examCategoryList()
    {
        
$exam_categories ExamCategory::where('school_id'auth()->user()->school_id)->get();
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.exam_category.exam_category', ['exam_categories' => $exam_categories]);
    }

    public function 
createExamCategory()
    {
        return 
view('admin.exam_category.create');
    }

    public function 
examCategoryCreate(Request $request)
    {
        
$data $request->all();
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
ExamCategory::create([
            
'name' => $data['name'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
            
'timestamp' => strtotime(date('Y-m-d')),
        ]);
        return 
redirect()->back()->with('message''Exam category created successfully.');
    }

    public function 
editExamCategory($id '')
    {
        
$exam_category ExamCategory::find($id);
        return 
view('admin.exam_category.edit', ['exam_category' => $exam_category]);
    }

    public function 
examCategoryUpdate(Request $request$id)
    {
        
$data $request->all();
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
ExamCategory::where('id'$id)->update([
            
'name' => $data['name'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
            
'timestamp' => strtotime(date('Y-m-d')),
        ]);
        return 
redirect()->back()->with('message''Exam category updated successfully.');
    }

    public function 
examCategoryDelete($id '')
    {
        
$exam_category ExamCategory::find($id);
        
$exam_category->delete();
        return 
redirect()->back()->with('message''You have successfully delete exam category.');
    }


    
/**
     * Show the exam list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function offlineExamList()
    {
        
$id "all";
        
$exams Exam::get()->where('exam_type''offline')->where('school_id'auth()->user()->school_id);
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.examination.offline_exam_list', ['exams' => $exams'classes' => $classes'id' => $id]);
    }

    public function 
offlineExamExport($id "")
    {
        if (
$id != "all") {
            
$exams Exam::where([
                
'exam_type' => 'offline',
                
'class_id' => $id
            
])->get();
        } else {
            
$exams Exam::get()->where('exam_type''offline');
        }
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.examination.offline_exam_export', ['exams' => $exams'classes' => $classes]);
    }

    public function 
classWiseOfflineExam($id)
    {
        
$exams Exam::where([
            
'exam_type' => 'offline',
            
'class_id' => $id
        
])->get();
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.examination.exam_list', ['exams' => $exams'classes' => $classes'id' => $id]);
    }

    public function 
createOfflineExam()
    {
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        
$exam_categories ExamCategory::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.examination.add_offline_exam', ['classes' => $classes'exam_categories' => $exam_categories]);
    }

    public function 
classWiseSubject($id)
    {
        
$subjects Subject::get()->where('class_id'$id);
        
$options '<option value="">' 'Select a subject' '</option>';
        foreach (
$subjects as $subject):
            
$options .= '<option value="' $subject->id '">' $subject->name '</option>';
        endforeach;
        echo 
$options;
    }

    public function 
offlineExamCreate(Request $request)
    {
        
$data $request->all();
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');
        
Exam::create([
            
'name' => $data['exam_name'],
            
'exam_type' => 'offline',
            
'starting_time' => strtotime($data['starting_date'] . '' $data['starting_time']),
            
'ending_time' => strtotime($data['ending_date'] . '' $data['ending_time']),
            
'total_marks' => $data['total_marks'],
            
'status' => 'pending',
            
'class_id' => $data['class_id'],
            
'subject_id' => $data['subject_id'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        return 
redirect()->back()->with('message''You have successfully create exam.');
    }

    public function 
editOfflineExam($id)
    {
        
$exam Exam::find($id);
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        
$subjects Subject::get()->where('class_id'$exam->class_id);
        
$exam_categories ExamCategory::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.examination.edit_offline_exam', ['exam' => $exam'classes' => $classes'subjects' => $subjects'exam_categories' => $exam_categories]);
    }

    public function 
offlineExamUpdate(Request $request$id)
    {
        
$data $request->all();
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');
        
Exam::where('id'$id)->update([
            
'name' => $data['exam_name'],
            
'exam_type' => 'offline',
            
'starting_time' => strtotime($data['starting_date'] . '' $data['starting_time']),
            
'ending_time' => strtotime($data['ending_date'] . '' $data['ending_time']),
            
'total_marks' => $data['total_marks'],
            
'status' => 'pending',
            
'class_id' => $data['class_id'],
            
'subject_id' => $data['subject_id'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        return 
redirect()->back()->with('message''You have successfully update exam.');
    }

    public function 
offlineExamDelete($id)
    {
        
$exam Exam::find($id);
        
$exam->delete();
        
$exams Exam::get()->where('exam_type''offline');
        return 
redirect()->back()->with('message''You have successfully delete exam.');
    }

    
/**
     * Show the grade daily attendance.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    
public function dailyAttendance()
    {
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        
$attendance_of_students = array();
        
$no_of_users 0;

        return 
view('admin.attendance.daily_attendance', ['classes' => $classes'attendance_of_students' => $attendance_of_students'no_of_users' => $no_of_users]);
    }

    public function 
dailyAttendanceFilter(Request $request)
    {
        
$data $request->all();
        
$date '01 ' $data['month'] . ' ' $data['year'];
        
$first_date strtotime($date);
        
$last_date date("Y-m-t"strtotime($date));
        
$last_date strtotime($last_date);

        
$page_data['attendance_date'] = strtotime($date);
        
$page_data['class_id'] = $data['class_id'];
        
$page_data['section_id'] = $data['section_id'];
        
$page_data['month'] = $data['month'];
        
$page_data['year'] = $data['year'];

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$attendance_of_students DailyAttendances::whereBetween('timestamp', [$first_date$last_date])->where(['class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'school_id' => auth()->user()->school_id'session_id' => $active_session])->get()->toArray();

        
$no_of_users DailyAttendances::where(['class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'school_id' => auth()->user()->school_id'session_id' => $active_session])->distinct()->count('student_id');

        
$classes Classes::where('school_id'auth()->user()->school_id)->get();

        return 
view('admin.attendance.attendance_list', ['page_data' => $page_data'classes' => $classes'attendance_of_students' => $attendance_of_students'no_of_users' => $no_of_users]);
    }

    public function 
takeAttendance()
    {
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.attendance.take_attendance', ['classes' => $classes]);
    }

    public function 
studentListAttendance(Request $request)
    {
        
$data $request->all();

        
$page_data['attendance_date'] = $data['date'];
        
$page_data['class_id'] = $data['class_id'];
        
$page_data['section_id'] = $data['section_id'];

        return 
view('admin.attendance.student', ['page_data' => $page_data]);
    }

    public function 
attendanceTake(Request $request)
    {
        
$att_data $request->all();

        
$students $att_data['student_id'];
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$data['timestamp'] = strtotime($att_data['date']);
        
$data['class_id'] = $att_data['class_id'];
        
$data['section_id'] = $att_data['section_id'];
        
$data['school_id'] = auth()->user()->school_id;
        
$data['session_id'] = $active_session;

        
$check_data DailyAttendances::where(['timestamp' => $data['timestamp'], 'class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'session_id' => $active_session'school_id' => auth()->user()->school_id])->get();
        if (
count($check_data) > 0) {
            foreach (
$students as $key => $student):
                
$data['status'] = $att_data['status-' $student];
                
$data['student_id'] = $student;
                
$attendance_id $att_data['attendance_id'];

                
DailyAttendances::where('id'$attendance_id[$key])->update($data);

            endforeach;
        } else {
            foreach (
$students as $student):
                
$data['status'] = $att_data['status-' $student];
                
$data['student_id'] = $student;

                
DailyAttendances::create($data);

            endforeach;
        }

        return 
redirect()->back()->with('message''Student attendance updated successfully.');
    }

    public function 
dailyAttendanceFilter_csv(Request $request)
    {

        
$data $request->all();

        
$store_get_data array_keys($data);


        
$data['month'] = substr($store_get_data[0], 03);
        
$data['year'] = substr($store_get_data[0], 44);
        
$data['role_id'] = substr($store_get_data[0], 95);

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');


        
$date '01 ' $data['month'] . ' ' $data['year'];


        
$first_date strtotime($date);

        
$last_date date("Y-m-t"strtotime($date));
        
$last_date strtotime($last_date);

        
$page_data['month'] = $data['month'];
        
$page_data['year'] = $data['year'];
        
$page_data['attendance_date'] = $first_date;
        
$no_of_users 0;






        
$no_of_users DailyAttendances::whereBetween('timestamp', [$first_date$last_date])->where(['school_id' => auth()->user()->school_id'session_id' => $active_session])->distinct()->count('student_id');
        
$attendance_of_students DailyAttendances::whereBetween('timestamp', [$first_date$last_date])->where(['school_id' => auth()->user()->school_id'session_id' => $active_session])->get()->toArray();


        
$csv_content "Student" "/" get_phrase('Date');
        
$number_of_days date('m'$page_data['attendance_date']) == ? (date('Y'$page_data['attendance_date']) % 28 : (date('m'$page_data['attendance_date']) % 100 29 : (date('m'$page_data['attendance_date']) % 400 28 29))) : ((date('m'$page_data['attendance_date']) - 1) % 30 31);
        for (
$i 1$i <= $number_of_days$i++) {
            
$csv_content .= ',' get_phrase($i);

        }


        
$file "Attendence_report.csv";


        
$student_id_count 0;


        foreach (
array_slice($attendance_of_students0$no_of_users) as $attendance_of_student) {
            
$csv_content .= "\n";

            
$user_details = (new CommonController)->get_user_by_id_from_user_table($attendance_of_student['student_id']);
            if (
date('m'$page_data['attendance_date']) == date('m'$attendance_of_student['timestamp'])) {



                if (
$student_id_count != $attendance_of_student['student_id']) {


                    
$csv_content .= $user_details['name'] . ',';


                    for (
$i 1$i <= $number_of_days$i++) {
                        
$page_data['date'] = $i ' ' $page_data['month'] . ' ' $page_data['year'];
                        
$timestamp strtotime($page_data['date']);

                        
$attendance_by_id DailyAttendances::where(['student_id' => $attendance_of_student['student_id'], 'school_id' => auth()->user()->school_id'timestamp' => $timestamp])->first();
                        if (isset(
$attendance_by_id->status) && $attendance_by_id->status == 1) {
                            
$csv_content .= "P,";
                        } elseif (isset(
$attendance_by_id->status) && $attendance_by_id->status == 0) {
                            
$csv_content .= "A,";
                        } else {
                            
$csv_content .= ",";

                        }


                        if (
$i == $number_of_days) {
                            
$csv_content substr_replace($csv_content"", -1);
                        }

                    }

                }

                
$student_id_count $attendance_of_student['student_id'];
            }
        }

        
$txt fopen($file"w") or die("Unable to open file!");
        
fwrite($txt$csv_content);
        
fclose($txt);

        
header('Content-Description: File Transfer');
        
header('Content-Disposition: attachment; filename=' $file);
        
header('Expires: 0');
        
header('Cache-Control: must-revalidate');
        
header('Pragma: public');
        
header('Content-Length: ' filesize($file));
        
header("Content-type: text/csv");
        
readfile($file);
    }

    
/**
     * Show the routine.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function routine()
    {
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.routine.routine', ['classes' => $classes]);
    }

    public function 
routineList(Request $request)
    {
        
$data $request->all();

        
$class_id $data['class_id'];
        
$section_id $data['section_id'];
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();

        return 
view('admin.routine.routine_list', ['class_id' => $class_id'section_id' => $section_id'classes' => $classes]);
    }

    public function 
addRoutine()
    {
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        
$teachers User::where(['role_id' => 3'school_id' => auth()->user()->school_id])->get();
        
$class_rooms ClassRoom::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.routine.add_routine', ['classes' => $classes'teachers' => $teachers'class_rooms' => $class_rooms]);
    }

    public function 
routineAdd(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$filename null;
        
$file $request->image;
        if (
$file) {
            
$filename time() . '.' $file->getClientOriginalExtension();
            
$extension ''//Get extension of uploaded file
            
$file->move(public_path('assets/uploads/routine/'), $filename);
        }

        
Routine::create([
            
'class_id' => $data['class_id'],
            
'section_id' => $data['section_id'],
            
'subject_id' => $data['subject_id'],
            
'teacher_id' => $data['teacher_id'],
            
'room_id' => $data['class_room_id'],
            
'day' => $data['day'],
            
'starting_hour' => $data['starting_hour'],
            
'starting_minute' => $data['starting_minute'],
            
'ending_hour' => $data['ending_hour'],
            
'ending_minute' => $data['ending_minute'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
            
'title' => $request->title,
            
'image' => $filename,
        ]);

        
cache()->forget('routines');

        return 
redirect('/admin/routine/list?class_id=' $data['class_id'] . '&section_id=' $data['section_id'])->with('message''You have successfully create a class routine.');
    }

    public function 
routineEditModal($id)
    {
        
$routine Routine::find($id);
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        
$teachers User::where(['role_id' => 3'school_id' => auth()->user()->school_id])->get();
        
$class_rooms ClassRoom::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.routine.edit_routine', ['routine' => $routine'classes' => $classes'teachers' => $teachers'class_rooms' => $class_rooms]);
    }

    public function 
routineUpdate(Request $request$id)
    {
        
$data $request->all();

        
$routin Routine::findOrFail($id);

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$filename $routin->image;
        
$file $request->image;
        if (
$file) {
            
$filename time() . '.' $file->getClientOriginalExtension();
            
$extension ''//Get extension of uploaded file
            
$file->move(public_path('assets/uploads/routine/'), $filename);
        }


        
Routine::where('id'$id)->update([
            
'class_id' => $data['class_id'],
            
'section_id' => $data['section_id'],
            
'subject_id' => $data['subject_id'],
            
'teacher_id' => $data['teacher_id'],
            
'room_id' => $data['class_room_id'],
            
'day' => $data['day'],
            
'starting_hour' => $data['starting_hour'],
            
'starting_minute' => $data['starting_minute'],
            
'ending_hour' => $data['ending_hour'],
            
'ending_minute' => $data['ending_minute'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
            
'title' => $request->title,
            
'image' => $filename,
        ]);

        
cache()->forget('routines');

        return 
redirect()->back()->with('message''You have successfully update routine.');
    }

    public function 
routineDelete($id)
    {
        
$routine Routine::find($id);
        
$routine->delete();

        
cache()->forget('routines');
        return 
redirect()->back()->with('message''You have successfully delete routine.');
    }

    
/**
     * Show the syllabus.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function syllabus()
    {
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.syllabus.syllabus', ['classes' => $classes]);
    }


    public function 
syllabusList(Request $request)
    {
        
$data $request->all();

        
$class_id $data['class_id'];
        
$section_id $data['section_id'];
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();

        return 
view('admin.syllabus.syllabus_list', ['class_id' => $class_id'section_id' => $section_id'classes' => $classes]);
    }

    public function 
addSyllabus()
    {
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.syllabus.add_syllabus', ['classes' => $classes]);
    }

    public function 
syllabusAdd(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$file $data['syllabus_file'];

        if (
$file) {
            
$filename $file->getClientOriginalName();
            
$extension $file->getClientOriginalExtension(); //Get extension of uploaded file

            
$file->move(public_path('assets/uploads/syllabus/'), $filename);

            
$filepath asset('public/assets/uploads/syllabus/' $filename);
        }

        
Syllabus::create([
            
'title' => $data['title'],
            
'class_id' => $data['class_id'],
            
'section_id' => $data['section_id'],
            
'subject_id' => $data['subject_id'],
            
'file' => $filename,
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        
cache()->forget('syllabus');

        return 
redirect('/admin/syllabus/list?class_id=' $data['class_id'] . '&section_id=' $data['section_id'])->with('message''You have successfully create a syllabus.');
    }

    public function 
syllabusEditModal($id)
    {
        
$syllabus Syllabus::find($id);
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.syllabus.edit_syllabus', ['syllabus' => $syllabus'classes' => $classes]);
    }

    public function 
syllabusUpdate(Request $request$id)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$file $data['syllabus_file'];

        if (
$file) {
            
$filename $file->getClientOriginalName();
            
$extension $file->getClientOriginalExtension(); //Get extension of uploaded file

            
$file->move(public_path('assets/uploads/syllabus/'), $filename);

            
$filepath asset('public/assets/uploads/syllabus/' $filename);
        }

        
Syllabus::where('id'$id)->update([
            
'title' => $data['title'],
            
'class_id' => $data['class_id'],
            
'section_id' => $data['section_id'],
            
'subject_id' => $data['subject_id'],
            
'file' => $filename,
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        
cache()->forget('syllabus');
        return 
redirect('/admin/syllabus/list?class_id=' $data['class_id'] . '&section_id=' $data['section_id'])->with('message''You have successfully update a syllabus.');
    }

    public function 
syllabusDelete($id)
    {
        
$syllabus Syllabus::find($id);
        
$syllabus->delete();
        
cache()->forget('syllabus');
        return 
redirect()->back()->with('message''You have successfully delete syllabus.');
    }

    
/**
     * Show the gradebook.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function gradebook(Request $request)
    {

        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        
$exam_categories ExamCategory::get()->where('school_id'auth()->user()->school_id);

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        if (
count($request->all()) > 0) {

            
$data $request->all();

            
$filter_list Gradebook::where(['class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'exam_category_id' => $data['exam_category_id'], 'school_id' => auth()->user()->school_id'session_id' => $active_session])->get();

            
$class_id $data['class_id'];
            
$section_id $data['section_id'];
            
$exam_category_id $data['exam_category_id'];
            
$subjects Subject::where(['class_id' => $class_id'school_id' => auth()->user()->school_id])->get();

        } else {
            
$filter_list = [];

            
$class_id '';
            
$section_id '';
            
$exam_category_id '';
            
$subjects '';
        }

        return 
view('admin.gradebook.gradebook', ['filter_list' => $filter_list'class_id' => $class_id'section_id' => $section_id'exam_category_id' => $exam_category_id'classes' => $classes'exam_categories' => $exam_categories'subjects' => $subjects]);
    }

    public function 
gradebookList(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$exam_wise_student_list Gradebook::where(['class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'exam_category_id' => $data['exam_category_id'], 'school_id' => auth()->user()->school_id'session_id' => $active_session])->get();
        echo 
view('admin.gradebook.list', ['exam_wise_student_list' => $exam_wise_student_list'class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'exam_category_id' => $data['exam_category_id'], 'school_id' => auth()->user()->school_id'session_id' => $active_session]);
    }

    public function 
subjectWiseMarks(Request $request$student_id "")
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$subject_wise_mark_list Gradebook::where(['class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'exam_category_id' => $data['exam_category_id'], 'student_id' => $student_id'school_id' => auth()->user()->school_id'session_id' => $active_session])->first();

        echo 
view('admin.gradebook.subject_marks', ['subject_wise_mark_list' => $subject_wise_mark_list]);
    }

    public function 
addMark()
    {
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        
$exam_categories ExamCategory::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.gradebook.add_mark', ['classes' => $classes'exam_categories' => $exam_categories]);
    }

    public function 
markAdd(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$subject_wise_mark_list Gradebook::where(['class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'exam_category_id' => $data['exam_category_id'], 'student_id' => $data['student_id'], 'school_id' => auth()->user()->school_id'session_id' => $active_session])->get();

        
$result $subject_wise_mark_list->count();

        if (
$result 0) {

            return 
redirect()->back()->with('message''Mark added successfully.');

        } else {

            
$mark = array($data['subject_id'] => $data['mark']);

            
$marks json_encode($mark);

            
$data['marks'] = $marks;
            
$data['school_id'] = auth()->user()->school_id;
            
$data['session_id'] = $active_session;
            
$data['timestamp'] = strtotime(date('Y-m-d'));

            
Gradebook::create($data);

            return 
redirect()->back()->with('message''Mark added successfully.');
        }
    }

    
/**
     * Show the grade list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function marks($value '')
    {
        
$page_data['exam_categories'] = ExamCategory::where('school_id'auth()->user()->school_id)->get();
        
$page_data['classes'] = Classes::where('school_id'auth()->user()->school_id)->get();
        
$page_data['sessions'] = Session::where('school_id'auth()->user()->school_id)->get();

        return 
view('admin.marks.index'$page_data);
    }

    public function 
marksFilter(Request $request)
    {
        
$data $request->all();

        
$page_data['exam_category_id'] = $data['exam_category_id'];
        
$page_data['class_id'] = $data['class_id'];
        
$page_data['section_id'] = $data['section_id'];
        
$page_data['subject_id'] = $data['subject_id'];
        
$page_data['session_id'] = $data['session_id'];

        
$page_data['class_name'] = Classes::find($data['class_id'])->name;
        
$page_data['section_name'] = Section::find($data['section_id'])->name;
        
$page_data['subject_name'] = Subject::find($data['subject_id'])->name;
        
$page_data['session_title'] = Session::find($data['session_id'])->session_title;


        
$enroll_students Enrollment::where('class_id'$page_data['class_id'])
            ->
where('section_id'$page_data['section_id'])
            ->
get();

        
$page_data['exam_categories'] = ExamCategory::where('school_id'auth()->user()->school_id)->get();
        
$page_data['classes'] = Classes::where('school_id'auth()->user()->school_id)->get();

        return 
view('admin.marks.marks_list', ['enroll_students' => $enroll_students'page_data' => $page_data]);
    }

    
/**
     * Show the grade list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function gradeList()
    {
        
$grades Grade::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.grade.grade_list', ['grades' => $grades]);
    }

    public function 
createGrade()
    {
        return 
view('admin.grade.add_grade');
    }

    public function 
gradeCreate(Request $request)
    {
        
$data $request->all();

        
$duplicate_grade_check Grade::get()->where('name'$data['grade'])->where('school_id'auth()->user()->school_id);

        if (
count($duplicate_grade_check) == 0) {
            
Grade::create([
                
'name' => $data['grade'],
                
'grade_point' => $data['grade_point'],
                
'mark_from' => $data['mark_from'],
                
'mark_upto' => $data['mark_upto'],
                
'school_id' => auth()->user()->school_id,
            ]);

            return 
redirect()->back()->with('message''You have successfully create a new grade.');

        } else {
            return 
back()
                ->
with('error''Sorry this grade already exists');
        }
    }

    public function 
editGrade($id)
    {
        
$grade Grade::find($id);
        return 
view('admin.grade.edit_grade', ['grade' => $grade]);
    }

    public function 
gradeUpdate(Request $request$id)
    {
        
$data $request->all();
        
Grade::where('id'$id)->update([
            
'name' => $data['grade'],
            
'grade_point' => $data['grade_point'],
            
'mark_from' => $data['mark_from'],
            
'mark_upto' => $data['mark_upto'],
            
'school_id' => auth()->user()->school_id,
        ]);

        return 
redirect()->back()->with('message''You have successfully update grade.');
    }

    public function 
gradeDelete($id)
    {
        
$grade Grade::find($id);
        
$grade->delete();
        
$grades Grade::get()->where('school_id'auth()->user()->school_id);
        return 
redirect()->back()->with('message''You have successfully delete grade.');
    }

    
/**
     * Show the promotion list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function promotionFilter()
    {
        
$sessions Session::where('school_id'auth()->user()->school_id)->get();
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.promotion.promotion', ['sessions' => $sessions'classes' => $classes]);
    }

    public function 
promotionList(Request $request)
    {
        
$data $request->all();
        
$promotion_list Enrollment::where(['session_id' => $data['session_id_from'], 'class_id' => $data['class_id_from'], 'section_id' => $data['section_id_from']])->get();
        echo 
view('admin.promotion.promotion_list', ['promotion_list' => $promotion_list'class_id_to' => $data['class_id_to'], 'section_id_to' => $data['section_id_to'], 'session_id_to' => $data['session_id_to'], 'class_id_from' => $data['class_id_from'], 'section_id_from' => $data['section_id_from']]);
    }

    public function 
promote($promotion_data '')
    {
        
$promotion_data explode('-'$promotion_data);
        
$enroll_id $promotion_data[0];
        
$class_id $promotion_data[1];
        
$section_id $promotion_data[2];
        
$session_id $promotion_data[3];

        
$enroll Enrollment::find($enroll_id);

        
Enrollment::where('id'$enroll_id)->update([
            
'class_id' => $class_id,
            
'section_id' => $section_id,
            
'session_id' => $session_id,
        ]);

        return 
true;
    }

    public function 
classWiseSections($id)
    {
        
$sections Section::get()->where('class_id'$id);
        
$options '<option value="">' 'Select a section' '</option>';
        foreach (
$sections as $section):
            
$options .= '<option value="' $section->id '">' $section->name '</option>';
        endforeach;
        echo 
$options;
    }

    
/**
     * Show the subject list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function subjectList(Request $request)
    {
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();

        if (
count($request->all()) > && $request->class_id != '') {

            
$data $request->all();
            
$class_id $data['class_id'] ?? '';
            
$subjects Subject::where('class_id'$class_id)->paginate(10);

        } else {
            
$subjects Subject::where('school_id'auth()->user()->school_id)->paginate(10);

            
$class_id '';
        }

        return 
view('admin.subject.subject_list'compact('subjects''classes''class_id'));
    }

    public function 
createSubject()
    {
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.subject.add_subject', ['classes' => $classes]);
    }

    public function 
subjectCreate(Request $request)
    {
        
$data $request->all();
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
Subject::create([
            
'name' => $data['name'],
            
'class_id' => $data['class_id'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        return 
redirect('/admin/subject?class_id=' $data['class_id'])->with('message''You have successfully create subject.');
    }

    public function 
editSubject($id)
    {
        
$subject Subject::find($id);
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.subject.edit_subject', ['subject' => $subject'classes' => $classes]);
    }

    public function 
subjectUpdate(Request $request$id)
    {
        
$data $request->all();
        
Subject::where('id'$id)->update([
            
'name' => $data['name'],
            
'class_id' => $data['class_id'],
            
'school_id' => auth()->user()->school_id,
        ]);

        return 
redirect('/admin/subject?class_id=' $data['class_id'])->with('message''You have successfully update subject.');
    }

    public function 
subjectDelete($id)
    {
        
$subject Subject::find($id);
        
$subject->delete();
        
$subjects Subject::get()->where('school_id'auth()->user()->school_id);
        return 
redirect()->back()->with('message''You have successfully delete subject.');
    }

    
/**
     * Show the department list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function departmentList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$departments Department::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id);
            })->
paginate(10);

        } else {
            
$departments Department::where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.department.department_list'compact('departments''search'));
    }

    public function 
createDepartment()
    {
        return 
view('admin.department.add_department');
    }

    public function 
departmentCreate(Request $request)
    {
        
$data $request->all();

        
$duplicate_department_check Department::get()->where('name'$data['name'])->where('school_id'auth()->user()->school_id);

        if (
count($duplicate_department_check) == 0) {
            
Department::create([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
            ]);

            return 
redirect()->back()->with('message''You have successfully create a new department.');

        } else {
            return 
back()
                ->
with('error''Sorry this department already exists');
        }
    }

    public function 
editDepartment($id)
    {
        
$department Department::find($id);
        return 
view('admin.department.edit_department', ['department' => $department]);
    }

    public function 
departmentUpdate(Request $request$id)
    {
        
$data $request->all();

        
$duplicate_department_check Department::get()->where('name'$data['name'])->where('school_id'auth()->user()->school_id);

        if (
count($duplicate_department_check) == 0) {
            
Department::where('id'$id)->update([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
            ]);

            return 
redirect()->back()->with('message''You have successfully update subject.');
        } else {
            return 
back()
                ->
with('error''Sorry this department already exists');
        }
    }

    public function 
departmentDelete($id)
    {
        
$department Department::find($id);
        
$department->delete();
        return 
redirect()->back()->with('message''You have successfully delete department.');
    }


    
/**
     * Show the class room list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function classRoomList()
    {
        
$class_rooms ClassRoom::where('school_id'auth()->user()->school_id)->paginate(10);
        return 
view('admin.class_room.class_room_list'compact('class_rooms'));
    }

    public function 
createClassRoom()
    {
        return 
view('admin.class_room.add_class_room');
    }

    public function 
classRoomCreate(Request $request)
    {
        
$data $request->all();

        
$duplicate_class_room_check ClassRoom::get()->where('name'$data['name']);

        if (
count($duplicate_class_room_check) == 0) {
            
ClassRoom::create([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
            ]);

            return 
redirect()->back()->with('message''You have successfully create a new class room.');

        } else {
            return 
back()
                ->
with('error''Sorry this class room already exists');
        }
    }

    public function 
editClassRoom($id)
    {
        
$class_room ClassRoom::find($id);
        return 
view('admin.class_room.edit_class_room', ['class_room' => $class_room]);
    }

    public function 
classRoomUpdate(Request $request$id)
    {
        
$data $request->all();

        
$duplicate_class_room_check ClassRoom::get()->where('name'$data['name']);

        if (
count($duplicate_class_room_check) == 0) {
            
ClassRoom::where('id'$id)->update([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
            ]);

            return 
redirect()->back()->with('message''You have successfully update class room.');
        } else {
            return 
back()
                ->
with('error''Sorry this class room already exists');
        }
    }

    public function 
classRoomDelete($id)
    {
        
$department ClassRoom::find($id);
        
$department->delete();
        return 
redirect()->back()->with('message''You have successfully delete class room.');
    }

    
/**
     * Show the class list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function classList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$class_lists Classes::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id);
            })->
paginate(10);

        } else {
            
$class_lists Classes::where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.class.class_list'compact('class_lists''search'));
    }

    public function 
createClass()
    {
        return 
view('admin.class.add_class');
    }

    public function 
classCreate(Request $request)
    {
        
$data $request->all();

        
$duplicate_class_check Classes::get()->where('name'$data['name'])->where('school_id'auth()->user()->school_id);

        if (
count($duplicate_class_check) == 0) {
            
$id Classes::create([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
            ])->
id;

            
Section::create([
                
'name' => 'A',
                
'class_id' => $id,
            ]);

            return 
redirect()->back()->with('message''You have successfully create a new class.');

        } else {
            return 
back()
                ->
with('error''Sorry this class already exists');
        }
    }

    public function 
editClass($id)
    {
        
$class Classes::find($id);
        return 
view('admin.class.edit_class', ['class' => $class]);
    }

    public function 
classUpdate(Request $request$id)
    {
        
$data $request->all();

        
$duplicate_class_check Classes::get()->where('name'$data['name'])->where('school_id'auth()->user()->school_id);

        if (
count($duplicate_class_check) == 0) {
            
Classes::where('id'$id)->update([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
            ]);

            return 
redirect()->back()->with('message''You have successfully update class.');
        } else {
            return 
back()
                ->
with('error''Sorry this class already exists');
        }
    }

    public function 
editSection($id)
    {
        
$sections Section::get()->where('class_id'$id);
        return 
view('admin.class.sections', ['class_id' => $id'sections' => $sections]);
    }

    public function 
sectionUpdate(Request $request$id)
    {
        
dd($request->all());
        
$data $request->all();

        
$section_id $data['section_id'];
        
$section_name $data['name'];

        foreach (
$section_id as $key => $value) {
            if (
$value == 0) {
                
Section::create([
                    
'name' => $section_name[$key],
                    
'class_id' => $id,
                ]);
            }
            if (
$value != && is_numeric($value)) {
                
Section::where(['id' => $value'class_id' => $id])->update([
                    
'name' => $section_name[$key],
                ]);
            }

            
$section_value null;
            if (
strpos($value'delete') == true) {
                
$section_value str_replace('delete'''$value);

                
$section Section::find(['id' => $section_value'class_id' => $id]);
                
$section->map->delete();
            }
        }

        return 
redirect()->back()->with('message''You have successfully update sections.');
    }

    public function 
classDelete($id)
    {
        
$class Classes::find($id);
        
$class->delete();
        
$sections Section::get()->where('class_id'$id);
        
$sections->map->delete();
        
$subjects Subject::get()->where('class_id'$id);
        
$subjects->map->delete();
        return 
redirect()->back()->with('message''You have successfully delete class.');
    }

    
/**
     * Show the student fee manager.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function studentFeeManagerList(Request $request)
    {
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        if (
count($request->all()) > 0) {
            
$data $request->all();
            
$date explode('-'$data['eDateRange']);
            
$date_from strtotime($date[0] . ' 00:00:00');
            
$date_to strtotime($date[1] . ' 23:59:59');
            
$selected_class $data['class'];
            
$selected_status $data['status'];

            if (
$selected_class != "all" && $selected_status != "all") {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            } else if (
$selected_class != "all") {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            } else if (
$selected_status != "all") {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            } else {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            }


            
$classes Classes::where('school_id'auth()->user()->school_id)->get();

            return 
view('admin.student_fee_manager.student_fee_manager', ['classes' => $classes'invoices' => $invoices'date_from' => $date_from'date_to' => $date_to'selected_class' => $selected_class'selected_status' => $selected_status]);

        } else {
            
$classes Classes::where('school_id'auth()->user()->school_id)->get();
            
$date_from strtotime(date('d-m-Y'strtotime('first day of this month')) . ' 00:00:00');
            
$date_to strtotime(date('d-m-Y'strtotime('last day of this month')) . ' 23:59:59');
            
$selected_class "";
            
$selected_status "";
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            return 
view('admin.student_fee_manager.student_fee_manager', ['classes' => $classes'invoices' => $invoices'date_from' => $date_from'date_to' => $date_to'selected_class' => $selected_class'selected_status' => $selected_status]);
        }
    }

    public function 
feeManagerExport($date_from ""$date_to ""$selected_class ""$selected_status "")
    {

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        if (
$selected_class != "all" && $selected_status != "all") {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        } else if (
$selected_class != "all") {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        } else if (
$selected_status != "all") {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        } else {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        }

        
$classes Classes::where('school_id'auth()->user()->school_id)->get();



        
$file "student_fee-" date('d-m-Y'$date_from) . '-' date('d-m-Y'$date_to) . '-' $selected_class '-' $selected_status ".csv";

        
$csv_content get_phrase('Invoice No') . ', ' get_phrase('Student') . ', ' get_phrase('Class') . ', ' get_phrase('Invoice Title') . ', ' get_phrase('Total Amount') . ', ' get_phrase('Created At') . ', ' get_phrase('Paid Amount') . ', ' get_phrase('Status');

        foreach (
$invoices as $invoice) {
            
$csv_content .= "\n";

            
$student_details = (new CommonController)->get_student_details_by_id($invoice['student_id']);
            
$invoice_no sprintf('%08d'$invoice['id']);

            
$csv_content .= $invoice_no ', ' $student_details['name'] . ', ' $student_details['class_name'] . ', ' $invoice['title'] . ', ' currency($invoice['total_amount']) . ', ' date('d-M-Y'$invoice['timestamp']) . ', ' currency($invoice['paid_amount']) . ', ' $invoice['status'];
        }
        
$txt fopen($file"w") or die("Unable to open file!");
        
fwrite($txt$csv_content);
        
fclose($txt);

        
header('Content-Description: File Transfer');
        
header('Content-Disposition: attachment; filename=' $file);
        
header('Expires: 0');
        
header('Cache-Control: must-revalidate');
        
header('Pragma: public');
        
header('Content-Length: ' filesize($file));
        
header("Content-type: text/csv");
        
readfile($file);

    }


    public function 
feeManagerExportPdfPrint($date_from ""$date_to ""$selected_class ""$selected_status "")
    {

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        if (
$selected_class != "all" && $selected_status != "all") {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        } else if (
$selected_class != "all") {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        } else if (
$selected_status != "all") {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        } else {
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
        }


        
$classes Classes::where('school_id'auth()->user()->school_id)->get();

        return 
view('admin.student_fee_manager.pdf_print', ['classes' => $classes'invoices' => $invoices'date_from' => $date_from'date_to' => $date_to'selected_class' => $selected_class'selected_status' => $selected_status]);


    }

    public function 
createFeeManager($value "")
    {

        
$classes Classes::where('school_id'auth()->user()->school_id)->get();

        if (
$value == 'single') {
            return 
view('admin.student_fee_manager.single', ['classes' => $classes]);
        } else if (
$value == 'mass') {
            return 
view('admin.student_fee_manager.mass', ['classes' => $classes]);
        }
    }

    public function 
feeManagerCreate(Request $request$value "")
    {
        
$data $request->all();

        if (
$value == 'single') {

            if (
$data['paid_amount'] > $data['total_amount']) {

                return 
back()->with('error''Paid amount can not get bigger than total amount');

            }
            if (
$data['status'] == 'paid' && $data['total_amount'] != $data['paid_amount']) {

                return 
back()->with('error''Paid amount is not equal to total amount');
            }


            
$parent_id User::find($data['student_id'])->toArray();
            
$parent_id $parent_id['parent_id'];
            
$data['parent_id'] = $parent_id;

            
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

            
$data['timestamp'] = strtotime(date('d-M-Y'));
            
$data['school_id'] = auth()->user()->school_id;
            
$data['session_id'] = $active_session;


            
StudentFeeManager::create($data);

            return 
redirect()->back()->with('message''You have successfully create a new invoice.');
        } else if (
$value == 'mass') {

            if (
$data['paid_amount'] > $data['total_amount']) {

                return 
back()->with('error''Paid amount can not get bigger than total amount');

            }
            if (
$data['status'] == 'paid' && $data['total_amount'] != $data['paid_amount']) {

                return 
back()->with('error''Paid amount is not equal to total amount');
            }

            
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

            
$data['timestamp'] = strtotime(date('d-M-Y'));
            
$data['school_id'] = auth()->user()->school_id;
            
$data['session_id'] = $active_session;

            
$enrolments Enrollment::where('class_id'$data['class_id'])
                ->
where('section_id'$data['section_id'])
                ->
get();



            foreach (
$enrolments as $enrolment) {


                
$data['student_id'] = $enrolment['user_id'];
                
$parent_id User::find($data['student_id'])->toArray();
                
$parent_id $parent_id['parent_id'];
                
$data['parent_id'] = $parent_id;
                
StudentFeeManager::create($data);
            }

            if (
sizeof($enrolments) > 0) {

                return 
redirect()->back()->with('message''Invoice added successfully');

            } else {

                return 
back()->with('error''No student found');
            }
        }
    }

    public function 
classWiseStudents($id '')
    {
        
$enrollments Enrollment::get()->where('class_id'$id);
        
$options '<option value="">' 'Select a student' '</option>';
        foreach (
$enrollments as $enrollment):
            
$student User::find($enrollment->user_id);
            
$options .= '<option value="' $student->id '">' $student->name '</option>';
        endforeach;
        echo 
$options;
    }

    public function 
editFeeManager($id '')
    {
        
$invoice_details StudentFeeManager::find($id);
        
$enrollments Enrollment::get()->where('class_id'$invoice_details->class_id);
        
$classes Classes::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.student_fee_manager.edit', ['invoice_details' => $invoice_details'classes' => $classes'enrollments' => $enrollments]);
    }

    public function 
feeManagerUpdate(Request $request$id '')
    {
        
$data $request->all();

        
/*GET THE PREVIOUS INVOICE DETAILS FOR GETTING THE PAID AMOUNT*/
        
$previous_invoice_data StudentFeeManager::find($id);

        if (
$data['paid_amount'] > $data['total_amount']) {

            return 
redirect()->back()->with('error''Paid amount can not get bigger than total amount');
        }
        if (
$data['status'] == 'paid' && $data['total_amount'] != $data['paid_amount']) {
            return 
redirect()->back()->with('error''Paid amount is not equal to total amount');
        }

        
/*KEEPING TRACK OF PAYMENT DATE*/
        
if ($data['paid_amount'] != $previous_invoice_data['paid_amount'] && $data['paid_amount'] == $previous_invoice_data['total_amount']) {
            
$timestamp strtotime(date('d-M-Y'));
        } else {
            
$timestamp $previous_invoice_data['timestamp'];
        }

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
StudentFeeManager::where('id'$id)->update([
            
'title' => $data['title'],
            
'total_amount' => $data['total_amount'],
            
'class_id' => $data['class_id'],
            
'student_id' => $data['student_id'],
            
'paid_amount' => $data['paid_amount'],
            
'payment_method' => $data['payment_method'],
            
'timestamp' => $timestamp,
            
'status' => $data['status'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        return 
redirect()->back()->with('message''You have successfully update invoice.');
    }

    public function 
studentFeeDelete($id)
    {
        
$invoice StudentFeeManager::find($id);
        
$invoice->delete();
        return 
redirect()->back()->with('message''You have successfully delete invoice.');
    }

    
/**
     * Show the expense expense list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function expenseList(Request $request)
    {
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');
        if (
count($request->all()) > 0) {
            
$data $request->all();

            
$date explode('-'$data['eDateRange']);
            
$date_from strtotime($date[0] . ' 00:00:00');
            
$date_to strtotime($date[1] . ' 23:59:59');
            
$expense_category_id $data['expense_category_id'];

            
$expense_categories ExpenseCategory::where('school_id'auth()->user()->school_id)->get();
            
$selected_category ExpenseCategory::find($expense_category_id);
            if (
$expense_category_id != 'all') {
                
$expenses Expense::where('expense_category_id'$expense_category_id)
                    ->
where('date''>='$date_from)
                    ->
where('date''<='$date_to)
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('session_id'$active_session)
                    ->
get();
            } else {
                
$expenses Expense::where('date''>='$date_from)
                    ->
where('date''<='$date_to)
                    ->
where('school_id'auth()->user()->school_id)
                    ->
where('session_id'$active_session)
                    ->
get();
            }

            return 
view('admin.expenses.expense_manager', ['expense_categories' => $expense_categories'expenses' => $expenses'selected_category' => $selected_category'date_from' => $date_from'date_to' => $date_to]);

        } else {
            
$expense_categories ExpenseCategory::where('school_id'auth()->user()->school_id)->get();
            
$selected_category "";
            
$date_from strtotime(date('d-m-Y'strtotime('first day of this month')) . ' 00:00:00');
            
$date_to strtotime(date('d-m-Y'strtotime('last day of this month')) . ' 23:59:59');
            
$expenses Expense::where('date''>='$date_from)
                ->
where('date''<='$date_to)
                ->
where('school_id'auth()->user()->school_id)
                ->
where('session_id'$active_session)
                ->
get();
            return 
view('admin.expenses.expense_manager', ['expense_categories' => $expense_categories'expenses' => $expenses'selected_category' => $selected_category'date_from' => $date_from'date_to' => $date_to]);
        }
    }

    public function 
createExpense()
    {
        
$expense_categories ExpenseCategory::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.expenses.create', ['expense_categories' => $expense_categories]);
    }

    public function 
expenseCreate(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
Expense::create([
            
'expense_category_id' => $data['expense_category_id'],
            
'date' => strtotime($data['date']),
            
'amount' => $data['amount'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        return 
redirect()->back()->with('message''You have successfully create a new expense.');
    }

    public function 
editExpense($id)
    {
        
$expense_details Expense::find($id);
        
$expense_categories ExpenseCategory::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.expenses.edit', ['expense_categories' => $expense_categories'expense_details' => $expense_details]);
    }

    public function 
expenseUpdate(Request $request$id)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
Expense::where('id'$id)->update([
            
'expense_category_id' => $data['expense_category_id'],
            
'date' => strtotime($data['date']),
            
'amount' => $data['amount'],
            
'school_id' => auth()->user()->school_id,
            
'session_id' => $active_session,
        ]);

        return 
redirect()->back()->with('message''You have successfully update expense.');
    }

    public function 
expenseDelete($id)
    {
        
$expense Expense::find($id);
        
$expense->delete();
        return 
redirect()->back()->with('message''You have successfully delete expense.');
    }


    
/**
     * Show the expense category list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function expenseCategoryList()
    {
        
$expense_categories ExpenseCategory::where('school_id'auth()->user()->school_id)->paginate(10);
        return 
view('admin.expense_category.expense_category_list'compact('expense_categories'));
    }

    public function 
createExpenseCategory()
    {
        return 
view('admin.expense_category.create');
    }

    public function 
expenseCategoryCreate(Request $request)
    {
        
$data $request->all();

        
$duplicate_category_check ExpenseCategory::get()->where('name'$data['name']);

        if (
count($duplicate_category_check) == 0) {

            
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

            
ExpenseCategory::create([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
                
'session_id' => $active_session,
            ]);

            return 
redirect()->back()->with('message''You have successfully create a new expense category.');

        } else {
            return 
back()
                ->
with('error''Sorry this expense category already exists');
        }
    }

    public function 
editExpenseCategory($id)
    {
        
$expense_category ExpenseCategory::find($id);
        return 
view('admin.expense_category.edit', ['expense_category' => $expense_category]);
    }

    public function 
expenseCategoryUpdate(Request $request$id)
    {
        
$data $request->all();

        
$duplicate_category_check ExpenseCategory::get()->where('name'$data['name']);

        if (
count($duplicate_category_check) == 0) {

            
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

            
ExpenseCategory::where('id'$id)->update([
                
'name' => $data['name'],
                
'school_id' => auth()->user()->school_id,
                
'session_id' => $active_session,
            ]);

            return 
redirect()->back()->with('message''You have successfully update expense category.');

        } else {
            return 
back()
                ->
with('error''Sorry this expense category already exists');
        }
    }

    public function 
expenseCategoryDelete($id)
    {
        
$expense_category ExpenseCategory::find($id);
        
$expense_category->delete();
        return 
redirect()->back()->with('message''You have successfully delete expense category.');
    }

    
/**
     * Show the book list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function bookList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$books Book::where(function ($query) use ($search) {
                
$query->where('name''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id);
            })->
orWhere(function ($query) use ($search) {
                
$query->where('author''LIKE'"%{$search}%")
                    ->
where('school_id'auth()->user()->school_id);
            })->
paginate(10);

        } else {
            
$books Book::where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.book.list'compact('books''search'));
    }

    public function 
createBook()
    {
        return 
view('admin.book.create');
    }

    public function 
bookCreate(Request $request)
    {
        
$data $request->all();

        
$duplicate_book_check Book::get()->where('name'$data['name']);

        if (
count($duplicate_book_check) == 0) {

            
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

            
$data['school_id'] = auth()->user()->school_id;
            
$data['session_id'] = $active_session;
            
$data['timestamp'] = strtotime(date('d-M-Y'));

            
Book::create($data);

            return 
redirect()->back()->with('message''You have successfully create a book.');

        } else {
            return 
back()
                ->
with('error''Sorry this book already exists');
        }
    }

    public function 
editBook($id "")
    {
        
$book_details Book::find($id);
        return 
view('admin.book.edit', ['book_details' => $book_details]);
    }

    public function 
bookUpdate(Request $request$id '')
    {
        
$data $request->all();

        
$duplicate_book_check Book::get()->where('name'$data['name']);

        if (
count($duplicate_book_check) == 0) {
            
Book::where('id'$id)->update([
                
'name' => $data['name'],
                
'author' => $data['author'],
                
'copies' => $data['copies'],
                
'timestamp' => strtotime(date('d-M-Y')),
            ]);

            return 
redirect()->back()->with('message''You have successfully update book.');
        } else {
            return 
back()
                ->
with('error''Sorry this book already exists');
        }
    }

    public function 
bookDelete($id)
    {
        
$book Book::find($id);
        
$book->delete();
        return 
redirect()->back()->with('message''You have successfully delete book.');
    }


    
/**
     * Show the book list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function bookIssueList(Request $request)
    {
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        if (
count($request->all()) > 0) {

            
$data $request->all();

            
$date explode('-'$data['eDateRange']);
            
$date_from strtotime($date[0] . ' 00:00:00');
            
$date_to strtotime($date[1] . ' 23:59:59');
            
$book_issues BookIssue::where('issue_date''>='$date_from)
                ->
where('issue_date''<='$date_to)
                ->
where('school_id'auth()->user()->school_id)
                ->
where('session_id'$active_session)
                ->
get();

            return 
view('admin.book_issue.book_issue', ['book_issues' => $book_issues'date_from' => $date_from'date_to' => $date_to]);
        } else {
            
$date_from strtotime(date('d-m-Y'strtotime('first day of this month')) . ' 00:00:00');
            
$date_to strtotime(date('d-m-Y'strtotime('last day of this month')) . ' 23:59:59');
            
$book_issues BookIssue::where('issue_date''>='$date_from)
                ->
where('issue_date''<='$date_to)
                ->
where('school_id'auth()->user()->school_id)
                ->
where('session_id'$active_session)
                ->
get();

            return 
view('admin.book_issue.book_issue', ['book_issues' => $book_issues'date_from' => $date_from'date_to' => $date_to]);

        }
    }

    public function 
createBookIssue()
    {
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        
$books Book::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.book_issue.create', ['classes' => $classes'books' => $books]);
    }

    public function 
bookIssueCreate(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$data['status'] = 0;
        
$data['issue_date'] = strtotime($data['issue_date']);
        
$data['school_id'] = auth()->user()->school_id;
        
$data['session_id'] = $active_session;
        
$data['timestamp'] = strtotime(date('d-M-Y'));

        
BookIssue::create($data);

        return 
redirect()->back()->with('message''You have successfully issued a book.');
    }

    public function 
editBookIssue($id "")
    {
        
$book_issue_details BookIssue::find($id);
        
$classes Classes::get()->where('school_id'auth()->user()->school_id);
        
$books Book::get()->where('school_id'auth()->user()->school_id);
        return 
view('admin.book_issue.edit', ['book_issue_details' => $book_issue_details'classes' => $classes'books' => $books]);
    }

    public function 
bookIssueUpdate(Request $request$id "")
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$data['issue_date'] = strtotime($data['issue_date']);
        
$data['school_id'] = auth()->user()->school_id;
        
$data['session_id'] = $active_session;
        
$data['timestamp'] = strtotime(date('d-M-Y'));

        unset(
$data['_token']);

        
BookIssue::where('id'$id)->update($data);

        return 
redirect()->back()->with('message''Updated successfully.');
    }

    public function 
bookIssueReturn($id)
    {
        
BookIssue::where('id'$id)->update([
            
'status' => 1,
            
'timestamp' => strtotime(date('d-M-Y')),
        ]);

        return 
redirect()->back()->with('message''Return successfully.');
    }

    public function 
bookIssueDelete($id)
    {
        
$book_issue BookIssue::find($id);
        
$book_issue->delete();
        return 
redirect()->back()->with('message''You have successfully delete a issued book.');
    }


    
/**
     * Show the noticeboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function noticeboardList()
    {
        
$notices Noticeboard::get()->where('school_id'auth()->user()->school_id);

        
$events = array();

        foreach (
$notices as $notice) {
            if (
$notice['end_date'] != "") {
                if (
$notice['start_date'] != $notice['end_date']) {
                    
$end_date strtotime($notice['end_date']) + 24 60 60;
                    
$end_date date('Y-m-d'$end_date);
                } else {
                    
$end_date date('Y-m-d'strtotime($notice['end_date']));
                }
            }

            if (
$notice['end_date'] == "" && $notice['start_time'] == "" && $notice['end_time'] == "") {
                
$info = array(
                    
'id' => $notice['id'],
                    
'title' => $notice['notice_title'],
                    
'start' => date('Y-m-d'strtotime($notice['start_date']))
                );
            } else if (
$notice['start_time'] != "" && ($notice['end_date'] == "" && $notice['end_time'] == "")) {
                
$info = array(
                    
'id' => $notice['id'],
                    
'title' => $notice['notice_title'],
                    
'start' => date('Y-m-d'strtotime($notice['start_date'])) . 'T' $notice['start_time']
                );
            } else if (
$notice['end_date'] != "" && ($notice['start_time'] == "" && $notice['end_time'] == "")) {
                
$info = array(
                    
'id' => $notice['id'],
                    
'title' => $notice['notice_title'],
                    
'start' => date('Y-m-d'strtotime($notice['start_date'])),
                    
'end' => $end_date
                
);
            } else if (
$notice['end_date'] != "" && $notice['start_time'] != "" && $notice['end_time'] != "") {
                
$info = array(
                    
'id' => $notice['id'],
                    
'title' => $notice['notice_title'],
                    
'start' => date('Y-m-d'strtotime($notice['start_date'])) . 'T' $notice['start_time'],
                    
'end' => date('Y-m-d'strtotime($notice['end_date'])) . 'T' $notice['end_time']
                );
            } else {
                
$info = array(
                    
'id' => $notice['id'],
                    
'title' => $notice['notice_title'],
                    
'start' => date('Y-m-d'strtotime($notice['start_date']))
                );
            }
            
array_push($events$info);
        }

        
$events json_encode($events);

        return 
view('admin.noticeboard.noticeboard', ['events' => $events]);
    }

    public function 
createNoticeboard()
    {
        return 
view('admin.noticeboard.create');
    }

    public function 
noticeboardCreate(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$data['status'] = 1;
        
$data['school_id'] = auth()->user()->school_id;
        
$data['session_id'] = $active_session;

        if (!empty(
$data['image'])) {

            
$imageName time() . '.' $data['image']->extension();

            
$data['image']->move(public_path('assets/uploads/noticeboard/'), $imageName);

            
$data['image'] = $imageName;
        }

        
Noticeboard::create($data);

        
cache()->forget('notices');

        return 
redirect()->back()->with('message''You have successfully create a notice.');
    }

    public function 
editNoticeboard($id "")
    {
        
$notice Noticeboard::find($id);
        return 
view('admin.noticeboard.edit', ['notice' => $notice]);
    }

    public function 
noticeboardUpdate(Request $request$id "")
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$data['status'] = 1;
        
$data['school_id'] = auth()->user()->school_id;
        
$data['session_id'] = $active_session;

        if (!empty(
$data['image'])) {

            
$imageName time() . '.' $data['image']->extension();

            
$data['image']->move(public_path('assets/uploads/noticeboard/'), $imageName);

            
$data['image'] = $imageName;
        }

        unset(
$data['_token']);

        
Noticeboard::where('id'$id)->update($data);
        
cache()->forget('notices');
        return 
redirect()->back()->with('message''Updated successfully.');
    }

    public function 
noticeboardDelete($id '')
    {
        
$notice Noticeboard::find($id);
        
$notice->delete();
        
cache()->forget('notices');

        return 
redirect()->back()->with('message''You have successfully delete a notice.');
    }


    
/**
     * Show the subscription.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    
public function subscription(Request $request)
    {

        
$if_pending_payment PaymentHistory::where('user_id'auth()->user()->id)->where('status''pending')->get()->count();

        if (
count($request->all()) > 0) {
            
$data $request->all();
            
$date explode('-'$data['eDateRange']);
            
$date_from strtotime($date[0] . ' 00:00:00');
            
$date_to strtotime($date[1] . ' 23:59:59');
            
$subscriptions Subscription::where('school_id'auth()->user()->school_id)
                ->
where('date_added''>='$date_from)
                ->
where('date_added''<='$date_to)
                ->
get();
        } else {
            
$date_from strtotime('first day of january this year');
            
$date_to strtotime('last day of december this year');
            
$subscriptions Subscription::where('school_id'auth()->user()->school_id)
                ->
where('date_added''>='$date_from)
                ->
where('date_added''<='$date_to)
                ->
get();
        }

        
$subscription_details Subscription::where(['school_id' => auth()->user()->school_id'active' => '1']);
        if (
$subscription_details->get()->count() > 0) {
            
$package_details Package::find($subscription_details->first()->package_id);
        } else {
            
$subscription_details Subscription::where(['school_id' => auth()->user()->school_id'status' => '0']);
            if (
$subscription_details->get()->count() > 0) {
                
$package_details Package::find($subscription_details->first()->package_id);
            } else {
                
$package_details '';
            }
        }
        return 
view('admin.subscription.subscription', ['if_pending_payment' => $if_pending_payment'subscriptions' => $subscriptions'subscription_details' => $subscription_details'package_details' => $package_details'date_from' => $date_from'date_to' => $date_to]);
    }

    public function 
subscriptionPurchase()
    {
        
$packages Package::all();
        return 
view('admin.subscription.purchase', ['packages' => $packages]);
    }



    
/**
     * Show the event list.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    
public function eventList(Request $request)
    {
        
$search $request['search'] ?? "";

        if (
$search != "") {

            
$events FrontendEvent::where(function ($query) use ($search) {
                
$query->where('title''LIKE'"%{$search}%");
            })->
paginate(10);

        } else {
            
$events FrontendEvent::where('school_id'auth()->user()->school_id)->paginate(10);
        }

        return 
view('admin.events.events'compact('events''search'));
    }

    public function 
createEvent()
    {
        return 
view('admin.events.create_event');
    }

    public function 
eventCreate(Request $request)
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$data['timestamp'] = strtotime($data['timestamp']);
        
$data['school_id'] = auth()->user()->school_id;
        
$data['session_id'] = $active_session;
        
$data['created_by'] = auth()->user()->id;

        
FrontendEvent::create($data);

        return 
redirect()->back()->with('message''You have successfully create a event.');
    }

    public function 
editEvent($id "")
    {
        
$event FrontendEvent::find($id);
        return 
view('admin.events.edit_event', ['event' => $event]);
    }

    public function 
eventUpdate(Request $request$id "")
    {
        
$data $request->all();

        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');

        
$data['timestamp'] = strtotime($data['timestamp']);
        
$data['school_id'] = auth()->user()->school_id;
        
$data['session_id'] = $active_session;
        
$data['created_by'] = auth()->user()->id;

        unset(
$data['_token']);

        
FrontendEvent::where('id'$id)->update($data);

        return 
redirect()->back()->with('message''Updated successfully.');
    }

    public function 
eventDelete($id)
    {
        
$event FrontendEvent::find($id);
        
$event->delete();
        return 
redirect()->back()->with('message''You have successfully delete a event.');
    }

    public function 
schoolSettings()
    {
        
$school_details School::find(auth()->user()->school_id);
        return 
view('admin.settings.school_settings', ['school_details' => $school_details]);
    }

    public function 
schoolUpdate(Request $request)
    {
        
$data $request->all();

        unset(
$data['_token']);

        
School::where('id'auth()->user()->school_id)->update([
            
'title' => $data['school_name'],
            
'phone' => $data['phone'],
            
'address' => $data['address'],
        ]);
        return 
redirect()->back()->with('message''School details updated successfully.');
    }







    public function 
studentFeeinvoice($id)
    {
        
$invoice_details StudentFeeManager::find($id)->toArray();
        
$student_details = (new CommonController)->get_student_details_by_id($invoice_details['student_id'])->toArray();


        return 
view('admin.student_fee_manager.invoice', ['invoice_details' => $invoice_details'student_details' => $student_details]);
    }

    public function 
offline_payment_pending(Request $request)
    {
        
$active_session get_school_settings(auth()->user()->school_id)->value('running_session');
        if (
count($request->all()) > 0) {
            
$data $request->all();
            
$date explode('-'$data['eDateRange']);
            
$date_from strtotime($date[0] . ' 00:00:00');
            
$date_to strtotime($date[1] . ' 23:59:59');
            
$selected_class $data['class'];
            
$selected_status 'pending';



            if (
$selected_class != "all" && $selected_status != "all") {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            } else if (
$selected_class != "all") {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('class_id'$selected_class)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            } else if (
$selected_status != "all") {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('status'$selected_status)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            } else {
                
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            }


            
$classes Classes::where('school_id'auth()->user()->school_id)->get();

            return 
view('admin.student_fee_manager.student_fee_manager_pending', ['classes' => $classes'invoices' => $invoices'date_from' => $date_from'date_to' => $date_to'selected_class' => $selected_class'selected_status' => $selected_status]);

        } else {
            
$classes Classes::where('school_id'auth()->user()->school_id)->get();
            
$date_from strtotime(date('d-m-Y'strtotime('first day of this month')) . ' 00:00:00');
            
$date_to strtotime(date('d-m-Y'strtotime('last day of this month')) . ' 23:59:59');
            
$selected_class "";
            
$selected_status "";
            
$invoices StudentFeeManager::where('timestamp''>='$date_from)->where('timestamp''<='$date_to)->where('status''pending')->where('school_id'auth()->user()->school_id)->where('session_id'$active_session)->get();
            return 
view('admin.student_fee_manager.student_fee_manager_pending', ['classes' => $classes'invoices' => $invoices'date_from' => $date_from'date_to' => $date_to'selected_class' => $selected_class'selected_status' => $selected_status]);
        }


    }

    public function 
update_offline_payment($id$status)
    {
        
$amount StudentFeeManager::find($id)->toArray();
        
$amount $amount['total_amount'];

        if (
$status == 'approve') {
            
StudentFeeManager::where('id'$id)->update([
                
'status' => 'paid',
                
'updated_at' => date("Y-m-d H:i:s"),
                
'paid_amount' => $amount,
                
'payment_method' => 'offline'
            
]);

            return 
redirect()->back()->with('message''Payment Approved');
        } elseif (
$status == 'decline') {
            
StudentFeeManager::where('id'$id)->update([
                
'status' => 'unpaid',
                
'updated_at' => date("Y-m-d H:i:s"),
                
'paid_amount' => $amount,
                
'payment_method' => 'offline'
            
]);

            return 
redirect()->back()->with('message''Payment Decline');


        }


    }

    public function 
paymentSettings()
    {

        
$all_payments $this->count_payment_gateway();

        
$payment_gateways PaymentMethods::where('school_id'auth()->user()->school_id)->get();

        if (
count($payment_gateways) == 0) {

            
$this->insert_gateways();
            
$payment_gateways PaymentMethods::where('school_id'auth()->user()->school_id)->get();

        } elseif (
count($payment_gateways) != count($all_payments)) {

            foreach (
$all_payments as $payments) {

                
$available 0;
                foreach (
$payment_gateways as $single_gateway) {
                    if (
$payments == $single_gateway->name) {
                        
$available 1;
                        break;
                    }
                }

                if (
$available == 0) {
                    if (
$payments == 'paystack') {
                        
$this->install_paystack();
                    }
                }
            }
        }


        
$school_currency School::where('id'auth()->user()->school_id)->first()->toArray();
        
$currencies Currency::all()->toArray();
        
$paypal "";
        
$paypal_keys "";
        
$stripe "";
        
$stripe_keys "";
        
$razorpay "";
        
$razorpay_keys "";
        
$paytm "";
        
$paytm_keys "";
        
$flutterwave "";
        
$flutterwave_keys "";
        
$paystack "";
        
$paystack_keys "";

        foreach (
$payment_gateways as $single_gateway) {

            if (
$single_gateway->name == "paypal") {
                
$paypal $single_gateway->toArray();
                
$paypal_keys json_decode($paypal['payment_keys']);
            } elseif (
$single_gateway->name == "stripe") {
                
$stripe $single_gateway->toArray();
                
$stripe_keys json_decode($stripe['payment_keys']);
            } elseif (
$single_gateway->name == "razorpay") {
                
$razorpay $single_gateway->toArray();
                
$razorpay_keys json_decode($razorpay['payment_keys']);
            } elseif (
$single_gateway->name == "paytm") {
                
$paytm $single_gateway->toArray();
                
$paytm_keys json_decode($paytm['payment_keys']);
            } elseif (
$single_gateway->name == "flutterwave") {
                
$flutterwave $single_gateway->toArray();
                
$flutterwave_keys json_decode($flutterwave['payment_keys']);
            } elseif (
$single_gateway->name == "paystack") {
                
$paystack $single_gateway->toArray();
                
$paystack_keys json_decode($paystack['payment_keys']);
            }


        }

        return 
view('admin.payment_settings.key_settings', ['paytm' => $paytm'paytm_keys' => $paytm_keys'razorpay' => $razorpay'razorpay_keys' => $razorpay_keys'stripe' => $stripe'stripe_keys' => $stripe_keys'paypal' => $paypal'paypal_keys' => $paypal_keys'flutterwave' => $flutterwave'flutterwave_keys' => $flutterwave_keys'paystack' => $paystack'paystack_keys' => $paystack_keys'school_currency' => $school_currency'currencies' => $currencies]);
    }

    public function 
count_payment_gateway()
    {
        
$all_payment_gateways = array(
            
'paypal',
            
'stripe',
            
'razorpay',
            
'flutterwave',
            
'paytm',
            
'paystack',
        );

        return 
$all_payment_gateways;
    }

    public function 
install_paystack()
    {
        
$keys = array();
        
$paystack = new PaymentMethods;
        
$paystack['name'] = "paystack";
        
$paystack['image'] = "paystack.png";
        
$paystack['status'] = 1;
        
$paystack['mode'] = "test";
        
$keys['test_key'] = "pk_test_xxxxxxxxxxxxx";
        
$keys['test_secret_key'] = "sk_test_xxxxxxxxxxxxxxx";
        
$keys['public_live_key'] = "pk_live_xxxxxxxxxxxxxx";
        
$keys['secret_live_key'] = "sk_live_xxxxxxxxxxxxxx";
        
$paystack['payment_keys'] = json_encode($keys);
        
$paystack['school_id'] = auth()->user()->school_id;
        
$paystack->save();
    }


    public function 
paymentSettings_post(Request $request)
    {
        
$data $request->all();

        
$method $data['method'];
        
$update_id $data['update_id'];


        if (
$method == 'currency') {
            
$Currency School::find($update_id);
            
$Currency['school_currency'] = $data['school_currency'];
            
$Currency['currency_position'] = $data['currency_position'];
            
$Currency->save();

        } elseif (
$method == 'paypal') {

            
$keys = array();
            
$paypal PaymentMethods::find($update_id);
            
$paypal['status'] = $data['status'];
            
$paypal['mode'] = $data['mode'];
            
$keys['test_client_id'] = $data['test_client_id'];
            
$keys['test_secret_key'] = $data['test_secret_key'];
            
$keys['live_client_id'] = $data['live_client_id'];
            
$keys['live_secret_key'] = $data['live_secret_key'];
            
$paypal['payment_keys'] = json_encode($keys);
            
$paypal['school_id'] = auth()->user()->school_id;
            
$paypal->save();


        } elseif (
$method == 'stripe') {
            
$keys = array();
            
$stripe PaymentMethods::find($update_id);
            
$stripe['status'] = $data['status'];
            
$stripe['mode'] = $data['mode'];
            
$keys['test_key'] = $data['test_key'];
            
$keys['test_secret_key'] = $data['test_secret_key'];
            
$keys['public_live_key'] = $data['public_live_key'];
            
$keys['secret_live_key'] = $data['secret_live_key'];
            
$stripe['payment_keys'] = json_encode($keys);
            
$stripe['school_id'] = auth()->user()->school_id;
            
$stripe->save();
        } elseif (
$method == 'razorpay') {
            
$keys = array();
            
$razorpay PaymentMethods::find($update_id);
            
$razorpay['status'] = $data['status'];
            
$razorpay['mode'] = $data['mode'];
            
$keys['test_key'] = $data['test_key'];
            
$keys['test_secret_key'] = $data['test_secret_key'];
            
$keys['live_key'] = $data['live_key'];
            
$keys['live_secret_key'] = $data['live_secret_key'];
            
$keys['theme_color'] = $data['theme_color'];
            
$razorpay['payment_keys'] = json_encode($keys);
            
$razorpay['school_id'] = auth()->user()->school_id;
            
$razorpay->save();


        } elseif (
$method == 'paytm') {
            
$keys = array();
            
$paytm PaymentMethods::find($update_id);
            
$paytm['status'] = $data['status'];
            
$paytm['mode'] = $data['mode'];
            
$keys['test_merchant_id'] = $data['test_merchant_id'];
            
$keys['test_merchant_key'] = $data['test_merchant_key'];
            
$keys['live_merchant_id'] = $data['live_merchant_id'];
            
$keys['live_merchant_key'] = $data['live_merchant_key'];
            
$keys['environment'] = $data['environment'];
            
$keys['merchant_website'] = $data['merchant_website'];
            
$keys['channel'] = $data['channel'];
            
$keys['industry_type'] = $data['industry_type'];
            
$paytm['payment_keys'] = json_encode($keys);
            
$paytm['school_id'] = auth()->user()->school_id;
            
$paytm->save();

        } elseif (
$method == 'flutterwave') {
            
$keys = array();
            
$flutterwave PaymentMethods::find($update_id);
            
$flutterwave['status'] = $data['status'];
            
$flutterwave['mode'] = $data['mode'];
            
$keys['test_key'] = $data['test_key'];
            
$keys['test_secret_key'] = $data['test_secret_key'];
            
$keys['test_encryption_key'] = $data['test_encryption_key'];
            
$keys['public_live_key'] = $data['public_live_key'];
            
$keys['secret_live_key'] = $data['secret_live_key'];
            
$keys['encryption_live_key'] = $data['encryption_live_key'];
            
$flutterwave['payment_keys'] = json_encode($keys);
            
$flutterwave['school_id'] = auth()->user()->school_id;
            
$flutterwave->save();

        } elseif (
$method == 'paystack') {
            
$keys = array();
            
$paystack = new PaymentMethods;
            
$paystack['name'] = "paystack";
            
$paystack['image'] = "paystack.png";
            
$paystack['status'] = 1;
            
$paystack['mode'] = "test";
            
$keys['test_key'] = "pk_test_xxxxxxxxxxx";
            
$keys['test_secret_key'] = "sk_test_xxxxxxxxxxx";
            
$keys['public_live_key'] = "pk_live_xxxxxxxxxxxxxx";
            
$keys['secret_live_key'] = "sk_live_xxxxxxxxxxxxxx";
            
$paystack['payment_keys'] = json_encode($keys);
            
$paystack['school_id'] = auth()->user()->school_id;
            
$paystack->save();

        }

        return 
redirect()->route('admin.settings.payment')->with('message''key has been updated');



    }

    public function 
insert_gateways()
    {
        
$keys = array();
        
$paypal = new PaymentMethods;
        
$paypal['name'] = "paypal";
        
$paypal['image'] = "paypal.png";
        
$paypal['status'] = 1;
        
$paypal['mode'] = "test";
        
$keys['test_client_id'] = "snd_cl_id_xxxxxxxxxxxxx";
        
$keys['test_secret_key'] = "snd_cl_sid_xxxxxxxxxxxx";
        
$keys['live_client_id'] = "lv_cl_id_xxxxxxxxxxxxxxx";
        
$keys['live_secret_key'] = "lv_cl_sid_xxxxxxxxxxxxxx";
        
$paypal['payment_keys'] = json_encode($keys);
        
$paypal['school_id'] = auth()->user()->school_id;
        
$paypal->save();

        
$keys = array();
        
$stripe = new PaymentMethods;
        
$stripe['name'] = "stripe";
        
$stripe['image'] = "stripe.png";
        
$stripe['status'] = 1;
        
$stripe['mode'] = "test";
        
$keys['test_key'] = "pk_test_xxxxxxxxxxxxx";
        
$keys['test_secret_key'] = "sk_test_xxxxxxxxxxxxxx";
        
$keys['public_live_key'] = "pk_live_xxxxxxxxxxxxxx";
        
$keys['secret_live_key'] = "sk_live_xxxxxxxxxxxxxx";
        
$stripe['payment_keys'] = json_encode($keys);
        
$stripe['school_id'] = auth()->user()->school_id;
        
$stripe->save();

        
$keys = array();
        
$razorpay = new PaymentMethods;
        
$razorpay['name'] = "razorpay";
        
$razorpay['image'] = "razorpay.png";
        
$razorpay['status'] = 1;
        
$razorpay['mode'] = "test";
        
$keys['test_key'] = "rzp_test_xxxxxxxxxxxxx";
        
$keys['test_secret_key'] = "rzs_test_xxxxxxxxxxxxx";
        
$keys['live_key'] = "rzp_live_xxxxxxxxxxxxx";
        
$keys['live_secret_key'] = "rzs_live_xxxxxxxxxxxxx";
        
$keys['theme_color'] = "#c7a600";
        
$razorpay['payment_keys'] = json_encode($keys);
        
$razorpay['school_id'] = auth()->user()->school_id;
        
$razorpay->save();

        
$keys = array();
        
$paytm = new PaymentMethods;
        
$paytm['name'] = "paytm";
        
$paytm['image'] = "paytm.png";
        
$paytm['status'] = 1;
        
$paytm['mode'] = "test";
        
$keys['test_merchant_id'] = "tm_id_xxxxxxxxxxxx";
        
$keys['test_merchant_key'] = "tm_key_xxxxxxxxxx";
        
$keys['live_merchant_id'] = "lv_mid_xxxxxxxxxxx";
        
$keys['live_merchant_key'] = "lv_key_xxxxxxxxxxx";
        
$keys['environment'] = "provide-a-environment";
        
$keys['merchant_website'] = "merchant-website";
        
$keys['channel'] = "provide-channel-type";
        
$keys['industry_type'] = "provide-industry-type";
        
$paytm['payment_keys'] = json_encode($keys);
        
$paytm['school_id'] = auth()->user()->school_id;
        
$paytm->save();

        
$keys = array();
        
$flutterwave = new PaymentMethods;
        
$flutterwave['name'] = "flutterwave";
        
$flutterwave['image'] = "flutterwave.png";
        
$flutterwave['status'] = 1;
        
$flutterwave['mode'] = "test";
        
$keys['test_key'] = "flwp_test_xxxxxxxxxxxxx";
        
$keys['test_secret_key'] = "flws_test_xxxxxxxxxxxxx";
        
$keys['test_encryption_key'] = "flwe_test_xxxxxxxxxxxxx";
        
$keys['public_live_key'] = "flwp_live_xxxxxxxxxxxxxx";
        
$keys['secret_live_key'] = "flws_live_xxxxxxxxxxxxxx";
        
$keys['encryption_live_key'] = "flwe_live_xxxxxxxxxxxxxx";
        
$flutterwave['payment_keys'] = json_encode($keys);
        
$flutterwave['school_id'] = auth()->user()->school_id;
        
$flutterwave->save();

        
$keys = array();
        
$paystack = new PaymentMethods;
        
$paystack['name'] = "paystack";
        
$paystack['image'] = "paystack.png";
        
$paystack['status'] = 1;
        
$paystack['mode'] = "test";
        
$keys['test_key'] = "pk_test_xxxxxxxxxx";
        
$keys['test_secret_key'] = "sk_test_xxxxxxxxxxxxxx";
        
$keys['public_live_key'] = "pk_live_xxxxxxxxxxxxxx";
        
$keys['secret_live_key'] = "sk_live_xxxxxxxxxxxxxx";
        
$paystack['payment_keys'] = json_encode($keys);
        
$paystack['school_id'] = auth()->user()->school_id;
        
$paystack->save();


    }

    public function 
subscriptionPayment($package_id)
    {

        
$selected_package Package::find($package_id)->toArray();
        
$user_info User::where('id'auth()->user()->id)->first()->toArray();

        if (
$selected_package['price'] == 0) {
            
$check_duplication Subscription::where('package_id'$selected_package['id'])->where('school_id'auth()->user()->school_id)->get()->count();
            if (
$check_duplication == 0) {
                return 
redirect()->route('admin_free_subcription', ['user_id' => auth()->user()->id'package_id' => $selected_package['id']]);

            } else {
                return 
redirect()->back()->with('error''you can not subscribe the free trail twice');
            }


        }

        return 
view('admin.subscription.payment_gateway', ['selected_package' => $selected_package'user_info' => $user_info]);
    }

    public function 
admin_free_subcription(Request $request)
    {
        
$data $request->all();

        
$selected_package Package::find($data['package_id'])->toArray();
        
$user_info User::where('id'$data['user_id'])->first()->toArray();

        
$data['document_file'] = "sample-payment.pdf";

        
$transaction_keys json_encode($data);

        
$status Subscription::create([
            
'package_id' => $selected_package['id'],
            
'school_id' => auth()->user()->school_id,
            
'paid_amount' => $selected_package['price'],
            
'payment_method' => 'free',
            
'transaction_keys' => $transaction_keys,
            
'date_added' => strtotime(date("Y-m-d H:i:s")),
            
'expire_date' => strtotime('+' $selected_package['days'] . ' days'strtotime(date("Y-m-d H:i:s"))),
            
'status' => '1',
            
'active' => '1',
        ]);

        return 
redirect()->route('admin.subscription')->with('message''Free Subscription Completed Successfully');


    }




    public function 
admin_subscription_offline_payment(Request $request$id "")
    {
        
$data $request->all();

        if (
$data['amount'] > 0) {

            
$file $data['document_image'];

            if (
$file) {
                
$filename $file->getClientOriginalName();
                
$extension $file->getClientOriginalExtension(); //Get extension of uploaded file


                
$file->move(public_path('assets/uploads/offline_payment'), $filename);
                
$data['document_image'] = $filename;

            } else {
                
$data['document_image'] = '';
            }

            
$pending_payment = new PaymentHistory;

            
$pending_payment['payment_type'] = 'subscription';
            
$pending_payment['user_id'] = auth()->user()->id;
            
$pending_payment['package_id'] = $id;
            
$pending_payment['amount'] = $data['amount'];
            
$pending_payment['school_id'] = auth()->user()->school_id;
            
$pending_payment['transaction_keys'] = '[]';
            
$pending_payment['document_image'] = $data['document_image'];
            
$pending_payment['paid_by'] = 'offline';
            
$pending_payment['status'] = 'pending';
            
$pending_payment['timestamp'] = strtotime(date("Y-m-d H:i:s"));

            
$pending_payment->save();



            return 
redirect()->route('admin.subscription')->with('message''offline payment requested successfully');
        } else {
            return 
redirect()->route('admin.subscription')->with('message''offline payment requested fail');
        }


    }

    public function 
offlinePayment(Request $request$id "")
    {
        
$data $request->all();

        if (
$data['amount'] > 0):

            
$file $data['document_image'];

            if (
$file) {
                
$filename $file->getClientOriginalName();
                
$extension $file->getClientOriginalExtension(); //Get extension of uploaded file


                
$file->move(public_path('assets/uploads/offline_payment'), $filename);
                
$data['document_image'] = $filename;
            } else {
                
$data['document_image'] = '';
            }


            
PaymentHistory::create([
                
'payment_type' => 'subscription',
                
'user_id' => auth()->user()->id,
                
'amount' => $data['amount'],
                
'school_id' => $id,
                
'transaction_keys' => json_encode(array()),
                
'document_image' => $data['document_image'],
                
'paid_by' => 'offline',
                
'status' => 'pending',
                
'timestamp' => strtotime(date('Y-m-d')),
            ]);

            return 
redirect('admin/subscription')->with('message''Your document will be reviewd.');

        else:
            return 
redirect('admin/subscription')->with('warning''Session timed out. Please try again');
        endif;
    }


    function 
profile()
    {
        return 
view('admin.profile.view');
    }

    function 
profile_update(Request $request)
    {
        
$data['name'] = $request->name;
        
$data['email'] = $request->email;
        
$data['designation'] = $request->designation;

        
$user_info['birthday'] = strtotime($request->eDefaultDateRange);
        
$user_info['gender'] = $request->gender;
        
$user_info['phone'] = $request->phone;
        
$user_info['address'] = $request->address;


        if (empty(
$request->photo)) {
            
$user_info['photo'] = $request->old_photo;
        } else {
            
$file_name random(10) . '.png';
            
$user_info['photo'] = $file_name;

            
$request->photo->move(public_path('assets/uploads/user-images/'), $file_name);
        }

        
$data['user_information'] = json_encode($user_info);

        
User::where('id'auth()->user()->id)->update($data);

        return 
redirect(route('admin.profile'))->with('message'get_phrase('Profile info updated successfully'));
    }

    function 
password($action_type nullRequest $request)
    {



        if (
$action_type == 'update') {



            if (
$request->new_password != $request->confirm_password) {
                return 
back()->with("error""Confirm Password Doesn't match!");
            }


            if (!
Hash::check($request->old_passwordauth()->user()->password)) {
                return 
back()->with("error""Current Password Doesn't match!");
            }

            
$data['password'] = Hash::make($request->new_password);
            
User::where('id'auth()->user()->id)->update($data);

            return 
redirect(route('admin.password''edit'))->with('message'get_phrase('Password changed successfully'));
        }

        return 
view('admin.profile.password');
    }



    
/**
     * Show the session manager.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    
public function sessionManager()
    {
        
$sessions Session::where('school_id'auth()->user()->school_id)->get();
        return 
view('admin.session.session_manager', ['sessions' => $sessions]);
    }

    public function 
activeSession($id)
    {
        
$previous_session_id get_school_settings(auth()->user()->school_id)->value('running_session');

        
Session::where('id'$previous_session_id)->update([
            
'status' => '0',
        ]);

        
$session Session::where('id'$id)->update([
            
'status' => '1',
        ]);

        
School::where('id'auth()->user()->school_id)->update([
            
'running_session' => $id,
        ]);

        
$response = array(
            
'status' => true,
            
'notification' => get_phrase('Session has been activated')
        );
        
$response json_encode($response);

        echo 
$response;
    }

    public function 
createSession()
    {
        return 
view('admin.session.create');
    }

    public function 
sessionCreate(Request $request)
    {
        
$data $request->all();

        
$duplicate_session_check Session::get()->where('session_title'$data['session_title'])->where('school_id'auth()->user()->school_id);

        if (
count($duplicate_session_check) == 0) {

            
$data['status'] = '0';
            
$data['school_id'] = auth()->user()->school_id;

            
Session::create($data);

            return 
redirect()->back()->with('message''You have successfully create a session.');
        } else {
            return 
redirect()->back()->with('error''Sorry this session already exists');
        }
    }

    public function 
editSession($id '')
    {
        
$session Session::find($id);
        return 
view('admin.session.edit', ['session' => $session]);
    }

    public function 
sessionUpdate(Request $request$id)
    {
        
$data $request->all();

        unset(
$data['_token']);

        
Session::where('id'$id)->update($data);

        return 
redirect()->back()->with('message''You have successfully update session.');
    }

    public function 
sessionDelete($id '')
    {
        
$previous_session_id get_school_settings(auth()->user()->school_id)->value('running_session');

        if (
$previous_session_id != $id) {
            
$session Session::find($id);
            
$session->delete();
            return 
redirect()->back()->with('message''You have successfully delete a session.');
        } else {
            return 
redirect()->back()->with('error''Can not delete active session.');
        }
    }


    public function 
frontSettings()
    {
        return 
view('admin.front_template.index');
    }
    public function 
front_template_store(Request $request)
    {
        if (
$request->name == 'banner_slider_section') {

            
$request->validate([
                
'banner_section_heading.*' => 'required',
                
'banner_slider_img.*' => 'required'
            
]);
            
//TODO::manege all titles & images
            
$titles = [];
            
$file_name '';
            if (
$request->banner_section_heading) {
                foreach (
$request->banner_section_heading as $key => $item) {
                    if (isset(
$request->banner_slider_img[$key])) {
                        
$file $request->banner_slider_img[$key];
                        
$imageName time() . $key '.' $file->getClientOriginalExtension();
                        
$file->move(public_path('/uploads'), $imageName);
                        
$file_name $imageName;
                    } else if (isset(
$request->pre_banner_slider_img[$key]) && $request->pre_banner_slider_img[$key]) {
                        
$file_name $request->pre_banner_slider_img[$key];
                    }

                    
$titles[] = [
                        
'banner_section_heading' => $item,
                        
'image' => $file_name
                    
];
                }
            }
            
//TODO::End
            
$data = ['key' => 'banner_slider_section'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($titles);
            
$setting->save();
            
cache()->flush();

            return 
back()->with('message'get_phrase('Banner Section successfully updated'));

        }

        if (
$request->name == 'gallery_section') {

            
$request->validate([

                
'gallery_img.*' => 'required'
            
]);
            
//TODO::manege all images
            
$all_image = [];
            
$file_name '';
            if (
$request->gallery_img) {
                foreach (
$request->gallery_img as $key => $item) {
                    if (isset(
$request->gallery_img[$key])) {
                        
$file $request->gallery_img[$key];
                        
$galleryImgName time() . $key '.32' $file->getClientOriginalExtension();
                        
$file->move(public_path('/uploads'), $galleryImgName);
                        
$file_name $galleryImgName;
                    }

                    
$all_image[] = [
                        
'image' => $file_name
                    
];
                }
            }


            if (
$request->pre_gallery_img) {
                foreach (
$request->pre_gallery_img as $key => $item) {
                    
$all_image[] = [
                        
'image' => isset($request->pre_gallery_img[$key]) ? $request->pre_gallery_img[$key] : ''
                    
];

                }
            }



            
//TODO::End
            
$data = ['key' => 'gallery_section'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($all_image);
            
$setting->save();
            
cache()->flush();

            return 
back()->with('message'get_phrase('Gallery Section successfully updated'));

        }

        if (
$request->name == 'head_teacher_message_sec') {
            
$head_teacher_message_section json_decode(get_settings('head_teacher_message_sec'));
            if (
$request->hasFile('head_teacher_image')) {
                
$file $request->file('head_teacher_image');
                
$headTeacherImg time() . '_5' '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/uploads'), $headTeacherImg);
                
$request['head_teacher_image_file'] = $headTeacherImg;
            } else {
                
$request['head_teacher_image_file'] = isset($head_teacher_message_section->head_teacher_image_file) ? $head_teacher_message_section->head_teacher_image_file '';
            }
            
$data = ['key' => 'head_teacher_message_sec'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($request->only('head_teacher_message_title''head_teacher_message_description''head_teacher_image_file'));
            
$setting->save();
            return 
back()->with('message'get_phrase('Head Teacher data successfully updated'));

        }

                    if (
$request->name == 'president_message_sec') {
                
$president_message_section json_decode(get_settings('president_message_sec'));

                if (
$request->hasFile('president_image')) {
                    
$file $request->file('president_image');
                    
$presidentImg time() . '_6' '.' $file->getClientOriginalExtension();  // Changed suffix to differentiate
                    
$file->move(public_path('/uploads'), $presidentImg);
                    
$request['president_image_file'] = $presidentImg;
                } else {
                    
$request['president_image_file'] = isset($president_message_section->president_image_file) ? $president_message_section->president_image_file '';
                }

                
$data = ['key' => 'president_message_sec'];
                
$setting GlobalSettings::firstOrNew($data);

                
$setting->value json_encode($request->only('president_message_title''president_message_description''president_image_file'));
                
$setting->save();

                return 
back()->with('message'get_phrase('President data successfully updated'));
            }



        if (
$request->name == 'bongo_bondhu_corner') {
            
$bongo_bondhu_corner json_decode(get_settings('bongo_bondhu_corner'));
            if (
$request->hasFile('bongo_bondhu_corner_img')) {
                
$file $request->file('bongo_bondhu_corner_img');
                
$headTeacherImg time() . '_5' '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/uploads'), $headTeacherImg);
                
$request['bongo_bondhu_corner_img_file'] = $headTeacherImg;
            } else {
                
$request['bongo_bondhu_corner_img_file'] = isset($bongo_bondhu_corner->bongo_bondhu_corner_img_file) ? $bongo_bondhu_corner->bongo_bondhu_corner_img_file '';
            }
            
$data = ['key' => 'bongo_bondhu_corner'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($request->only'bongo_bondhu_corner_img_file'));
            
$setting->save();
            return 
back()->with('message'get_phrase('Bongo-Bondhu Corner successfully updated'));

        }
        if (
$request->name == 'national_anthem') {
            
$national_anthem json_decode(get_settings('national_anthem'));
            if (
$request->hasFile('national_anthem')) {
                
$file $request->file('national_anthem');
                
$national_anthem_file time() . '_5_5' '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/uploads'), $national_anthem_file);
                
$request['national_anthem_audio_file'] = $national_anthem_file;
            } else {
                
$request['national_anthem_audio_file'] = isset($national_anthem->national_anthem_audio_file) ? $national_anthem->national_anthem_audio_file '';
            }
            
$data = ['key' => 'national_anthem'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($request->only'national_anthem_audio_file'));
            
$setting->save();
            return 
back()->with('message'get_phrase('National Antem successfully updated'));

        }

        if (
$request->name == 'student_attendence') {

            
$data = ['key' => 'student_attendence'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($request->only('total_student''today_present''yesterday_present'));
            
$setting->save();

            return 
back()->with('message'get_phrase('School attendence successfully updated'));
        }

        if (
$request->name == 'social_media_link') {

            
$data = ['key' => 'social_media_link'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($request->only('facebook''youtube''twitter''linkedin''rss_feed'));
            
$setting->save();

            return 
back()->with('message'get_phrase('Social media link successfully updated'));
        }

        
//About School
        
$about_school_sec json_decode(get_settings('about_school_sec'));
        
$school_info_sec json_decode(get_settings('school_info_sec'));
        if (
$request->name == 'school_info_sec') {

            if (
$request->hasFile('school_image')) {
                
$file $request->file('school_image');
                
$schoolImg time() . '_512' '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/uploads'), $schoolImg);
                
$request['school_image_file'] = $schoolImg;
            } else {
                
$request['school_image_file'] = isset($school_info_sec->school_image_file) ? $school_info_sec->school_image_file '';
            }
            
$data = ['key' => 'school_info_sec'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($request->only('school_name''eiin_number''school_code''school_email','school_established_year''school_phone''school_address''school_image_file'));
            
$setting->save();

            
cache()->forget('school_information');

            return 
back()->with('message'get_phrase('School Information successfully updated'));
        }
        if (
$request->name == 'about_school_sec') {

            if (
$request->hasFile('about_school_sec_image')) {
                
$file $request->file('about_school_sec_image');
                
$headTeacherImg time() . '_5' '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/uploads'), $headTeacherImg);
                
$request['about_school_sec_image_file'] = $headTeacherImg;
            } else {
                
$request['about_school_sec_image_file'] = isset($about_school_sec->about_school_sec_image_file) ? $about_school_sec->about_school_sec_image_file '';
            }
            
$data = ['key' => 'about_school_sec'];
            
$setting GlobalSettings::firstOrNew($data);
            
$setting->value json_encode($request->only('about_school_sec_title''about_school_sec_description''about_school_sec_image_file'));
            
$setting->save();

            return 
back()->with('message'get_phrase('School Section successfully updated'));
        }

    }

    public function 
pageIndex()
    {
        
$data['page_lists'] = Page::all();
        return 
view('admin.pages.index'$data);
    }

    public function 
pageCreate()
    {
        return 
view('admin.pages.create');
    }

    public function 
pageStore(Request $request)
    {
        
$request->validate([
            
'name' => 'required|unique:pages,name',
            
'title' => 'required|unique:pages,title',
            
'description' => 'required',
            
'status' => 'required|in:published,unpublished',
            
'position' => 'required|in:header,footer',
        ]);
        
$request['url'] = Str::slug($request->title'-');
        if (
auth()->user()) {
            
$page = new Page();
            
$page->admin_id auth()->user()->id;
            
$page->url $request['url'];
            
$page->name $request->name;
            
$page->title $request->title;
            
$page->description $request->description;
            
$page->status $request->status;
            
$page->position $request->position;
            
$page->save();
        }

        
cache()->forget('pages');

        return 
back()->with('message'get_phrase('Page successfully created'));
    }

    public function 
pageEdit($id)
    {

        
$data['page'] = Page::findOrFail($id);

        return 
view('admin.pages.edit'$data);
    }

    public function 
pageUpdate($idRequest $request)
    {

        
$page Page::findOrFail($id);
        
$request->validate([
            
'name' => 'required|unique:pages,name,' $page->id,
            
'title' => 'required|unique:pages,title,' $page->id,
            
'description' => 'required',
            
'status' => 'required|in:published,unpublished',
            
'position' => 'required|in:header,footer',
        ]);
        
$request['url'] = Str::slug($request->title'-');

        
$page->update($request->all());
        
cache()->forget('pages');


        return 
back()->with('message'get_phrase('Page Info updated successfully'));
    }

    public function 
pageDelete(Request $request)
    {
        
$page Page::findOrFail($request->id);
        
$page->delete();

        return 
back()->with('message'get_phrase('Page Info deleted successfully'));
    }


    public function 
class_activities_index()
    {
        
$data['class_activities'] = ClassActivity::get();
        return 
view('admin.class_activities.index'$data);
    }
    public function 
class_activities_create()
    {
        
$data['class_names'] = ['VI''VII''VIII''IX''X'];
        return 
view('admin.class_activities.create'$data);
    }

    public function 
class_activities_store(Request $request)
    {
        
$request->validate([
            
'name' => 'required',
            
'info' => 'required'
        
]);

        
$class_activity = new ClassActivity();
        
$class_activity->name $request->name;
        
$class_activity->info $request->info;
        
$class_activity->save();
        
cache()->forget('class_activity');
        return 
back()->with('message'get_phrase('Class activities created successfully'));
    }

    public function 
class_activities_edit(Request $request)
    {
        
$data['class_names'] = ['VI''VII''VIII''IX''X'];
        
$data['class_activity'] = ClassActivity::findOrFail($request->id);
        return 
view('admin.class_activities.edit'$data);
    }

    public function 
class_activities_update($idRequest $request)
    {

        
$class_activities ClassActivity::findOrFail($id);
        
$request->validate([
            
'name' => 'required',
            
'info' => 'required'
        
]);

        
$class_activities->update($request->all());
        
cache()->forget('class_activities');


        return 
back()->with('message'get_phrase('Class activities updated successfully'));
    }

    public function 
class_activities_delete(Request $request)
    {
        
$class_activity ClassActivity::findOrFail($request->id);
        
$class_activity->delete();

        return 
back()->with('message'get_phrase('Class activity deleted successfully'));
    }

    public function 
menu_list()
    {
        
$data['menus'] = Menu::get();
        return 
view('admin.menu.index'$data);
    }
    public function 
menu_create()
    {
        
$data['menus'] = Menu::get();
        
$data['pages'] = Page::where('status''published')->get();
        return 
view('admin.menu.create'$data);
    }

    public function 
menu_store(Request $request)
    {
        
$request->validate([
            
'name' => 'required',
            
'status' => 'required'
        
]);

        
$menu = new Menu();
        
$menu->name $request->name;
        if (
$request->parent_id && $request->parent_id !== 'null') {
            
$menu->parent_id $request->parent_id;
        }
        if (
$request->page_id && $request->page_id !== 'null') {
            
$menu->page_id $request->page_id;
        }
        
$menu->status $request->status;
        
$menu->save();

        
cache()->forget('menus');
        
cache()->forget('sub_menus_' $menu->id);
        
cache()->flush();

        return 
back()->with('message'get_phrase('Menu created successfully'));
    }

    public function 
menu_edit($id)
    {
        
$data['menu'] = Menu::findOrFail($id);
        
$data['menus'] = Menu::get();
        
$data['pages'] = Page::where('status''published')->get();
        return 
view('admin.menu.edit'$data);
    }

    public function 
menu_update($idRequest $request)
    {

        
$menu Menu::findOrFail($id);

        
$request->validate([
            
'name' => 'required',
            
'status' => 'required'
        
]);

        
$menu->name $request->name;
        
$menu->status $request->status;


        if (!
$request->page_id || $request->page_id == 'null') {
            
$menu->page_id null;
        } else {
            
$menu->page_id $request->page_id;
        }
        if (!
$request->parent_id || $request->parent_id == 'null') {
            
$menu->parent_id null;
        } else {
            
$menu->parent_id $request->parent_id;
        }

        
$menu->save();

        
cache()->forget('menus');
        
cache()->forget('sub_menus_' $menu->id);
        
cache()->flush();


        return 
back()->with('message'get_phrase('Menu updated successfully'));
    }


    public function 
menu_delete(Request $request)
    {
        
$menu Menu::findOrFail($request->id);
        
$menu->delete();


        
cache()->forget('menus');
        
cache()->forget('sub_menus_' $menu->id);
        
cache()->flush();


        return 
back()->with('message'get_phrase('Menu  deleted successfully'));
    }




    
//TODO::Manage Important Link
    
public function ipLinkIndex()
    {
        
$data['links'] = ImportantLink::orderByDesc('created_at')->get();
        return 
view('admin.important_link.index'$data);
    }

    public function 
ipLinkCreate()
    {

        return 
view('admin.important_link.create');
    }

    public function 
ipLinkStore(Request $request)
    {
        
$request->validate([
            
'title' => 'required',
            
'url' => 'required',
        ]);

        ;
        if (
auth()->user()) {
            
$ip_link = new ImportantLink();
            
$ip_link->title $request->title;
            
$ip_link->url $request->url;
            
$ip_link->save();
        }

        
cache()->forget('important_links');

        return 
redirect()->route('admin.link.index')->with('message'get_phrase('Link successfully created'));
    }
    public function 
ipLinkEdit($id)
    {

        
$data['link'] = ImportantLink::findOrFail($id);

        return 
view('admin.important_link.edit'$data);
    }

    public function 
ipLinkUpdate($idRequest $request)
    {

        
$ip_link ImportantLink::findOrFail($id);
        
$request->validate([
            
'title' => 'required',
            
'url' => 'required',
        ]);

        
$ip_link->title $request->title;
        
$ip_link->url $request->url;
        
$ip_link->save();

        
cache()->forget('important_links');
        return 
redirect()->route('admin.link.index')->with('message'get_phrase('Important Link updated successfully'));
    }

    public function 
ipLinkDelete(Request $request)
    {
        
$page ImportantLink::findOrFail($request->id);
        
$page->delete();

        
cache()->forget('important_links');

        return 
back()->with('message'get_phrase('Important Link deleted successfully'));
    }


    
//TODO:: Manage Exam Routines
    
public function routineIndex()
    {
        
$data['routines'] = ExamRoutine::orderByDesc('created_at')->get();

        return 
view('admin.exam_routine.index'$data);
    }

    public function 
routineCreate()
    {

        return 
view('admin.exam_routine.create');
    }

    public function 
routineStore(Request $request)
    {
        
$request->validate([
            
'image' => 'required',
            
'title' => 'required',
        ]);


        if (
auth()->user()) {
            
$routine = new ExamRoutine();

            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/routines/'), $imageName);
                
$routine->image $imageName;
            }
            
$routine->title $request->title;
            
$routine->save();
        }
        
cache()->forget('exam_routines');

        return 
redirect()->route('admin.exam-routine.index')->with('message'get_phrase('Exam Routine successfully created'));
    }

    public function 
routineEdit($id)
    {

        
$data['routine'] = ExamRoutine::findOrFail($id);

        return 
view('admin.exam_routine.edit'$data);
    }

    public function 
exRoutineUpdate($idRequest $request)
    {

        
$routine ExamRoutine::findOrFail($id);

        
$request->validate([
            
'title' => 'required',
        ]);


        if (
auth()->user()) {
            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/routines/'), $imageName);
                
$routine->image $imageName;
            }
            
$routine->title $request->title;
            
$routine->save();
        }

        
cache()->forget('exam_routines');
        return 
redirect()->route('admin.exam-routine.index')->with('message'get_phrase('Exam Routine successfully uUpdated'));
    }

    public function 
exRoutineDelete(Request $request)
    {
        
$routine ExamRoutine::findOrFail($request->id);
        
$routine->delete();

        
cache()->forget('exam_routines');

        return 
back()->with('message'get_phrase('Exam Routine successfully deleted'));
    }

    public function 
bongo_bondhu_korner_list()
    {

        
$data['bongo_bondhu_korners'] = BongoBondhuKorner::orderByDesc('created_at')->get();

        return 
view('admin.bongo_bondhu_korner.index'$data);
    }


    public function 
bongo_bondhu_korner_create()
    {

        return 
view('admin.bongo_bondhu_korner.create');
    }

    public function 
bongo_bondhu_korner_store(Request $request)
    {
        
$request->validate([
            
'image' => 'required',
            
'title' => 'required',
            
'description' => 'required',
        ]);


        if (
auth()->user()) {
            
$bongo_bondhu_korner = new BongoBondhuKorner();

            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/bongo_bondhu_korner/'), $imageName);
                
$bongo_bondhu_korner->image $imageName;
            }
            
$bongo_bondhu_korner->title $request->title;
            
$bongo_bondhu_korner->description $request->title;
            
$bongo_bondhu_korner->save();
        }

        
cache()->forget('cache_bongo_bondhu_korner');

        return 
redirect()->route('admin.bongo.bondhu.korner.index')->with('message'get_phrase('Bongo bondhu korner successfully created'));
    }

    public function 
bongo_bondhu_korner_edit($id)
    {

        
$data['bongo_bondhu_korner'] = BongoBondhuKorner::findOrFail($id);

        return 
view('admin.bongo_bondhu_korner.edit'$data);
    }

    public function 
bongo_bondhu_korner_update($idRequest $request)
    {

        
$bongo_bondhu_korner BongoBondhuKorner::findOrFail($id);

        
$request->validate([
            
'title' => 'required',
            
'description' => 'required',
        ]);


        if (
auth()->user()) {
            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/suborno_joyonti/'), $imageName);
                
$bongo_bondhu_korner->image $imageName;
            }
            
$bongo_bondhu_korner->title $request->title;
            
$bongo_bondhu_korner->description $request->description;
            
$bongo_bondhu_korner->save();
        }
        
cache()->forget('cache_bongo_bondhu_korner');

        return 
redirect()->route('admin.bongo.bondhu.korner.index')->with('message'get_phrase('Bongo bondhu korner successfully updated'));
    }

    public function 
bongo_bondhu_korner_delete(Request $request)
    {
        
$bongo_bondhu_korner BongoBondhuKorner::findOrFail($request->id);

        
$bongo_bondhu_korner->delete();

        
cache()->forget('cache_bongo_bondhu_korner');

        return 
back()->with('message'get_phrase('Bongo bondhu korner successfully deleted'));
    }



    
//TODO:: Manage Suborno Joyonti
    
public function subornoJoyontiIndex()
    {
        
$data['suborno_joyonties'] = SubornoJoyonti::orderByDesc('created_at')->get();

        return 
view('admin.suborno_joyonti.index'$data);
    }


    public function 
subornoJoyontiCreate()
    {

        return 
view('admin.suborno_joyonti.create');
    }

    public function 
subornoJoyontiStore(Request $request)
    {
        
$request->validate([
            
'image' => 'required',
            
'title' => 'required',
            
'description' => 'required',
        ]);


        if (
auth()->user()) {
            
$suborno_joyonti = new SubornoJoyonti();

            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/suborno_joyonti/'), $imageName);
                
$suborno_joyonti->image $imageName;
            }
            
$suborno_joyonti->title $request->title;
            
$suborno_joyonti->description $request->title;
            
$suborno_joyonti->save();
        }

        
cache()->forget('cache_suborno_joyonti');

        return 
redirect()->route('admin.suborno-joyonti.index')->with('message'get_phrase('Suborno Joyonti successfully created'));
    }

    public function 
subornoJoyontiEdit($id)
    {

        
$data['suborno_joyonti'] = SubornoJoyonti::findOrFail($id);

        return 
view('admin.suborno_joyonti.edit'$data);
    }

    public function 
subornoJoyontiUpdate($idRequest $request)
    {

        
$SubornoJoyonti SubornoJoyonti::findOrFail($id);

        
$request->validate([
            
'title' => 'required',
            
'description' => 'required',
        ]);


        if (
auth()->user()) {
            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/suborno_joyonti/'), $imageName);
                
$SubornoJoyonti->image $imageName;
            }
            
$SubornoJoyonti->title $request->title;
            
$SubornoJoyonti->description $request->description;
            
$SubornoJoyonti->save();
        }
        
cache()->forget('cache_suborno_joyonti');

        return 
redirect()->route('admin.suborno-joyonti.index')->with('message'get_phrase('Suborno Joyonti successfully uUpdated'));
    }

    public function 
subornoJoyontiDelete(Request $request)
    {
        
$SubornoJoyonti SubornoJoyonti::findOrFail($request->id);

        
$SubornoJoyonti->delete();

        
cache()->forget('cache_suborno_joyonti');

        return 
back()->with('message'get_phrase('Suborno Joyonti successfully deleted'));
    }
    
//TODO:: Manage EResults
    
public function resultIndex()
    {
        
$data['results'] = Result::orderByDesc('created_at')->get();

        return 
view('admin.result.index'$data);
    }

    public function 
resultCreate()
    {

        return 
view('admin.result.create');
    }

    public function 
resultStore(Request $request)
    {
        
$request->validate([
            
'image' => 'required',
            
'title' => 'required',
        ]);


        if (
auth()->user()) {
            
$result = new Result();

            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/results/'), $imageName);
                
$result->image $imageName;
            }
            
$result->title $request->title;
            
$result->save();
        }


        return 
redirect()->route('admin.result.index')->with('message'get_phrase('Result successfully created'));
    }

    public function 
resultEdit($id)
    {

        
$data['result'] = Result::findOrFail($id);

        return 
view('admin.result.edit'$data);
    }

    public function 
resultUpdate($idRequest $request)
    {

        
$result Result::findOrFail($id);

        
$request->validate([
            
'title' => 'required',
        ]);


        if (
auth()->user()) {
            if (
$request->image) {
                
$file $request->file('image');
                
$imageName time() . '.' $file->getClientOriginalExtension();
                
$file->move(public_path('/assets/uploads/rsults/'), $imageName);
                
$result->image $imageName;
            }
            
$result->title $request->title;
            
$result->save();
        }


        return 
redirect()->route('admin.result.index')->with('message'get_phrase('Result successfully uUpdated'));
    }

    public function 
resultDelete(Request $request)
    {
        
$result Result::findOrFail($request->id);

        
$result->delete();

        return 
back()->with('message'get_phrase('Result successfully deleted'));
    }

    public function 
contactList()
    {
        
$data['contacts'] = Contact::orderByDesc('created_at')->get();
        return 
view('admin.contact.index'$data);
    }

    public function 
contactDelete($id)
    {
        
$contact Contact::where('id'$id)->first();

        
$contact->delete();

        return 
back()->with('message'get_phrase('Contact successfully deleted'));
    }



}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0168 ]--