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/Workflow/EventsAjax.php
<?php

namespace BookneticApp\Backend\Workflow;


use BookneticApp\Config;
use BookneticApp\Models\Location;
use BookneticApp\Models\Service;
use BookneticApp\Models\Staff;
use BookneticApp\Models\Workflow;
use BookneticApp\Models\WorkflowAction;
use BookneticApp\Providers\Common\WorkflowEventsManager;
use BookneticApp\Providers\Core\Capabilities;
use BookneticApp\Providers\Helpers\Helper;

class EventsAjax extends \BookneticApp\Providers\Core\Controller
{
    private $workflowDriversManager;

    private $workflowEventsManager;

    /**
     * @param WorkflowEventsManager $workflowEventsManager
     */
    public function __construct($workflowEventsManager)
    {
        $this->workflowEventsManager = $workflowEventsManager;
        $this->workflowDriversManager = $workflowEventsManager->getDriverManager();
    }

    /* region Core Workflow Events */

    public function event_new_booking()
    {
        $workflowId = Helper::_post('id', -1);

        $params = [
            'locations' => [],
            'services' => [],
            'staffs' => [],
            'statuses'=>[],
	        'called_from'=>[],
            'locale' => get_locale()
        ];

        $data = json_decode(Workflow::get($workflowId)['data'], true);

        if (!empty($data))
        {
            if ( isset($data['locale'] ) ) $params['locale'] = $data['locale'];

	        if ( isset ( $data['called_from'] ) ) $params['called_from'] = $data['called_from'];

	        foreach ($data['locations'] as $location)
            {
                $params['locations'][] = [$location, Location::get($location)['name']];
            }

            foreach ($data['services'] as $service)
            {
                $params['services'][] = [$service, Service::get($service)['name']];
            }

            foreach ($data['staffs'] as $staff)
            {
                $params['staffs'][] = [$staff, Staff::get($staff)['name']];
            }

            if( isset($data['statuses']) )
            {
                $appointmentStatuses = Helper::getAppointmentStatuses();
                foreach ($data['statuses'] as $status)
                {
                    $title = array_key_exists($status,$appointmentStatuses) ? $appointmentStatuses[$status]['title'] : $status;
                    $params['statuses'][] = [$status,$title];
                }
            }
        }

	    $params['call_from'] = [
		    'both' => bkntc__('Both'),
		    'backend' => bkntc__('Backend'),
		    'frontend' => bkntc__('Frontend'),
	    ];

        require_once ABSPATH . 'wp-admin/includes/translation-install.php';

        $availableLocales = wp_get_available_translations();

        array_unshift( $availableLocales, [
            'language' => '',
            'iso' => [ '' ],
            'native_name' => bkntc__( 'Any locale' )
        ], [
            'language' => 'en_US',
            'iso' => [ 'en' ],
            'native_name' => 'English (United States)'
        ] );

        $params[ 'locales' ] = $availableLocales;

        return $this->modalView('event_new_booking', $params);
    }

    public function event_booking_rescheduled()
    {
        $workflowId = Helper::_post('id', -1);

        $params = [
            'locations' => [],
            'services' => [],
            'staffs' => [],
            'locale' => get_locale(),
            'for_each_customer' => true,
            'called_from'=>[],
        ];

        $data = json_decode(Workflow::get($workflowId)['data'], true);

        if (!empty($data))
        {
            if (isset($data['locale'])) $params['locale'] = $data['locale'];

            if ( isset ( $data['called_from'] ) ) $params['called_from'] = $data['called_from'];

            if (isset($data['for_each_customer'])) $params['for_each_customer'] = $data['for_each_customer'];

            foreach ($data['locations'] as $location)
            {
                $params['locations'][] = [$location, Location::get($location)['name']];
            }

            foreach ($data['services'] as $service)
            {
                $params['services'][] = [$service, Service::get($service)['name']];
            }

            foreach ($data['staffs'] as $staff)
            {
                $params['staffs'][] = [$staff, Staff::get($staff)['name']];
            }
        }

        $params['call_from'] = [
            'both' => bkntc__('Both'),
            'backend' => bkntc__('Backend'),
            'frontend' => bkntc__('Frontend'),
        ];

        require_once ABSPATH . 'wp-admin/includes/translation-install.php';

        $availableLocales = wp_get_available_translations();

        array_unshift( $availableLocales, [
            'language' => '',
            'iso' => [ '' ],
            'native_name' => bkntc__( 'Any locale' )
        ], [
            'language' => 'en_US',
            'iso' => [ 'en' ],
            'native_name' => 'English (United States)'
        ] );

        $params[ 'locales' ] = $availableLocales;

        return $this->modalView('event_booking_rescheduled', $params);
    }

