Esempio n. 1
0
def delete_data(request, username=None, id_string=None):
    xform, owner = check_and_set_user_and_form(username, id_string, request)
    response_text = u""
    if not xform:
        return HttpResponseForbidden(_(u"Not shared."))

    data_id = request.POST.get("id")
    if not data_id:
        return HttpResponseBadRequest(_(u"id must be specified"))

    Instance.set_deleted_at(data_id)
    audit = {"xform": xform.id_string}
    audit_log(
        Actions.SUBMISSION_DELETED,
        request.user,
        owner,
        _("Deleted submission with id '%(record_id)s' " "on '%(id_string)s'.")
        % {"id_string": xform.id_string, "record_id": data_id},
        audit,
        request,
    )
    response_text = json.dumps({"success": "Deleted data %s" % data_id})
    if "callback" in request.GET and request.GET.get("callback") != "":
        callback = request.GET.get("callback")
        response_text = "%s(%s)" % (callback, response_text)
    return HttpResponse(response_text, mimetype="application/json")
Esempio n. 2
0
def form_photos(request, username, id_string):
    xform, owner = check_and_set_user_and_form(username, id_string, request)

    if not xform:
        return HttpResponseForbidden(_(u'Not shared.'))

    context = RequestContext(request)
    context.form_view = True
    context.content_user = owner
    context.xform = xform
    image_urls = []

    for instance in xform.surveys.all():
        for attachment in instance.attachments.all():
            # skip if not image e.g video or file
            if not attachment.mimetype.startswith('image'):
                continue

            data = {}

            for i in ['small', 'medium', 'large', 'original']:
                url = reverse(attachment_url, kwargs={'size': i})
                url = '%s?media_file=%s' % (url, urlencode(attachment.media_file.name))
                data[i] = url

            image_urls.append(data)

    context.images = image_urls
    context.profile, created = UserProfile.objects.get_or_create(user=owner)
    return render_to_response('form_photos.html', context_instance=context)
Esempio n. 3
0
def delete_data(request, username=None, id_string=None):
    xform, owner = check_and_set_user_and_form(username, id_string, request)
    response_text = u''
    if not xform:
        return HttpResponseForbidden(_(u'Not shared.'))

    data_id = request.POST.get('id')
    if not data_id:
        return HttpResponseBadRequest(_(u"id must be specified"))

    Instance.set_deleted_at(data_id)
    audit = {
        'xform': xform.id_string
    }
    audit_log(
        Actions.SUBMISSION_DELETED, request.user, owner,
        _("Deleted submission with id '%(record_id)s' "
            "on '%(id_string)s'.") %
        {
            'id_string': xform.id_string,
            'record_id': data_id
        }, audit, request)
    response_text = json.dumps({"success": "Deleted data %s" % data_id})
    if 'callback' in request.GET and request.GET.get('callback') != '':
        callback = request.GET.get('callback')
        response_text = ("%s(%s)" % (callback, response_text))
    return HttpResponse(response_text, mimetype='application/json')
Esempio n. 4
0
def api(request, username=None, id_string=None):
    '''
    Returns all results as JSON.  If a parameter string is passed,
    it takes the 'query' parameter, converts this string to a dictionary, an
    that is then used as a MongoDB query string.

    NOTE: only a specific set of operators are allow, currently $or and $and.
    Please send a request if you'd like another operator to be enabled.

    NOTE: Your query must be valid JSON, double check it here,
    http://json.parser.online.fr/

    E.g. api?query='{"last_name": "Smith"}'
    '''
    xform, owner = check_and_set_user_and_form(username, id_string, request)
    if not xform:
        return HttpResponseForbidden('Not shared.')
    try:
        args = {"username": username, "id_string": id_string, "query": request.GET.get('query'),
                "fields": request.GET.get('fields'), "sort": request.GET.get('sort')}
        if 'start' in request.GET:
            args["start"] = int(request.GET.get('start'))
        if 'limit' in request.GET:
            args["limit"] = int(request.GET.get('limit'))
        if 'count' in request.GET:
            args["count"] = True if int(request.GET.get('count')) > 0 else False
        cursor = ParsedInstance.query_mongo(**args)
    except ValueError, e:
        return HttpResponseBadRequest(e.message)
Esempio n. 5
0
def form_photos(request, username, id_string):
    xform, owner = check_and_set_user_and_form(username, id_string, request)

    if not xform:
        return HttpResponseForbidden(_(u"Not shared."))

    context = RequestContext(request)
    context.form_view = True
    context.content_user = owner
    context.xform = xform
    image_urls = []

    for attachment in Attachment.objects.filter(mimetype__startswith="image", instance__xform__id=xform.id):
        data = {}

        for i in ["small", "medium", "large", "original"]:
            url = reverse(attachment_url, kwargs={"size": i})
            url = "%s?media_file=%s" % (url, urlencode(attachment.media_file.name))
            data[i] = url

        image_urls.append(data)

    context.images = image_urls
    context.profile, created = UserProfile.objects.get_or_create(user=owner)
    return render_to_response("form_photos.html", context_instance=context)
Esempio n. 6
0
def delete_data(request, username=None, id_string=None):
    xform, owner = check_and_set_user_and_form(username, id_string, request)
    if not xform:
        return HttpResponseForbidden(_(u'Not shared.'))
    try:
        args = {"username": username, "id_string": id_string,
                "query": request.GET.get('query'),
                "fields": request.GET.get('fields'),
                "sort": request.GET.get('sort')}

        if 'limit' in request.GET:
            args["limit"] = int(request.GET.get('limit'))
        cursor = ParsedInstance.query_mongo(**args)
    except ValueError as e:
        return HttpResponseBadRequest(e)

    today = datetime.today().strftime('%Y-%m-%dT%H:%M:%S')
    ParsedInstance.edit_mongo(
        args['query'], '{ "$set": {"_deleted_at": "%s" }}' % today)

    records = list(record for record in cursor)
    response_text = simplejson.dumps(records)
    if 'callback' in request.GET and request.GET.get('callback') != '':
        callback = request.GET.get('callback')
        response_text = ("%s(%s)" % (callback, response_text))
    return HttpResponse(response_text, mimetype='application/json')
Esempio n. 7
0
def api(request, username=None, id_string=None):
    """
    Returns all results as JSON.  If a parameter string is passed,
    it takes the 'query' parameter, converts this string to a dictionary, an
    that is then used as a MongoDB query string.

    NOTE: only a specific set of operators are allow, currently $or and $and.
    Please send a request if you'd like another operator to be enabled.

    NOTE: Your query must be valid JSON, double check it here,
    http://json.parser.online.fr/

    E.g. api?query='{"last_name": "Smith"}'
    """
    xform, owner = check_and_set_user_and_form(username, id_string, request)
    if not xform:
        return HttpResponseForbidden("Not shared.")
    try:
        args = {
            "username": username,
            "id_string": id_string,
            "query": request.GET.get("query"),
            "fields": request.GET.get("fields"),
            "sort": request.GET.get("sort"),
        }
        if "start" in request.GET:
            args["start"] = int(request.GET.get("start"))
        if "limit" in request.GET:
            args["limit"] = int(request.GET.get("limit"))
        if "count" in request.GET:
            args["count"] = True if int(request.GET.get("count")) > 0 else False
        cursor = ParsedInstance.query_mongo(**args)
    except ValueError, e:
        return HttpResponseBadRequest(e.message)
Esempio n. 8
0
def form_photos(request, username, id_string):
    xform, owner = check_and_set_user_and_form(username, id_string, request)
    if not xform:
        return HttpResponseForbidden('Not shared.')
    context = RequestContext(request)
    context.form_view = True
    context.content_user = owner
    context.xform = xform
    context.images = image_urls_for_form(xform)
    context.profile, created = UserProfile.objects.get_or_create(user=owner)
    return render_to_response('form_photos.html', context_instance=context)
Esempio n. 9
0
def form_photos(request, username, id_string):
    xform, owner = check_and_set_user_and_form(username, id_string, request)
    if not xform:
        return HttpResponseForbidden(_(u'Not shared.'))
    context = RequestContext(request)
    context.form_view = True
    context.content_user = owner
    context.xform = xform
    context.images = image_urls_for_form(xform)
    context.profile, created = UserProfile.objects.get_or_create(user=owner)
    return render_to_response('form_photos.html', context_instance=context)
Esempio n. 10
0
def delete_data(request, username=None, id_string=None):
    query = request.POST.get('query', None)
    if query is None:
        return HttpResponseBadRequest(_(u"Invalid query parameter"))

    try:
        simplejson.loads(query)
    except ValueError:
        return HttpResponseBadRequest(_(u"Invalid query parameter"))

    xform, owner = check_and_set_user_and_form(username, id_string, request)
    response_text = u''
    if not xform:
        return HttpResponseForbidden(_(u'Not shared.'))
    try:
        query_args = {
            "username": username, "id_string": id_string,
            "query": query,
            "fields": request.POST.get('fields', None),
            "sort": request.POST.get('sort', None),
            "limit": 1
        }

        if 'limit' in request.GET:
            query_args["limit"] = int(request.GET.get('limit'))
        cursor = ParsedInstance.query_mongo(**query_args)
    except ValueError as e:
        return HttpResponseBadRequest(e)
    else:
        records = list(record for record in cursor)
        if records.__len__():
            for record in records:
                Instance.delete_by_uuid(
                    username, id_string, uuid=record['_uuid'])
                audit = {
                    'xform': xform.id_string
                }
                audit_log(Actions.SUBMISSION_DELETED, request.user, owner,
                    _("Deleted submission with id '%(record_id)s' on '%(id_string)s'.") %\
                    {
                        'id_string': xform.id_string,
                        'record_id': record['_id']
                    }, audit, request)
            response_text = simplejson.dumps(records)
    if 'callback' in request.GET and request.GET.get('callback') != '':
        callback = request.GET.get('callback')
        response_text = ("%s(%s)" % (callback, response_text))
    return HttpResponse(response_text, mimetype='application/json')
Esempio n. 11
0
def api(request, username=None, id_string=None):
    """
    Returns all results as JSON.  If a parameter string is passed,
    it takes the 'query' parameter, converts this string to a dictionary, an
    that is then used as a MongoDB query string.

    NOTE: only a specific set of operators are allow, currently $or and $and.
    Please send a request if you'd like another operator to be enabled.

    NOTE: Your query must be valid JSON, double check it here,
    http://json.parser.online.fr/

    E.g. api?query='{"last_name": "Smith"}'
    """
    if request.method == "OPTIONS":
        response = HttpResponse()
        add_cors_headers(response)
        return response
    helper_auth_helper(request)
    helper_auth_helper(request)
    xform, owner = check_and_set_user_and_form(username, id_string, request)

    if not xform:
        return HttpResponseForbidden(_(u'Not shared.'))

    try:
        args = {
            'username': username,
            'id_string': id_string,
            'query': request.GET.get('query'),
            'fields': request.GET.get('fields'),
            'sort': request.GET.get('sort')
        }
        if 'start' in request.GET:
            args["start"] = int(request.GET.get('start'))
        if 'limit' in request.GET:
            args["limit"] = int(request.GET.get('limit'))
        if 'count' in request.GET:
            args["count"] = True if int(request.GET.get('count')) > 0\
                else False
        cursor = ParsedInstance.query_mongo(**args)
    except ValueError, e:
        return HttpResponseBadRequest(e.__str__())