def enter_data(request, username, id_string): owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, user__username__iexact=username, id_string__iexact=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: data = {} owner = User.objects.get(username__iexact=username) data['profile'], created = \ UserProfile.objects.get_or_create(user=owner) data['xform'] = xform data['content_user'] = owner data['form_view'] = True data['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(request, "profile.html", data) return HttpResponseRedirect(reverse('onadata.apps.main.views.show', kwargs={'username': username, 'id_string': id_string}))
def enter_data(request, username, id_string): owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, user__username__iexact=username, id_string__exact=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: data = {} owner = User.objects.get(username__iexact=username) data['profile'], created = \ UserProfile.objects.get_or_create(user=owner) data['xform'] = xform data['content_user'] = owner data['form_view'] = True data['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(request, "profile.html", data) return HttpResponseRedirect(reverse('onadata.apps.main.views.show', kwargs={'username': username, 'id_string': id_string}))
def get_enketo_url(self, obj): if obj: _enketo_url = cache.get('{}{}'.format(ENKETO_URL_CACHE, obj.pk)) if _enketo_url: return _enketo_url try: metadata = MetaData.objects.get(xform=obj, data_type="enketo_url") except MetaData.DoesNotExist: request = self.context.get('request') form_url = _get_form_url(request, obj.user.username) url = "" try: url = enketo_url(form_url, obj.id_string) MetaData.enketo_url(obj, url) except (EnketoError, ConnectionError): pass cache.set('{}{}'.format(ENKETO_URL_CACHE, obj.pk), url) return url _enketo_url = metadata.data_value cache.set('{}{}'.format(ENKETO_URL_CACHE, obj.pk), _enketo_url) return _enketo_url return None
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 get_enketo_url(self, obj): if obj: _enketo_url = cache.get( '{}{}'.format(ENKETO_URL_CACHE, obj.pk)) if _enketo_url: return _enketo_url try: metadata = MetaData.objects.get( xform=obj, data_type="enketo_url") except MetaData.DoesNotExist: request = self.context.get('request') form_url = _get_form_url(request, obj.user.username) url = "" try: url = enketo_url(form_url, obj.id_string) MetaData.enketo_url(obj, url) except (EnketoError, ConnectionError): pass cache.set('{}{}'.format(ENKETO_URL_CACHE, obj.pk), url) return url _enketo_url = metadata.data_value cache.set('{}{}'.format(ENKETO_URL_CACHE, obj.pk), _enketo_url) return _enketo_url return None
def enter_data(request, username, id_string): owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, user__username__iexact=username, id_string__exact=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: data = {} owner = User.objects.get(username__iexact=username) data["profile"], created = UserProfile.objects.get_or_create(user=owner) data["xform"] = xform data["content_user"] = owner data["form_view"] = True data["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(request, "profile.html", data) return HttpResponseRedirect( reverse("onadata.apps.main.views.show", kwargs={"username": username, "id_string": id_string}) )
def edit_data(request, username, id_string, data_id): context = RequestContext(request) owner = User.objects.get(username__iexact=username) xform = get_object_or_404(XForm, user__username__iexact=username, id_string__exact=id_string) instance = get_object_or_404(Instance, pk=data_id, xform=xform) #if not has_edit_permission(xform, owner, request, xform.shared): if not check_form_permissions(xform, str(request.user), 'can_edit'): return HttpResponseForbidden(_(u'Not shared.')) if not hasattr(settings, 'ENKETO_URL'): return HttpResponseRedirect( reverse('onadata.apps.main.views.show', kwargs={ 'username': username, 'id_string': id_string })) url = '%sdata/edit_url' % settings.ENKETO_URL # see commit 220f2dad0e for tmp file creation injected_xml = inject_instanceid(instance.xml, instance.uuid) return_url = request.build_absolute_uri( reverse('onadata.apps.viewer.views.instance', kwargs={ 'username': username, 'id_string': id_string }) + "#/" + str(instance.id)) form_url = _get_form_url(request, username, settings.ENKETO_PROTOCOL) try: url = enketo_url(form_url, xform.id_string, instance_xml=injected_xml, instance_id=instance.uuid, return_url=return_url) except Exception as e: 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) else: if url: context.enketo = url return HttpResponseRedirect(url) return HttpResponseRedirect( reverse('onadata.apps.main.views.show', kwargs={ 'username': username, 'id_string': id_string }))
def enketo(self, request, **kwargs): self.object = self.get_object() form_url = _get_form_url(request, self.object.user.username) url = enketo_url(form_url, self.object.id_string) data = {'message': _(u"Enketo not properly configured.")} http_status = status.HTTP_400_BAD_REQUEST if url: http_status = status.HTTP_200_OK data = {"enketo_url": url} return Response(data, http_status)
def edit_data(request, username, id_string, data_id): context = RequestContext(request) owner = User.objects.get(username__iexact=username) xform = get_object_or_404( XForm, user__username__iexact=username, id_string__exact=id_string) instance = get_object_or_404( Instance, pk=data_id, xform=xform) instance_attachments = image_urls_dict(instance) if not has_edit_permission(xform, owner, request, xform.shared): return HttpResponseForbidden(_(u'Not shared.')) if not hasattr(settings, 'ENKETO_URL'): return HttpResponseRedirect(reverse( 'onadata.apps.main.views.show', kwargs={'username': username, 'id_string': id_string})) url = '%sdata/edit_url' % settings.ENKETO_URL # see commit 220f2dad0e for tmp file creation injected_xml = inject_instanceid(instance.xml, instance.uuid) return_url = request.build_absolute_uri( reverse( 'onadata.apps.viewer.views.instance', kwargs={ 'username': username, 'id_string': id_string} ) + "#/" + str(instance.id)) form_url = _get_form_url(request, username, settings.ENKETO_PROTOCOL) try: url = enketo_url( form_url, xform.id_string, instance_xml=injected_xml, instance_id=instance.uuid, return_url=return_url, instance_attachments=instance_attachments ) except Exception as e: 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) else: if url: context.enketo = url return HttpResponseRedirect(url) return HttpResponseRedirect( reverse('onadata.apps.main.views.show', kwargs={'username': username, 'id_string': id_string}))
def enketo(self, request, **kwargs): self.object = self.get_object() form_url = _get_form_url(request, self.object.user.username) data = {'message': _(u"Enketo not properly configured.")} http_status = status.HTTP_400_BAD_REQUEST try: url = enketo_url(form_url, self.object.id_string) except EnketoError: pass else: if url: http_status = status.HTTP_200_OK data = {"enketo_url": url} return Response(data, http_status)
def enketo(self, request, **kwargs): self.object = self.get_object() form_url = _get_form_url(request, self.object.user.username) data = {'message': _(u"Enketo not properly configured.")} http_status = status.HTTP_400_BAD_REQUEST try: # pass default arguments to enketo_url to prepopulate form fields request_vars = request.GET defaults = generate_enketo_form_defaults(self.object, **request_vars) url = enketo_url(form_url, self.object.id_string, **defaults) preview_url = get_enketo_preview_url(request, request.user.username, self.object.id_string) except EnketoError: pass else: if url and preview_url: http_status = status.HTTP_200_OK data = {"enketo_url": url, "enketo_preview_url": preview_url} return Response(data, http_status)
def enketo(self, request, **kwargs): self.object = self.get_object() form_url = _get_form_url(request, self.object.user.username) data = {'message': _(u"Enketo not properly configured.")} http_status = status.HTTP_400_BAD_REQUEST try: # pass default arguments to enketo_url to prepopulate form fields request_vars = request.GET defaults = generate_enketo_form_defaults( self.object, **request_vars) url = enketo_url(form_url, self.object.id_string, **defaults) preview_url = get_enketo_preview_url(request, request.user.username, self.object.id_string) except EnketoError: pass else: if url and preview_url: http_status = status.HTTP_200_OK data = {"enketo_url": url, "enketo_preview_url": preview_url} return Response(data, http_status)