mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-10-31 02:25:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Scala
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Scala
		
	
	
	
	
	
| package app
 | |
| 
 | |
| import jp.sf.amateras.scalatra.forms._
 | |
| 
 | |
| import service._
 | |
| import util.{CollaboratorsAuthenticator, ReferrerAuthenticator}
 | |
| import util.Implicits._
 | |
| 
 | |
| class MilestonesController extends MilestonesControllerBase
 | |
|   with MilestonesService with RepositoryService with AccountService
 | |
|   with ReferrerAuthenticator with CollaboratorsAuthenticator
 | |
| 
 | |
| trait MilestonesControllerBase extends ControllerBase {
 | |
|   self: MilestonesService with RepositoryService
 | |
|     with ReferrerAuthenticator with CollaboratorsAuthenticator  =>
 | |
| 
 | |
|   case class MilestoneForm(title: String, description: Option[String], dueDate: Option[java.util.Date])
 | |
| 
 | |
|   val milestoneForm = mapping(
 | |
|     "title"       -> trim(label("Title", text(required, maxlength(100)))),
 | |
|     "description" -> trim(label("Description", optional(text()))),
 | |
|     "dueDate"     -> trim(label("Due Date", optional(date())))
 | |
|   )(MilestoneForm.apply)
 | |
| 
 | |
|   get("/:owner/:repository/issues/milestones")(referrersOnly { repository =>
 | |
|     issues.milestones.html.list(
 | |
|       params.getOrElse("state", "open"),
 | |
|       getMilestonesWithIssueCount(repository.owner, repository.name),
 | |
|       repository,
 | |
|       hasWritePermission(repository.owner, repository.name, context.loginAccount))
 | |
|   })
 | |
| 
 | |
|   get("/:owner/:repository/issues/milestones/new")(collaboratorsOnly {
 | |
|     issues.milestones.html.edit(None, _)
 | |
|   })
 | |
| 
 | |
|   post("/:owner/:repository/issues/milestones/new", milestoneForm)(collaboratorsOnly { (form, repository) =>
 | |
|     createMilestone(repository.owner, repository.name, form.title, form.description, form.dueDate)
 | |
|     redirect(s"/${repository.owner}/${repository.name}/issues/milestones")
 | |
|   })
 | |
| 
 | |
|   get("/:owner/:repository/issues/milestones/:milestoneId/edit")(collaboratorsOnly { repository =>
 | |
|     params("milestoneId").toIntOpt.map{ milestoneId =>
 | |
|       issues.milestones.html.edit(getMilestone(repository.owner, repository.name, milestoneId), repository)
 | |
|     } getOrElse NotFound
 | |
|   })
 | |
| 
 | |
|   post("/:owner/:repository/issues/milestones/:milestoneId/edit", milestoneForm)(collaboratorsOnly { (form, repository) =>
 | |
|     params("milestoneId").toIntOpt.flatMap{ milestoneId =>
 | |
|       getMilestone(repository.owner, repository.name, milestoneId).map { milestone =>
 | |
|         updateMilestone(milestone.copy(title = form.title, description = form.description, dueDate = form.dueDate))
 | |
|         redirect(s"/${repository.owner}/${repository.name}/issues/milestones")
 | |
|       }
 | |
|     } getOrElse NotFound
 | |
|   })
 | |
| 
 | |
|   get("/:owner/:repository/issues/milestones/:milestoneId/close")(collaboratorsOnly { repository =>
 | |
|     params("milestoneId").toIntOpt.flatMap{ milestoneId =>
 | |
|       getMilestone(repository.owner, repository.name, milestoneId).map { milestone =>
 | |
|         closeMilestone(milestone)
 | |
|         redirect(s"/${repository.owner}/${repository.name}/issues/milestones")
 | |
|       }
 | |
|     } getOrElse NotFound
 | |
|   })
 | |
| 
 | |
|   get("/:owner/:repository/issues/milestones/:milestoneId/open")(collaboratorsOnly { repository =>
 | |
|     params("milestoneId").toIntOpt.flatMap{ milestoneId =>
 | |
|       getMilestone(repository.owner, repository.name, milestoneId).map { milestone =>
 | |
|         openMilestone(milestone)
 | |
|         redirect(s"/${repository.owner}/${repository.name}/issues/milestones")
 | |
|       }
 | |
|     } getOrElse NotFound
 | |
|   })
 | |
| 
 | |
|   get("/:owner/:repository/issues/milestones/:milestoneId/delete")(collaboratorsOnly { repository =>
 | |
|     params("milestoneId").toIntOpt.flatMap{ milestoneId =>
 | |
|       getMilestone(repository.owner, repository.name, milestoneId).map { milestone =>
 | |
|         deleteMilestone(repository.owner, repository.name, milestone.milestoneId)
 | |
|         redirect(s"/${repository.owner}/${repository.name}/issues/milestones")
 | |
|       }
 | |
|     } getOrElse NotFound
 | |
|   })
 | |
| 
 | |
| }
 |