comparison rhodecode/controllers/journal.py @ 2031:82a88013a3fd

merge 1.3 into stable
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 26 Feb 2012 17:25:09 +0200
parents bf263968da47 a76e9bacbedc
children 63e58ef80ef1
comparison
equal deleted inserted replaced
2005:ab0e122b38a7 2031:82a88013a3fd
5 5
6 Journal controller for pylons 6 Journal controller for pylons
7 7
8 :created_on: Nov 21, 2010 8 :created_on: Nov 21, 2010
9 :author: marcink 9 :author: marcink
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> 10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details. 11 :license: GPLv3, see COPYING for more details.
12 """ 12 """
13 # This program is free software: you can redistribute it and/or modify 13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by 14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or 15 # the Free Software Foundation, either version 3 of the License, or
21 # GNU General Public License for more details. 21 # GNU General Public License for more details.
22 # 22 #
23 # You should have received a copy of the GNU General Public License 23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 import logging 25 import logging
26 from itertools import groupby
26 27
27 from sqlalchemy import or_ 28 from sqlalchemy import or_
28 from sqlalchemy.orm import joinedload, make_transient 29 from sqlalchemy.orm import joinedload
29 from webhelpers.paginate import Page 30 from webhelpers.paginate import Page
30 from itertools import groupby 31 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
31 32
32 from paste.httpexceptions import HTTPBadRequest 33 from paste.httpexceptions import HTTPBadRequest
33 from pylons import request, tmpl_context as c, response, url 34 from pylons import request, tmpl_context as c, response, url
34 from pylons.i18n.translation import _ 35 from pylons.i18n.translation import _
35 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
36 36
37 import rhodecode.lib.helpers as h 37 import rhodecode.lib.helpers as h
38 from rhodecode.lib.auth import LoginRequired, NotAnonymous 38 from rhodecode.lib.auth import LoginRequired, NotAnonymous
39 from rhodecode.lib.base import BaseController, render 39 from rhodecode.lib.base import BaseController, render
40 from rhodecode.model.db import UserLog, UserFollowing 40 from rhodecode.model.db import UserLog, UserFollowing, Repository, User
41 from rhodecode.model.meta import Session
42 from sqlalchemy.sql.expression import func
43 from rhodecode.model.scm import ScmModel
41 44
42 log = logging.getLogger(__name__) 45 log = logging.getLogger(__name__)
43 46
44 47
45 class JournalController(BaseController): 48 class JournalController(BaseController):
55 @LoginRequired() 58 @LoginRequired()
56 @NotAnonymous() 59 @NotAnonymous()
57 def index(self): 60 def index(self):
58 # Return a rendered template 61 # Return a rendered template
59 p = int(request.params.get('page', 1)) 62 p = int(request.params.get('page', 1))
63
64 c.user = User.get(self.rhodecode_user.user_id)
65 all_repos = self.sa.query(Repository)\
66 .filter(Repository.user_id == c.user.user_id)\
67 .order_by(func.lower(Repository.repo_name)).all()
68
69 c.user_repos = ScmModel().get_repos(all_repos)
60 70
61 c.following = self.sa.query(UserFollowing)\ 71 c.following = self.sa.query(UserFollowing)\
62 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ 72 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
63 .options(joinedload(UserFollowing.follows_repository))\ 73 .options(joinedload(UserFollowing.follows_repository))\
64 .all() 74 .all()
122 user_id = request.POST.get('follows_user_id') 132 user_id = request.POST.get('follows_user_id')
123 if user_id: 133 if user_id:
124 try: 134 try:
125 self.scm_model.toggle_following_user(user_id, 135 self.scm_model.toggle_following_user(user_id,
126 self.rhodecode_user.user_id) 136 self.rhodecode_user.user_id)
137 Session.commit()
127 return 'ok' 138 return 'ok'
128 except: 139 except:
129 raise HTTPBadRequest() 140 raise HTTPBadRequest()
130 141
131 repo_id = request.POST.get('follows_repo_id') 142 repo_id = request.POST.get('follows_repo_id')
132 if repo_id: 143 if repo_id:
133 try: 144 try:
134 self.scm_model.toggle_following_repo(repo_id, 145 self.scm_model.toggle_following_repo(repo_id,
135 self.rhodecode_user.user_id) 146 self.rhodecode_user.user_id)
147 Session.commit()
136 return 'ok' 148 return 'ok'
137 except: 149 except:
138 raise HTTPBadRequest() 150 raise HTTPBadRequest()
139 151
140 log.debug('token mismatch %s vs %s', cur_token, token) 152 log.debug('token mismatch %s vs %s' % (cur_token, token))
141 raise HTTPBadRequest() 153 raise HTTPBadRequest()
142 154
143 @LoginRequired() 155 @LoginRequired()
144 def public_journal(self): 156 def public_journal(self):
145 # Return a rendered template 157 # Return a rendered template