1// Copyright 2017 The Gitea Authors. All rights reserved. 2// Use of this source code is governed by a MIT-style 3// license that can be found in the LICENSE file. 4 5package repo 6 7import ( 8 "net/http" 9 "time" 10 11 "code.gitea.io/gitea/models" 12 "code.gitea.io/gitea/models/unit" 13 "code.gitea.io/gitea/modules/base" 14 "code.gitea.io/gitea/modules/context" 15) 16 17const ( 18 tplActivity base.TplName = "repo/activity" 19) 20 21// Activity render the page to show repository latest changes 22func Activity(ctx *context.Context) { 23 ctx.Data["Title"] = ctx.Tr("repo.activity") 24 ctx.Data["PageIsActivity"] = true 25 26 ctx.Data["Period"] = ctx.Params("period") 27 28 timeUntil := time.Now() 29 var timeFrom time.Time 30 31 switch ctx.Data["Period"] { 32 case "daily": 33 timeFrom = timeUntil.Add(-time.Hour * 24) 34 case "halfweekly": 35 timeFrom = timeUntil.Add(-time.Hour * 72) 36 case "weekly": 37 timeFrom = timeUntil.Add(-time.Hour * 168) 38 case "monthly": 39 timeFrom = timeUntil.AddDate(0, -1, 0) 40 case "quarterly": 41 timeFrom = timeUntil.AddDate(0, -3, 0) 42 case "semiyearly": 43 timeFrom = timeUntil.AddDate(0, -6, 0) 44 case "yearly": 45 timeFrom = timeUntil.AddDate(-1, 0, 0) 46 default: 47 ctx.Data["Period"] = "weekly" 48 timeFrom = timeUntil.Add(-time.Hour * 168) 49 } 50 ctx.Data["DateFrom"] = timeFrom.Format("January 2, 2006") 51 ctx.Data["DateUntil"] = timeUntil.Format("January 2, 2006") 52 ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + ctx.Data["Period"].(string)) 53 54 var err error 55 if ctx.Data["Activity"], err = models.GetActivityStats(ctx.Repo.Repository, timeFrom, 56 ctx.Repo.CanRead(unit.TypeReleases), 57 ctx.Repo.CanRead(unit.TypeIssues), 58 ctx.Repo.CanRead(unit.TypePullRequests), 59 ctx.Repo.CanRead(unit.TypeCode)); err != nil { 60 ctx.ServerError("GetActivityStats", err) 61 return 62 } 63 64 if ctx.PageData["repoActivityTopAuthors"], err = models.GetActivityStatsTopAuthors(ctx.Repo.Repository, timeFrom, 10); err != nil { 65 ctx.ServerError("GetActivityStatsTopAuthors", err) 66 return 67 } 68 69 ctx.HTML(http.StatusOK, tplActivity) 70} 71 72// ActivityAuthors renders JSON with top commit authors for given time period over all branches 73func ActivityAuthors(ctx *context.Context) { 74 timeUntil := time.Now() 75 var timeFrom time.Time 76 77 switch ctx.Params("period") { 78 case "daily": 79 timeFrom = timeUntil.Add(-time.Hour * 24) 80 case "halfweekly": 81 timeFrom = timeUntil.Add(-time.Hour * 72) 82 case "weekly": 83 timeFrom = timeUntil.Add(-time.Hour * 168) 84 case "monthly": 85 timeFrom = timeUntil.AddDate(0, -1, 0) 86 case "quarterly": 87 timeFrom = timeUntil.AddDate(0, -3, 0) 88 case "semiyearly": 89 timeFrom = timeUntil.AddDate(0, -6, 0) 90 case "yearly": 91 timeFrom = timeUntil.AddDate(-1, 0, 0) 92 default: 93 timeFrom = timeUntil.Add(-time.Hour * 168) 94 } 95 96 var err error 97 authors, err := models.GetActivityStatsTopAuthors(ctx.Repo.Repository, timeFrom, 10) 98 if err != nil { 99 ctx.ServerError("GetActivityStatsTopAuthors", err) 100 return 101 } 102 103 ctx.JSON(http.StatusOK, authors) 104} 105