Revision 04febd09 snf-astakos-app/astakos/im/views.py
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
47 | 47 |
from django.db.models import Q |
48 | 48 |
from django.db.utils import IntegrityError |
49 | 49 |
from django.forms.fields import URLField |
50 |
from django.db.models.fields import DateTimeField |
|
50 | 51 |
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, \ |
51 | 52 |
HttpResponseRedirect, HttpResponseBadRequest, Http404 |
52 | 53 |
from django.shortcuts import redirect |
... | ... | |
731 | 732 |
(SELECT COUNT(*) FROM im_membership |
732 | 733 |
WHERE group_id = im_astakosgroup.group_ptr_id |
733 | 734 |
AND date_joined IS NOT NULL) AS approved_members_num, |
734 |
(SELECT date_joined FROM im_membership |
|
735 |
WHERE group_id = im_astakosgroup.group_ptr_id |
|
736 |
AND person_id = %s) AS membership_approval_date |
|
735 |
(SELECT CASE WHEN( |
|
736 |
SELECT date_joined FROM im_membership |
|
737 |
WHERE group_id = im_astakosgroup.group_ptr_id |
|
738 |
AND person_id = %s) IS NULL |
|
739 |
THEN 'Pending' ELSE 'Registered' END) AS membership_status |
|
737 | 740 |
FROM im_astakosgroup |
738 | 741 |
INNER JOIN im_membership ON ( |
739 | 742 |
im_astakosgroup.group_ptr_id = im_membership.group_id) |
... | ... | |
758 | 761 |
if sorting: |
759 | 762 |
sort_form = AstakosGroupSortForm({'sort_by': sorting}) |
760 | 763 |
if sort_form.is_valid(): |
761 |
l.sort(key=lambda i: getattr(i, sorting)) |
|
764 |
sort_field = q._model_fields.get(sorting) |
|
765 |
default = datetime.utcfromtimestamp(0) if isinstance(sort_field, DateTimeField) else '' |
|
766 |
l.sort(key=lambda i: getattr(i, sorting) if getattr(i, sorting) else default ) |
|
762 | 767 |
globals()['%s_sorting' % k] = sorting |
763 | 768 |
paginator = Paginator(l, PAGINATE_BY) |
764 | 769 |
|
... | ... | |
791 | 796 |
except AstakosGroup.DoesNotExist: |
792 | 797 |
return HttpResponseBadRequest(_('Invalid group.')) |
793 | 798 |
form = AstakosGroupUpdateForm(instance=group) |
794 |
search_form = AddGroupMembersForm() |
|
799 |
add_members_form = AddGroupMembersForm() |
|
800 |
|
|
801 |
# build members |
|
802 |
page = request.GET.get('page', 1) |
|
803 |
sorting = request.GET.get('sorting') |
|
804 |
if sorting: |
|
805 |
group.members.sort(key=lambda i: getattr(i, sorting)) |
|
806 |
paginator = Paginator(group.members, PAGINATE_BY) |
|
807 |
|
|
808 |
try: |
|
809 |
page_number = int(page) |
|
810 |
except ValueError: |
|
811 |
if page == 'last': |
|
812 |
page_number = paginator.num_pages |
|
813 |
else: |
|
814 |
# Page is not 'last', nor can it be converted to an int. |
|
815 |
raise Http404 |
|
816 |
try: |
|
817 |
members_page = globals()['page'] = paginator.page(page_number) |
|
818 |
except InvalidPage: |
|
819 |
raise Http404 |
|
795 | 820 |
return object_detail(request, |
796 | 821 |
AstakosGroup.objects.all(), |
797 | 822 |
object_id=group_id, |
798 | 823 |
extra_context={'quota': group.quota, |
799 | 824 |
'form': form, |
800 |
'search_form': search_form} |
|
825 |
'search_form': add_members_form, |
|
826 |
'members': members_page, |
|
827 |
'sorting': sorting} |
|
801 | 828 |
) |
802 | 829 |
|
803 | 830 |
|
... | ... | |
825 | 852 |
@login_required |
826 | 853 |
def group_search(request, extra_context=None, **kwargs): |
827 | 854 |
q = request.GET.get('q') |
855 |
sorting = request.GET.get('sorting') |
|
828 | 856 |
if request.method == 'GET': |
829 | 857 |
form = AstakosGroupSearchForm({'q': q} if q else None) |
830 | 858 |
else: |
... | ... | |
852 | 880 |
WHERE group_id = im_astakosgroup.group_ptr_id |
853 | 881 |
AND person_id = %s) |
854 | 882 |
THEN 1 ELSE 0 END""" % request.user.id}) |
883 |
if sorting: |
|
884 |
# TODO check sorting value |
|
885 |
queryset = queryset.order_by(sorting) |
|
855 | 886 |
else: |
856 | 887 |
queryset = AstakosGroup.objects.none() |
857 | 888 |
return object_list( |
... | ... | |
862 | 893 |
template_name='im/astakosgroup_list.html', |
863 | 894 |
extra_context=dict(form=form, |
864 | 895 |
is_search=True, |
865 |
q=q)) |
|
896 |
q=q, |
|
897 |
sorting=sorting)) |
|
866 | 898 |
|
867 | 899 |
@signed_terms_required |
868 | 900 |
@login_required |
... | ... | |
886 | 918 |
WHERE group_id = im_astakosgroup.group_ptr_id |
887 | 919 |
AND person_id = %s) |
888 | 920 |
THEN 1 ELSE 0 END""" % request.user.id}) |
921 |
sorting = request.GET.get('sorting') |
|
922 |
if sorting: |
|
923 |
# TODO check sorting value |
|
924 |
q = q.order_by(sorting) |
|
889 | 925 |
return object_list( |
890 | 926 |
request, |
891 | 927 |
q, |
... | ... | |
893 | 929 |
page=request.GET.get('page') or 1, |
894 | 930 |
template_name='im/astakosgroup_list.html', |
895 | 931 |
extra_context=dict(form=AstakosGroupSearchForm(), |
896 |
is_search=True)) |
|
932 |
is_search=True, |
|
933 |
sorting=sorting)) |
|
897 | 934 |
|
898 | 935 |
|
899 | 936 |
@signed_terms_required |
Also available in: Unified diff