/** * View all orders */ public function indexAction() { $request = $this->request; $response = $this->response; $persistent = $this->persistent; // Reset $reset = $this->request->getQuery('reset', 'int'); if (isset($reset)) { $persistent->searchOrderParams = null; } // Persistent parameters if (!is_array($persistent->searchOrderParams)) { $persistent->searchOrderParams = ['qry' => ['conditions' => "id IS NOT NULL", 'order' => 'created DESC'], 'sort' => ['page' => 1, 'perpage' => 50, 'sortField' => 'created', 'sortOrder' => 'DESC']]; } $parameters = $persistent->searchOrderParams; $parameters['sort']['perpage'] = isset($parameters['sort']['perpage']) ? $parameters['sort']['perpage'] : 50; $parameters['sort']['page'] = isset($parameters['sort']['page']) ? $parameters['sort']['page'] : 1; if ($request->getQuery('sort', 'string')) { $parameters['sort']['sortField'] = $request->getQuery('sort', 'string'); $parameters['sort']['sortOrder'] = $request->getQuery('order', 'string'); } if ($request->getQuery('page', 'int')) { $parameters['sort']['page'] = $request->getQuery('page', 'int'); } if ($request->getQuery('perpage', 'int')) { $parameters['sort']['perpage'] = $request->getQuery('perpage', 'int'); } $sortField = $parameters['sort']['sortField']; $sortOrder = $parameters['sort']['sortOrder']; // If this is a post request if ($request->isPost()) { $parameters['search_id'] = null; $parameters['search_country'] = null; $parameters['search_currency'] = null; $parameters['search_status'] = null; $parameters['search_date_from'] = null; $parameters['search_date_to'] = null; $parameters['search_active'] = null; // ID if (!empty($_POST['search_id'])) { $search_id_get = $request->getPost('search_id'); if (preg_match('/^\\d+$/', $search_id_get)) { $search_id = " AND id = {$search_id_get}"; } elseif (preg_match('/@/', $search_id_get)) { $search_id = " AND email LIKE '%{$search_id_get}%'"; } else { $search_id = null; } $parameters['search_id'] = $search_id_get; } else { $search_id = null; } // Country if (!empty($_POST['search_country'])) { $search_country_get = $request->getPost('search_country', 'int'); $parameters['search_country'] = $search_country_get; $search_country = " AND countries_id = {$search_country_get}"; } else { $search_country = null; } // Currency if (!empty($_POST['search_currency'])) { $search_currency_get = $request->getPost('search_currency', 'string'); $parameters['search_currency'] = $search_currency_get; $search_currency = " AND currency = '{$search_currency_get}'"; } else { $search_currency = null; } // Status if (!empty($_POST['search_status'])) { $search_status_get = $request->getPost('search_status', 'string'); $parameters['search_status'] = $search_status_get; switch ($search_status_get) { case 'y': $search_status = " AND payed = 1"; break; case 'n': $search_status = " AND payed = 0"; break; case 'c': $search_status = " AND cancelled = 1"; break; } } else { $search_status = null; } // Date from if (!empty($_POST['search_date_from'])) { $search_date_from_get = strtotime($request->getPost('search_date_from', 'string')); $parameters['search_date_from'] = $search_date_from_get; $search_date_from = " AND created > {$search_date_from_get}"; } else { $search_date_from = null; } // Date to if (!empty($_POST['search_date_to'])) { $search_date_to_get = strtotime($request->getPost('search_date_to', 'string')) + 86399; $parameters['search_date_to'] = $search_date_to_get; $search_date_to = " AND created < {$search_date_to_get}"; } else { $search_date_to = null; } // Active if (!empty($_POST['search_active'])) { $search_active_get = (int) $request->getPost('search_active', 'int'); $parameters['search_active'] = $search_active_get; $search_active = " AND deactivated IS NULL OR deactivated = 0"; } else { $search_active = null; } // Search parameters $parameters['qry'] = ['conditions' => "id IS NOT NULL\n {$search_id}\n {$search_country}\n {$search_currency}\n {$search_status}\n {$search_date_from}\n {$search_date_to}\n {$search_active}"]; } // Other parameters $parameters['count'] = POrder::count($parameters['qry']); $parameters['qry']['order'] = "{$sortField} {$sortOrder}"; $parameters['qry']['limit'] = 1000; $persistent->searchOrderParams = $parameters; // var_dump($parameters); // Find all products according to set parameters $orders = POrder::find($parameters['qry']); // Paginator $paginator = new Paginator(["data" => $orders, "limit" => $parameters['sort']['perpage'], "page" => $parameters['sort']['page']]); // Sorting and table headers mapping $headMapping = ['id' => 'Номер', 'created' => 'Дата', 'firstName' => 'Имя', 'lastName' => 'Фамилия', '__country' => 'Страна', 'price' => 'Сумма', 'currency' => 'Валюта', '__payed' => 'Статус', 'paySystem' => 'Способ оплаты']; // Sorting header and order arrow $headings = array(); foreach ($headMapping as $field => $name) { $headings[$field] = ['field' => $field, 'name' => $name, 'sort' => $sortField == $field ? $sortOrder == 'desc' ? 'asc' : 'desc' : false, 'arrow' => $sortField == $field ? $sortOrder == 'desc' ? ' ↓' : ' ↑' : false]; } $this->view->headings = $headings; $this->view->page = $paginator->getPaginate(); // Show total count $this->view->count = $parameters['count']; // Set selected search values $this->view->selected_id = isset($parameters['search_id']) && !empty($parameters['search_id']) ? $parameters['search_id'] : null; $this->view->selected_country = isset($parameters['search_country']) && !empty($parameters['search_country']) ? $parameters['search_country'] : null; $this->view->selected_currency = isset($parameters['search_currency']) && !empty($parameters['search_currency']) ? $parameters['search_currency'] : null; $this->view->selected_status = isset($parameters['search_status']) && !empty($parameters['search_status']) ? $parameters['search_status'] : null; $this->view->selected_date_from = isset($parameters['search_date_from']) && !empty($parameters['search_date_from']) ? $parameters['search_date_from'] : null; $this->view->selected_date_to = isset($parameters['search_date_to']) && !empty($parameters['search_date_to']) ? $parameters['search_date_to'] : null; $this->view->selected_active = isset($parameters['search_active']) && !empty($parameters['search_active']); // List of countries $this->view->countries = array_column(Countries::find(['order' => 'title'])->toArray(), 'title', 'id'); // List of currencies $this->view->currencies = array_column(PCrosscurrency::find(['conditions' => 'siteswitcher != 0', 'order' => 'siteswitcher'])->toArray(), 'title', 'title'); }