HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: /var/www/html/appointmentbook.me/wp-content/plugins/booknetic/app/Backend/Staff/Controller.php
<?php

namespace BookneticApp\Backend\Staff;

use BookneticApp\Models\Appointment;
use BookneticApp\Models\Data;
use BookneticApp\Models\Holiday;
use BookneticApp\Models\ServiceStaff;
use BookneticApp\Models\SpecialDay;
use BookneticApp\Models\Staff;
use BookneticApp\Models\Timesheet;
use BookneticApp\Providers\UI\DataTableUI;
use BookneticApp\Providers\Core\Capabilities;
use BookneticApp\Providers\DB\DB;
use BookneticApp\Providers\Helpers\Helper;
use BookneticApp\Providers\Core\Permission;

class Controller extends \BookneticApp\Providers\Core\Controller {

	public static function _delete( $ids ) {
		$deleteWpUser = Helper::_post( 'delete_wp_user', 1, 'int' );
		$deleteWpUser = $deleteWpUser == 1 && ( Permission::isAdministrator() || Capabilities::userCan( 'staff_delete_wordpress_account' ) );

		if ( ! ( Permission::isAdministrator() || Capabilities::userCan( 'staff_delete' ) ) ) {
			Helper::response( false, bkntc__( 'You do not have sufficient permissions to perform this action' ) );
		}

		foreach ( $ids as $id ) {
			// check if appointment exists
			$checkAppointments = Appointment::where( 'staff_id', $id )->fetch();

			if ( $checkAppointments ) {
				Helper::response( false, bkntc__( 'This staff has been added some Appointments. Firstly remove them!' ) );
			}

			$staffInf = Staff::get( $id );
			if ( $staffInf->user_id > 0 ) {
				$userData = get_userdata( $staffInf->user_id );
				if ( $userData && in_array( 'booknetic_staff', $userData->roles ) ) {
					require_once ABSPATH . 'wp-admin/includes/user.php';
					if ( $deleteWpUser ) {
						wp_delete_user( $staffInf->user_id );
					} else {
						$userData->remove_role( 'booknetic_staff' );
					}
				}
			}

			ServiceStaff::where( 'staff_id', $id )->delete();
			Holiday::where( 'staff_id', $id )->delete();
			SpecialDay::where( 'staff_id', $id )->delete();
			Timesheet::where( 'staff_id', $id )->delete();
			Data::where( 'table_name', 'staff' )->where( 'row_id', $id )->delete();

			wp_delete_file( Helper::uploadedFile( Staff::get( $id )[ 'profile_image' ], 'Staff' ) );

			Staff::where( 'id', $id )->delete();
		}
	}

	public function index() {
		Capabilities::must( 'staff' );

		$dataTable = new DataTableUI( new Staff() );

		$dataTable->addAction( 'enable', bkntc__( 'Enable' ), function ( $ids ) {
			Staff::where( 'id', 'in', $ids )->update( [ 'is_active' => 1 ] );
		}, DataTableUI::ACTION_FLAG_BULK );
		$dataTable->addAction( 'disable', bkntc__( 'Disable' ), function ( $ids ) {
			Staff::where( 'id', 'in', $ids )->update( [ 'is_active' => 0 ] );
		}, DataTableUI::ACTION_FLAG_BULK );

		$dataTable->addAction( 'edit', bkntc__( 'Edit' ) );

		if ( Permission::isAdministrator() || Capabilities::userCan( 'staff_delete' ) ) {
			$dataTable->addAction( 'delete', bkntc__( 'Delete' ), [
				static::class,
				'_delete'
			], DataTableUI::ACTION_FLAG_SINGLE | DataTableUI::ACTION_FLAG_BULK );
		}


		$dataTable->addAction( 'share', bkntc__( 'Share' ) );

		$dataTable->setTitle( bkntc__( 'Staff' ) );

		if ( Permission::isAdministrator() || Capabilities::userCan( 'staff_add' ) ) {
			$dataTable->addNewBtn( bkntc__( 'ADD STAFF' ) );
		}

		$dataTable->searchBy( [ "name", 'email', 'phone_number' ] );

		$dataTable->addColumns( bkntc__( 'ID' ), 'id' );
		$dataTable->addColumns( bkntc__( 'STAFF NAME' ), fn( $staff ) => Helper::profileCard( $staff[ 'name' ], $staff[ 'profile_image' ], '', 'staff' ),
			[ 'is_html' => true, 'order_by_field' => "name" ] );
		$dataTable->addColumns( bkntc__( 'EMAIL' ), 'email' );
		$dataTable->addColumns( bkntc__( 'PHONE' ), 'phone_number' );

		$table = $dataTable->renderHTML();

		$edit = Helper::_get( 'edit', '0', 'int' );

		add_filter( 'bkntc_localization', function ( $localization ) {
			$localization[ 'delete_associated_wordpress_account' ] = bkntc__( 'Delete associated WordPress account' );
			$localization[ 'link_copied' ]                         = bkntc__( 'Link copied!' );

			return $localization;
		} );

		$this->view( 'index', [
			'table' => $table,
			'edit'  => $edit
		] );
	}

}