You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2014/07/25 18:03:11 UTC

[5/8] git commit: [#7524] ticket:613 Site admin page for users audit log

[#7524] ticket:613 Site admin page for users audit log


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d5d74a29
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d5d74a29
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d5d74a29

Branch: refs/heads/master
Commit: d5d74a29e577064a58a0fcbaa3cf9b4a7da37fcd
Parents: 2e1735c
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Jul 21 15:07:06 2014 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Jul 25 16:02:57 2014 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/site_admin.py         | 30 ++++++++++++++++
 Allura/allura/model/auth.py                     |  4 +++
 .../templates/site_admin_users_audit.html       | 37 ++++++++++++++++++++
 3 files changed, 71 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/d5d74a29/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 3cf4973..96229ee 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -36,6 +36,7 @@ from allura.lib.decorators import require_post
 from allura.lib.plugin import SiteAdminExtension
 from allura.lib.security import require_access
 from allura.lib.widgets import form_fields as ffw
+from allura.ext.admin.widgets import AuditLog
 from allura import model as M
 from allura.command.show_models import dfs, build_model_inheritance_graph
 import allura
@@ -49,6 +50,7 @@ log = logging.getLogger(__name__)
 class W:
     page_list = ffw.PageList()
     page_size = ffw.PageSize()
+    audit = AuditLog()
 
 
 class SiteAdminController(object):
@@ -79,6 +81,7 @@ class SiteAdminController(object):
             SitemapEntry('New Projects', base_url + 'new_projects', ui_icon=g.icons['admin']),
             SitemapEntry('Reclone Repo', base_url + 'reclone_repo', ui_icon=g.icons['admin']),
             SitemapEntry('Task Manager', base_url + 'task_manager?state=busy', ui_icon=g.icons['stats']),
+            SitemapEntry('Users Audit Log', base_url + 'users', ui_icon=g.icons['admin']),
         ]
         for ep_name in sorted(g.entry_points['site_admin']):
             g.entry_points['site_admin'][ep_name]().update_sidebar_menu(links)
@@ -239,6 +242,33 @@ class SiteAdminController(object):
             mount_point = ''
         return dict(prefix=prefix, shortname=shortname, mount_point=mount_point)
 
+    @expose('jinja:allura:templates/site_admin_users_audit.html')
+    def users(self, username=None, limit=10, page=0, **kwargs):
+        user = M.User.by_username(username)
+        limit = int(limit)
+        page = int(page)
+        if user is None or user.is_anonymous():
+            return dict(
+                entries=[],
+                limit=limit,
+                page=page,
+                count=0,
+                username=username)
+        count = M.AuditLog.for_user(user).count()
+        q = M.AuditLog.for_user(user)
+        q = q.sort('timestamp', -1)
+        q = q.skip(page * limit)
+        if count > limit:
+            q = q.limit(limit)
+        else:
+            limit = count
+        c.widget = W.audit
+        return dict(
+            entries=q.all(),
+            limit=limit,
+            page=page,
+            count=count,
+            username=username)
 
 class TaskManagerController(object):
 

http://git-wip-us.apache.org/repos/asf/allura/blob/d5d74a29/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index f0ad1c2..2e029df 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -903,6 +903,10 @@ class AuditLog(object):
             message = message % kwargs
         return cls(project_id=project._id, user_id=user._id, url=url, message=message)
 
+    @classmethod
+    def for_user(cls, user):
+        return cls.query.find(dict(project_id=None, user_id=user._id))
+
 main_orm_session.mapper(AuditLog, audit_log, properties=dict(
     project_id=ForeignIdProperty('Project'),
     project=RelationProperty('Project'),

http://git-wip-us.apache.org/repos/asf/allura/blob/d5d74a29/Allura/allura/templates/site_admin_users_audit.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_users_audit.html b/Allura/allura/templates/site_admin_users_audit.html
new file mode 100644
index 0000000..d4c52fa
--- /dev/null
+++ b/Allura/allura/templates/site_admin_users_audit.html
@@ -0,0 +1,37 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+
+{% extends 'allura:templates/site_admin.html' %}
+
+{% block content %}
+<div class='grid-19'>
+  <form action='' method='GET'>
+    <div class='grid-7'>
+      <label for='username'>Username:</label>
+      <input name='username' value='{{ username if username else ''}}'>
+    </div>
+    <div class='grid-5'>
+      <input type='submit' value='Show'>
+    </div>
+  </form>
+  {% if entries %}
+    {{ c.widget.display(entries=entries, limit=limit, page=page, count=count) }}
+  {% endif %}
+</div>
+{% endblock %}