/** * Support method for getVisData() -- extract details from applied filters. * * @param array $filters Current filter list * * @return array * @access protected */ protected function processDateFacets($filters) { $result = array(); $from = $to = ''; if (isset($filters[$this->filterField])) { foreach ($filters[$this->filterField] as $filter) { if ($range = VuFindSolrUtils::parseSpatialDateRange($filter, $this->searchObject->getSpatialDateRangeFilterType())) { $startDate = new DateTime("@{$range['from']}"); $endDate = new DateTime("@{$range['to']}"); $from = $startDate->format('Y'); $to = $endDate->format('Y'); break; } } } $result[$this->filterField] = array($from, $to); $result[$this->filterField]['label'] = $this->searchObject->getFacetLabel($this->filterField); return $result; }
/** * Get the current settings for the spatial date range facet, if it is set: * * @param object $savedSearch Saved search object (false if none) * * @return array Date range: Key 0 = from, Key 1 = to. * @access protected */ protected function getSpatialDateRangeSettings($savedSearch = false) { // Default to blank strings: $from = $to = ''; // Check to see if there is an existing range in the search object: if ($savedSearch) { $filters = $savedSearch->getFilters(); if (isset($filters['search_sdaterange_mv'])) { foreach ($filters['search_sdaterange_mv'] as $current) { if ($range = VuFindSolrUtils::parseSpatialDateRange($current)) { $from = $range['from'] == '*' ? '' : $range['from']; $to = $range['to'] == '*' ? '' : $range['to']; $savedSearch->removeFilter('search_sdaterange_mv:' . $current); break; } } } } // Send back the settings: if ($from === '' || $to === '') { return array('', ''); } $startDate = new DateTime("@{$from}"); $endDate = new DateTime("@{$to}"); if ($startDate->format('m') == 1 && $startDate->format('d') == 1 && $endDate->format('m') == 12 && $endDate->format('d') == 31) { return array(ltrim($startDate->format('Y'), '0'), ltrim($endDate->format('Y'), '0')); } return array($startDate->format('Y-m-d'), $endDate->format('Y-m-d')); }
/** * Convert spatial date range filter to displayable string * * @param string $filter Spatial date range filter * * @return string Resulting display string */ protected function spatialDateRangeFilterToString($filter) { $range = VuFindSolrUtils::parseSpatialDateRange($filter, $this->spatialDateRangeFilterType); if ($range === false) { return $filter; } $startDate = new DateTime("@{$range['from']}"); $endDate = new DateTime("@{$range['to']}"); if ($startDate->format('m') == 1 && $startDate->format('d') == 1 && $endDate->format('m') == 12 && $endDate->format('d') == 31) { return $startDate->format('Y') . ' - ' . $endDate->format('Y'); } $date = new VuFindDate(); return $date->convertToDisplayDate('U', $range['from']) . ' - ' . $date->convertToDisplayDate('U', $range['to']); }