1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-08-02 12:05:23 +02:00

document activity log

This commit is contained in:
Harvey Kandola 2017-04-04 17:55:17 +01:00
parent d91811bb3d
commit 96e4b2058c
9 changed files with 182 additions and 96 deletions

View file

@ -13,64 +13,12 @@ import Ember from 'ember';
export default Ember.Component.extend({
documentService: Ember.inject.service('document'),
appMeta: Ember.inject.service(),
sortedItems: [],
didReceiveAttrs() {
this._super(...arguments);
this.get('documentService').getMeta(this.get('document.id')).then((activity) => {
this.get('documentService').getActivity(this.get('document.id')).then((activity) => {
this.set('activity', activity);
let editors = this.get('activity.editors');
let viewers = this.get('activity.viewers');
let pages = this.get('pages');
let sorted = [];
if (is.null(editors)) {
editors = [];
}
if (is.null(viewers)) {
viewers = [];
}
viewers.forEach((item) => {
Ember.set(item, 'changeLabel', "viewed");
Ember.set(item, "viewed", true);
sorted.pushObject({ date: item.created, item: item });
});
editors.forEach(function (item) {
Ember.set(item, "added", item.action === "add-page");
Ember.set(item, "changed", item.action === "update-page");
Ember.set(item, "deleted", item.action === "remove-page");
let page = pages.findBy('id', item.pageId);
let title = "";
if (item.deleted || is.undefined(page)) {
title = "removed section";
} else {
if (item.added) {
title = "added " + page.get('title');
}
if (item.changed) {
title = "changed " + page.get('title');
}
}
Ember.set(item, 'changeLabel', title);
let exists = sorted.findBy('item.pageId', item.pageId);
if (is.undefined(exists)) {
sorted.pushObject({ date: item.created, item: item });
}
});
this.set('sortedItems', _.sortBy(sorted, 'date').reverse());
});
}
});

View file

@ -0,0 +1,103 @@
// 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
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import Ember from 'ember';
import constants from '../utils/constants';
export default Model.extend({
orgId: attr('string'),
folderId: attr('string'),
documentId: attr('string'),
userId: attr('string'),
firstname: attr('string'),
lastname: attr('string'),
activityType: attr('number'),
created: attr(),
activityLabel: Ember.computed('activityType', function() {
let label = '';
switch (this.get('activityType')) {
case constants.UserActivityType.Created:
label = 'Added';
break;
case constants.UserActivityType.Read:
label = 'Viewed';
break;
case constants.UserActivityType.Edited:
label = 'Edited';
break;
case constants.UserActivityType.Deleted:
label = 'Deleted';
break;
case constants.UserActivityType.Archived:
label = 'Archived';
break;
case constants.UserActivityType.Approved:
label = 'Approved';
break;
case constants.UserActivityType.Reverted:
label = 'Reverted';
break;
case constants.UserActivityType.PublishedTemplate:
label = 'Published Template';
break;
case constants.UserActivityType.PublishedBlock:
label = 'Published Block';
break;
default:
break;
}
return label;
}),
activityColor: Ember.computed('activityType', function() {
let color = '';
switch (this.get('activityType')) {
case constants.UserActivityType.Created:
color = 'color-blue';
break;
case constants.UserActivityType.Read:
color = 'color-black';
break;
case constants.UserActivityType.Edited:
color = 'color-green';
break;
case constants.UserActivityType.Deleted:
color = 'color-red';
break;
case constants.UserActivityType.Archived:
color = 'color-gray';
break;
case constants.UserActivityType.Approved:
color = 'color-green';
break;
case constants.UserActivityType.Reverted:
color = 'color-red';
break;
case constants.UserActivityType.PublishedTemplate:
color = 'color-blue';
break;
case constants.UserActivityType.PublishedBlock:
color = 'color-blue';
break;
default:
break;
}
return color;
})
});

View file

@ -208,12 +208,19 @@ export default Ember.Service.extend({
},
// document meta referes to number of views, edits, approvals, etc.
getMeta(documentId) {
return this.get('ajax').request(`documents/${documentId}/meta`, {
getActivity(documentId) {
return this.get('ajax').request(`documents/${documentId}/activity`, {
method: "GET"
}).then((response) => {
return response;
let data = [];
data = response.map((obj) => {
let data = this.get('store').normalize('documentActivity', obj);
return this.get('store').push(data);
});
return data;
}).catch(() => {
return [];
});
},

View file

@ -2,26 +2,13 @@
<div class="title">Activity</div>
<div class="document-sidebar-view-activity">
<ul class="items">
{{#each sortedItems as |e|}}
{{#each activity as |a|}}
<li class="item">
<div class="avatar-box">
<div class="avatar">{{user-initials e.item.firstname e.item.lastname}}</div>
</div>
<div class="name">{{e.item.firstname}} {{e.item.lastname}}, {{time-ago e.date}}</div>
<div class="detail">
{{#if e.item.deleted}}
<div class="deleted">{{e.item.changeLabel}}</div>
{{/if}}
{{#if e.item.changed}}
<div class="changed">{{e.item.changeLabel}}</div>
{{/if}}
{{#if e.item.added}}
<div class="added">{{e.item.changeLabel}}</div>
{{/if}}
{{#if e.item.viewed}}
<div class="viewed">{{e.item.changeLabel}}</div>
{{/if}}
<div class="avatar">{{user-initials a.firstname a.lastname}}</div>
</div>
<div class="name">{{a.firstname}} {{a.lastname}}</div>
<div class="detail {{a.activityColor}}">{{a.activityLabel}}, {{time-ago a.created}}</div>
</li>
{{/each}}
</ul>

View file

@ -26,5 +26,18 @@ export default {
Feedback: 2,
Contribute: 3,
Approve: 4
}
},
UserActivityType: {
Created: 1,
Read: 2,
Edited: 3,
Deleted: 4,
Archived: 5,
Approved: 6,
Reverted: 7,
PublishedTemplate: 8,
PublishedBlock: 9,
Feedback: 10
}
};