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)
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.instances.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, 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)
def enter_data(request, username, id_string): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) form_url = _get_form_url(request, username) try: url = enketo_url(form_url, xform.id_string) if not url: return HttpResponseRedirect(reverse('onadata.apps.main.views.show', kwargs={'username': username, 'id_string': id_string})) return HttpResponseRedirect(url) except Exception, e: context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True context.message = { 'type': 'alert-error', 'text': u"Enketo error, reason: %s" % e} messages.add_message( request, messages.WARNING, _("Enketo error: enketo replied %s") % e, fail_silently=True) return render_to_response("profile.html", context_instance=context)
def map_view(request, username, id_string): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, id_string=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u"Not shared.")) context = RequestContext(request) context.content_user = owner context.xform = xform context.profile, created = UserProfile.objects.get_or_create(user=owner) points = ParsedInstance.objects.values("lat", "lng", "instance").filter( instance__user=owner, instance__xform__id_string=id_string, lat__isnull=False, lng__isnull=False ) center = { "lat": round_down_geopoint(average([p["lat"] for p in points])), "lng": round_down_geopoint(average([p["lng"] for p in points])), } def round_down_point(p): return {"lat": round_down_geopoint(p["lat"]), "lng": round_down_geopoint(p["lng"]), "instance": p["instance"]} context.center = json.dumps(center) context.form_view = True context.jsonform_url = reverse(download_jsonform, kwargs={"username": username, "id_string": id_string}) context.mongo_api_url = reverse(main.views.api, kwargs={"username": username, "id_string": id_string}) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) return render_to_response("map.html", context_instance=context)
def enter_data(request, username, id_string): owner = User.objects.get(username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_permission(xform, owner, request): return HttpResponseForbidden("Not shared.") if not hasattr(settings, "TOUCHFORMS_URL"): return HttpResponseRedirect(reverse("main.views.show", kwargs={"username": username, "id_string": id_string})) url = settings.TOUCHFORMS_URL register_openers() response = None with tempfile.TemporaryFile() as tmp: tmp.write(xform.xml.encode("utf-8")) tmp.seek(0) values = {"file": tmp, "format": "json", "uuid": xform.uuid} data, headers = multipart_encode(values) headers["User-Agent"] = "formhub" req = urllib2.Request(url, data, headers) try: response = urllib2.urlopen(req) response = json.loads(response.read()) context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True context.touchforms = response["url"] return render_to_response("form_entry.html", context_instance=context) # return HttpResponseRedirect(response['url']) except urllib2.URLError: pass # this will happen if we could not connect to touchforms return HttpResponseRedirect(reverse("main.views.show", kwargs={"username": username, "id_string": id_string}))
def map_view(request, username, id_string): xform = XForm.objects.get(user__username=username, id_string=id_string) owner = User.objects.get(username=username) if not has_permission(xform, owner, request): return HttpResponseForbidden('Not shared.') context = RequestContext(request) context.content_user = owner context.xform = xform context.profile, created = UserProfile.objects.get_or_create(user=owner) points = ParsedInstance.objects.values('lat', 'lng', 'instance').filter( instance__user=owner, instance__xform__id_string=id_string, lat__isnull=False, lng__isnull=False) center = { 'lat': round_down_geopoint(average([p['lat'] for p in points])), 'lng': round_down_geopoint(average([p['lng'] for p in points])), } def round_down_point(p): return { 'lat': round_down_geopoint(p['lat']), 'lng': round_down_geopoint(p['lng']), 'instance': p['instance'] } context.points = json.dumps([round_down_point(p) for p in list(points)]) context.center = json.dumps(center) context.form_view = True return render_to_response('map.html', context_instance=context)
def enter_data(request, username, id_string): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) try: formhub_url = "http://%s/" % request.META['HTTP_HOST'] except: formhub_url = "http://formhub.org/" form_url = formhub_url + username if settings.TESTING_MODE: form_url = "https://testserver.com/bob" try: url = enketo_url(form_url, xform.id_string) if not url: return HttpResponseRedirect(reverse('main.views.show', kwargs={'username': username, 'id_string': id_string})) return HttpResponseRedirect(url) except Exception, e: context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True context.message = { 'type': 'alert-error', 'text': u"Enketo error, reason: %s" % e} messages.add_message( request, messages.WARNING, _("Enketo error: enketo replied %s") % e, fail_silently=True) return render_to_response("profile.html", context_instance=context)
def profile_settings(request, username): context = RequestContext(request) content_user = check_and_set_user(request, username) context.content_user = content_user profile, created = UserProfile.objects.get_or_create(user=content_user) if request.method == 'POST': form = UserProfileForm(request.POST, instance=profile) if form.is_valid(): # get user # user.email = cleaned_email form.instance.user.email = form.cleaned_data['email'] form.instance.user.save() form.save() # todo: add string rep. of settings to see what changed audit = {} audit_log( Actions.PROFILE_SETTINGS_UPDATED, request.user, content_user, _("Profile settings updated."), audit, request) return HttpResponseRedirect(reverse( public_profile, kwargs={'username': request.user.username} )) else: form = UserProfileForm( instance=profile, initial={"email": content_user.email}) return render_to_response("settings.html", {'form': form}, context_instance=context)
def enter_data(request, username, id_string): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) form_url = _get_form_url(request, username, settings.ENKETO_PROTOCOL) try: url = enketo_url(form_url, xform.id_string) if not url: return HttpResponseRedirect(reverse('onadata.apps.main.views.show', kwargs={'username': username, 'id_string': id_string})) return HttpResponseRedirect(url) except Exception as e: context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True context.message = { 'type': 'alert-error', 'text': u"Enketo error, reason: %s" % e} messages.add_message( request, messages.WARNING, _("Enketo error: enketo replied %s") % e, fail_silently=True) return render_to_response("profile.html", context_instance=context) return HttpResponseRedirect(reverse('onadata.apps.main.views.show', kwargs={'username': username, 'id_string': id_string}))
def map_view(request, username, id_string): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, id_string=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden('Not shared.') context = RequestContext(request) context.content_user = owner context.xform = xform context.profile, created = UserProfile.objects.get_or_create(user=owner) points = ParsedInstance.objects.values('lat', 'lng', 'instance').filter( instance__user=owner, instance__xform__id_string=id_string, lat__isnull=False, lng__isnull=False) center = { 'lat': round_down_geopoint(average([p['lat'] for p in points])), 'lng': round_down_geopoint(average([p['lng'] for p in points])), } def round_down_point(p): return { 'lat': round_down_geopoint(p['lat']), 'lng': round_down_geopoint(p['lng']), 'instance': p['instance'] } context.center = json.dumps(center) context.form_view = True context.jsonform_url = reverse(download_jsonform, \ kwargs={"username": username, "id_string":id_string}) context.mongo_api_url = reverse(main.views.api, \ kwargs={"username": username, "id_string": id_string}) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) return render_to_response('map.html', context_instance=context)
def show(request, username=None, id_string=None, uuid=None): if uuid: xform = get_object_or_404(XForm, uuid=uuid) request.session["public_link"] = xform.uuid if MetaData.public_link(xform) else False return HttpResponseRedirect( reverse(show, kwargs={"username": xform.user.username, "id_string": xform.id_string}) ) xform, is_owner, can_edit, can_view = get_xform_and_perms(username, id_string, request) # no access if not (xform.shared or can_view or request.session.get("public_link")): return HttpResponseRedirect(reverse(home)) context = RequestContext(request) context.cloned = ( len(XForm.objects.filter(user__username=request.user.username, id_string=id_string + XForm.CLONED_SUFFIX)) > 0 ) context.public_link = MetaData.public_link(xform) context.is_owner = is_owner context.can_edit = can_edit context.can_view = can_view or request.session.get("public_link") context.xform = xform context.content_user = xform.user context.base_url = "https://%s" % request.get_host() context.source = MetaData.source(xform) context.form_license = MetaData.form_license(xform).data_value context.data_license = MetaData.data_license(xform).data_value context.supporting_docs = MetaData.supporting_docs(xform) context.media_upload = MetaData.media_upload(xform) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) if is_owner: context.sms_support_form = ActivateSMSSupportFom( initial={"enable_sms_support": xform.allows_sms, "sms_id_string": xform.sms_id_string} ) if not xform.allows_sms: context.sms_compatible = check_form_sms_compatibility(None, json_survey=json.loads(xform.json)) else: url_root = request.build_absolute_uri("/")[:-1] context.sms_providers_doc = providers_doc(url_root=url_root, username=username, id_string=id_string) context.url_root = url_root context.form_license_form = FormLicenseForm(initial={"value": context.form_license}) context.data_license_form = DataLicenseForm(initial={"value": context.data_license}) context.doc_form = SupportDocForm() context.source_form = SourceForm() context.media_form = MediaForm() context.mapbox_layer_form = MapboxLayerForm() users_with_perms = [] for perm in get_users_with_perms(xform, attach_perms=True).items(): has_perm = [] if "change_xform" in perm[1]: has_perm.append(_(u"Can Edit")) if "view_xform" in perm[1]: has_perm.append(_(u"Can View")) users_with_perms.append((perm[0], u" | ".join(has_perm))) context.users_with_perms = users_with_perms context.permission_form = PermissionForm(username) if xform.allows_sms: context.sms_support_doc = get_autodoc_for(xform) return render_to_response("show.html", context_instance=context)
def map_view(request, username, id_string, template='map.html'): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, id_string=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) context = RequestContext(request) context.content_user = owner context.xform = xform context.profile, created = UserProfile.objects.get_or_create(user=owner) points = ParsedInstance.objects.values('lat', 'lng', 'instance').filter( instance__user=owner, instance__xform__id_string=id_string, lat__isnull=False, lng__isnull=False) center = { 'lat': round_down_geopoint(average([p['lat'] for p in points])), 'lng': round_down_geopoint(average([p['lng'] for p in points])), } def round_down_point(p): return { 'lat': round_down_geopoint(p['lat']), 'lng': round_down_geopoint(p['lng']), 'instance': p['instance'] } context.center = json.dumps(center) context.form_view = True context.jsonform_url = reverse(download_jsonform, kwargs={"username": username, "id_string": id_string}) context.enketo_edit_url = reverse('edit_data', kwargs={"username": username, "id_string": id_string, "data_id": 0}) context.enketo_add_url = reverse('enter_data', kwargs={"username": username, "id_string": id_string}) context.enketo_add_with_url = reverse('add_submission_with', kwargs={"username": username, "id_string": id_string}) context.mongo_api_url = reverse('mongo_view_api', kwargs={"username": username, "id_string": id_string}) context.delete_data_url = reverse('delete_data', kwargs={"username": username, "id_string": id_string}) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) audit = { "xform": xform.id_string } audit_log(Actions.FORM_MAP_VIEWED, request.user, owner, _("Requested map on '%(id_string)s'.") % {'id_string': xform.id_string}, audit, request) return render_to_response(template, context_instance=context)
def map_view(request, username, id_string, template='map.html'): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, id_string=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) context = RequestContext(request) context.content_user = owner context.xform = xform context.profile, created = UserProfile.objects.get_or_create(user=owner) points = ParsedInstance.objects.values('lat', 'lng', 'instance').filter( instance__user=owner, instance__xform__id_string=id_string, lat__isnull=False, lng__isnull=False) center = { 'lat': round_down_geopoint(average([p['lat'] for p in points])), 'lng': round_down_geopoint(average([p['lng'] for p in points])), } def round_down_point(p): return { 'lat': round_down_geopoint(p['lat']), 'lng': round_down_geopoint(p['lng']), 'instance': p['instance'] } context.center = json.dumps(center) context.form_view = True context.jsonform_url = reverse(download_jsonform, kwargs={"username": username, "id_string": id_string}) context.enketo_edit_url = reverse('edit_data', kwargs={"username": username, "id_string": id_string, "data_id": 0}) context.enketo_add_url = reverse('enter_data', kwargs={"username": username, "id_string": id_string}) context.enketo_add_with_url = reverse('add_submission_with', kwargs={"username": username, "id_string": id_string}) context.mongo_api_url = reverse('mongo_view_api', kwargs={"username": username, "id_string": id_string}) context.delete_data_url = reverse('delete_data', kwargs={"username": username, "id_string": id_string}) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) audit = { "xform": xform.id_string } audit_log(Actions.FORM_MAP_VIEWED, request.user, owner, _("Requested map on '%(id_string)s'.") % {'id_string': xform.id_string}, audit, request) return render_to_response(template, context_instance=context)
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)
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)
def form_photos(request, username, id_string): xform = get_object_or_404(XForm, user__username=username, id_string=id_string) owner = User.objects.get(username=username) if not has_permission(xform, owner, request): 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)
def profile_settings(request, username): context = RequestContext(request) content_user = check_and_set_user(request, username) context.content_user = content_user profile, created = UserProfile.objects.get_or_create(user=content_user) if request.method == "POST": form = UserProfileForm(request.POST, instance=profile) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(public_profile, kwargs={"username": request.user.username})) else: form = UserProfileForm(instance=profile) return render_to_response("settings.html", {"form": form}, context_instance=context)
def map_view(request, username, id_string, template='map.html'): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, id_string=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) context = RequestContext(request) context.content_user = owner context.xform = xform context.profile, created = UserProfile.objects.get_or_create(user=owner) context.form_view = True context.jsonform_url = reverse(download_jsonform, kwargs={ "username": username, "id_string": id_string }) context.enketo_edit_url = reverse('edit_data', kwargs={ "username": username, "id_string": id_string, "data_id": 0 }) context.enketo_add_url = reverse('enter_data', kwargs={ "username": username, "id_string": id_string }) context.enketo_add_with_url = reverse('add_submission_with', kwargs={ "username": username, "id_string": id_string }) context.mongo_api_url = reverse('mongo_view_api', kwargs={ "username": username, "id_string": id_string }) context.delete_data_url = reverse('delete_data', kwargs={ "username": username, "id_string": id_string }) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) audit = {"xform": xform.id_string} audit_log( Actions.FORM_MAP_VIEWED, request.user, owner, _("Requested map on '%(id_string)s'.") % {'id_string': xform.id_string}, audit, request) return render_to_response(template, context_instance=context)
def profile_settings(request, username): context = RequestContext(request) content_user = check_and_set_user(request, username) context.content_user = content_user profile, created = UserProfile.objects.get_or_create(user=content_user) if request.method == 'POST': form = UserProfileForm(request.POST, instance=profile) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(public_profile, kwargs={'username': request.user.username})) else: form = UserProfileForm(instance=profile) return render_to_response("settings.html", { 'form': form }, context_instance=context)
def show(request, username=None, id_string=None, uuid=None): if uuid: xform = get_object_or_404(XForm, uuid=uuid) request.session['public_link'] = MetaData.public_link(xform) return HttpResponseRedirect(reverse(show, kwargs={ 'username': xform.user.username, 'id_string': xform.id_string })) xform, is_owner, can_edit, can_view = get_xform_and_perms( username, id_string, request) # no access if not (xform.shared or can_view or request.session.get('public_link')): return HttpResponseRedirect(reverse(home)) context = RequestContext(request) context.cloned = len( XForm.objects.filter(user__username=request.user.username, id_string=id_string + XForm.CLONED_SUFFIX) ) > 0 context.public_link = MetaData.public_link(xform) context.is_owner = is_owner context.can_edit = can_edit context.can_view = can_view or request.session.get('public_link') context.xform = xform context.content_user = xform.user context.base_url = "https://%s" % request.get_host() context.source = MetaData.source(xform) context.form_license = MetaData.form_license(xform).data_value context.data_license = MetaData.data_license(xform).data_value context.supporting_docs = MetaData.supporting_docs(xform) context.media_upload = MetaData.media_upload(xform) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) if is_owner: context.form_license_form = FormLicenseForm( initial={'value': context.form_license}) context.data_license_form = DataLicenseForm( initial={'value': context.data_license}) context.doc_form = SupportDocForm() context.source_form = SourceForm() context.media_form = MediaForm() context.mapbox_layer_form = MapboxLayerForm() context.users_with_perms = get_users_with_perms( xform, attach_perms=True ).items() context.permission_form = PermissionForm(username) user_list = [u.username for u in User.objects.exclude(username=username)] context.user_json_list = simplejson.dumps(user_list) return render_to_response("show.html", context_instance=context)
def enter_data(request, username, id_string): owner = User.objects.get(username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_permission(xform, owner, request): return HttpResponseForbidden('Not shared.') if not hasattr(settings, 'TOUCHFORMS_URL'): return HttpResponseRedirect( reverse('main.views.show', kwargs={ 'username': username, 'id_string': id_string })) url = settings.TOUCHFORMS_URL register_openers() response = None with tempfile.TemporaryFile() as tmp: tmp.write(xform.xml.encode('utf-8')) tmp.seek(0) values = {'file': tmp, 'format': 'json', 'uuid': xform.uuid} data, headers = multipart_encode(values) headers['User-Agent'] = 'formhub' req = urllib2.Request(url, data, headers) try: response = urllib2.urlopen(req) response = json.loads(response.read()) context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = UserProfile.objects.get_or_create( user=owner) context.xform = xform context.content_user = owner context.form_view = True context.touchforms = response['url'] return render_to_response("form_entry.html", context_instance=context) #return HttpResponseRedirect(response['url']) except urllib2.URLError: pass # this will happen if we could not connect to touchforms return HttpResponseRedirect( reverse('main.views.show', kwargs={ 'username': username, 'id_string': id_string }))
def show(request, username=None, id_string=None, uuid=None): if uuid: xform = get_object_or_404(XForm, uuid=uuid) request.session['public_link'] = MetaData.public_link(xform) return HttpResponseRedirect(reverse(show, kwargs={ 'username': xform.user.username, 'id_string': xform.id_string })) xform, is_owner, can_edit, can_view = get_xform_and_perms(username,\ id_string, request) # no access if not (xform.shared or can_view or request.session.get('public_link')): return HttpResponseRedirect(reverse(home)) context = RequestContext(request) context.cloned = len( XForm.objects.filter(user__username=request.user.username, id_string=id_string + XForm.CLONED_SUFFIX) ) > 0 context.public_link = MetaData.public_link(xform) context.is_owner = is_owner context.can_edit = can_edit context.can_view = can_view or request.session.get('public_link') context.xform = xform context.content_user = xform.user context.base_url = "https://%s" % request.get_host() context.source = MetaData.source(xform) context.form_license = MetaData.form_license(xform).data_value context.data_license = MetaData.data_license(xform).data_value context.supporting_docs = MetaData.supporting_docs(xform) context.media_upload = MetaData.media_upload(xform) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) if is_owner: context.form_license_form = FormLicenseForm( initial={'value': context.form_license}) context.data_license_form = DataLicenseForm( initial={'value': context.data_license}) context.doc_form = SupportDocForm() context.source_form = SourceForm() context.media_form = MediaForm() context.mapbox_layer_form = MapboxLayerForm() context.users_with_perms = get_users_with_perms(xform, attach_perms=True).items() context.permission_form = PermissionForm(username) return render_to_response("show.html", context_instance=context)
def enter_data(request, username, id_string): owner = User.objects.get(username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) if not hasattr(settings, 'TOUCHFORMS_URL'): return HttpResponseRedirect(reverse('main.views.show', kwargs={'username': username, 'id_string': id_string})) url = settings.TOUCHFORMS_URL register_openers() response = None with tempfile.TemporaryFile() as tmp: tmp.write(xform.xml.encode('utf-8')) tmp.seek(0) values = { 'file': tmp, 'format': 'json', 'uuid': xform.uuid } data, headers = multipart_encode(values) headers['User-Agent'] = 'formhub' req = urllib2.Request(url, data, headers) try: response = urllib2.urlopen(req) response = json.loads(response.read()) context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True context.touchforms = response['url'] return render_to_response("form_entry.html", context_instance=context) #return HttpResponseRedirect(response['url']) except urllib2.URLError: pass # this will happen if we could not connect to touchforms return HttpResponseRedirect(reverse('main.views.show', kwargs={'username': username, 'id_string': id_string}))
def enter_data(request, username, id_string, test_server=None): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) if test_server: form_url = test_server else: try: formhub_url = "http://%s/" % request.META['HTTP_HOST'] except: formhub_url = "http://formhub.org/" form_url = formhub_url + username if hasattr(settings, "TESTING_MODE") and settings.TESTING_MODE: form_url = "https://testserver.com/bob" try: url = enketo_url(form_url, xform.id_string) if not url: return HttpResponseRedirect(reverse('main.views.show', kwargs={'username': username, 'id_string': id_string})) return HttpResponseRedirect(url) except Exception, e: context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True context.message = { 'type': 'alert-error', 'text': u"Enketo error, reason: %s" % e} messages.add_message( request, messages.WARNING, _("Enketo error: enketo replied %s") % e, fail_silently=True) return render_to_response("profile.html", context_instance=context)
def map_view(request, username, id_string, template='map.html'): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, id_string=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) context = RequestContext(request) context.content_user = owner context.xform = xform context.profile, created = UserProfile.objects.get_or_create(user=owner) context.form_view = True context.jsonform_url = reverse(download_jsonform, kwargs={"username": username, "id_string": id_string}) context.enketo_edit_url = reverse('edit_data', kwargs={"username": username, "id_string": id_string, "data_id": 0}) context.enketo_add_url = reverse('enter_data', kwargs={"username": username, "id_string": id_string}) context.enketo_add_with_url = reverse('add_submission_with', kwargs={"username": username, "id_string": id_string}) context.mongo_api_url = reverse('mongo_view_api', kwargs={"username": username, "id_string": id_string}) context.delete_data_url = reverse('delete_data', kwargs={"username": username, "id_string": id_string}) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) audit = { "xform": xform.id_string } audit_log(Actions.FORM_MAP_VIEWED, request.user, owner, _("Requested map on '%(id_string)s'.") % {'id_string': xform.id_string}, audit, request) return render_to_response(template, context_instance=context)
def show(request, username=None, id_string=None, uuid=None): if uuid: return redirect_to_public_link(request, uuid) xform, is_owner, can_edit, can_view = get_xform_and_perms( username, id_string, request) # no access if not (xform.shared or can_view or request.session.get('public_link')): return HttpResponseRedirect(reverse(home)) context = RequestContext(request) context.cloned = len( XForm.objects.filter(user__username=request.user.username, id_string=id_string + XForm.CLONED_SUFFIX) ) > 0 context.public_link = MetaData.public_link(xform) context.is_owner = is_owner context.can_edit = can_edit context.can_view = can_view or request.session.get('public_link') context.xform = xform context.content_user = xform.user context.base_url = "https://%s" % request.get_host() context.source = MetaData.source(xform) context.form_license = MetaData.form_license(xform).data_value context.data_license = MetaData.data_license(xform).data_value context.supporting_docs = MetaData.supporting_docs(xform) context.media_upload = MetaData.media_upload(xform) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) if is_owner: set_xform_owner_context(context, xform, request, username, id_string) if xform.allows_sms: context.sms_support_doc = get_autodoc_for(xform) return render_to_response("show.html", context_instance=context)
def show(request, username=None, id_string=None, uuid=None): if uuid: xform = get_object_or_404(XForm, uuid=uuid) request.session['public_link'] = MetaData.public_link(xform) return HttpResponseRedirect(reverse(show, kwargs={ 'username': xform.user.username, 'id_string': xform.id_string })) xform, is_owner, can_edit, can_view = get_xform_and_perms(username,\ id_string, request) # no access if not (xform.shared or can_view or request.session.get('public_link')): return HttpResponseRedirect(reverse(home)) context = RequestContext(request) context.public_link = MetaData.public_link(xform) context.is_owner = is_owner context.can_edit = can_edit context.can_view = can_view or request.session.get('public_link') context.xform = xform context.content_user = xform.user context.base_url = "https://%s" % request.get_host() context.source = MetaData.source(xform) context.form_license = MetaData.form_license(xform).data_value context.data_license = MetaData.data_license(xform).data_value context.supporting_docs = MetaData.supporting_docs(xform) if is_owner: context.form_license_form = FormLicenseForm( initial={'value': context.form_license}) context.data_license_form = DataLicenseForm( initial={'value': context.data_license}) context.doc_form = SupportDocForm() context.source_form = SourceForm() context.users_with_perms = get_users_with_perms(xform, attach_perms=True).items() context.permission_form = PermissionForm(username) return render_to_response("show.html", context_instance=context)
def enter_data(request, username, id_string): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) if not hasattr(settings, 'ENKETO_URL'): return HttpResponseRedirect( reverse('main.views.show', kwargs={ 'username': username, 'id_string': id_string })) url = '%slaunch/launchSurvey' % settings.ENKETO_URL register_openers() response = None # see commit 220f2dad0e for tmp file creation try: formhub_url = "http://%s/" % request.META['HTTP_HOST'] except: formhub_url = "http://formhub.org/" values = { 'format': 'json', 'form_id': xform.id_string, 'server_url': formhub_url + username } data, headers = multipart_encode(values) headers['User-Agent'] = 'formhub' req = urllib2.Request(url, data, headers) try: response = urllib2.urlopen(req) response = json.loads(response.read()) context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True if 'url' in response: audit = {"xform": xform.id_string} audit_log( Actions.FORM_ENTER_DATA_REQUESTED, request.user, owner, _("Requested enter data url for '%(id_string)s'.") % { 'id_string': xform.id_string, }, audit, request) context.enketo = response['url'] #return render_to_response("form_entry.html", # context_instance=context) return HttpResponseRedirect(response['url']) else: json_msg = response['reason'] """ return HttpResponse("<script>$('body')</script>") """ context.message = { 'type': 'alert-error', 'text': "Enketo error, reason: " + (response['reason'] and "Server not found.") } messages.add_message(request, messages.WARNING, json_msg) return render_to_response("profile.html", context_instance=context) except urllib2.URLError: # this will happen if we could not connect to enketo messages.add_message(request, messages.WARNING, _("Enketo error: Unable to open webform url.")) except ValueError, e: messages.add_message(request, messages.WARNING, _("Enketo error: enketo replied %s") % e)
def edit_data(request, username, id_string, data_id): owner = User.objects.get(username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) instance = get_object_or_404(Instance, pk=data_id, xform=xform) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) if not hasattr(settings, 'ENKETO_URL'): return HttpResponseRedirect( reverse('main.views.show', kwargs={ 'username': username, 'id_string': id_string })) url = '%sdata/edit_url' % settings.ENKETO_URL register_openers() response = None # see commit 220f2dad0e for tmp file creation try: formhub_url = "http://%s/" % request.META['HTTP_HOST'] except: formhub_url = "http://formhub.org/" injected_xml = inject_instanceid(instance.xml, instance.uuid) values = { 'format': 'json', 'form_id': xform.id_string, 'server_url': formhub_url + username, 'instance': injected_xml, 'instance_id': instance.uuid, 'return_url': request.build_absolute_uri( reverse('odk_viewer.views.instance', kwargs={ 'username': username, 'id_string': id_string }) + "#/" + str(instance.id)) } data, headers = multipart_encode(values) headers['User-Agent'] = 'formhub' req = urllib2.Request(url, data, headers) try: response = urllib2.urlopen(req) response = json.loads(response.read()) context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True if 'edit_url' in response: audit = {"xform": xform.id_string, "data_id": data_id} audit_log( Actions.SUBMISSION_EDIT_REQUESTED, request.user, owner, _("Requested to edit data with id " "'%(data_id)s' on '%(id_string)s'.") % { 'id_string': xform.id_string, 'data_id': data_id }, audit, request) context.enketo = response['edit_url'] return HttpResponseRedirect(response['edit_url']) else: json_msg = response['reason'] """ return HttpResponse("<script>$('body')</script>") """ context.message = { 'type': 'alert-error', 'text': "Enketo error, reason: " + (response['reason'] and "Server not found.") } messages.add_message(request, messages.WARNING, json_msg) return render_to_response("profile.html", context_instance=context) except urllib2.URLError: # this will happen if we could not connect to enketo messages.add_message(request, messages.WARNING, _("Enketo error: Unable to open webform url.")) except ValueError, e: messages.add_message(request, messages.WARNING, _("Enketo error: enketo replied %s") % e)
def show(request, username=None, id_string=None, uuid=None): if uuid: xform = get_object_or_404(XForm, uuid=uuid) request.session['public_link'] = xform.uuid if MetaData.public_link(xform) else False return HttpResponseRedirect(reverse(show, kwargs={ 'username': xform.user.username, 'id_string': xform.id_string })) xform, is_owner, can_edit, can_view = get_xform_and_perms( username, id_string, request) # no access if not ( xform.shared or can_view or\ request.session.get('public_link')): return HttpResponseRedirect(reverse(home)) context = RequestContext(request) context.cloned = len( XForm.objects.filter(user__username=request.user.username, id_string=id_string + XForm.CLONED_SUFFIX) ) > 0 context.public_link = MetaData.public_link(xform) context.is_owner = is_owner context.can_edit = can_edit context.can_view = can_view or request.session.get('public_link') context.xform = xform context.content_user = xform.user context.base_url = "https://%s" % request.get_host() context.source = MetaData.source(xform) context.form_license = MetaData.form_license(xform).data_value context.data_license = MetaData.data_license(xform).data_value context.supporting_docs = MetaData.supporting_docs(xform) context.media_upload = MetaData.media_upload(xform) context.mapbox_layer = MetaData.mapbox_layer_upload(xform) if is_owner: context.sms_support_form = ActivateSMSSupportFom( initial={'enable_sms_support': xform.allows_sms, 'sms_id_string': xform.sms_id_string}) if not xform.allows_sms: context.sms_compatible = check_form_sms_compatibility(None, json_survey=json.loads(xform.json)) else: url_root = request.build_absolute_uri('/')[:-1] context.sms_providers_doc = providers_doc( url_root=url_root, username=username, id_string=id_string) context.url_root = url_root context.form_license_form = FormLicenseForm( initial={'value': context.form_license}) context.data_license_form = DataLicenseForm( initial={'value': context.data_license}) context.doc_form = SupportDocForm() context.source_form = SourceForm() context.media_form = MediaForm() context.mapbox_layer_form = MapboxLayerForm() context.users_with_perms = get_users_with_perms( xform, attach_perms=True ).items() context.permission_form = PermissionForm(username) context.sms_support_doc = get_autodoc_for(xform) user_list = [u.username for u in User.objects.exclude(username=username)] context.user_json_list = simplejson.dumps(user_list) return render_to_response("show.html", context_instance=context)
def enter_data(request, username, id_string): owner = get_object_or_404(User, username=username) xform = get_object_or_404(XForm, user__username=username, id_string=id_string) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) if not hasattr(settings, 'ENKETO_URL'): return HttpResponseRedirect(reverse('main.views.show', kwargs={'username': username, 'id_string': id_string})) url = '%slaunch/launchSurvey' % settings.ENKETO_URL register_openers() response = None # see commit 220f2dad0e for tmp file creation try: formhub_url = "http://%s/" % request.META['HTTP_HOST'] except: formhub_url = "http://formhub.org/" values = { 'format': 'json', 'form_id': xform.id_string, 'server_url': formhub_url + username } data, headers = multipart_encode(values) headers['User-Agent'] = 'formhub' req = urllib2.Request(url, data, headers) try: response = urllib2.urlopen(req) response = json.loads(response.read()) context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True if 'url' in response: audit = { "xform": xform.id_string } audit_log(Actions.FORM_ENTER_DATA_REQUESTED, request.user, owner, _("Requested enter data url for '%(id_string)s'.") %\ { 'id_string': xform.id_string, }, audit, request) context.enketo = response['url'] #return render_to_response("form_entry.html", # context_instance=context) return HttpResponseRedirect(response['url']) else: json_msg = response['reason'] """ return HttpResponse("<script>$('body')</script>") """ context.message = { 'type': 'alert-error', 'text': "Enketo error, reason: " + ( response['reason'] and "Server not found.")} messages.add_message(request, messages.WARNING, json_msg) return render_to_response("profile.html", context_instance=context) except urllib2.URLError: # this will happen if we could not connect to enketo messages.add_message( request, messages.WARNING, _("Enketo error: Unable to open webform url.")) except ValueError, e: messages.add_message( request, messages.WARNING, _("Enketo error: enketo replied %s") % e)
def edit_data(request, username, id_string, data_id): owner = User.objects.get(username=username) xform = get_object_or_404( XForm, user__username=username, id_string=id_string) instance = get_object_or_404( Instance, pk=data_id, xform=xform) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) if not hasattr(settings, 'ENKETO_URL'): return HttpResponseRedirect( reverse( 'main.views.show', kwargs={'username': username, 'id_string': id_string} ) ) url = '%sdata/edit_url' % settings.ENKETO_URL register_openers() response = None # see commit 220f2dad0e for tmp file creation try: formhub_url = "http://%s/" % request.META['HTTP_HOST'] except: formhub_url = "http://formhub.org/" injected_xml = inject_instanceid(instance.xml, instance.uuid) values = { 'format': 'json', 'form_id': xform.id_string, 'server_url': formhub_url + username, 'instance': injected_xml, 'instance_id': instance.uuid, 'return_url': request.build_absolute_uri( reverse( 'odk_viewer.views.instance', kwargs={ 'username': username, 'id_string': id_string} ) + "#/" + str(instance.id)) } data, headers = multipart_encode(values) headers['User-Agent'] = 'formhub' req = urllib2.Request(url, data, headers) try: response = urllib2.urlopen(req) response = json.loads(response.read()) context = RequestContext(request) owner = User.objects.get(username=username) context.profile, created = \ UserProfile.objects.get_or_create(user=owner) context.xform = xform context.content_user = owner context.form_view = True if 'edit_url' in response: audit = { "xform": xform.id_string, "data_id": data_id } audit_log(Actions.SUBMISSION_EDIT_REQUESTED, request.user, owner, _("Requested to edit data with id '%(data_id)s' on '%(id_string)s'.") %\ { 'id_string': xform.id_string, 'data_id': data_id }, audit, request) context.enketo = response['edit_url'] return HttpResponseRedirect(response['edit_url']) else: json_msg = response['reason'] """ return HttpResponse("<script>$('body')</script>") """ context.message = { 'type': 'alert-error', 'text': "Enketo error, reason: " + ( response['reason'] and "Server not found.") } messages.add_message(request, messages.WARNING, json_msg) return render_to_response("profile.html", context_instance=context) except urllib2.URLError: # this will happen if we could not connect to enketo messages.add_message( request, messages.WARNING, _("Enketo error: Unable to open webform url.")) except ValueError, e: messages.add_message( request, messages.WARNING, _("Enketo error: enketo replied %s") % e)