/** * @param SS_HTTPRequest|null $request * @return $this */ public function setLocations(SS_HTTPRequest $request = null) { if ($request === null) { $request = $this->request; } $filter = $this->config()->get('base_filter'); if ($request->getVar('CategoryID')) { $filter['CategoryID'] = $request->getVar('CategoryID'); } else { if ($this->getPageCategories()->exists()) { foreach ($this->getPageCategories() as $category) { $filter['CategoryID'][] = $category->ID; } } } $this->extend('updateLocatorFilter', $filter, $request); $filterAny = $this->config()->get('base_filter_any'); $this->extend('updateLocatorFilterAny', $filterAny, $request); $exclude = $this->config()->get('base_exclude'); $this->extend('updateLocatorExclude', $exclude, $request); $locations = Locator::get_locations($filter, $filterAny, $exclude); $locations = DataToArrayListHelper::to_array_list($locations); //allow for adjusting list post possible distance calculation $this->extend('updateLocationList', $locations); if ($locations->canSortBy('distance')) { $locations = $locations->sort('distance'); } //allow for returning list to be set as $this->extend('updateListType', $locations); $this->locations = $locations; return $this; }