def post(self, request, dataset_id=None, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) form = self.EmitResourceForm(data=request.POST, files=request.FILES, user=user) if not form.is_valid(): context = {'form': form, 'dataset': dataset} return render_with_info_profile(request, self.template_emit, context) instance = form.save() file_path = Path(instance.file_path.name) content_type = MimeTypes().guess_type(str(file_path))[0] or Mime.from_file(str(file_path)) title = file_path.name # Création d'une entrée REDIS pour suivre la vie de la création de la ressource redis_key = self.redis_create_key(user, instance, instance.pk, content_type) resource_form = self.init_resource_form(instance, title, content_type, redis_key) msg = "Veuillez vérifier les informations pré-remplies ci-dessous avant de la valider la création." messages.info(request, msg) context = {'form': resource_form, 'dataset': dataset} return render_with_info_profile(request, self.template_create, context)
def delete_account(request): user = request.user if request.method == 'GET': return render_with_info_profile(request, 'idgo_admin/deleteaccount.html', {'uform': UserDeleteForm()}) uform = UserDeleteForm(data=request.POST) if not uform.is_valid(): return render_with_info_profile(request, 'idgo_admin/deleteaccount.html', {'uform': uform}) email = user.email full_name = user.get_full_name() username = user.username logout(request) user.delete() send_account_deletion_mail(email, full_name, username) return render(request, 'idgo_admin/message.html', status=200, context={'message': 'Votre compte a été supprimé.'})
def post(self, request): try: user, profile = user_and_profile(request) except ProfileHttp404: return HttpResponseRedirect(reverse('server_cas:signIn')) form = UpdateAccountForm(request.POST, instance=user) if not form.is_valid(): return render_with_info_profile(request, self.template, context={'form': form}) try: with transaction.atomic(): if form.new_password: user.set_password(form.new_password) user.save() logout(request) login(request, user, backend='django.contrib.auth.backends.ModelBackend') for field in form.Meta.profile_fields: setattr(profile, field, form.cleaned_data[field]) profile.save() for field in form.Meta.user_fields: setattr(user, field, form.cleaned_data[field]) user.save() CkanHandler.update_user(user) except ValidationError as e: messages.error(request, e.message) return render_with_info_profile(request, self.template, context={'form': form}) except CkanBaseError as e: form.add_error('__all__', e.__str__()) messages.error(request, e.__str__()) return render_with_info_profile(request, self.template, context={'form': form}) messages.success(request, 'Votre compte a bien été mis à jour.') return render_with_info_profile(request, self.template, context={'form': form}, status=200)
def post(self, request, id=None): user, profile = user_and_profile(request) instance = get_object_or_404(Organisation, id=id) form = Form(request.POST, request.FILES, instance=instance, include={ 'user': user, 'id': id }) if not form.is_valid(): return render_with_info_profile(request, self.template, context={ 'id': id, 'form': form }) for item in form.Meta.fields: setattr(instance, item, form.cleaned_data[item]) try: instance.save() except ValidationError as e: messages.error(request, e.__str__()) except CkanBaseError as e: form.add_error('__all__', e.__str__()) messages.error(request, e.__str__()) else: messages.success(request, "L'organisation a été mise à jour avec succès.") if 'continue' in request.POST: context = { 'id': id, 'update': True, 'organisation': instance, 'form': Form(instance=instance, include={ 'user': user, 'id': id }) } return render_with_info_profile(request, self.template, context=context) return HttpResponseRedirect( reverse('idgo_admin:show_organisation', kwargs={'id': instance.id}))
def show_organisation(request, id, *args, **kwargs): user, profile = user_and_profile(request) all_organisations = [] for instance in Organisation.objects.filter(is_active=True): all_organisations.append({ 'pk': instance.pk, 'legal_name': instance.legal_name, 'member': (instance == profile.organisation), 'contributor': (instance in profile.contribute_for), 'referent': profile.is_admin and True or (instance in profile.referent_for), }) all_organisations.sort(key=operator.itemgetter('contributor'), reverse=True) all_organisations.sort(key=operator.itemgetter('referent'), reverse=True) all_organisations.sort(key=operator.itemgetter('member'), reverse=True) organisation = get_object_or_404(Organisation, pk=id) context = { 'all_organisations': all_organisations, 'basemaps': BaseMaps.objects.all(), 'organisation': organisation, } return render_with_info_profile(request, 'idgo_admin/organisation/show.html', context=context)
def post(self, request, dataset_id, resource_id, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) resource = get_object_or_404(Resource, pk=resource_id) self.form = self.EditResourceForm(data=request.POST, instance=resource) if not self.form.is_valid(): context = {'form': self.form, 'dataset': dataset, 'resource': resource} return render_with_info_profile(request, self.template, context) resource = self.form.save(dataset=dataset) redis_key = self.form.cleaned_data.get('redis_key') if redis_key: self.run_asynchronous_tasks(redis_key) ### msg = ( 'La ressource a été mise à jour avec succès. ' 'Souhaitez-vous <a href="{0}">ajouter une nouvelle ressource</a> ' 'ou bien <a href="{1}" target="_blank">voir la ressource dans CKAN</a> ?' ).format( reverse('idgo_admin:resource', kwargs={'dataset_id': dataset.pk}), resource.ckan_url, ) messages.success(request, msg) kwargs = {'dataset_id': dataset_id, 'resource_id': resource.pk} url = reverse(self.viewname, kwargs=kwargs) return HttpResponseRedirect(url)
def get(self, request): user, profile = user_and_profile(request) context = {'form': Form(include={'user': user, 'extended': True})} return render_with_info_profile(request, self.template, context=context)
def get(self, request, id=None): user, profile = user_and_profile(request) is_admin = profile.is_admin is_referent = LiaisonsReferents.objects.filter( profile=profile, organisation__id=id, validated_on__isnull=False) and True or False if is_referent or is_admin: instance = get_object_or_404(Organisation, id=id) return render_with_info_profile(request, self.template, context={ 'id': id, 'update': True, 'organisation': instance, 'form': Form(instance=instance, include={ 'user': user, 'id': id }) }) raise Http404()
def post(self, request, dataset_id=None, resource_id=None, layer_id=None, *args, **kwargs): user, profile = user_and_profile(request) layer = get_object_or_404(Layer, resource=resource_id) form = Form(request.POST, instance=layer, include={'user': user}) context = { 'form': form, 'layer': layer, } if not form.is_valid(): return render_with_info_profile(request, self.template, context=context) try: MRAHandler.update_layer(layer_id, { 'name': layer_id, 'title': form.cleaned_data['title'], 'abstract': form.cleaned_data['abstract'], }) except ValidationError as e: messages.error(request, ' '.join(e)) except MraBaseError as e: messages.error(request, e.__str__()) else: messages.success(request, 'Les informations ont été mise à jour avec succès.') return HttpResponseRedirect(reverse('idgo_admin:layer_editor', kwargs={ 'dataset_id': dataset_id, 'resource_id': resource_id, 'layer_id': layer_id, }))
def get(self, request, dataset_id=None, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404_extended(Dataset, user, include={'id': dataset_id}) # Redirect to layer _resource = request.GET.get('resource') _layer = request.GET.get('layer') if _resource and _layer: return redirect( reverse('idgo_admin:layer_editor', kwargs={ 'dataset_id': dataset.id, 'resource_id': _resource, 'layer_id': _layer })) resource = None id = request.GET.get('id') if id: include = {'id': id, 'dataset_id': dataset.id} resource = get_object_or_404_extended(Resource, user, include=include) form = Form(instance=resource, user=user) context = self.get_context(form, user, dataset, resource=resource) return render_with_info_profile(request, self.template, context)
def jurisdictions(request, *args, **kwargs): user, profile = user_and_profile(request) # Accès réservé aux administrateurs IDGO if not profile.is_admin: raise Http404() jurisdictions = Jurisdiction.objects.all() # Gestion du tri order_by = request.GET.get('sortby', None) if order_by: jurisdictions = jurisdictions.order_by(order_by) # Gestion de la pagination page_number = int(request.GET.get('page', 1)) items_per_page = int(request.GET.get('count', 10)) number_of_pages = ceil(len(jurisdictions) / items_per_page) if number_of_pages < page_number: page_number = 1 x = items_per_page * page_number - items_per_page y = x + items_per_page context = { 'jurisdictions': jurisdictions[x:y], 'Organisation': Organisation, 'pagination': { 'current': page_number, 'total': number_of_pages}, 'total': len(jurisdictions)} return render_with_info_profile( request, 'idgo_admin/jurisdiction/jurisdictions.html', context=context)
def get(self, request, id, *args, **kwargs): user, profile = user_and_profile(request) is_admin = profile.is_admin is_referent = LiaisonsReferents.objects.filter( profile=profile, organisation__id=id, validated_on__isnull=False) and True or False if is_referent or is_admin: organisation = get_object_or_404(Organisation, id=id) context = {'organisation': organisation} try: instance = RemoteCsw.objects.get(organisation=organisation) except RemoteCsw.DoesNotExist: form = RemoteCswForm() else: context['datasets'] = Dataset.harvested_csw.filter( organisation=organisation) context['instance'] = instance form = RemoteCswForm(instance=instance) context['form'] = form return render_with_info_profile(request, self.template, context=context) raise Http404()
def get(self, request, id, *args, **kwargs): user, profile = user_and_profile(request) if not LiaisonsContributeurs.objects.filter( profile=profile, validated_on__isnull=False).exists(): raise Http404() if id != 'new': instance = get_object_or_404_extended(Dataset, user, include={'id': id}) else: instance = None id = None include = { 'user': user, 'id': id, 'identification': id and True or False, } form = Form(instance=instance, include=include) context = self.get_context(form, user, instance) return render_with_info_profile(request, 'idgo_admin/dataset/dataset.html', context=context)
def get(self, request, dataset_id=None, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) form = self.EmitResourceForm(user=user) context = {'form': form, 'extensions': form.extensions, 'dataset': dataset} return render_with_info_profile(request, self.template_emit, context)
def get(self, request, dataset_id, resource_id, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) resource = get_object_or_404(Resource, pk=resource_id) context = self.get_context(dataset, resource) return render_with_info_profile(request, self.template_show, context)
def post(self, request, dataset_id, resource_id, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) resource = get_object_or_404(Resource, pk=resource_id) instance = getattr(resource, self.related_attr) form = self.UpdateResourceForm(data=request.POST, files=request.FILES, instance=instance) if not form.is_valid(): context = { 'form': form, 'dataset': dataset, 'resource': resource, 'upload': instance, } return render_with_info_profile(request, self.template_update, context) # else: updated_upload = form.save() content_type = request.FILES.get('file_path').content_type title = request.FILES.get('file_path').name # Création d'une entrée REDIS pour suivre la vie de la création de la ressource redis_key = self.redis_create_key(user, updated_upload, updated_upload.pk, content_type) resource_form = self.init_resource_form(updated_upload, title, content_type, redis_key, resource) msg = "Veuillez vérifier les informations pré-remplies ci-dessous avant de la valider la création." messages.info(request, msg) context = { 'form': resource_form, 'dataset': dataset, 'resource': resource, 'upload': updated_upload, } return render_with_info_profile(request, self.template_edit, context)
def get(self, request): try: user, profile = user_and_profile(request) except ProfileHttp404: return HttpResponseRedirect(reverse('server_cas:signIn')) return render_with_info_profile( request, self.template, {'form': UpdateAccountForm(instance=user)})
def list_my_datasets(request, *args, **kwargs): user, profile = user_and_profile(request) context = handle_context(Dataset.default.filter(editor=user), request.GET, target='mine') return render_with_info_profile(request, 'idgo_admin/dataset/datasets.html', status=200, context=context)
def get(self, request, *args, **kwargs): user, profile = user_and_profile(request) if not profile.crige_membership: raise Http404 return render_with_info_profile(request, self.template, context=self.get_context( request, user))
def get(self, request, dataset_id, resource_id, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) resource = get_object_or_404(Resource, pk=resource_id) form = self.EditResourceForm(instance=resource) context = {'form': form, 'dataset': dataset, 'resource': resource} return render_with_info_profile(request, self.template, context)
def list_all_datasets(request, *args, **kwargs): user, profile = user_and_profile(request) # Réservé aux référents ou administrateurs IDGO roles = profile.get_roles() if not roles['is_referent'] and not roles['is_admin']: raise Http404 context = handle_context( Dataset.default, request.GET, target='all') return render_with_info_profile( request, 'idgo_admin/dataset/datasets.html', status=200, context=context)
def get(self, request, dataset_id=None, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) context = { 'dataset': dataset, } return render_with_info_profile(request, 'resource/dashboard.html', context)
def get(self, request, dataset_id=None, resource_id=None, layer_id=None, *args, **kwargs): user, profile = user_and_profile(request) layer = get_object_or_404(Layer, resource=resource_id) target = datasets_target(layer.resource.dataset, user) context = { 'target': target, 'layer': layer, 'fonts_asjson': json.dumps(MRAHandler.get_fonts()), 'layer_asjson': json.dumps(layer.mra_info), } return render_with_info_profile( request, 'idgo_admin/dataset/resource/layer/style/edit.html', context=context)
def post(self, request): user, profile = user_and_profile(request) form = Form(request.POST, request.FILES, include={'user': user}) if not form.is_valid(): return render_with_info_profile(request, self.template, context={'form': form}) try: organisation = Organisation.objects.create(**dict( (item, form.cleaned_data[item]) for item in form.Meta.organisation_fields)) except ValidationError as e: messages.error(request, e.__str__()) return render_with_info_profile(request, self.template, context={'form': form}) creation_process(request, profile, organisation) form.cleaned_data.get('rattachement_process', False) \ and member_subscribe_process(request, profile, organisation) # Dans le cas ou seul le role de contributeur est demandé form.cleaned_data.get('contributor_process', False) \ and not form.cleaned_data.get('referent_process', False) \ and contributor_subscribe_process(request, profile, organisation) # role de référent requis donc role de contributeur requis form.cleaned_data.get('referent_process', False) \ and referent_subscribe_process(request, profile, organisation) messages.success(request, 'La demande a bien été envoyée.') return HttpResponseRedirect( reverse('idgo_admin:handle_show_organisation'))
def get(self, request, dataset_id, resource_id, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) resource = get_object_or_404(Resource, pk=resource_id) instance = getattr(resource, self.related_attr) context = { 'form': self.UpdateResourceForm(instance=instance, user=user), 'dataset': dataset, 'resource': resource, 'ftp': instance, } return render_with_info_profile(request, self.template_update, context)
def get(self, request, id, *args, **kwargs): user, profile = user_and_profile(request) instance = get_object_or_404(Dataset, id=id) config = { 'app_name': 'mdEdit', 'app_title': 'mdEdit', 'app_version': '0.14.9', 'app_copyrights': '(c) CIGAL 2016', 'languages': {'locales': ['fr']}, 'defaultLanguage': 'fr', 'server_url_md': GEONETWORK_URL, 'views': { 'list': [{ # 'path': '{id}/edit/'.format(id=id), 'path': reverse('idgo_admin:dataset_mdedit_tpl_edit', kwargs={'id': instance.id}), 'values': {'fr': 'Edition'}, 'locales': {'fr': join_url('views/edit/tpl-edit_fr.json')} }, { 'path': join_url('tpl-view.html', path=MDEDIT_HTML_PATH), 'values': {'fr': 'Vue'}, 'locales': {'fr': join_url('views/view/tpl-view_fr.json')} }]}, 'models': { 'list': [{ 'path': join_url(MDEDIT_DATASET_MODEL), 'value': 'Modèle de fiche vierge' }]}, 'locales': MDEDIT_LOCALES, 'locales_path': join_url('locales/'), 'geographicextents_list': join_url('list_geographicextents.json'), 'referencesystems_list': join_url('list_referencesystems.json'), 'static_root': join_url('libs/mdedit/', path=STATIC_URL), 'modal_template': { 'help': join_url('modal-help.html', path=MDEDIT_HTML_PATH)}} context = {'dataset': instance, 'doc_url': READTHEDOC_URL_INSPIRE, 'config': config} record = instance.geonet_id and geonet.get_record(str(instance.geonet_id)) or None if record: xml = record.xml.decode(encoding='utf-8') context['record_xml'] = re.sub('\n', '', xml).replace("'", "\\'") # C'est moche else: context['record_obj'] = prefill_dataset_model(instance) return render_with_info_profile(request, self.template, context=context)
def get(self, request, dataset_id=None, resource_id=None, layer_id=None, *args, **kwargs): user, profile = user_and_profile(request) layer = get_object_or_404(Layer, resource=resource_id) form = Form(instance=layer, include={'user': user}) target = datasets_target(layer.resource.dataset, user) context = { 'target': target, 'layer': layer, 'form': form, } return render_with_info_profile( request, 'idgo_admin/dataset/resource/layer/edit.html', context=context)
def get(self, request, *args, **kwargs): user, profile = user_and_profile(request) if not profile.crige_membership: raise Http404 order_by = request.GET.get('sortby', '-submission') if order_by: if order_by.endswith('submission'): order_by = '{}submission_datetime'.format( order_by.startswith('-') and '-' or '') elif order_by.endswith('status'): order_by = '{}success'.format( order_by.startswith('-') and '-' or '') else: order_by = None # Pagination page_number = int(request.GET.get('page', 1)) items_per_page = int(request.GET.get('count', 10)) x = items_per_page * page_number - items_per_page y = x + items_per_page if profile.is_admin and profile.crige_membership: tasks = AsyncExtractorTask.objects.all() else: tasks = AsyncExtractorTask.objects.filter(user=user) tasks = order_by and tasks.order_by(order_by) or tasks number_of_pages = ceil(len(tasks) / items_per_page) context = { 'bounds': BOUNDS, 'basemaps': BaseMaps.objects.all(), 'pagination': { 'current': page_number, 'total': number_of_pages }, 'supported_crs': SupportedCrs.objects.all(), 'supported_format': ExtractorSupportedFormat.objects.all(), 'tasks': tasks[x:y] } return render_with_info_profile(request, 'idgo_admin/extractor/dashboard.html', context=context)
def post(self, request, dataset_id, resource_id, *args, **kwargs): user, profile = user_and_profile(request) dataset = get_object_or_404(Dataset, pk=dataset_id) resource = get_object_or_404(Resource, pk=resource_id) self.form = self.EditResourceForm(data=request.POST, instance=resource) if not self.form.is_valid(): context = { 'form': self.form, 'dataset': dataset, 'resource': resource } return render_with_info_profile(request, self.template, context) resource = self.form.save(dataset=dataset) redis_key = self.form.cleaned_data.get('redis_key') if redis_key: self.run_asynchronous_tasks(redis_key) # ### # msg = ( # 'La ressource a été mise à jour avec succès. ' # 'Souhaitez-vous <a href="{0}">ajouter une nouvelle ressource</a> ' # 'ou bien <a href="{1}" target="_blank">voir la ressource dans CKAN</a> ?' # ).format( # reverse('idgo_admin:resource', kwargs={'dataset_id': dataset.pk}), # resource.ckan_url, # ) # messages.success(request, msg) # # kwargs = {'dataset_id': dataset_id, 'resource_id': resource.pk} # url = reverse(self.viewname, kwargs=kwargs) # return HttpResponseRedirect(url) # ### msg = "Mise à jour de la ressource en cours d'execution." messages.success(request, msg) # url = reverse('idgo_resource:dashboard', kwargs={'dataset_id': dataset.pk}) url = '{base_url}?id={dataset_id}#resources_store/{resource_id}'.format( base_url=reverse('idgo_admin:dataset'), dataset_id=dataset.pk, resource_id=resource.pk) return HttpResponseRedirect(url)
def layer_styles(request, dataset_id=None, resource_id=None, layer_id=None, *args, **kwargs): user, profile = user_and_profile(request) layer = get_object_or_404(Layer, resource=resource_id) target = datasets_target(layer.resource.dataset, user) context = { 'target': target, 'layer': layer, } return render_with_info_profile( request, 'idgo_admin/dataset/resource/layer/style/styles.html', context=context)