]> git.ipfire.org Git - pbs.git/commitdiff
Add pages to show recent comments.
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 12 Dec 2012 13:38:17 +0000 (14:38 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 12 Dec 2012 13:38:17 +0000 (14:38 +0100)
12 files changed:
backend/builds.py
backend/logs.py
backend/users.py
data/templates/build-index.html
data/templates/builds/comments.html [new file with mode: 0644]
data/templates/modules/log-entry-comment.html
data/templates/modules/log-entry.html
data/templates/user-profile.html
web/__init__.py
web/handlers_builds.py
web/handlers_users.py
web/ui_modules.py

index 81f77dac9a3264da8bc5ccc3fc07c9880b094a74..d204699306609e2ad348832eead09e8e57b0a4a5 100644 (file)
@@ -269,6 +269,39 @@ class Builds(base.Object):
 
                return builds
 
+       def get_comments(self, limit=10, offset=None, user=None):
+               query = "SELECT * FROM builds_comments \
+                       JOIN users ON builds_comments.user_id = users.id"
+               args = []
+
+               wheres = []
+               if user:
+                       wheres.append("users.id = %s")
+                       args.append(user.id)
+
+               if wheres:
+                       query += " WHERE %s" % " AND ".join(wheres)
+
+               # Sort everything.
+               query += " ORDER BY time_created DESC"
+
+               # Limits.
+               if limit:
+                       if offset:
+                               query += " LIMIT %s,%s"
+                               args.append(offset)
+                       else:
+                               query += " LIMIT %s"
+
+                       args.append(limit)
+
+               comments = []
+               for comment in self.db.query(query, *args):
+                       comment = logs.CommentLogEntry(self.pakfire, comment)
+                       comments.append(comment)
+
+               return comments
+
 
 class Build(base.Object):
        def __init__(self, pakfire, id, data=None):
index 20c54c678947be4dea8b39ab6a1e13597844ee18..af2e83ddf776feb3cf6d18713b979fd2786ef5a6 100644 (file)
@@ -79,6 +79,14 @@ class CommentLogEntry(LogEntry):
        def credit(self):
                return self.data.credit
 
+       @property
+       def build_id(self):
+               return self.data.build_id
+
+       @property
+       def build(self):
+               return self.pakfire.builds.get_by_id(self.build_id)
+
        @property
        def vote(self):
                if self.credit > 0:
index 8a32f11c296cb2611aeb2f8399cd4e9fb39006c3..255e1b3d98ff58c2eee6c9a031d8ebb471eb5159 100644 (file)
@@ -473,19 +473,6 @@ class User(base.Object):
 
                self.pakfire.messages.add("%s <%s>" % (self.realname, self.email), subject, message)
 
-       def get_comments(self, limit=5):
-               comments = self.db.query("""SELECT * FROM builds_comments
-                       WHERE user_id = %s ORDER BY time_created DESC LIMIT %s""", self.id, limit)
-
-               return comments
-
-       @property
-       def log(self):
-               return self.get_history(limit=15)
-
-       def get_history(self, limit=None):
-               return [] # XXX TODO
-
 
 # Some testing code.
 if __name__ == "__main__":
index c549fea219efa97f2db5dc06d71a46cc54a046ad..bc9f303dafb1e143b5422fae79500a42e518a715 100644 (file)
@@ -3,6 +3,25 @@
 {% block title %}{{ _("Builds") }}{% end block %}
 
 {% block body %}
+       <ul class="breadcrumb">
+               <li>
+                       <a href="/">{{ _("Home") }}</a>
+                       <span class="divider">/</span>
+               </li>
+               <li class="active">
+                       <a href="/builds">{{ _("Builds") }}</a>
+               </li>
+       </ul>
+
+       <ul class="nav nav-pills pull-right">
+               <li>
+                       <a href="/builds/comments">{{ _("Comments") }}</a>
+               </li>
+               <li>
+                       <a href="/builds/filter">{{ _("Filter builds") }}</a>
+               </li>
+       </ul>
+
        <div class="page-header">
                <h2>{{ _("Builds") }}</h2>
        </div>
diff --git a/data/templates/builds/comments.html b/data/templates/builds/comments.html
new file mode 100644 (file)
index 0000000..fc9e72f
--- /dev/null
@@ -0,0 +1,84 @@
+{% extends "../base.html" %}
+
+{% block title %}{{ _("Build comments") }}{% end block %}
+
+{% block body %}
+       <ul class="breadcrumb">
+               <li>
+                       <a href="/">{{ _("Home") }}</a>
+                       <span class="divider">/</span>
+               </li>
+               <li>
+                       <a href="/builds">{{ _("Builds") }}</a>
+                       <span class="divider">/</span>
+               </li>
+               {% if user %}
+                       <li>
+                               <a href="/builds/comments">{{ _("Comments") }}</a>
+                               <span class="divider">/</span>
+                       </li>
+                       <li class="active">
+                               <a href="/builds/comments/{{ user.name }}">{{ user.realname }}</a>
+                       </li>
+               {% else %}
+                       <li class="active">
+                               <a href="/builds/comments">{{ _("Comments") }}</a>
+                       </li>
+               {% end %}
+       </ul>
+
+       {% if user %}
+               <ul class="nav nav-pills pull-right">
+                       <li>
+                               <a href="/builds/comments">{{ _("Show all comments") }}</a>
+                       </li>
+               </ul>
+       {% end %}
+
+       <div class="page-header">
+               {% if user %}
+                       <h2>{{ _("%s's latest comments") % user.firstname }}</h2>
+               {% else %}
+                       <h2>{{ _("Build comments") }}</h2>
+               {% end %}
+       </div>
+
+       {% if comments %}       
+               <p>
+                       {% if user %}
+                               {{ _("This page shows %s's latest comments.") % user.firstname }}
+                       {% else %}
+                               {{ _("This page shows the latest comments on builds.") }}
+                       {% end %}
+                       {{ _("The Pakfire Build Service is all about social development and so, communicating with eath others is important. Please join.") }}
+               </p>
+
+               {% module Log(comments, show_build=True) %}
+
+               <ul class="pager">
+                       {% if have_prev %}
+                               <li class="previous">
+                                       <a href="?offset={{ offset - limit }}&limit={{ limit }}">&larr; {{ _("Newer") }}</a>
+                               </li>
+                       {% else %}
+                               <li class="previous disabled">
+                                       <a href="#">&larr; {{ _("Newer") }}</a>
+                               </li>
+                       {% end %}
+
+                       {% if have_next %}
+                               <li class="next">
+                                       <a href="?offset={{ offset + limit }}&limit={{ limit }}">{{ _("Older") }} &rarr;</a>
+                               </li>
+                       {% else %}
+                               <li class="next disabled">
+                                       <a href="#">{{ _("Older") }} &rarr;</a>
+                               </li>
+                       {% end %}
+               </ul>
+       {% elif not comments and user %}
+               <p class="muted">
+                       {{ _("%s did not comment on anything, yet.") % user.firstname }}
+               </p>
+       {% end %}
+{% end block %}
index 595418dcb099443718afa6d9ccdca5c84235130d..126738de57a7c2a786e4a719897fc903f1f89b61 100644 (file)
@@ -18,8 +18,8 @@
        {% if entry.get_message(current_user) %}
                {% module Text(entry.get_message(current_user), remove_linebreaks=False) %}
        {% else %}
-               <p>
-                       <em>{{ _("No comment given.") }}</em>
+               <p class="muted">
+                       {{ _("No comment given.") }}
                </p>
        {% end %}
 {% end %}
index c73fa92012e8957977506db99a916c742dd85f54..53edce8f51263addffd38d7986ecaa10a36d7bb6 100644 (file)
                                                {% else %}
                                                        <a href="/user/{{ entry.user.name }}">{{ entry.user.realname }}</a>
                                                {% end %}
+
+                                               {% if show_build %}
+                                                       <small>-
+                                                               <a href="/build/{{ entry.build.uuid }}">{{ entry.build.name }}</a>
+                                                       </small>
+                                               {% end %}
                                        </h4>
                                {% end %}
                        {% end block %}
index 2d0537d7f257c7eca5032d8735de308c588d9984..5dc7efdd354fab38e788eeea6a8eb30c09ef1ec6 100644 (file)
                </li>
        </ul>
 
+       <ul class="nav nav-pills pull-right">
+               <li>
+                       <a href="/builds/comments/{{ user.name }}">
+                               {{ _("View comments") }}
+                       </a>
+               </li>
+       </ul>
+
        <div class="page-header">
-               <h1>{{ _("User") }}: {{ user.realname }}</h1>
+               <h2>{{ _("User") }}: {{ user.realname }}</h2>
        </div>
 
        <div class="row">
        {% if current_user == user or current_user.is_admin() %}
                <div class="row">
                        <div class="span6 offset2">
-                               <h2>{{ _("Permissions") }}</h2>
+                               <h3>{{ _("Permissions") }}</h3>
 
                                {% if user.is_admin() %}                        
                                        <p>
                        </div>
                </div>
        {% end %}
-
-       <!-- <h2>{{ _("Links") }}</h2>
-       <ul class="user-links">
-               <li>
-                       <a href="#">{{ _("View all comments written %s.") % user.realname }}</a>
-               </li>
-               <li>
-                       <a href="#">{{ _("View all builds %s is linked to.") % user.realname }}</a>
-               </li>
-       </ul> -->
-
-       <!-- <h2>{{ _("Log") }}</h2>
-       {% module LogTable(user.log) %} -->
-
-       <!-- <h2>{{ _("Comments written by %s") % user.realname }}</h2>
-       {..% module CommentsTable(user.comments, show_package=True, show_user=False) %..} -->
 {% end block %}
index c5f3b3e4fe59016e5c23b9f0b12b9cb6b41eddbc..58eadc2921d1646909eaad3b033fe88e02de30a4 100644 (file)
@@ -110,7 +110,6 @@ class Application(tornado.web.Application):
 
                        # User profiles
                        (r"/users", UsersHandler),
-                       (r"/users/comments", UsersCommentsHandler),
                        (r"/user/impersonate", UserImpersonateHandler),
                        (r"/user/(\w+)/passwd", UserPasswdHandler),
                        (r"/user/(\w+)/delete", UserDeleteHandler),
@@ -136,6 +135,8 @@ class Application(tornado.web.Application):
                        (r"/builds", BuildsHandler),
                        (r"/builds/filter", BuildFilterHandler),
                        (r"/builds/queue", BuildQueueHandler),
+                       (r"/builds/comments", BuildsCommentsHandler),
+                       (r"/builds/comments/(\w+)", BuildsCommentsHandler),
                        (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", BuildDetailHandler),
                        (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/bugs", BuildBugsHandler),
                        (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/manage", BuildManageHandler),
index f113c08704a089d6870a6a555e268ea2d761372c..266874cd30ee34636b0439036cc3594ccb03d913 100644 (file)
@@ -126,6 +126,37 @@ class BuildBugsHandler(BaseHandler):
                self.redirect("/build/%s/bugs" % build.uuid)
 
 
+class BuildsCommentsHandler(BaseHandler):
+       def get(self, user_name=None):
+               user = None
+               if user_name:
+                       user = self.pakfire.users.get_by_name(user_name)
+
+               limit  = self.get_argument("limit", 10)
+               offset = self.get_argument("offset", 0)
+
+               try:
+                       limit  = int(limit)
+                       offset = int(offset)
+               except:
+                       raise tornado.web.HTTPError(400)
+
+               # Try to get one more comment than requested and check if there
+               # is a next page that it to be shown.
+               comments = self.pakfire.builds.get_comments(limit=limit + 1,
+                       offset=offset, user=user)
+
+               # Set markers for next and prev pages.
+               have_next = len(comments) > limit
+               have_prev = offset > limit
+
+               # Remove the extra element from the list.
+               comments = comments[:limit]
+
+               self.render("builds/comments.html", comments=comments, limit=limit,
+                       offset=offset + limit, user=user, have_prev=have_prev, have_next=have_next)
+
+
 class BuildStateHandler(BaseHandler):
        def get(self, uuid):
                build = self.pakfire.builds.get_by_uuid(uuid)
index ced715a966c150d4d69236d3fd3dc24010545ca6..06bd49e2f04c9b4cb48c761e9c3ffe1113a1c127 100644 (file)
@@ -17,10 +17,7 @@ class UserHandler(BaseHandler):
                        if not user:
                                raise tornado.web.HTTPError(404, "User does not exist: %s" % name)
 
-               log = user.get_history(limit=10)
-               comments = user.get_comments(limit=5)
-
-               self.render("user-profile.html", user=user, log=log, comments=comments)
+               self.render("user-profile.html", user=user)
 
 
 class UserImpersonateHandler(BaseHandler):
@@ -218,14 +215,6 @@ class UsersHandler(BaseHandler):
                self.render("user-list.html", users=users)
 
 
-class UsersCommentsHandler(BaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               comments = self.pakfire.packages.get_comments(limit=20)
-
-               self.render("user-comments.html", comments=comments)
-
-
 class UsersBuildsHandler(BaseHandler):
        def get(self, name=None):
                if name is None:
index 8285abedeabf0ee7aa964bb8a50ab20d1520251d..51dc858e4ab3e199dc0efa681c18f1c2b27a436f 100644 (file)
@@ -407,13 +407,14 @@ class LogEntryModule(UIModule):
                else:
                        template = "modules/log-entry.html"
 
-               return self.render_string(template, entry=entry, u=entry.user, **args)
+               return self.render_string(template, entry=entry, u=entry.user,
+                       show_build=False, **args)
 
 
 class LogEntryCommentModule(LogEntryModule):
-       def render(self, entry, **args):
+       def render(self, entry, show_build=False, **args):
                return self.render_string("modules/log-entry-comment.html",
-                       entry=entry, u=entry.user, **args)
+                       entry=entry, u=entry.user, show_build=show_build, **args)
 
 
 class MaintainerModule(UIModule):