    public function event_booking_status_changed()
    {
        $workflowId = Helper::_post('id', -1);

        $params = [
            'statuses' => [],
            'prev_statuses' => [],
            'locations' => [],
            'services' => [],
            'staffs' => [],
            'called_from'=>[],
            'locale' => get_locale()
        ];

        $data = json_decode(Workflow::get($workflowId)['data'], true);

        if (!empty($data))
        {
            if (isset($data['locale'])) $params['locale'] = $data['locale'];

            if ( isset ( $data['called_from'] ) ) $params['called_from'] = $data['called_from'];

            if (isset($data['statuses'])) $params['statuses'] = $data['statuses'];
            if (isset($data['prev_statuses'])) $params['prev_statuses'] = $data['prev_statuses'];

            foreach ($data['locations'] as $location)
            {
                $params['locations'][] = [$location, Location::get($location)['name']];
            }

            foreach ($data['services'] as $service)
            {
                $params['services'][] = [$service, Service::get($service)['name']];
            }

            foreach ($data['staffs'] as $staff)
            {
                $params['staffs'][] = [$staff, Staff::get($staff)['name']];
            }
        }

        $params['call_from'] = [
            'both' => bkntc__('Both'),
            'backend' => bkntc__('Backend'),
            'frontend' => bkntc__('Frontend'),
        ];

        require_once ABSPATH . 'wp-admin/includes/translation-install.php';

        $availableLocales = wp_get_available_translations();

        array_unshift( $availableLocales, [
            'language' => '',
            'iso' => [ '' ],
            'native_name' => bkntc__( 'Any locale' )
        ], [
            'language' => 'en_US',
            'iso' => [ 'en' ],
            'native_name' => 'English (United States)'
        ] );

        $params[ 'locales' ] = $availableLocales;

        return $this->modalView('event_booking_status_changed', $params);
    }

    public function event_booking_starts()
    {
        $workflowId = Helper::_post('id', -1);

        $params = [
            'offset_sign' => 'before',
            'offset_value' => 0,
            'offset_type' => 'minute',
            'statuses' => [],
            'locations' => [],
            'services' => [],
            'staffs' => [],
            'locale' => '',
            'for_each_customer' => true
        ];

        $data = json_decode(Workflow::get($workflowId)['data'], true);

        if (!empty($data))
        {
            if (isset($data['offset_sign'])) $params['offset_sign'] = $data['offset_sign'];
            if (isset($data['offset_value'])) $params['offset_value'] = $data['offset_value'];
            if (isset($data['offset_type'])) $params['offset_type'] = $data['offset_type'];

            if (isset($data['locale'])) $params['locale'] = $data['locale'];
            if (isset($data['for_each_customer'])) $params['for_each_customer'] = $data['for_each_customer'];

            $params['statuses'] = $data['statuses'];

            foreach ($data['locations'] as $location)
            {
                $params['locations'][] = [$location, Location::get($location)['name']];
            }

            foreach ($data['services'] as $service)
            {
                $params['services'][] = [$service, Service::get($service)['name']];
            }

            foreach ($data['staffs'] as $staff)
            {
                $params['staffs'][] = [$staff, Staff::get($staff)['name']];
            }
        }

        require_once ABSPATH . 'wp-admin/includes/translation-install.php';

        $availableLocales = wp_get_available_translations();

        array_unshift( $availableLocales, [
            'language' => '',
            'iso' => [ '' ],
            'native_name' => bkntc__( 'Any locale' )
        ], [
            'language' => 'en_US',
            'iso' => [ 'en' ],
            'native_name' => 'English (United States)'
        ] );

        $params[ 'locales' ] = $availableLocales;

        return $this->modalView('event_booking_starts', $params);
    }

    public function event_booking_ends()
    {
        return $this->event_booking_starts();
    }

    public function event_booking_status_changed_save()
    {
        $workflowId = Helper::_post('id', -1);

        $statuses = Helper::_post('statuses', '[]', 'str');
        $prev_statuses = Helper::_post('prev_statuses', '[]', 'str');
        $locations = Helper::_post('locations', '[]', 'str');
        $services = Helper::_post('services', '[]', 'str');
        $staffs = Helper::_post('staffs', '[]', 'str');
        $locale = Helper::_post('locale', get_locale(), 'str');
        $called_from = Helper::_post( 'called_from', '', 'string', ['backend', 'frontend'] );

        $data = [
            'statuses' => json_decode($statuses, true),
            'prev_statuses' => json_decode($prev_statuses, true),
            'locations' => json_decode($locations, true),
            'services' => json_decode($services, true),
            'staffs' => json_decode($staffs, true),
            'locale' => $locale,
            'called_from' => $called_from
        ];

        Workflow::where('id', $workflowId)->update(['data' => json_encode($data)]);

        return $this->response(true);
    }

