-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathSearchController.groovy
127 lines (102 loc) · 4.41 KB
/
SearchController.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package au.org.ala.merit
import grails.converters.JSON
import grails.core.GrailsApplication
import org.apache.http.HttpStatus
class SearchController {
def searchService, webService, speciesService, commonService, documentService, reportService
GrailsApplication grailsApplication
UserService userService
/**
* Main search page that takes its input from the search bar in the header
* @param query
* @return resp
*/
def index() {
chain(controller: 'home', action:'projectExplorer', params:params)
}
/**
* Handles queries to support autocomplete for species fields.
* @param q the typed query.
* @param limit the maximum number of results to return
* @return
*/
def species(String q, Integer limit) {
render speciesService.searchForSpecies(q, null, limit, params.listId) as JSON
}
def searchSpeciesList(String sort, Integer max, Integer offset){
render speciesService.searchSpeciesList(sort, max, offset) as JSON
}
def downloadAllData() {
if (!userService.userIsSiteAdmin() && !userService.userHasReadOnlyAccess()) {
redirect(controller:'home')
return
}
params.putAll(downloadParams())
params.max = 10000 // The default is 5000, and some downloads require more than that.
def response = searchService.downloadAllData(params)
render response as JSON
}
@PreAuthorise(accessLevel = 'siteAdmin', redirectController ='home', redirectAction = 'index')
def downloadOrganisationData() {
params.query = "docType:organisation"
def path = "search/downloadOrganisationData"
def facets = []
facets.addAll(params.getList("fq"))
facets << "className:au.org.ala.ecodata.Organisation"
params.put("fq", facets)
params.putAll(downloadParams())
searchService.addDefaultFacetQuery(params)
def url = grailsApplication.config.getProperty('ecodata.baseUrl') + path + commonService.buildUrlParamsFromMap(params)
def response = webService.doPostWithParams(url, [:]) // POST because the URL can get long.
render response as JSON
}
@PreAuthorise(accessLevel = 'siteAdmin', redirectController ='home', redirectAction = 'index')
def downloadUserData() {
String path = "search/downloadUserList"
params.putAll(downloadParams())
searchService.addDefaultFacetQuery(params)
def url = grailsApplication.config.getProperty('ecodata.baseUrl') + path + commonService.buildUrlParamsFromMap(params)
def response = webService.doPostWithParams(url, [:]) // POST because the URL can get long.
render response as JSON
}
@PreAuthorise(accessLevel = 'siteAdmin', redirectController ='home', redirectAction = 'index')
def downloadSummaryData() {
searchService.downloadSummaryData(params, response)
}
def downloadShapefile() {
if (!userService.userIsSiteAdmin() && !userService.userHasReadOnlyAccess()) {
redirect(controller:'home')
return
}
params.putAll(downloadParams())
boolean success = searchService.downloadShapefile(params)
Map resp = [status: success ? HttpStatus.SC_OK : HttpStatus.SC_INTERNAL_SERVER_ERROR]
if (!success) {
resp.status = HttpStatus.SC_INTERNAL_SERVER_ERROR
}
render resp as JSON
}
private Map downloadParams() {
String systemEmailAddress = grailsApplication.config.getProperty('fieldcapture.system.email.address')
[
hubId: SettingService.hubConfig?.hubId,
downloadUrl: g.createLink(controller:'download', absolute: true)+'/',
systemEmail: systemEmailAddress,
senderEmail: systemEmailAddress
]
}
Map findPotentialHomePageImages() {
Integer max = params.max as Integer
Integer offset = params.offset as Integer
String sort = params.sort
Map result = reportService.findPotentialHomePageImages(max, offset, sort)
result.documents = result.documents?.collect{it + [ref:g.createLink(controller: 'project', action:'index', id:it.projectId)]}
render result as JSON
}
def findHomePageNominatedProjects() {
Integer max = params.max as Integer
Integer offset = params.offset as Integer
def projects = reportService.findHomePageNominatedProjects(max, offset)
projects
}
}