Changeset - 7f9d23f6a526
[Not reviewed]
beta
0 3 0
Marcin Kuzminski - 15 years ago 2011-02-04 13:40:38
marcin@python-works.com
Added grouping by days in journal
3 files changed with 47 insertions and 25 deletions:
0 comments (0 inline, 0 general)
rhodecode/controllers/journal.py
Show inline comments
 
@@ -33,6 +33,7 @@ from pylons import request, response, se
 
from rhodecode.lib.auth import LoginRequired, NotAnonymous
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.lib.helpers import get_token
 
from rhodecode.lib.utils import OrderedDict
 
from rhodecode.model.db import UserLog, UserFollowing
 
from rhodecode.model.scm import ScmModel
 

	
 
@@ -59,16 +60,29 @@ class JournalController(BaseController):
 
        user_ids = [x.follows_user.user_id for x in c.following
 
                    if x.follows_user is not None]
 

	
 
        c.journal = self.sa.query(UserLog)\
 
        journal = self.sa.query(UserLog)\
 
            .filter(or_(
 
                        UserLog.repository_id.in_(repo_ids),
 
                        UserLog.user_id.in_(user_ids),
 
                        ))\
 
            .order_by(UserLog.action_date.desc())\
 
            .limit(20)\
 
            .limit(30)\
 
            .all()
 

	
 
        c.journal_day_aggreagate = self._get_daily_aggregate(journal)
 

	
 
        return render('/journal.html')
 

	
 

	
 
    def _get_daily_aggregate(self, journal):
 
        from itertools import groupby
 
        groups = []
 
        for k, g in groupby(journal, lambda x:x.action_as_day):
 
            groups.append((k, list(g),))      # Store group iterator as a list
 

	
 
        return groups
 

	
 

	
 
    def toggle_following(self):
 
        cur_token = request.POST.get('auth_token')
 
        token = get_token()
rhodecode/model/db.py
Show inline comments
 
@@ -26,6 +26,7 @@
 
# MA  02110-1301, USA.
 
import logging
 
import datetime
 
from datetime import date
 

	
 
from sqlalchemy import *
 
from sqlalchemy.exc import DatabaseError
 
@@ -150,6 +151,10 @@ class UserLog(Base, BaseModel):
 
    action = Column("action", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
    action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
 

	
 
    @property
 
    def action_as_day(self):
 
        return date(*self.action_date.timetuple()[:3])
 

	
 
    user = relationship('User')
 
    repository = relationship('Repository')
 

	
rhodecode/templates/journal.html
Show inline comments
 
@@ -17,29 +17,32 @@
 
	        <h5>${_('Journal')}</h5>
 
	    </div>
 
	    <div>
 
	    %if c.journal:
 
            %for entry in c.journal:
 
            <div style="padding:10px">
 
                <div class="gravatar">
 
                    <img alt="gravatar" src="${h.gravatar_url(entry.user.email)}"/>
 
                </div>
 
                <div>${entry.user.name} ${entry.user.lastname}</div>
 
                <div style="padding-left: 45px;padding-top:5px;min-height:20px">${h.action_parser(entry)}</div>
 
                <div style="float: left; padding-top: 8px;padding-left:18px">
 
                ${h.action_parser_icon(entry)}
 
                </div>
 
                <div style="margin-left: 45px;padding-top: 10px">
 
                <span style="font-weight: bold;font-size: 1.1em">
 
		        %if entry.repository:
 
		          ${h.link_to(entry.repository.repo_name,
 
		                      h.url('summary_home',repo_name=entry.repository.repo_name))}
 
		        %else:
 
		          ${entry.repository_name}
 
		        %endif             
 
                </span> - <span title="${entry.action_date}">${h.age(entry.action_date)}</span>
 
                </div>
 
            </div>
 
            <div style="clear:both;border-bottom:1px dashed #DDD;padding:3px 3px;margin:0px 10px 0px 10px"></div>
 
	    %if c.journal_day_aggreagate:
 
            %for day,items in c.journal_day_aggreagate:
 
            <div style="font-size:20px;padding:10px 5px">${day}</div>
 
	            % for entry in items:
 
	            <div style="padding:10px">
 
	                <div class="gravatar">
 
	                    <img alt="gravatar" src="${h.gravatar_url(entry.user.email)}"/>
 
	                </div>
 
	                <div>${entry.user.name} ${entry.user.lastname}</div>
 
	                <div style="padding-left: 45px;padding-top:5px;min-height:20px">${h.action_parser(entry)}</div>
 
	                <div style="float: left; padding-top: 8px;padding-left:18px">
 
	                ${h.action_parser_icon(entry)}
 
	                </div>
 
	                <div style="margin-left: 45px;padding-top: 10px">
 
	                <span style="font-weight: bold;font-size: 1.1em">
 
			        %if entry.repository:
 
			          ${h.link_to(entry.repository.repo_name,
 
			                      h.url('summary_home',repo_name=entry.repository.repo_name))}
 
			        %else:
 
			          ${entry.repository_name}
 
			        %endif             
 
	                </span> - <span title="${entry.action_date}">${h.age(entry.action_date)}</span>
 
	                </div>
 
	            </div>
 
	            <div style="clear:both;border-bottom:1px dashed #DDD;padding:3px 3px;margin:0px 10px 0px 10px"></div>
 
	            %endfor
 
            %endfor
 
        %else:
 
            ${_('No entries yet')}
0 comments (0 inline, 0 general)