Revision 098f333b snf-astakos-app/astakos/im/views.py

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