Skip to content

Commit

Permalink
[#2939] Group.active_packages() fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
tobes committed Oct 2, 2012
1 parent 871c551 commit 7c0f0a7
Showing 1 changed file with 24 additions and 3 deletions.
27 changes: 24 additions & 3 deletions ckan/model/group.py
Expand Up @@ -185,14 +185,35 @@ def get_children_groups(self, type='group'):
return [{"id":idf, "name": name, "title": title}
for idf, name, title in results]

def active_packages(self, load_eager=True, with_private=False):
def active_packages(self, load_eager=True, with_private=False, context=None):
# see if an this is an organization and we have membership or are
# sysadmin
user_is_org_member = False
context = context or {}
user_is_admin = context.get('user_is_admin', False)
user_id = context.get('user_id')
if user_is_admin:
user_is_org_member = True
elif self.is_organization and user_id:
query = meta.Session.query(Member) \
.filter(Member.state == 'active') \
.filter(Member.table_name == 'user') \
.filter(Member.group_id == self.id) \
.filter(Member.table_id == user_id)
user_is_org_member = len(query.all()) != 0


query = meta.Session.query(_package.Package).\
filter_by(state=vdm.sqlalchemy.State.ACTIVE).\
filter(group_table.c.id == self.id).\
filter(member_table.c.state == 'active')

if not with_private:
query = query.filter(member_table.c.capacity == 'public')
# orgs do not show private datasets unless the user is a member
if self.is_organization and not user_is_org_member:
query = query.filter(_package.Package.private == False)
# groups (not orgs) never show private datasets
if not self.is_organization:
query = query.filter(_package.Package.private == False)

query = query.join(member_table, member_table.c.table_id ==
_package.Package.id).\
Expand Down

0 comments on commit 7c0f0a7

Please sign in to comment.