ore/app/views/users/admin/log.scala.html
@import controllers.project.{routes => projectRoutes}
@import controllers.routes.{Users => userRoutes}
@import controllers.routes.{Application => appRoutes}
@import controllers.sugar.Requests.OreRequest
@import ore.models.project.{Page, Project, Version}
@import ore.models.user.{LoggedAction, LoggedActionContext}
@import ore.models.user.{LoggedAction, LoggedActionContext, User}
@import ore.OreConfig
@import ore.db.Model
@import util.StringFormatterUtils._
@import ore.db.DbRef
@import ore.models.admin.LoggedActionViewModel
@(actions: Seq[Model[LoggedActionViewModel[_]]], limit: Int, offset: Int, page: Int, size: Int, userFilter: Option[DbRef[User]],
projectFilter: Option[DbRef[Project]], versionFilter: Option[DbRef[Version]], pageFilter: Option[DbRef[Page]],
actionFilter: Option[Int], subjectFilter: Option[DbRef[_]], canViewIP: Boolean)(implicit messages: Messages, request: OreRequest[_], config: OreConfig, flash: Flash)
@scripts = {
<script type="text/javascript" src="@routes.Assets.versioned("diff-match-patch/javascript/diff_match_patch.js")"></script>
<script type="text/javascript" src="@routes.Assets.versioned("javascripts/actionLog.js")"></script>
}
@layout.base(messages("admin.log.title"), scripts) {
<div class="row">
<div class="col-md-12 header-flags">
<div class="clearfix">
<h1 class="pull-left">@messages("admin.log.title")</h1>
</div>
</div>
<div class="col-md-3">
<h4>Active Filters:</h4>
<table class="table table-super-condensed">
<tr><td class="filter-user">User</td> <td>@userFilter.getOrElse("-")</td></tr>
<tr><td class="filter-project">Project</td> <td>@projectFilter.getOrElse("-")</td></tr>
<tr><td class="filter-version">Version</td> <td>@versionFilter.getOrElse("-")</td></tr>
<tr><td class="filter-page">Page</td><td>@pageFilter.getOrElse("-") </td></tr>
<tr><td class="filter-action">Action</td><td>@LoggedAction.withValueOpt(actionFilter.getOrElse(-1)).getOrElse("-")</td></tr>
<tr><td class="filter-subject">Subject</td><td>@subjectFilter.getOrElse("-")</td></tr>
</table>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title pull-left">@messages("admin.log.title") · Page #@page</h4>
<div class="clearfix"></div>
</div>
<div class="table-responsive">
<table class="table table-condensed setting-no-border">
<tbody>
<tr>
<td><b>#</b></td>
<td><b>User</b></td>
@if(canViewIP) {
<td><b>IP Address</b></td>
}
<td><b>Time</b></td>
<td><b>Action</b></td>
<td><b>Context</b></td>
<td><b>Old State</b></td>
<td><b>New State</b></td>
</tr>
@if(actions.isEmpty) {
<tr><td><b>No activities founds</b></td></tr>
}
@actions.zipWithIndex.map { case (action, index) =>
<tr>
<td><b>@{offset + index + 1}</b></td>
<td>
<a href="@userRoutes.showProjects(action.uName, None)">@action.uName</a>
<small class="filter-user">(<a href="@appRoutes.showLog(Some(page), Some(action.userId), projectFilter, versionFilter, pageFilter, actionFilter, subjectFilter)">@action.userId</a>)</small>
</td>
@if(canViewIP) {
<td>@action.address.value</td>
}
<td>@prettifyDateAndTime(action.createdAt)</td>
<td>
@action.action
<small class="filter-action">(<a href="@appRoutes.showLog(Some(page), userFilter, projectFilter, versionFilter, pageFilter, Some(action.action.value), subjectFilter)">@action.action.value</a>)</small>
</td>
@if(action.actionType == LoggedActionContext.User || action.actionType == LoggedActionContext.Organization) {
<td>
<a href="@userRoutes.showProjects(action.sName.getOrElse(""), None)">@action.sName</a>
<small class="filter-subject">(<a href="@appRoutes.showLog(Some(page), userFilter, projectFilter, versionFilter, pageFilter, actionFilter, action.sId)">@action.sId</a>)</small>
</td>
} else { @if(action.pId.isEmpty || action.filterProject.getOrElse(-1) == -1) {
<td>
Resource deleted
@if(action.actionType == LoggedActionContext.Project || action.actionType == LoggedActionContext.ProjectPage) {
<small class="filter-project">(<a href="@appRoutes.showLog(Some(page), userFilter, Some(action.contextId), versionFilter, pageFilter, actionFilter, subjectFilter)">@action.contextId</a>)</small>
} else {
<small class="filter-version">(<a href="@appRoutes.showLog(Some(page), userFilter, projectFilter, Some(action.contextId), pageFilter, actionFilter, subjectFilter)">@action.contextId</a>)</small>
}
</td>
} else { @if(action.actionType == LoggedActionContext.Project) {
<td>
<a href="@projectRoutes.Projects.show(action.pOwnerName.get, action.pSlug.getOrElse(""))">@action.pOwnerName/@action.pSlug</a>
<small class="filter-project">(<a href="@appRoutes.showLog(Some(page), userFilter, action.pId, versionFilter, pageFilter, actionFilter, subjectFilter)">@action.pId</a>)</small>
</td>
} else { @if(action.actionType == LoggedActionContext.ProjectPage) {
<td>
<a href="@projectRoutes.Pages.show(action.pOwnerName.get, action.pSlug.getOrElse(""), action.ppSlug.getOrElse(""))">@action.pOwnerName/@action.pSlug/@action.ppSlug</a>
<small class="filter-project">(<a href="@appRoutes.showLog(Some(page), userFilter, action.pId, versionFilter, pageFilter, actionFilter, subjectFilter)">@action.pId</a>)</small>
<small class="filter-page">(<a href="@appRoutes.showLog(Some(page), userFilter, projectFilter, versionFilter, action.ppId, actionFilter, subjectFilter)">@action.ppId</a>)</small>
</td>
} else { @if(action.actionType == LoggedActionContext.Version) {
<td>
<a href="@projectRoutes.Versions.show(action.pOwnerName.get, action.pSlug.get, action.pvVersionString.get)">@action.pOwnerName/@action.pSlug/@action.pvVersionString</a>
<small class="filter-project">(<a href="@appRoutes.showLog(Some(page), userFilter, action.pId, versionFilter, pageFilter, actionFilter, subjectFilter)">@action.pId</a>)</small>
<small class="filter-version">(<a href="@appRoutes.showLog(Some(page), userFilter, projectFilter, action.pvId, pageFilter, actionFilter, subjectFilter)">@action.pvId</a>)</small>
</td>
} } } } }
@* Show diff only when page edit *@
@if(action.action == LoggedAction.ProjectPageEdited || action.action == LoggedAction.VersionDescriptionEdited) {
<td>
<a href="#" class="data-view-old" data-view="@{offset + index}">View</a>
<textarea style="display: none" data-oldstate="@{offset + index}">@action.oldState</textarea>
</td>
<td>
<a href="#" class="data-view-new" data-view="@{offset + index}">View</a> <small>(<a href="#" class="data-diff" data-diff="@{offset + index}">Show diff</a>)</small>
<textarea style="display: none" data-newstate="@{offset + index}">@action.newState</textarea>
</td>
} else {
<td>@action.oldState</td>
<td>@action.newState</td>
}
</tr>
}
</tbody>
</table>
</div>
<div class="panel-heading" style="display:block">
@if(page > 1) {
<h4 class="panel-title pull-left"><a href="@appRoutes.showLog(Some(page-1), userFilter, projectFilter, versionFilter, pageFilter, actionFilter, subjectFilter)">← @{page - 1}</a></h4>
}
@if(offset + limit < size) {
<h4 class="panel-title pull-right"><a href="@appRoutes.showLog(Some(page+1), userFilter, projectFilter, versionFilter, pageFilter, actionFilter, subjectFilter)">@{page + 1} →</a></h4>
}
<div class="clearfix"></div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal-view" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">View</h4>
</div>
<div class="modal-body" id="modal-view-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
}