code.gitea.io/gitea@v1.21.7/routers/web/repo/activity.go (about)

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