getVarFiltersListing('cmd', 'scenario_ordering', 'ordering'); $orderingSortOrder = $this->getVarFiltersListing('cmd', 'scenario_ordering_sort_order', 'asc'); acym_setVar('layout', 'listing'); $data = [ 'ordering' => $ordering, 'ordering_sort_order' => $orderingSortOrder, 'pagination' => new PaginationHelper(), ]; $this->prepareListingFilters($data); $this->prepareListingElements($data); $this->prepareToolbar($data); parent::display($data); } private function prepareListingFilters(array &$data): void { $data['search'] = $this->getVarFiltersListing('string', 'scenario_search', ''); $data['status'] = $this->getVarFiltersListing('string', 'scenarios_status', ''); $data['ordering'] = $this->getVarFiltersListing('cmd', 'scenarios_ordering', 'id'); $data['ordering_sort_order'] = $this->getVarFiltersListing('cmd', 'scenarios_ordering_sort_order', 'asc'); $data['page'] = $this->getVarFiltersListing('int', 'scenarios_pagination_page', 1); } private function prepareListingElements(array &$data): void { // Prepare the pagination $scenarioPerPage = $data['pagination']->getListLimit(); $matchingScenarios = $this->getMatchingElementsFromData( [ 'search' => $data['search'], 'elementsPerPage' => $scenarioPerPage, 'offset' => ($data['page'] - 1) * $scenarioPerPage, 'status' => $data['status'], 'ordering' => $data['ordering'], 'ordering_sort_order' => $data['ordering_sort_order'], ], $data['status'], $data['page'] ); $data['pagination']->setStatus($matchingScenarios['total']->total, $data['page'], $scenarioPerPage); $data['scenarios'] = $matchingScenarios['elements']; $data['totalOverall'] = $matchingScenarios['totalOverall']; $data['scenariosNumberStatus'] = $matchingScenarios['scenariosNumberStatus']; } protected function prepareToolbar(array &$data): void { $data['toolbar'] = new ToolbarHelper(); $data['toolbar']->addSearchBar($data['search'], 'scenario_search'); $data['toolbar']->addButton(acym_translation('ACYM_CREATE'), ['data-task' => 'edit', 'data-step' => 'editScenario'], 'add', true); } public function duplicate(): void { wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token'); $scenarioIds = acym_getVar('array', 'elements_checked', []); acym_arrayToInteger($scenarioIds); if (empty($scenarioIds)) { $this->listing(); } $scenarioClass = new ScenarioClass(); foreach ($scenarioIds as $scenarioId) { $scenarioClass->duplicate($scenarioId); } $this->listing(); } public function ajaxSetOrdering(): void { wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token'); $order = json_decode(acym_getVar('string', 'order', '[]'), true); $error = false; foreach ($order as $index => $scenarioId) { $query = 'UPDATE #__acym_scenario SET `ordering` = '.intval($index + 1).' WHERE `id` = '.intval($scenarioId); $error = acym_query($query) < 0 || $error; } acym_sendAjaxResponse('', [], !$error); } }