2017-10-15 02:17:39 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-10-15 02:17:39 +03:00
package repo
import (
2021-04-05 18:30:52 +03:00
"net/http"
2017-10-15 02:17:39 +03:00
"time"
2022-08-25 05:31:57 +03:00
activities_model "code.gitea.io/gitea/models/activities"
2021-11-09 22:57:58 +03:00
"code.gitea.io/gitea/models/unit"
2017-10-15 02:17:39 +03:00
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
)
const (
tplActivity base . TplName = "repo/activity"
)
// 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
ctx . Data [ "Period" ] = ctx . Params ( "period" )
timeUntil := time . Now ( )
var timeFrom time . Time
switch ctx . Data [ "Period" ] {
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 )
2019-11-05 08:45:48 +03:00
case "quarterly" :
timeFrom = timeUntil . AddDate ( 0 , - 3 , 0 )
case "semiyearly" :
timeFrom = timeUntil . AddDate ( 0 , - 6 , 0 )
case "yearly" :
timeFrom = timeUntil . AddDate ( - 1 , 0 , 0 )
2017-10-15 02:17:39 +03:00
default :
ctx . Data [ "Period" ] = "weekly"
timeFrom = timeUntil . Add ( - time . Hour * 168 )
}
2022-10-13 00:14:14 +03:00
ctx . Data [ "DateFrom" ] = timeFrom . UTC ( ) . Format ( time . RFC3339 )
ctx . Data [ "DateUntil" ] = timeUntil . UTC ( ) . Format ( time . RFC3339 )
2017-10-15 02:17:39 +03:00
ctx . Data [ "PeriodText" ] = ctx . Tr ( "repo.activity.period." + ctx . Data [ "Period" ] . ( string ) )
2017-10-16 00:54:53 +03:00
var err error
2022-08-25 05:31:57 +03:00
if ctx . Data [ "Activity" ] , err = activities_model . GetActivityStats ( ctx , ctx . Repo . Repository , timeFrom ,
2021-11-09 22:57:58 +03:00
ctx . Repo . CanRead ( unit . TypeReleases ) ,
ctx . Repo . CanRead ( unit . TypeIssues ) ,
ctx . Repo . CanRead ( unit . TypePullRequests ) ,
ctx . Repo . CanRead ( unit . TypeCode ) ) ; err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "GetActivityStats" , err )
2017-10-15 02:17:39 +03:00
return
}
2022-08-25 05:31:57 +03:00
if ctx . PageData [ "repoActivityTopAuthors" ] , err = activities_model . GetActivityStatsTopAuthors ( ctx , ctx . Repo . Repository , timeFrom , 10 ) ; err != nil {
2020-01-20 13:07:30 +03:00
ctx . ServerError ( "GetActivityStatsTopAuthors" , err )
return
}
2021-04-05 18:30:52 +03:00
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
switch ctx . Params ( "period" ) {
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 )
2019-11-05 08:45:48 +03:00
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 )
}
var err error
2022-08-25 05:31:57 +03:00
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
}
2021-04-05 18:30:52 +03:00
ctx . JSON ( http . StatusOK , authors )
2019-05-04 15:39:03 +03:00
}