Files

115 lines
3.4 KiB
Go
Raw Permalink Normal View History

2017-10-15 02:17:39 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2017-10-15 02:17:39 +03:00
package repo
import (
"net/http"
2017-10-15 02:17:39 +03:00
"time"
activities_model "code.gitea.io/gitea/models/activities"
git_model "code.gitea.io/gitea/models/git"
2021-11-10 03:57:58 +08:00
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/services/context"
2017-10-15 02:17:39 +03:00
)
const (
tplActivity templates.TplName = "repo/activity"
2017-10-15 02:17:39 +03:00
)
// Activity render the page to show repository latest changes
func Activity(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.activity")
ctx.Data["PageIsActivity"] = true
2024-02-16 01:21:13 +03:00
ctx.Data["PageIsPulse"] = true
2017-10-15 02:17:39 +03:00
timeUntil := time.Now()
period, timeFrom := "weekly", timeUntil.Add(-time.Hour*168)
switch ctx.PathParam("period") {
2017-10-15 02:17:39 +03:00
case "daily":
period, timeFrom = "daily", timeUntil.Add(-time.Hour*24)
2017-10-15 02:17:39 +03:00
case "halfweekly":
period, timeFrom = "halfweekly", timeUntil.Add(-time.Hour*72)
2017-10-15 02:17:39 +03:00
case "weekly":
period, timeFrom = "weekly", timeUntil.Add(-time.Hour*168)
2017-10-15 02:17:39 +03:00
case "monthly":
period, timeFrom = "monthly", timeUntil.AddDate(0, -1, 0)
case "quarterly":
period, timeFrom = "quarterly", timeUntil.AddDate(0, -3, 0)
case "semiyearly":
period, timeFrom = "semiyearly", timeUntil.AddDate(0, -6, 0)
case "yearly":
period, timeFrom = "yearly", timeUntil.AddDate(-1, 0, 0)
2017-10-15 02:17:39 +03:00
}
2024-11-02 12:08:28 +08:00
ctx.Data["DateFrom"] = timeFrom
ctx.Data["DateUntil"] = timeUntil
ctx.Data["Period"] = period
ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + period)
2017-10-15 02:17:39 +03:00
canReadCode := ctx.Repo.CanRead(unit.TypeCode)
if canReadCode {
// GetActivityStats needs to read the default branch to get some information
branchExist, _ := git_model.IsBranchExist(ctx, ctx.Repo.Repository.ID, ctx.Repo.Repository.DefaultBranch)
if !branchExist {
ctx.Data["NotFoundPrompt"] = ctx.Tr("repo.branch.default_branch_not_exist", ctx.Repo.Repository.DefaultBranch)
ctx.NotFound(nil)
return
}
}
2017-10-16 00:54:53 +03:00
var err error
// TODO: refactor these arguments to a struct
ctx.Data["Activity"], err = activities_model.GetActivityStats(ctx, ctx.Repo.Repository, timeFrom,
2021-11-10 03:57:58 +08:00
ctx.Repo.CanRead(unit.TypeReleases),
ctx.Repo.CanRead(unit.TypeIssues),
ctx.Repo.CanRead(unit.TypePullRequests),
canReadCode,
)
if err != nil {
2018-01-10 22:34:17 +01:00
ctx.ServerError("GetActivityStats", err)
2017-10-15 02:17:39 +03:00
return
}
if ctx.PageData["repoActivityTopAuthors"], err = activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10); err != nil {
ctx.ServerError("GetActivityStatsTopAuthors", err)
return
}
ctx.HTML(http.StatusOK, tplActivity)
2017-10-15 02:17:39 +03:00
}
2019-05-04 15:39:03 +03:00
// ActivityAuthors renders JSON with top commit authors for given time period over all branches
func ActivityAuthors(ctx *context.Context) {
timeUntil := time.Now()
var timeFrom time.Time
2024-06-19 06:32:45 +08:00
switch ctx.PathParam("period") {
2019-05-04 15:39:03 +03:00
case "daily":
timeFrom = timeUntil.Add(-time.Hour * 24)
case "halfweekly":
timeFrom = timeUntil.Add(-time.Hour * 72)
case "weekly":
timeFrom = timeUntil.Add(-time.Hour * 168)
case "monthly":
timeFrom = timeUntil.AddDate(0, -1, 0)
case "quarterly":
timeFrom = timeUntil.AddDate(0, -3, 0)
case "semiyearly":
timeFrom = timeUntil.AddDate(0, -6, 0)
case "yearly":
timeFrom = timeUntil.AddDate(-1, 0, 0)
2019-05-04 15:39:03 +03:00
default:
timeFrom = timeUntil.Add(-time.Hour * 168)
}
authors, err := activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10)
2019-05-04 15:39:03 +03:00
if err != nil {
ctx.ServerError("GetActivityStatsTopAuthors", err)
return
}
ctx.JSON(http.StatusOK, authors)
2019-05-04 15:39:03 +03:00
}