Exemple #1
0
    def post(self, request):
        """
                Procesa el formulario
                :param request: objeto HttpRequest
                :return: HttpResponse con la respuesta
                """

        publication = Publication()
        publication.publisher = request.user

        form = PublicationForm(request.POST,
                               request.FILES,
                               instance=publication)
        if form.is_valid():
            # Guardar el anuncio
            new_publication = form.save()

            # Limpiar el formulario
            form = PublicationForm()

            # Devolvemos un mensaje de OK
            messages.success(request, 'Publicación creada correctamente')

        context = {'form': form, 'navbar': "publication-form"}
        return render(request, 'publications/publication_form.html', context)
Exemple #2
0
def publications(request):
    form = PublicationForm()
    # num = custom_paginator(paginator.num_pages)
    if request.method == "POST":
        form = PublicationForm(request.POST, request.FILES)
        if form.is_valid():
            data = form.cleaned_data
            Publication.objects.create(title=data.get("title"),
                                       body=data.get("body"),
                                       image=data.get("image"),
                                       author=request.user)
    publications = Publication.objects.all()
    paginator = Paginator(publications, 10)
    page = request.GET.get('page')

    try:
        publications = paginator.page(page)
    except PageNotAnInteger:
        publications = paginator.page(1)
    except EmptyPage:
        publications = paginator.page(paginator.num_pages)
    return render(request, "publications.html", {
        "publications": publications,
        "form": form
    })
Exemple #3
0
def profile_add_publication(request, username):
    current_user = get_object_or_404(User, username=username)

    if request.method == 'POST':
        form = PublicationForm(request.POST)
        if form.is_valid():
            publication = form.save()
            publication.title_ru = form.cleaned_data['title']
            publication.save()
            authors = form.cleaned_data['authors_order']
            conference = form.cleaned_data['conference_author']

            unique_authors = []
            unique_authors_obj = []
            for obj in authors:
                try:
                    if not obj['author'] in unique_authors:
                        unique_authors.append(obj['author'])
                        unique_authors_obj.append(obj)
                except KeyError:
                    pass

            for obj in unique_authors_obj:
                try:
                    if not obj['DELETE']:
                        AuthorPublication.objects.create(
                            publication=publication,
                            author=obj['author'],
                            order_by=obj['order_by'])
                except KeyError:
                    break

            if conference:
                try:
                    conference = conference[0]
                    if not conference['DELETE']:
                        form = conference['form']
                        author = conference['author']
                        Conference.objects.create(publication=publication,
                                                  author=author,
                                                  form=form)

                except (KeyError, IndexError):
                    pass

            return redirect(profile, current_user)
    else:
        form = PublicationForm()
        form.fields['authors_order'].template_context = {
            "profile": current_user
        }
        form.fields['conference_author'].template_context = {
            "profile": current_user
        }

    context = {'form': form, 'profile': current_user}
    return render(request, 'lmnad/profile_add_publication.html', context)
Exemple #4
0
    def get(self, request):
        """
                Muestra el formulario
                :param request: objeto HttpRequest
                :return: HttpResponse con la respuesta
                """

        form = PublicationForm()
        context = {'form': form, 'navbar': "publication-form"}
        return render(request, 'publications/publication_form.html', context)
Exemple #5
0
    def parse_bibtex(self, entry, bibtex_str, instance):

        authors = []
        for a in entry.get('author', '').split(' and '):
            parts = a.split(' ')
            fields = ['given', 'family']
            authors.append({k: v for k, v in zip(fields, parts)})

        entry['author'] = authors
        entry['type'] = entry.get('type', entry['ENTRYTYPE'])
        entry['bibtex'] = bibtex_str
        if entry.get('owner'):
            del entry['owner']

        pubform = PublicationForm(entry, instance=instance)
        if pubform.is_valid():
            pubform.save()
            return pubform.instance.pk
        else:
            print('Submission invalid')
            print(pubform.errors)
Exemple #6
0
    def save_from_crossref(self, request, doi, instance=None, update=False):

        qs = self.get_queryset(request).filter(DOI=doi)
        if not qs.exists() or update:
            try:
                response = cr.works(doi)
            except Exception as e:
                print(e)
                return None
            entry = {
                k.replace('-', '_'): v
                for k, v in response['message'].items() if k.replace('-', '_')
                in [f.name for f in Publication._meta.fields] + ['author']
            }

            entry['bibtex'] = self.get_bibtex(doi)

            pubform = PublicationForm(entry, instance=instance)
            if pubform.is_valid():
                pubform.save()
                return pubform.instance.pk
            else:
                print('Submission invalid')
                print(pubform.errors)
Exemple #7
0
def profile_edit_publication(request, username, id):
    current_user = get_object_or_404(User, username=username)
    publication = get_object_or_404(Publication, id=id)
    conference = None

    if request.method == 'POST':
        form = PublicationForm(request.POST, instance=publication)
        if form.is_valid():
            publication.title_ru = form.cleaned_data['title']
            publication.save()
            authors = form.cleaned_data['authors_order']
            conference = form.cleaned_data['conference_author']

            # delete old author publication link
            AuthorPublication.objects.filter(publication=publication).delete()

            unique_authors = []
            unique_authors_obj = []
            for obj in authors:
                try:
                    if not obj['author'] in unique_authors:
                        unique_authors.append(obj['author'])
                        unique_authors_obj.append(obj)
                except KeyError:
                    pass

            # create new
            for obj in unique_authors_obj:
                try:
                    if not obj['DELETE']:
                        AuthorPublication.objects.create(
                            publication=publication,
                            author=obj['author'],
                            order_by=obj['order_by'])
                except KeyError:
                    break

            if conference:
                try:
                    conference = conference[0]
                    if conference['DELETE']:
                        publication.conference.delete()
                    else:
                        publication.conference.form = conference['form']
                        publication.conference.author = conference['author']
                        publication.conference.save()
                except (KeyError, IndexError):
                    pass

            return redirect(profile, current_user)
    else:
        existed_authors = []
        for a in publication.authors.all():
            try:
                pub_author = AuthorPublication.objects.get(
                    publication=publication, author=a)
            except (AuthorPublication.DoesNotExist,
                    AuthorPublication.MultipleObjectsReturned):
                pub_author = AuthorPublication.objects.filter(
                    publication=publication, author=a).first()

            order_by = pub_author.order_by
            author = {
                'order_by': order_by,
                'author': a,
            }
            existed_authors.append(author)

        try:
            if publication.conference.author:
                conference = {
                    'form': publication.conference.form,
                    'author': publication.conference.author
                }
        except Conference.DoesNotExist:
            conference = None

        form = PublicationForm(instance=publication)

        # set init values for inlines form
        if existed_authors:
            form.fields['authors_order'].formset_class_attrs = {
                "initial": existed_authors
            }
            form.fields['authors_order'].template_context = {
                "profile": current_user
            }
        if conference:
            form.fields['conference_author'].formset_class_attrs = {
                "initial": [conference]
            }
            form.fields['conference_author'].template_context = {
                "profile": current_user
            }

    context = {'form': form, 'profile': current_user}

    return render(request, 'lmnad/profile_edit_publication.html', context)