    public function event_new_booking_save()
    {
        $workflowId = Helper::_post('id', -1);

        $locations = Helper::_post('locations', '[]', 'str');
        $services = Helper::_post('services', '[]', 'str');
        $staffs   = Helper::_post('staffs', '[]', 'str');
        $statuses = Helper::_post('statuses', '[]', 'str');
        $locale = Helper::_post( 'locale', '', 'string' );
		$called_from = Helper::_post( 'called_from', '', 'string', ['backend', 'frontend'] );

        $data = [
            'locations' => json_decode($locations, true),
            'services' => json_decode($services, true),
            'staffs' => json_decode($staffs, true),
            'statuses' => json_decode($statuses, true),
            'locale' => $locale,
	        'called_from' => $called_from,
        ];

        Workflow::where('id', $workflowId)->update(['data' => json_encode($data)]);

        return $this->response(true);
    }

    public function event_booking_rescheduled_save()
    {
        $workflowId = Helper::_post('id', -1);

        $locations = Helper::_post('locations', '[]', 'str');
        $services = Helper::_post('services', '[]', 'str');
        $staffs = Helper::_post('staffs', '[]', 'str');
        $locale = Helper::_post( 'locale', '', 'string' );
        $forEachCustomer = Helper::_post( 'for_each_customer', '', 'num' );
        $called_from = Helper::_post( 'called_from', '', 'string', ['backend', 'frontend'] );

        $data = [
            'locations' => json_decode($locations, true),
            'services' => json_decode($services, true),
            'staffs' => json_decode($staffs, true),
            'locale' => $locale,
            'for_each_customer' => $forEachCustomer == 1,
            'called_from' => $called_from
        ];

        Workflow::where('id', $workflowId)->update(['data' => json_encode($data)]);

        return $this->response(true);
    }

    public function event_booking_starts_save()
    {
        $workflowId = Helper::_post('id', -1);

        $offset_sign = Helper::_post('offset_sign', 0);
        $offset_value = Helper::_post('offset_value', 0);
        $offset_type = Helper::_post('offset_type', 0);
        $statuses = Helper::_post('statuses', '[]', 'str');
        $locations = Helper::_post('locations', '[]', 'str');
        $services = Helper::_post('services', '[]', 'str');
        $staffs = Helper::_post('staffs', '[]', 'str');
        $locale = Helper::_post('locale', get_locale());
        $forEachCustomer = Helper::_post('for_each_customer', 1, 'num');

        $data = [
            'offset_sign' => $offset_sign,
            'offset_value' => $offset_value,
            'offset_type' => $offset_type,
            'statuses' => json_decode($statuses, true),
            'locations' => json_decode($locations, true),
            'services' => json_decode($services, true),
            'staffs' => json_decode($staffs, true),
            'locale' => $locale,
            'for_each_customer' => $forEachCustomer == 1
        ];

        Workflow::where('id', $workflowId)->update(['data' => json_encode($data)]);

        return $this->response(true);
    }

    public function get_locations()
    {
        $search		= Helper::_post('q', '', 'string');

        $locations  = Location::where('name', 'LIKE', '%'.$search.'%')->fetchAll();
        $data       = [];

        foreach ( $locations AS $location )
        {
            $data[] = [
                'id'    =>	(int)$location['id'],
                'text'  =>	htmlspecialchars($location['name'])
            ];
        }

        return $this->response(true, [ 'results' => $data ]);
    }

    public function get_services()
    {
        $search		= Helper::_post('q', '', 'string');

        $services  = Service::where('name', 'LIKE', '%'.$search.'%')->fetchAll();
        $data       = [];

        foreach ( $services AS $service )
        {
            $data[] = [
                'id'    =>	(int)$service['id'],
                'text'  =>	htmlspecialchars($service['name'])
            ];
        }

        return $this->response(true, [ 'results' => $data ]);
    }

    public function get_staffs()
    {
        $search		= Helper::_post('q', '', 'string');

        $staffs  = Staff::where('name', 'LIKE', '%'.$search.'%')->fetchAll();
        $data       = [];

        foreach ( $staffs AS $staff )
        {
            $data[] = [
                'id'    =>	(int)$staff['id'],
                'text'  =>	htmlspecialchars($staff['name'])
            ];
        }

        return $this->response(true, [ 'results' => $data ]);
    }

    public function get_statuses()
    {

        $data       = [];

        foreach ( Helper::getAppointmentStatuses() AS $statusKey=>$value )
        {
            $data[] = [
                'id'    =>	$statusKey,
                'text'  =>	htmlspecialchars($value['title'])
            ];
        }

        return $this->response(true, [ 'results' => $data ]);
    }

