Newer
Older
gitbucket_jkp / src / main / scala / app / SearchController.scala
@takezoe takezoe on 30 Jul 2013 1 KB Bug fix.
package app

import util._
import service._
import jp.sf.amateras.scalatra.forms._

class SearchController extends SearchControllerBase
with RepositoryService with AccountService with SystemSettingsService with ActivityService
with RepositorySearchService with IssuesService
with ReferrerAuthenticator

trait SearchControllerBase extends ControllerBase { self: RepositoryService
  with SystemSettingsService with ActivityService with RepositorySearchService
  with ReferrerAuthenticator =>

  val searchForm = mapping(
    "query"      -> trim(text(required)),
    "owner"      -> trim(text(required)),
    "repository" -> trim(text(required))
  )(SearchForm.apply)

  case class SearchForm(query: String, owner: String, repository: String)

  post("/search", searchForm){ form =>
    redirect(s"/${form.owner}/${form.repository}/search?q=${StringUtil.urlEncode(form.query)}")
  }

  get("/:owner/:repository/search")(referrersOnly { repository =>
    val query  = params("q").trim
    val target = params.getOrElse("type", "code")
    val page   = try {
      val i = params.getOrElse("page", "1").toInt
      if(i <= 0) 1 else i
    } catch {
      case e: NumberFormatException => 1
    }

    target.toLowerCase match {
      case "issue" => search.html.issues(
        searchIssues(repository.owner, repository.name, query),
        countFiles(repository.owner, repository.name, query),
        query, page, repository)

      case _ => search.html.code(
        searchFiles(repository.owner, repository.name, query),
        countIssues(repository.owner, repository.name, query),
        query, page, repository)
    }
  })

}