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

namespace BookneticApp\Backend\Workflow;
use BookneticApp\Config;
use BookneticApp\Models\Workflow;
use BookneticApp\Models\WorkflowAction;
use BookneticApp\Providers\Common\WorkflowEventsManager;
use BookneticApp\Providers\Core\Capabilities;
use BookneticApp\Providers\Core\Route;
use BookneticApp\Providers\Helpers\Helper;
use BookneticApp\Providers\UI\DataTableUI;

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

    private $workflowDriversManager;

    private $workflowEventsManager;

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

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

        $workflow  = new Workflow();
        $dataTable = new DataTableUI( $workflow );

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

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

        $dataTable->addAction('delete', bkntc__('Delete'), function ($IDs) {
            WorkflowAction::where('workflow_id', $IDs)->delete();
            Workflow::where('id', $IDs)->delete();
        }, DataTableUI::ACTION_FLAG_SINGLE | DataTableUI::ACTION_FLAG_BULK);

        $dataTable->setTitle(bkntc__('Workflows'));
        $dataTable->addNewBtn(bkntc__('CREATE NEW WORKFLOW'));

        $dataTable->searchBy( [ 'id', 'name' ] );

        $dataTable->addColumns(bkntc__('ID'), 'id', [ 'order_by_field' => 'is_active' ]);
        $dataTable->addColumns(bkntc__('NAME'), 'name');
        $dataTable->addColumns(bkntc__('EVENT'), function ( $workflow ){
            return $this->workflowEventsManager->get( $workflow->when )->getTitle();
        });
        $dataTable->addColumns(bkntc__('ACTION(S)'), function( $workflow ) {
            $actions = WorkflowAction::where('workflow_id', $workflow->id)->select('driver, COUNT(*) as count')->groupBy(['driver'])->fetchAll();
            $doThis = "";
            foreach ( $actions as $action )
            {
                $countString = $action->count > 1 ? ' <span class="btn btn-xs btn-light-warning">x'.$action->count.'</span>' : '';
                $doThis .= ! is_null( $this->workflowDriversManager->get( $action->driver ) ) ? $this->workflowDriversManager->get( $action->driver )->getName().$countString."<br>" : "";
            }
           return "<div class='mt-2 mb-2'>" . rtrim( $doThis, "<br>" ) . "</div>";
        }, ['is_html' => true]);

        $eventsFilter = [];
        foreach ($this->workflowEventsManager->getAll() as $key => $event)
        {
            $eventsFilter[$key] = $event->getTitle();
        }
        $dataTable->addFilter(Workflow::getField('when'), 'select', bkntc__('Event Type'), '=', [
            'list' => $eventsFilter
        ], 4);

        $table = $dataTable->renderHTML();

        add_filter('bkntc_localization' , function ($localization){
            $localization['Edit'] = bkntc__('Edit');
            return $localization;
        });

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

    public function edit()
    {
        Capabilities::must('workflow_edit');

        $workflowId = Helper::_get('workflow_id', null, 'int');

        if( $workflowId > 0 )
        {
            $workflowInf = Workflow::where('id', $workflowId)->fetch();

            if( !$workflowInf )
            {
                Helper::redirect( Route::getURL( 'workflow' ) );
                exit();
            }

            $workflowActions = $workflowInf->workflow_actions()->fetchAll();

            $events = $this->workflowEventsManager->getAll();

            add_filter('bkntc_localization' , function ($localization){
                $localization['saved_changes'] = bkntc__('Saved changes');
                $localization['SEND'] = bkntc__('SEND');
                $localization['CLOSE'] = bkntc__('CLOSE');
                return $localization;
            });
            $this->view( 'edit', [
                'id' => $workflowId,
                'actions' => $workflowActions,
                'workflow_info' => $workflowInf,
                'events' => $events,
                'events_manager' => $this->workflowEventsManager
            ] );

        }
    }

}