Revision 098f333b

b/snf-astakos-app/astakos/im/forms.py
821 821

  
822 822

  
823 823
class AstakosGroupSortForm(forms.Form):
824
    sort_by = forms.ChoiceField(label='Sort by',
825
                                choices=(('groupname', 'Name'),
826
                                         ('kindname', 'Type'),
827
                                         ('issue_date', 'Issue Date'),
828
                                         ('expiration_date',
829
                                          'Expiration Date'),
830
                                         ('approved_members_num',
831
                                          'Participants'),
832
                                         ('is_enabled', 'Status'),
833
                                         ('moderation_enabled', 'Moderation'),
834
                                         ('membership_status',
835
                                          'Enrollment Status')
836
                                         ),
837
                                required=False)
838

  
824
    sorting = forms.ChoiceField(
825
        label='Sort by',
826
        choices=(
827
            ('groupname', 'Name'),
828
            ('issue_date', 'Issue Date'),
829
            ('expiration_date', 'Expiration Date'),
830
            ('approved_members_num', 'Participants'),
831
            ('moderation_enabled', 'Moderation'),
832
            ('membership_status', 'Enrollment Status')
833
        ),
834
        required=True
835
    )
839 836

  
840 837
class MembersSortForm(forms.Form):
841 838
    sort_by = forms.ChoiceField(label='Sort by',
......
845 842
                                         ),
846 843
                                required=False)
847 844

  
848

  
849 845
class PickResourceForm(forms.Form):
850 846
    resource = forms.ModelChoiceField(
851 847
        queryset=Resource.objects.select_related().all()
b/snf-astakos-app/astakos/im/templates/im/astakosgroup_list.html
61 61
        	<form method="GET" class="minimal" action="#searchResults"> 
62 62
				<div class="form-row">
63 63
					<select name="sorting" onchange="this.form.submit();" class="dropkicked" tabindex="1">
64
					    <option value="">Sort by Name</option>	
64
					    <option value="groupname">Sort by Name</option>
65 65
			            <option value="issue_date" {% if sorting == 'issue_date' %}selected{% endif %}>Sort by Issue date</option>			
66 66
			            <option value="expiration_date" {% if sorting == 'expiration_date' %}selected{% endif %}>Sort by Expiration Date</option>
67 67
			            <option value="approved_members_num" {% if sorting == 'approved_members_num' %}selected{% endif %}>Sort by Participants</option> 
......
217 217
					<form method="GET" class="minimal" action="#allGroups" id="mygroups">
218 218
						<div class="form-row">
219 219
						    <select name="sorting"  class="dropkicked"  tabindex="1">
220
							    <option value="">Sort by Name</option>
220
							    <option value="groupname">Sort by Name</option>
221 221
					            <!--<option value="kindname" {% if sorting == 'kindname' %}selected{% endif %}>Type</option>-->			
222 222
					            <option value="issue_date" {% if sorting == 'issue_date' %}selected{% endif %}>Sort by Issue date</option>			
223 223
					            <option value="expiration_date" {% if sorting == 'expiration_date' %}selected{% endif %}>Sort by Expiration Date</option>
b/snf-astakos-app/astakos/im/views.py
72 72
                              EmailChangeForm,
73 73
                              AstakosGroupCreationForm, AstakosGroupSearchForm,
74 74
                              AstakosGroupUpdateForm, AddGroupMembersForm,
75
                              MembersSortForm,
75
                              MembersSortForm, AstakosGroupSortForm,
76 76
                              TimelineForm, PickResourceForm,
77 77
                              AstakosGroupCreationSummaryForm)
