Beispiel #1
0
    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)
Beispiel #2
0
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é.'})
Beispiel #3
0
    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)
Beispiel #4
0
    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}))
Beispiel #5
0
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)
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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()
Beispiel #9
0
    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,
            }))
Beispiel #10
0
    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)
Beispiel #11
0
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)
Beispiel #12
0
    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()
Beispiel #13
0
    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)
Beispiel #14
0
    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)
Beispiel #15
0
    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)
Beispiel #17
0
    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)})
Beispiel #18
0
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)
Beispiel #19
0
    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))
Beispiel #20
0
    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)
Beispiel #21
0
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)
Beispiel #23
0
    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)
Beispiel #24
0
    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'))
Beispiel #25
0
    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)
Beispiel #26
0
    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)
Beispiel #27
0
    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)
Beispiel #28
0
    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)
Beispiel #30
0
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)