Mercurial > public > src > rhodecode
diff rhodecode/controllers/admin/repos.py @ 1154:3fe3285868d1 beta
implemented public journal for anonymous users, admin can control which repositories
are visible in such journal in admin panel
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 25 Feb 2011 18:47:09 +0100 |
parents | c2440badab84 |
children | 5cbaeda8ec6f |
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos.py Fri Feb 25 01:36:17 2011 +0100 +++ b/rhodecode/controllers/admin/repos.py Fri Feb 25 18:47:09 2011 +0100 @@ -41,7 +41,8 @@ HasPermissionAnyDecorator from rhodecode.lib.base import BaseController, render from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug -from rhodecode.model.db import User +from rhodecode.lib.helpers import get_token +from rhodecode.model.db import User, Repository, UserFollowing from rhodecode.model.forms import RepoForm from rhodecode.model.scm import ScmModel from rhodecode.model.repo import RepoModel @@ -50,7 +51,8 @@ log = logging.getLogger(__name__) class ReposController(BaseController): - """REST Controller styled on the Atom Publishing Protocol""" + """ + REST Controller styled on the Atom Publishing Protocol""" # To properly map this controller, ensure your config/routing.py # file has a resource setup: # map.resource('repo', 'repos') @@ -72,7 +74,8 @@ @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') def create(self): - """POST /repos: Create a new item""" + """ + POST /repos: Create a new item""" # url('repos') repo_model = RepoModel() _form = RepoForm()() @@ -124,7 +127,8 @@ @HasPermissionAllDecorator('hg.admin') def update(self, repo_name): - """PUT /repos/repo_name: Update an existing item""" + """ + PUT /repos/repo_name: Update an existing item""" # Forms posted to this method should contain a hidden field: # <input type="hidden" name="_method" value="PUT" /> # Or using helpers: @@ -156,6 +160,11 @@ repo, dbrepo = ScmModel().get(repo_name, retval='repo') c.repo_last_rev = repo.count() if repo.revisions else 0 + c.default_user_id = User.by_username('default').user_id + c.in_public_journal = self.sa.query(UserFollowing)\ + .filter(UserFollowing.user_id == c.default_user_id)\ + .filter(UserFollowing.follows_repository == c.repo_info).scalar() + if last_rev == 0: c.stats_percentage = 0 else: @@ -182,7 +191,8 @@ @HasPermissionAllDecorator('hg.admin') def delete(self, repo_name): - """DELETE /repos/repo_name: Delete an existing item""" + """ + DELETE /repos/repo_name: Delete an existing item""" # Forms posted to this method should contain a hidden field: # <input type="hidden" name="_method" value="DELETE" /> # Or using helpers: @@ -216,7 +226,8 @@ @HasPermissionAllDecorator('hg.admin') def delete_perm_user(self, repo_name): - """DELETE an existing repository permission user + """ + DELETE an existing repository permission user :param repo_name: """ @@ -231,7 +242,8 @@ @HasPermissionAllDecorator('hg.admin') def delete_perm_users_group(self, repo_name): - """DELETE an existing repository permission users group + """ + DELETE an existing repository permission users group :param repo_name: """ @@ -246,7 +258,8 @@ @HasPermissionAllDecorator('hg.admin') def repo_stats(self, repo_name): - """DELETE an existing repository statistics + """ + DELETE an existing repository statistics :param repo_name: """ @@ -261,7 +274,8 @@ @HasPermissionAllDecorator('hg.admin') def repo_cache(self, repo_name): - """INVALIDATE existing repository cache + """ + INVALIDATE existing repository cache :param repo_name: """ @@ -274,6 +288,35 @@ return redirect(url('edit_repo', repo_name=repo_name)) @HasPermissionAllDecorator('hg.admin') + def repo_public_journal(self, repo_name): + """ + Set's this repository to be visible in public journal, + in other words assing default user to follow this repo + + :param repo_name: + """ + + cur_token = request.POST.get('auth_token') + token = get_token() + if cur_token == token: + try: + repo_id = Repository.by_repo_name(repo_name).repo_id + user_id = User.by_username('default').user_id + self.scm_model.toggle_following_repo(repo_id, user_id) + h.flash(_('Updated repository visibility in public journal'), + category='success') + except: + h.flash(_('An error occurred during setting this' + ' repository in public journal'), + category='error') + + else: + h.flash(_('Token mismatch'), category='error') + return redirect(url('edit_repo', repo_name=repo_name)) + + + + @HasPermissionAllDecorator('hg.admin') def show(self, repo_name, format='html'): """GET /repos/repo_name: Show a specific item""" # url('repo', repo_name=ID) @@ -296,6 +339,11 @@ return redirect(url('repos')) + c.default_user_id = User.by_username('default').user_id + c.in_public_journal = self.sa.query(UserFollowing)\ + .filter(UserFollowing.user_id == c.default_user_id)\ + .filter(UserFollowing.follows_repository == c.repo_info).scalar() + if c.repo_info.stats: last_rev = c.repo_info.stats.stat_on_revision else: