示例#1
0
文件: views.py 项目: djkobraz/kobocat
def create_export(request, username, id_string, export_type):
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)
    if not has_permission(xform, owner, request):
        return HttpResponseForbidden(_(u'Not shared.'))

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))

    query = request.POST.get("query")
    force_xlsx = request.POST.get('xls') != 'true'

    # export options
    group_delimiter = request.POST.get("options[group_delimiter]", '/')
    if group_delimiter not in ['.', '/']:
        return HttpResponseBadRequest(
            _("%s is not a valid delimiter" % group_delimiter))

    # default is True, so when dont_.. is yes
    # split_select_multiples becomes False
    split_select_multiples = request.POST.get(
        "options[dont_split_select_multiples]", "no") == "no"

    binary_select_multiples = getattr(settings, 'BINARY_SELECT_MULTIPLES',
                                      False)
    # external export option
    meta = request.POST.get("meta")
    options = {
        'group_delimiter': group_delimiter,
        'split_select_multiples': split_select_multiples,
        'binary_select_multiples': binary_select_multiples,
        'meta': meta.replace(",", "") if meta else None
    }

    try:
        create_async_export(xform, export_type, query, force_xlsx, options)
    except Export.ExportTypeError:
        return HttpResponseBadRequest(
            _("%s is not a valid export type" % export_type))
    else:
        audit = {"xform": xform.id_string, "export_type": export_type}
        audit_log(
            Actions.EXPORT_CREATED, request.user, owner,
            _("Created %(export_type)s export on '%(id_string)s'.") % {
                'export_type': export_type.upper(),
                'id_string': xform.id_string,
            }, audit, request)
        return HttpResponseRedirect(
            reverse(export_list,
                    kwargs={
                        "username": username,
                        "id_string": id_string,
                        "export_type": export_type
                    }))
示例#2
0
def export_list(request, username, id_string, export_type):
    if export_type == Export.GDOC_EXPORT:
        redirect_url = reverse(
            export_list,
            kwargs={
                'username': username, 'id_string': id_string,
                'export_type': export_type})
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)
    if not has_permission(xform, owner, request):
        return HttpResponseForbidden(_(u'Not shared.'))

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'meta': export_meta,
        'token': export_token,
    }

    if should_create_new_export(xform, export_type):
        try:
            create_async_export(
                xform, export_type, query=None, force_xlsx=True,
                options=options)
        except Export.ExportTypeError:
            return HttpResponseBadRequest(
                _("%s is not a valid export type" % export_type))

    metadata = MetaData.objects.filter(xform=xform,
                                       data_type="external_export")\
        .values('id', 'data_value')

    for m in metadata:
        m['data_value'] = m.get('data_value').split('|')[0]

    data = {
        'username': owner.username,
        'xform': xform,
        'export_type': export_type,
        'export_type_name': Export.EXPORT_TYPE_DICT[export_type],
        'exports': Export.objects.filter(
            xform=xform, export_type=export_type).order_by('-created_on'),
        'metas': metadata
    }

    return render(request, 'export_list.html', data)
示例#3
0
def export_list(request, username, id_string, export_type):
    if export_type == Export.GDOC_EXPORT:
        redirect_url = reverse(
            export_list,
            kwargs={
                'username': username, 'id_string': id_string,
                'export_type': export_type})
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)
    if not has_permission(xform, owner, request):
        return HttpResponseForbidden(_(u'Not shared.'))

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'meta': export_meta,
        'token': export_token,
    }

    if should_create_new_export(xform, export_type):
        try:
            create_async_export(
                xform, export_type, query=None, force_xlsx=True,
                options=options)
        except Export.ExportTypeError:
            return HttpResponseBadRequest(
                _("%s is not a valid export type" % export_type))

    metadata = MetaData.objects.filter(xform=xform,
                                       data_type="external_export")\
        .values('id', 'data_value')

    for m in metadata:
        m['data_value'] = m.get('data_value').split('|')[0]

    data = {
        'username': owner.username,
        'xform': xform,
        'export_type': export_type,
        'export_type_name': Export.EXPORT_TYPE_DICT[export_type],
        'exports': Export.objects.filter(
            xform=xform, export_type=export_type).order_by('-created_on'),
        'metas': metadata
    }

    return render(request, 'export_list.html', data)
示例#4
0
def export_list(request, username, id_string, export_type, is_project=0, id=0, site_id=0, version="0"):
    site_id = int(site_id)
    if export_type == Export.GDOC_EXPORT:
        return HttpResponseForbidden(_(u'Not shared.'))
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)

    if export_type == Export.EXTERNAL_EXPORT:
        return HttpResponseForbidden(_(u'Not shared.'))
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'meta': export_meta,
        'token': export_token,
    }

    metadata = MetaData.objects.filter(xform=xform,
                                       data_type="external_export")\
        .values('id', 'data_value')

    for m in metadata:
        m['data_value'] = m.get('data_value').split('|')[0]

    data = {
        'username': xform.user.username,
        'xform': xform,
        'export_type': export_type,
        'export_type_name': Export.EXPORT_TYPE_DICT[export_type],
        'exports': Export.objects.filter(
            xform=xform, export_type=export_type, fsxf=id, site=site_id, version=version).order_by('-created_on'),
        'metas': metadata,
        'is_project': is_project,
        'id': id,
        'version': version,
            }
    data['site_id'] = site_id

    return render(request, 'export_list.html', data)
示例#5
0
def create_export(request,
                  username,
                  id_string,
                  export_type,
                  is_project=None,
                  id=None,
                  site_id=0,
                  version="0",
                  sync_to_gsuit="0"):
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)
    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))

    if is_project == 1 or is_project == '1':
        query = {"fs_project_uuid": str(id)}
    else:
        fsxf = FieldSightXF.objects.get(pk=id)
        if fsxf.site:
            query = {"fs_uuid": str(id)}
        else:
            query = {"fs_project_uuid": str(id), "fs_site": site_id}
    force_xlsx = True
    if version not in ["0", 0]:
        query["__version__"] = version
    deleted_at_query = {
        "$or": [{
            "_deleted_at": {
                "$exists": False
            }
        }, {
            "_deleted_at": None
        }]
    }
    # join existing query with deleted_at_query on an $and
    query = {"$and": [query, deleted_at_query]}
    print("query at excel generation", query)

    # export options
    group_delimiter = request.POST.get("options[group_delimiter]", '/')
    if group_delimiter not in ['.', '/']:
        return HttpResponseBadRequest(
            _("%s is not a valid delimiter" % group_delimiter))

    # default is True, so when dont_.. is yes
    # split_select_multiples becomes False
    split_select_multiples = request.POST.get(
        "options[dont_split_select_multiples]", "no") == "no"

    binary_select_multiples = getattr(settings, 'BINARY_SELECT_MULTIPLES',
                                      False)
    # external export option
    meta = request.POST.get("meta")
    options = {
        'group_delimiter': group_delimiter,
        'split_select_multiples': split_select_multiples,
        'binary_select_multiples': binary_select_multiples,
        'meta': meta.replace(",", "") if meta else None
    }

    try:
        sync_to_gsuit = True if sync_to_gsuit in ["1", 1] else False
        create_async_export(xform, export_type, query, force_xlsx, options,
                            is_project, id, site_id, version, sync_to_gsuit)
    except Export.ExportTypeError:
        return HttpResponseBadRequest(
            _("%s is not a valid export type" % export_type))
    else:
        audit = {"xform": xform.id_string, "export_type": export_type}
        audit_log(
            Actions.EXPORT_CREATED, request.user, owner,
            _("Created %(export_type)s export on '%(id_string)s'.") % {
                'export_type': export_type.upper(),
                'id_string': xform.id_string,
            }, audit, request)
        kwargs = {
            "username": username,
            "id_string": id_string,
            "export_type": export_type,
            "is_project": is_project,
            "id": id,
            "version": version
        }

        kwargs['site_id'] = site_id
        return HttpResponseRedirect(reverse(export_list, kwargs=kwargs))
示例#6
0
def create_export(request, username, id_string, export_type):
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)
    if not has_permission(xform, owner, request):
        return HttpResponseForbidden(_(u'Not shared.'))

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))

    query = request.POST.get("query")
    force_xlsx = request.POST.get('xls') != 'true'

    # export options
    group_delimiter = request.POST.get("options[group_delimiter]", '/')
    if group_delimiter not in ['.', '/']:
        return HttpResponseBadRequest(
            _("%s is not a valid delimiter" % group_delimiter))

    # default is True, so when dont_.. is yes
    # split_select_multiples becomes False
    split_select_multiples = request.POST.get(
        "options[dont_split_select_multiples]", "no") == "no"

    binary_select_multiples = getattr(settings, 'BINARY_SELECT_MULTIPLES',
                                      False)
    # external export option
    meta = request.POST.get("meta")
    options = {
        'group_delimiter': group_delimiter,
        'split_select_multiples': split_select_multiples,
        'binary_select_multiples': binary_select_multiples,
        'meta': meta.replace(",", "") if meta else None
    }

    try:
        create_async_export(xform, export_type, query, force_xlsx, options)
    except Export.ExportTypeError:
        return HttpResponseBadRequest(
            _("%s is not a valid export type" % export_type))
    else:
        audit = {
            "xform": xform.id_string,
            "export_type": export_type
        }
        audit_log(
            Actions.EXPORT_CREATED, request.user, owner,
            _("Created %(export_type)s export on '%(id_string)s'.") %
            {
                'export_type': export_type.upper(),
                'id_string': xform.id_string,
            }, audit, request)
        return HttpResponseRedirect(reverse(
            export_list,
            kwargs={
                "username": username,
                "id_string": id_string,
                "export_type": export_type
            })
        )
示例#7
0
def export_list(request, username, id_string, export_type):
    credential = None

    if export_type not in Export.EXPORT_TYPE_DICT:
        return HttpResponseBadRequest(
            _(u'Export type "%s" is not supported.' % export_type))

    if export_type == Export.GOOGLE_SHEETS_EXPORT:
        # Retrieve  google creds or redirect to google authorization page
        credential = _get_google_credential(request)
        if isinstance(credential, HttpResponseRedirect):
            return credential
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_form({'user': owner, 'id_string__iexact': id_string})

    if not has_permission(xform, owner, request):
        return HttpResponseForbidden(_(u'Not shared.'))

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'group_delimiter': DEFAULT_GROUP_DELIMITER,
        'remove_group_name': False,
        'split_select_multiples': True,
        'binary_select_multiples': False,
        'meta': export_meta,
        'token': export_token,
        'google_credentials': credential
    }

    if should_create_new_export(xform, export_type, options):
        try:
            create_async_export(xform,
                                export_type,
                                query=None,
                                force_xlsx=True,
                                options=options)
        except Export.ExportTypeError:
            return HttpResponseBadRequest(
                _("%s is not a valid export type" % export_type))

    metadata = MetaData.objects.filter(object_id=xform.id,
                                       data_type="external_export")\
        .values('id', 'data_value')

    for m in metadata:
        m['data_value'] = m.get('data_value').split('|')[0]

    data = {
        'username':
        owner.username,
        'xform':
        xform,
        'export_type':
        export_type,
        'export_type_name':
        Export.EXPORT_TYPE_DICT[export_type],
        'exports':
        Export.objects.filter(xform=xform,
                              export_type=export_type).order_by('-created_on'),
        'metas':
        metadata
    }

    return render(request, 'export_list.html', data)
示例#8
0
def custom_project_window(request, username, id_string, **kwargs):
    """
    Replaces the default kobo project window.
    Creates a one page solution with one page view.
    """
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)

    #if not has_permission(xform, owner, request):
    if not check_form_permissions(xform, str(request.user), 'can_view'):
        return HttpResponseForbidden(_(u'Not shared.'))

    user_list = get_own_and_partner_orgs_usermodule_users(request)
    username_list = [
        str(custom_user.user.username) for custom_user in user_list
    ]
    username_list.append(str(request.user.username))
    # data grid view part
    data = {
        'owner': owner,
        'xform': xform,
        'form_map_url':
        '/' + owner.username + '/forms/' + xform.id_string + '/map',
        'user_list': username_list
    }

    # start: export part
    export_type = 'xls'

    if export_type == Export.GDOC_EXPORT:
        redirect_url = reverse(export_list,
                               kwargs={
                                   'username': username,
                                   'id_string': id_string,
                                   'export_type': export_type
                               })
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'meta': export_meta,
        'token': export_token,
    }

    export_type_zip = 'zip'
    if export_type_zip == Export.GDOC_EXPORT:
        redirect_url = reverse(export_list,
                               kwargs={
                                   'username': username,
                                   'id_string': id_string,
                                   'export_type': export_type_zip
                               })
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token

    if export_type_zip == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    #code is commented to stop auto export generation
    # if should_create_new_export(xform, export_type):
    #     try:
    #         create_async_export(
    #             xform, export_type, query=None, force_xlsx=True,
    #             options=options)
    #     except Export.ExportTypeError:
    #         return HttpResponseBadRequest(
    #             _("%s is not a valid export type" % export_type))

    metadata = MetaData.objects.filter(xform=xform,
                                       data_type="external_export")\
        .values('id', 'data_value')

    for m in metadata:
        m['data_value'] = m.get('data_value').split('|')[0]

    #tab_selection = '#' + request.GET.get('tab_selection','grid')
    tab_selection = '#' + request.GET.get('tab_selection', 'data_table')
    #    print tab_selection
    data.update({
        'username':
        owner.username,
        'xform':
        xform,
        'export_type':
        export_type,
        'export_type_zip':
        export_type_zip,
        'export_type_name':
        Export.EXPORT_TYPE_DICT[export_type],
        'export_type_name_zip':
        Export.EXPORT_TYPE_DICT[export_type_zip],
        'exports':
        Export.objects.filter(
            Q(xform=xform, export_type='xls')
            | Q(xform=xform, export_type='csv')).order_by('-created_on'),
        'exports_zip':
        Export.objects.filter(xform=xform,
                              export_type='zip').order_by('-created_on'),
        'metas':
        metadata,
        'tab_selection':
        tab_selection,
    })
    # end: export part

    # start: image gallery part
    # instances = Instance.objects.filter(xform=xform).values('id')
    # instances_list = [instance['id'] for instance in instances]
    # attachments = Attachment.objects.filter(instance__in=instances_list,mimetype__icontains='image').values('media_file')
    # image_list = []
    # for i in attachments:
    #     image = {}
    #     image['url'] = request.build_absolute_uri('/media/'+i['media_file'])
    #     image['title'] = i['media_file'][i['media_file'].rfind('/')+1:]
    #     image_list.append(image)
    # data.update({
    #     'image_list': image_list,
    # })
    # end: image gallery part
    return render(request, "usermodule/custom_project_window.html", data)
示例#9
0
文件: views.py 项目: onaio/onadata
def export_list(request, username, id_string, export_type):
    """
    Export list view.
    """
    credential = None

    if export_type not in Export.EXPORT_TYPE_DICT:
        return HttpResponseBadRequest(
            _(u'Export type "%s" is not supported.' % export_type))

    if export_type == Export.GOOGLE_SHEETS_EXPORT:
        # Retrieve  google creds or redirect to google authorization page
        credential = _get_google_credential(request)
        if isinstance(credential, HttpResponseRedirect):
            return credential
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_form({'user': owner, 'id_string__iexact': id_string})

    if not has_permission(xform, owner, request):
        return HttpResponseForbidden(_(u'Not shared.'))

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'group_delimiter': DEFAULT_GROUP_DELIMITER,
        'remove_group_name': False,
        'split_select_multiples': True,
        'binary_select_multiples': False,
        'meta': export_meta,
        'token': export_token,
        'google_credentials': credential
    }

    if should_create_new_export(xform, export_type, options):
        try:
            create_async_export(
                xform,
                export_type,
                query=None,
                force_xlsx=True,
                options=options)
        except Export.ExportTypeError:
            return HttpResponseBadRequest(
                _("%s is not a valid export type" % export_type))

    metadata_qs = MetaData.objects.filter(object_id=xform.id,
                                          data_type="external_export")\
        .values('id', 'data_value')

    for metadata in metadata_qs:
        metadata['data_value'] = metadata.get('data_value').split('|')[0]

    data = {
        'username': owner.username,
        'xform': xform,
        'export_type': export_type,
        'export_type_name': Export.EXPORT_TYPE_DICT[export_type],
        'exports': Export.objects.filter(
            xform=xform, export_type=export_type).order_by('-created_on'),
        'metas': metadata_qs
    }  # yapf: disable

    return render(request, 'export_list.html', data)
示例#10
0
def export_list(request, username, id_string, export_type, is_project=0, id=0, site_id=0, version="0"):
    site_id = int(site_id)
    if export_type == Export.GDOC_EXPORT:
        return HttpResponseForbidden(_(u'Not shared.'))
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)

    if export_type == Export.EXTERNAL_EXPORT:
        return HttpResponseForbidden(_(u'Not shared.'))
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'meta': export_meta,
        'token': export_token,
    }
    if should_create_new_export(xform, export_type, id, site_id, version):

        if is_project == 1 or is_project == '1':
            query = {"fs_project_uuid": str(id)}
        else:
            fsxf = FieldSightXF.objects.get(pk=id)
            if fsxf.site:
                query = {"fs_uuid": str(id)}
            else:
                query = {"fs_project_uuid": str(id), "fs_site": site_id}
        force_xlsx = True
        if version not in ["0", 0]:
            query["__version__"] = version
        deleted_at_query = {
            "$or": [{"_deleted_at": {"$exists": False}},
                    {"_deleted_at": None}]}
        # join existing query with deleted_at_query on an $and
        query = {"$and": [query, deleted_at_query]}
        print("query at excel generation", query)
        try:
            create_async_export(xform, export_type, query,
                                force_xlsx, options, is_project, id, site_id, version)
        except Export.ExportTypeError:
            return HttpResponseBadRequest(
                _("%s is not a valid export type" % export_type))

    metadata = MetaData.objects.filter(xform=xform,
                                       data_type="external_export")\
        .values('id', 'data_value')

    for m in metadata:
        m['data_value'] = m.get('data_value').split('|')[0]

    data = {
        'username': xform.user.username,
        'xform': xform,
        'export_type': export_type,
        'export_type_name': Export.EXPORT_TYPE_DICT[export_type],
        'exports': Export.objects.filter(
            xform=xform, export_type=export_type, fsxf=id, site=site_id, version=version).order_by('-created_on'),
        'metas': metadata,
        'is_project': is_project,
        'id': id,
        'version': version,
            }
    data['site_id'] = site_id

    return render(request, 'export_list.html', data)
