public function index() { if ($this->shouldLockIfNoPermission('data.view')) { return; } $now = time(); $filterStartDate = 1; $filterEndDate = 1; if (isset($_GET['start_year']) && isset($_GET['start_month'])) { $filterStartDate = strtotime($_GET['start_year'] . '-' . $_GET['start_month'] . '-1'); } if (isset($_GET['end_year']) && isset($_GET['end_month'])) { $filterEndDate = strtotime($_GET['end_year'] . '-' . ($_GET['end_month'] + 1) . '-1') - 1; } if ($filterEndDate <= $filterStartDate) { $filterEndDate = $now - $now % self::SECONDS_IN_DAY + self::SECONDS_IN_DAY; } $searchQuery = ''; if (isset($_GET['search_query'])) { $searchQuery = $_GET['search_query']; } $customerService = new Customer($this->db); $allItems = $customerService->findAllCustomers(); if ($allItems === false) { $this->flash->error('Unable to get customers information!'); return $this->redirect('/'); } $firstDateOfCustomerCreated = $now; $lastDateOfCustomerCreated = 1; foreach ($allItems as $key => $item) { if ($firstDateOfCustomerCreated > $item['created']) { $firstDateOfCustomerCreated = $item['created']; } if ($lastDateOfCustomerCreated < $item['created']) { $lastDateOfCustomerCreated = $item['created']; } } $items = $customerService->searchBetweenDates($searchQuery, $filterStartDate, $filterEndDate); if ($items === false) { $this->flash->error('Unable to get customers information!'); return $this->redirect('/'); } $earliestPossibleDate = $now; $latestPossibleDate = 1; foreach ($items as $key => $item) { if ($earliestPossibleDate > $item['created']) { $earliestPossibleDate = $item['created']; } if ($latestPossibleDate < $item['created']) { $latestPossibleDate = $item['created']; } } if ($filterStartDate < $firstDateOfCustomerCreated) { $filterStartDate = $firstDateOfCustomerCreated; } if ($filterEndDate > $lastDateOfCustomerCreated) { $filterEndDate = $lastDateOfCustomerCreated; } $sortKey = isset($_GET['sortkey']) ? $_GET['sortkey'] : 'first_name'; $sortUsingDescending = isset($_GET['sortorder']) && $_GET['sortorder'] === 'desc' || !isset($_GET['sortorder']); $alpha = new KeySorter($sortKey); if ($sortUsingDescending) { $items = $alpha->sortDescending($items); } else { $items = array_reverse($alpha->sortDescending($items)); } foreach ($items as &$row) { $row['created'] = $this->formatNullableDate($row['created']); } /* Build ranges */ $ranges = []; $startYear = idate('Y', $firstDateOfCustomerCreated); $endYear = idate('Y', $lastDateOfCustomerCreated); for ($i = $startYear; $i <= $endYear; $i++) { $ranges[] = $i; } $this->set('ranges', $ranges); $sortOrder = $sortUsingDescending ? 'desc' : 'asc'; $nextSortOrder = $sortUsingDescending ? 'asc' : 'desc'; $this->set('searchQuery', $searchQuery); $this->set('startDate', $filterStartDate); $this->set('endDate', $filterEndDate); $this->set('startMonth', idate('n', $firstDateOfCustomerCreated)); $this->set('selectedStartYear', idate('Y', $filterStartDate)); $this->set('endMonth', idate('n', $lastDateOfCustomerCreated)); $this->set('selectedEndYear', idate('Y', $filterEndDate)); $this->set('sortOrder', $sortOrder); $this->set('nextSortOrder', $nextSortOrder); $this->set('sortKey', $sortKey); $this->set('items', $items); $this->set('months', self::$months); }