    public function event_customer_created_view()
    {
        $workflowId = Helper::_post('id', -1);

        $params = [
            'locale' => get_locale()
        ];

        $data = json_decode(Workflow::get($workflowId)['data'], true);

        if (!empty($data))
        {
            if (isset($data['locale'])) $params['locale'] = $data['locale'];
        }

        require_once ABSPATH . 'wp-admin/includes/translation-install.php';

        $availableLocales = wp_get_available_translations();

        array_unshift( $availableLocales, [
            'language' => '',
            'iso' => [ '' ],
            'native_name' => bkntc__( 'Any locale' )
        ], [
            'language' => 'en_US',
            'iso' => [ 'en' ],
            'native_name' => 'English (United States)'
        ] );

        $params[ 'locales' ] = $availableLocales;

        return $this->modalView('event_customer_created', $params);
    }

    public function event_customer_created_save()
    {
        $workflowId = Helper::_post('id', -1);

        $locale = Helper::_post( 'locale', '', 'string' );

        $data = [
            'locale' => $locale
        ];

        Workflow::where('id', $workflowId)->update(['data' => json_encode($data)]);

        return $this->response(true);
    }

    public function event_appointment_paid_view()
    {
        $workflowId = Helper::_post('id', -1);

        $params = [
            'locale' => get_locale()
        ];

        $data = json_decode(Workflow::get($workflowId)['data'], true);

        if (!empty($data))
        {
            if (isset($data['locale'])) $params['locale'] = $data['locale'];
        }

        require_once ABSPATH . 'wp-admin/includes/translation-install.php';

        $availableLocales = wp_get_available_translations();

        array_unshift( $availableLocales, [
            'language' => '',
            'iso' => [ '' ],
            'native_name' => bkntc__( 'Any locale' )
        ], [
            'language' => 'en_US',
            'iso' => [ 'en' ],
            'native_name' => 'English (United States)'
        ] );

        $params[ 'locales' ] = $availableLocales;

        return $this->modalView('event_appointment_paid', $params);
    }

    public function event_appointment_paid_save()
    {
        $workflowId = Helper::_post('id', -1);

        $locale = Helper::_post( 'locale', '', 'string' );

        $data = [
            'locale' => $locale
        ];

        Workflow::where('id', $workflowId)->update(['data' => json_encode($data)]);

        return $this->response(true);
    }

    public function event_customer_signup_view()
    {
        $workflowId = Helper::_post( 'id', -1 );

        $params = [];

        $data = json_decode( Workflow::get( $workflowId )[ 'data' ], true );

        if ( ! empty($data) && isset( $data[ 'locale' ] ) )
        {
            $params[ 'locale' ] = $data[ 'locale' ];
        }
        else
        {
            $params[ 'locale' ] = get_locale();
        }

        require_once ABSPATH . 'wp-admin/includes/translation-install.php';

        $availableLocales = wp_get_available_translations();

        array_unshift( $availableLocales, [
            'language' => '',
            'iso' => [ '' ],
            'native_name' => bkntc__( 'Any locale' )
        ], [
            'language' => 'en_US',
            'iso' => [ 'en' ],
            'native_name' => 'English (United States)'
        ] );

        $params[ 'locales' ] = $availableLocales;

        return $this->modalView( 'event_customer_signup', $params );
    }

    public function event_customer_signup_save()
    {
        $workflowId = Helper::_post( 'id', -1 );

        $locale = Helper::_post( 'locale', '', 'string' );

        $data = [
            'locale' => $locale
        ];

        Workflow::where( 'id', $workflowId )->update( [ 'data' => json_encode( $data ) ] );

        return $this->response( true );
    }

    #endregion


    public function event_tenant_notified()
    {
        $workflowId = Helper::_post( 'id', -1 );

        $params = [
            'offset_value' => 0,
            'offset_type' => 'minute'
        ];

        $data = json_decode( Workflow::get( $workflowId )[ 'data' ], true );

        if( ! empty( $data ) )
        {
            if( isset( $data[ 'offset_value' ] ) ) $params[ 'offset_value' ] = $data[ 'offset_value' ];
            if( isset( $data[ 'offset_type' ] ) ) $params[ 'offset_type' ] = $data[ 'offset_type' ];
        }

        return $this -> modalView( 'event_tenant_notified', $params );
    }

    public function event_tenant_notified_save()
    {
        $workflowId = Helper::_post( 'id', -1 );

        $offset_value = Helper::_post( 'offset_value', 0 );
        $offset_type = Helper::_post( 'offset_type', 0 );

        $data = [
            'offset_sign' => 'before',
            'offset_value' => $offset_value,
            'offset_type' => $offset_type
        ];

        Workflow::where( 'id', $workflowId ) -> update( [ 'data' => json_encode( $data ) ] );

        return $this -> response( true );
    }
}