[ 'type' => 'index', 'scope' => 'child', 'params' => [ 'quickFilter', 'sort', 'direction', 'page', 'limit' ] ], 'myFormAction' => [ 'type' => 'formAction', 'scope' => 'childAction', 'params' => [ 'setting', 'value' ], 'redirect' => 'serverSettingsAction' ] ]; public $settings = [ 'url' => [ 'type' => 'text' ], 'authkey' => [ 'type' => 'text' ], 'skip_ssl' => [ 'type' => 'boolean' ], ]; public $settingsPlaceholder = [ 'url' => 'https://your.url', 'authkey' => '', 'skip_ssl' => '0', ]; public function health(Object $connection): array { /* returns an array with 2 keys: [ status: the numeric response code (0: UNKNOWN, 1: OK, 2: ISSUES, 3: ERROR), message: status message shown ] */ return $health; } /* * * ====================================== Exposed custom functions ====================================== * */ public function myIndexAction(array $params): array { // $data = get data from local tool //if we want to filter it via the quicksearch if (!empty($params['quickFilter'])) { // filter $data } /* * return the data embedded in a generic index parameter array * * For more information on the structure of the index, refer to the cerebrate/src/templates/element/genericElements/IndexTable/index_table.php factory * Valid form field types can be found at cerebrate/src/templates/element/genericElements/IndexTable/Fields * Be aware that some form fields require additional parameters, so make sure that you check the available parameters in the form field template file * */ return [ 'type' => 'index', 'title' => false, 'description' => false, 'data' => [ 'data' => $data, 'skip_pagination' => 1, 'top_bar' => [ 'children' => [ [ 'type' => 'search', 'button' => __('Search'), 'placeholder' => __('Enter value to search'), 'data' => '', 'searchKey' => 'value', 'additionalUrlParams' => $urlParams ] ] ], 'fields' => [ [ 'name' => 'field1_name', 'sort' => 'field1.path', 'data_path' => 'field1.path', ] ], 'pull' => 'right', 'actions' => [ [ 'open_modal' => '/localTools/action/' . h($params['connection']['id']) . '/myForm?myKey={{0}}', 'modal_params_data_path' => ['myKey'], 'icon' => 'font_awesome_icon_name', 'reload_url' => '/localTools/action/' . h($params['connection']['id']) . '/myIndex' ] ] ] ]; } public function myFormAction(array $params): array { if ($params['request']->is(['get'])) { /* * Usually on get requests we return a form to the user * * This form can either simply be a confirmation prompt (such as the example below), or a full fledged form with diverse form fields * In the latter case, refer to the cerebrate/src/templates/element/Form/genericForm.php library * For individual form field types, see cerebrate/src/templates/element/Form/Fields/*.php * */ return [ 'data' => [ 'title' => __('My Form Title'), 'description' => __('My form description'), 'submit' => [ 'action' => $params['request']->getParam('action') ], 'url' => ['controller' => 'localTools', 'action' => 'action', h($params['connection']['id']), 'myFormAction'] ] ]; } elseif ($params['request']->is(['post'])) { /* * Handle the posted data here. * The response should be in the following format: * [ * "success": 0|1, * "message": "your_message_to_the_user" * ] * * The message can be hard coded or derived from the output of your interactions with the local tool * */ if ($success) { return ['success' => 1, 'message' => __('Action successful.')]; } else { return ['success' => 0, 'message' => __('Action failed spectacularly.')]; } } throw new MethodNotAllowedException(__('Invalid http request type for the given action.')); } /* * * ====================================== Inter connection functions ====================================== * */ public function initiateConnection(array $params): array { /* * Encode initial connection in local tool * * This function is invoked by the REQUESTOR side. * In some cases, this function doesn't interact with the local tool yet, but it is an option that can be handy for 2-way exchanges * Construct the initial payload to be sent to the inbox of the REQUESTEE's Cerebrate node. * */ return $payload; } public function acceptConnection(array $params): array { /* * Encode the actions to be taken if the REQUESTEE accepts the interconnection request * * The $params parameter will include the payload generated on the REQUESTOR side via the initiateConnection() function * Generate access credentials, configurations, whatever is needed on the REQUESTEE's local tool instance and encode the outcome in the payload * Make sure that the payload includes everything needed by finaliseConnection() to interconnect the REQUESTOR's tool to that of REQUESTEE * */ return $payload; } public function finaliseConnection(array $params): bool { /* * Encode the actions to be taken once the positive response from the REQUESTEE arrives back at the REQUESTOR's instance * * At this point both parties have agreed to the interconnection, REQUESTEE has sent their credentials / access information back to REQUESTOR * The REQUESTOR needs to encode the connection based on the instructions generated by acceptConnection() on the REQUESTEE side * It is sufficient to return true on success. * */ return $success; } } ?>