@@ -13,11 +13,15 @@ class ProjectController {
1313 def currentUser = springSecurityService. currentUser
1414
1515 // query the user's the projects
16+ if (! params. sort) {
17+ params. sort = " dateCreated"
18+ params. order = " desc"
19+ }
1620 def c = ProjectUser . createCriteria()
1721 def projects = c. list(max : max, offset : offset) {
1822 eq(" user" , currentUser)
1923 project {
20- order(" dateCreated " , " desc " )
24+ order(params . sort, params . order )
2125 }
2226 }. collect{it. project}
2327 // get the total count of projects linked to the user
@@ -205,7 +209,7 @@ class ProjectController {
205209 render " success"
206210 }
207211
208- def search (String str ) {
212+ def search (String str , String merge ) {
209213 def c = Project . createCriteria()
210214 def listParams = [
211215 max : params. max ?: 25 ,
@@ -219,9 +223,132 @@ class ProjectController {
219223 ilike " description" , " %${ str} %"
220224 }
221225 }
222- [projects : projects, totalCount : projects. totalCount, str : str]
226+ if (merge == " Merge" ) {
227+ def checkedCount = 0 ;
228+ if (session. checkedProject) {
229+ checkedCount = session. checkedProject. size()
230+ }
231+ render(view : " mergeSelect" , model : [totalCount : projects. totalCount, projects : projects, str : str, checkedCount : checkedCount])
232+ } else {
233+ [projects : projects, totalCount : projects. totalCount, str : str]
234+ }
235+ }
236+
237+ def merge (UserRoleListCommand cmd ) {
238+ if (session. checkedProject) {
239+ try {
240+ def mergeToProjectId = projectService. mergeProjects(cmd. projectName, session. checkedProject, cmd. userRoles)
241+ session. checkedProject = null
242+ flash. message = " Success!"
243+ redirect(action : " show" , id : mergeToProjectId)
244+ } catch (Exception e) {
245+ flash. message = e. message
246+ redirect(action : " showChecked" )
247+ }
248+ } else {
249+ flash. message = " No projects selected to merge from!"
250+ redirect(action : " all" )
251+ }
252+ }
253+
254+ def cancelMerge () {
255+ if (session. checkedProject) {
256+ session. checkedProject = null
257+ }
258+ redirect(action : " all" )
259+ }
260+
261+ def clearCheckedProjectAjax (){
262+ if (session. checkedProject) {
263+ session. checkedProject = null
264+ }
265+ render true
266+ }
267+
268+ def addCheckedProjectAjax (Long id ) {
269+ if (! session. checkedProject) {
270+ session. checkedProject = []
271+ }
272+ if (! (id in session. checkedProject)) {
273+ session. checkedProject << id
274+ }
275+ render session. checkedProject. size()
276+ }
277+
278+ def removeCheckedProjectAjax (Long id ) {
279+ if (id in session. checkedProject) {
280+ session. checkedProject. remove(id)
281+ }
282+ render session. checkedProject. size()
283+ }
284+
285+ def showChecked (){
286+ def projects = []
287+ if (session. checkedProject) {
288+ session. checkedProject. each {
289+ def project = Project . get(it)
290+ if (project) {
291+ projects. push(Project . get(it))
292+ }
293+ }
294+ }
295+ if (projects. size() == 0 ) {
296+ flash. message = " No projects to merge!"
297+ redirect(action : " all" )
298+ }
299+
300+ [projects : projects]
223301 }
224302
303+ def confirmUsersInMergedProject (String projectName ) {
304+ def projects = []
305+ def mergeFromProjects = []
306+ if (session. checkedProject) {
307+ session. checkedProject. each {
308+ def project = Project . get(it)
309+ if (project) {
310+ mergeFromProjects. push(Project . get(it))
311+ }
312+ }
313+ }
314+ if (mergeFromProjects. size() == 0 ) {
315+ flash. message = " No projects to merge!"
316+ redirect(action : " all" )
317+ }
318+
319+ // add mergeToProject
320+ def mergeToProject = Project . where {name == projectName}. get(max :1 )
321+ if (mergeToProject && ! projects. contains(mergeToProject)) {
322+ projects = [mergeFromProjects, mergeToProject]
323+ } else {
324+ projects = mergeFromProjects
325+ }
326+
327+ def projectUsers = []
328+ projects. each { p ->
329+ def oldProjectUsers = ProjectUser . where {project == p}. list()
330+ if (oldProjectUsers && oldProjectUsers. size() > 0 ) {
331+ oldProjectUsers. each { pu ->
332+ if (! projectUsers. collect { it. user }. contains(pu. user)) {
333+ projectUsers. push(pu)
334+ }
335+ }
336+ }
337+ }
338+
339+ // add current user
340+ def currUser = springSecurityService. currentUser
341+ if (! projectUsers. collect { it. user }. contains(currUser)) {
342+ projectUsers. push(new ProjectUser (user :currUser,
343+ projectRole : ProjectRole . OWNER ))
344+ }
345+ [projectName : projectName, mergeFromProjects : mergeFromProjects, projectUsers : projectUsers, mergeToProject : mergeToProject]
346+ }
347+
348+ def updateCohortNotesAjax (Long cohortId , String notes ) {
349+ projectService. updateCohortNotes(cohortId, notes)
350+ render notes
351+ }
225352}
226353
227354
@@ -272,4 +399,14 @@ class SampleListCommand {
272399 Long assayId
273400 Long projectId
274401 List<SampleCommand > samples = []. withLazyDefault { new SampleCommand () }
402+ }
403+
404+ class UserRoleCommand {
405+ Long userId
406+ String role
407+ }
408+
409+ class UserRoleListCommand {
410+ String projectName
411+ List<UserRoleCommand > userRoles = []. withLazyDefault { new UserRoleCommand () }
275412}
0 commit comments