Skip to content

Commit

Permalink
* Allow users to sort alphabetically and by organization on the users…
Browse files Browse the repository at this point in the history
… page.
  • Loading branch information
bgroff committed Jul 10, 2018
1 parent 1258b28 commit a92890b
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 11 deletions.
13 changes: 11 additions & 2 deletions django_kala/auth/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,13 @@ def get_users(self):
if self.is_superuser:
return User.objects.all()
else:
organizations = self.get_organizations().values_list('pk')
return User.objects.filter(organizations__in=organizations)
organization_uuids = self.get_organizations().values_list('uuid')

return User.objects.filter(pk__in=Permissions.perms_for_objects([
'change_organization',
'add_organization',
'delete_organization'
], organization_uuids).distinct('user').values_list('user__pk', flat=True))

def send_invite(self, app, template, subject, object):
template_txt = '{0}/{1}.txt'.format(app, template)
Expand Down Expand Up @@ -218,3 +223,7 @@ def has_perms(cls, perms, user, uuid):
@classmethod
def add_perm(cls, perm, user, uuid):
cls.objects.create(user=user, permission=perm, object_uuid=uuid)

@classmethod
def perms_for_objects(cls, perms, uuids):
return cls.objects.filter(permission__codename__in=perms, object_uuid__in=uuids)
29 changes: 22 additions & 7 deletions django_kala/auth/templates/users.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@
<input type="hidden" value="watching">
<i class="checklist icon"></i> {% trans 'Filter' %}
<i class="dropdown icon"></i>
<div class="menu">
<div class="menu" id="organization-menu">
{% for organization in organizations %}
<div class="item" data-value="not-watching">
<h4>{{ organization }}</h4>
<div class="item" >
<h4 data-value="{{ organization }}">{{ organization }}</h4>
</div>
{% endfor %}
</div>
Expand All @@ -46,12 +46,12 @@ <h4>{{ organization }}</h4>
<input type="hidden" value="watching">
<i class="checklist icon"></i> {% trans 'Sort' %}
<i class="dropdown icon"></i>
<div class="menu">
<div class="menu" id="sort-menu">
<div class="item" data-value="not-watching">
<h4>{% trans 'Alphabetically' %}</h4>
<h4 data-value="alphabetically">{% trans 'Alphabetically' %}</h4>
</div>
<div class="item" data-value="watching">
<h4>{% trans 'Organization' %}</h4>
<div class="item">
<h4 data-value="organization">{% trans 'Organization' %}</h4>
</div>
</div>
</div>
Expand Down Expand Up @@ -103,5 +103,20 @@ <h4>{% trans 'Organization' %}</h4>
direction: 'upward'
})
;
var queryParameters = {}, queryString = location.search.substring(1),
re = /([^&=]+)=([^&]*)/g, m;

// Creates a map with the query string parameters
while (m = re.exec(queryString)) {
queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
$('#organization-menu h4').click(function (item) {
queryParameters['organization'] = item.toElement.dataset['value'];
location.search = $.param(queryParameters);
});
$('#sort-menu h4').click(function (item) {
queryParameters['sort'] = item.toElement.dataset['value'];
location.search = $.param(queryParameters);
});
</script>
{% endblock scripts %}
28 changes: 26 additions & 2 deletions django_kala/auth/views/users.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,36 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView

from organizations.models import Organization


class UsersView(LoginRequiredMixin, TemplateView):
template_name = 'users.html'

def get_context_data(self, **kwargs):
users = self.request.user.get_users().prefetch_related('organizations')
organizations = self.request.user.get_organizations()

sort_order = self.request.GET.get('sort', None)
if sort_order:
if sort_order == 'Alphabetically':
users = users.order_by('name')
else:
users = users.order_by('organizations__name')

organization = self.request.GET.get('organization', None)
if organization:
try:
organization = Organization.objects.get(name=organization)
organization_users = organization.get_people(self.request.user)
if organization_users:
users = users.filter(pk__in=organization_users.values_list('pk'))
else:
users = []
except Exception as e:
raise Exception("Could not find organization" + str(e))

return {
'users': self.request.user.get_users().prefetch_related('organizations'),
'organizations': self.request.user.get_organizations()
'users': users,
'organizations': organizations
}
1 change: 1 addition & 0 deletions django_kala/organizations/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ def get_people(self, user):
'delete_organization'
], user, self.uuid):
return User.objects.all()
# TODO: This is a little to restrictive, but I think it needs some thinking about what should happen.
else:
return None

Expand Down

0 comments on commit a92890b

Please sign in to comment.