2017-07-31 18:17:30 +01:00
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
2018-09-26 17:59:56 +01:00
package activity
2017-07-31 18:17:30 +01:00
import (
"database/sql"
2018-03-15 17:11:53 +00:00
"fmt"
2017-07-31 18:17:30 +01:00
"time"
"github.com/documize/community/domain"
2018-09-26 17:59:56 +01:00
"github.com/documize/community/domain/store"
2017-07-31 18:17:30 +01:00
"github.com/documize/community/model/activity"
"github.com/pkg/errors"
)
2018-09-26 17:59:56 +01:00
// Store provides data access to user activity information.
type Store struct {
store . Context
2018-09-27 15:14:48 +01:00
store . ActivityStorer
2017-07-31 18:17:30 +01:00
}
// RecordUserActivity logs user initiated data changes.
2020-02-03 21:00:35 +00:00
func ( s Store ) RecordUserActivity ( ctx domain . RequestContext , activity activity . UserActivity ) {
2017-07-31 18:17:30 +01:00
activity . OrgID = ctx . OrgID
activity . UserID = ctx . UserID
activity . Created = time . Now ( ) . UTC ( )
2020-02-03 21:00:35 +00:00
_ , err := ctx . Transaction . Exec ( s . Bind ( "INSERT INTO dmz_user_activity (c_orgid, c_userid, c_spaceid, c_docid, c_sectionid, c_sourcetype, c_activitytype, c_metadata, c_created) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" ) ,
2018-09-18 20:55:40 +01:00
activity . OrgID , activity . UserID , activity . SpaceID , activity . DocumentID , activity . SectionID , activity . SourceType , activity . ActivityType , activity . Metadata , activity . Created )
2017-07-31 18:17:30 +01:00
if err != nil {
2020-02-03 21:00:35 +00:00
s . Runtime . Log . Error ( "execute record user activity" , err )
2017-07-31 18:17:30 +01:00
}
return
}
// GetDocumentActivity returns the metadata for a specified document.
2018-09-26 17:59:56 +01:00
func ( s Store ) GetDocumentActivity ( ctx domain . RequestContext , id string ) ( a [ ] activity . DocumentActivity , err error ) {
2019-10-28 15:04:36 +00:00
qry := s . Bind ( ` SELECT a . id , a . c_created AS created , a . c_orgid AS orgid ,
2018-09-26 17:59:56 +01:00
COALESCE ( a . c_userid , ' ' ) AS userid , a . c_spaceid AS spaceid ,
2018-09-20 17:23:26 +01:00
a . c_docid AS documentid , a . c_sectionid AS sectionid , a . c_activitytype AS activitytype ,
2018-09-18 20:55:40 +01:00
a . c_metadata AS metadata ,
2018-09-26 17:59:56 +01:00
COALESCE ( u . c_firstname , ' Anonymous ' ) AS firstname , COALESCE ( u . c_lastname , ' Viewer ' ) AS lastname ,
COALESCE ( p . c_name , ' ' ) AS sectionname
2018-09-18 20:55:40 +01:00
FROM dmz_user_activity a
2018-09-19 16:03:29 +01:00
LEFT JOIN dmz_user u ON a . c_userid = u . c_refid
LEFT JOIN dmz_section p ON a . c_sectionid = p . c_refid
2018-09-18 20:55:40 +01:00
WHERE a . c_orgid = ? AND a . c_docid = ?
AND a . c_userid != '0' AND a . c_userid != ' '
2018-09-26 17:59:56 +01:00
ORDER BY a . c_created DESC ` )
2017-07-31 18:17:30 +01:00
err = s . Runtime . Db . Select ( & a , qry , ctx . OrgID , id )
2018-01-19 11:36:38 +00:00
if err == sql . ErrNoRows {
err = nil
2017-07-31 18:17:30 +01:00
}
2018-01-19 11:36:38 +00:00
if err != nil {
2017-07-31 18:17:30 +01:00
err = errors . Wrap ( err , "select document user activity" )
2018-01-19 11:36:38 +00:00
}
if len ( a ) == 0 {
a = [ ] activity . DocumentActivity { }
2017-07-31 18:17:30 +01:00
}
return
}
2018-03-15 17:11:53 +00:00
// DeleteDocumentChangeActivity removes all entries for document changes (add, remove, update).
2018-09-26 17:59:56 +01:00
func ( s Store ) DeleteDocumentChangeActivity ( ctx domain . RequestContext , documentID string ) ( rows int64 , err error ) {
rows , err = s . DeleteWhere ( ctx . Transaction ,
2018-09-18 20:55:40 +01:00
fmt . Sprintf ( "DELETE FROM dmz_user_activity WHERE c_orgid='%s' AND c_docid='%s' AND (c_activitytype=1 OR c_activitytype=2 OR c_activitytype=3 OR c_activitytype=4 OR c_activitytype=7)" , ctx . OrgID , documentID ) )
2018-03-15 17:11:53 +00:00
return
}