78 78
from astakos.im.functions import (send_feedback, SendMailError,
......
93 93

  
94 94
logger = logging.getLogger(__name__)
95 95

  
96
DB_REPLACE_GROUP_SCHEME = """REPLACE(REPLACE("auth_group".name, 'http://', ''),
97
                                     'https://', '')"""
98

  
99 96
callpoint = AstakosCallpoint()
100 97

  
101 98
def render_response(template, tab=None, status=200, context_instance=None, **kwargs):
......
912 909
@login_required
913 910
def group_list(request):
914 911
    none = request.user.astakos_groups.none()
915
    sorting = request.GET.get('sorting')
916 912
    query = """
917 913
        SELECT auth_group.id,
918
        %s AS groupname,
914
        auth_group.name AS groupname,
919 915
        im_groupkind.name AS kindname,
920 916
        im_astakosgroup.*,
921 917
        owner.email AS groupowner,
......
925 921
        (SELECT CASE WHEN(
926 922
                    SELECT date_joined FROM im_membership
927 923
                    WHERE group_id = im_astakosgroup.group_ptr_id
928
                    AND person_id = %s) IS NULL
924
                    AND person_id = %(userid)s) IS NULL
929 925
                    THEN 0 ELSE 1 END) AS membership_status
930 926
        FROM im_astakosgroup
931 927
        INNER JOIN im_membership ON (
......
936 932
            im_astakosuser_owner.astakosgroup_id = im_astakosgroup.group_ptr_id)
937 933
        LEFT JOIN auth_user as owner ON (
938 934
            im_astakosuser_owner.astakosuser_id = owner.id)
939
        WHERE im_membership.person_id = %s
940
        """ % (DB_REPLACE_GROUP_SCHEME, request.user.id, request.user.id)
941

  
942
    if sorting:
943
        query = query+" ORDER BY %s ASC" %sorting
944
    else:
945
        query = query+" ORDER BY groupname ASC"
946
    q = AstakosGroup.objects.raw(query)
947

  
948

  
935
        WHERE im_membership.person_id = %(userid)s
936
        """
937
    params = {'userid':request.user.id}
949 938

  
939
    # validate sorting
940
    sorting = 'groupname'
941
    sort_form = AstakosGroupSortForm(request.GET)
942
    if sort_form.is_valid():
943
        sorting = sort_form.cleaned_data.get('sorting')
944
    query = query+" ORDER BY %s ASC" %sorting
945
    
946
    q = AstakosGroup.objects.raw(query, params=params)
947
    
950 948
    # Create the template, context, response
951 949
    template_name = "%s/%s_list.html" % (
952 950
        q.model._meta.app_label,
......
955 953
    extra_context = dict(
956 954
        is_search=False,
957 955
        q=q,
958
        sorting=request.GET.get('sorting'),
956
        sorting=sorting,
959 957
        page=request.GET.get('page', 1)
960 958
    )
961 959
    return render_response(template_name,
......
1065 1063
@login_required
1066 1064
def group_search(request, extra_context=None, **kwargs):
1067 1065
    q = request.GET.get('q')
1068
    sorting = request.GET.get('sorting')
1069 1066
    if request.method == 'GET':
1070 1067
        form = AstakosGroupSearchForm({'q': q} if q else None)
1071 1068
    else:
1072 1069
        form = AstakosGroupSearchForm(get_query(request))
1073 1070
        if form.is_valid():
1074 1071
            q = form.cleaned_data['q'].strip()
1072
    
1073
    sorting = 'groupname'
1075 1074
    if q:
1076 1075
        queryset = AstakosGroup.objects.select_related()
1077 1076
        queryset = queryset.filter(name__contains=q)
1078 1077
        queryset = queryset.filter(approval_date__isnull=False)
1079 1078
        queryset = queryset.extra(select={
1080
                                  'groupname': DB_REPLACE_GROUP_SCHEME,
1079
                                  'groupname': "auth_group.name",
1081 1080
                                  'kindname': "im_groupkind.name",
1082 1081
                                  'approved_members_num': """
1083 1082
                    SELECT COUNT(*) FROM im_membership
......
1105 1104
                        AND astakosuser_id = %s)
1106 1105
                        THEN 1 ELSE 0 END""" % request.user.id,
1107 1106
                    })
1108
        if sorting:
1109
            # TODO check sorting value
1110
            queryset = queryset.order_by(sorting)
1111
        else:
1112
            queryset = queryset.order_by("groupname")
1107
        
1108
        # validate sorting
1109
        sort_form = AstakosGroupSortForm(request.GET)
1110
        if sort_form.is_valid():
1111
            sorting = sort_form.cleaned_data.get('sorting')
1112
        queryset = queryset.order_by(sorting)
1113 1113

  
1114 1114
    else:
1115 1115
        queryset = AstakosGroup.objects.none()
......
1132 1132
    q = AstakosGroup.objects.select_related()
1133 1133
    q = q.filter(approval_date__isnull=False)
1134 1134
    q = q.extra(select={
1135
                'groupname': DB_REPLACE_GROUP_SCHEME,
1135
                'groupname': "auth_group.name",
1136 1136
                'kindname': "im_groupkind.name",
1137 1137
                'approved_members_num': """
1138 1138
                    SELECT COUNT(*) FROM im_membership
......
1153 1153
                        WHERE astakosgroup_id = im_astakosgroup.group_ptr_id
1154 1154
                        AND astakosuser_id = %s)
1155 1155
                        THEN 1 ELSE 0 END""" % request.user.id,   })
1156
    sorting = request.GET.get('sorting')
1157
    if sorting:
1158
        # TODO check sorting value
1159
        q = q.order_by(sorting)
1160
    else:
1161
        q = q.order_by("groupname")
1162

  
1156
    
1157
    # validate sorting
1158
    sorting = 'groupname'
1159
    print '>>>', sorting, request.GET
1160
    sort_form = AstakosGroupSortForm(request.GET)
1161
    if sort_form.is_valid():
1162
        sorting = sort_form.cleaned_data.get('sorting')
1163
    print '<<<', sorting
1164
    q = q.order_by(sorting)
1165
    
1163 1166
    return object_list(
1164 1167
        request,
1165 1168
        q,

Also available in: Unified diff