def custom_project_window(request, username, id_string, **kwargs):
    """
    Replaces the default kobo project window.
    Creates a one page solution with one page view.
    """
    owner = get_object_or_404(User, username__iexact=username)
    xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner)
    if not check_form_permissions(xform, str(request.user), 'can_view'):
        return HttpResponseForbidden(_(u'Not shared.'))

    user_list = get_own_and_partner_orgs_usermodule_users(request)
    username_list = [
        str(custom_user.user.username) for custom_user in user_list
    ]
    username_list.append(str(request.user.username))

    # data grid view part
    data = {
        'owner': owner,
        'xform': xform,
        'form_map_url':
        '/' + owner.username + '/forms/' + xform.id_string + '/map',
        'user_list': username_list
    }

    #form multilanguage handle part

    languages = ['English']
    query = "select id FROM logger_instance WHERE xform_id = (select id from logger_xform where id_string =  '" + id_string + "') limit 1"
    print "##########testing##########"
    instance_id = __db_fetch_single_value(query)
    if instance_id:
        query = "SELECT * from public.get_instance_extracted_temp(" + str(
            instance_id) + ")"
        form_data = __db_fetch_values_dict(query)

        omitFieldsLang = [
            'formhub/uuid', 'meta/instanceID', '_xform_id_string', 'username'
        ]
        first_field = ''
        for f in form_data:
            if f['_field_name'] not in omitFieldsLang:
                first_field = f['_q_title']
                #print "data"
                #print first_field
                break
        if first_field.startswith('{'):
            languages = sjson.loads(first_field).keys()

    print languages
    # start: export part
    export_type = 'xls'

    if export_type == Export.GDOC_EXPORT:
        redirect_url = reverse(export_list,
                               kwargs={
                                   'username': username,
                                   'id_string': id_string,
                                   'export_type': export_type
                               })
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token

    default_fields_query = "select default_fields from public.export_default_parent where id_string = '" + id_string + "'"
    cursor = connection.cursor()
    cursor.execute(default_fields_query)
    default_fields_data = cursor.fetchone()

    dictlist = []
    if default_fields_data is not None:
        sorted_keys = sorted(list(default_fields_data[0].keys()))
        #print type(sorted_keys)
        for value in sorted_keys:
            dictlist.append(str(default_fields_data[0][value]))

    if export_type == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    # Get meta and token
    export_token = request.GET.get('token')
    export_meta = request.GET.get('meta')
    options = {
        'meta': export_meta,
        'token': export_token,
    }

    export_type_zip = 'zip'
    if export_type_zip == Export.GDOC_EXPORT:
        redirect_url = reverse(export_list,
                               kwargs={
                                   'username': username,
                                   'id_string': id_string,
                                   'export_type': export_type_zip
                               })
        token = _get_google_token(request, redirect_url)
        if isinstance(token, HttpResponse):
            return token

    if export_type_zip == Export.EXTERNAL_EXPORT:
        # check for template before trying to generate a report
        if not MetaData.external_export(xform=xform):
            return HttpResponseForbidden(_(u'No XLS Template set.'))
    #code is commented to stop auto export generation
    # if should_create_new_export(xform, export_type):
    #     try:
    #         create_async_export(
    #             xform, export_type, query=None, force_xlsx=True,
    #             options=options)
    #     except Export.ExportTypeError:
    #         return HttpResponseBadRequest(
    #             _("%s is not a valid export type" % export_type))

    metadata = MetaData.objects.filter(xform=xform,
                                       data_type="external_export")\
        .values('id', 'data_value')

    for m in metadata:
        m['data_value'] = m.get('data_value').split('|')[0]

    #tab_selection = '#' + request.GET.get('tab_selection','grid')
    tab_selection = '#' + request.GET.get('tab_selection', 'data_table')
    #    print tab_selection
    data.update({
        'username':
        owner.username,
        'xform':
        xform,
        'export_type':
        export_type,
        'export_type_zip':
        export_type_zip,
        'export_type_name':
        Export.EXPORT_TYPE_DICT[export_type],
        'export_type_name_zip':
        Export.EXPORT_TYPE_DICT[export_type_zip],
        'exports':
        Export.objects.filter(
            Q(xform=xform, export_type='xls')
            | Q(xform=xform, export_type='csv')).order_by('-created_on'),
        'exports_zip':
        Export.objects.filter(xform=xform,
                              export_type='zip').order_by('-created_on'),
        'metas':
        metadata,
        'tab_selection':
        tab_selection,
        'default_fields_data':
        dictlist,
        'language':
        languages,
    })
    # end: export part

    # start: image gallery part
    # instances = Instance.objects.filter(xform=xform).values('id')
    # instances_list = [instance['id'] for instance in instances]
    # attachments = Attachment.objects.filter(instance__in=instances_list,mimetype__icontains='image').values('media_file')
    # image_list = []
    # for i in attachments:
    #     image = {}
    #     image['url'] = request.build_absolute_uri('/media/'+i['media_file'])
    #     image['title'] = i['media_file'][i['media_file'].rfind('/')+1:]
    #     image_list.append(image)
    # data.update({
    #     'image_list': image_list,
    # })
    # end: image gallery part
    return render(request, "usermodule/custom_project_window.html", data)