Ejemplo n.º 1
0
def edit_press(request):
    """
    Staff members may edit the Press object.
    :param request: django request object
    :return: contextualised django template
    """

    press = request.press
    form = forms.PressForm(instance=press)

    if request.POST:
        form = forms.PressForm(request.POST, request.FILES, instance=press)
        if form.is_valid():
            form.save()

            if press.default_carousel_image:
                from core import logic as core_logic
                core_logic.resize_and_crop(press.default_carousel_image.path,
                                           [750, 324], 'middle')

            messages.add_message(request, messages.INFO, 'Press updated.')

            return redirect(reverse('core_manager_index'))

    template = 'press/edit_press.html'
    context = {
        'press': press,
        'form': form,
    }

    return render(request, template, context)
Ejemplo n.º 2
0
def news(request):
    new_items = models.NewsItem.objects.filter(
        content_type=request.model_content_type,
        object_id=request.site_type.pk).order_by('-posted')
    form = forms.NewsItemForm()
    new_file = None

    if 'delete' in request.POST:
        news_item_pk = request.POST.get('delete')
        item = get_object_or_404(models.NewsItem,
                                 pk=news_item_pk,
                                 content_type=request.model_content_type,
                                 object_id=request.site_type.pk)
        item.delete()
        return redirect(reverse('core_manager_news'))

    if request.POST:
        form = forms.NewsItemForm(request.POST)

        if request.FILES:
            uploaded_file = request.FILES.get('image_file')

            if request.model_content_type.name == 'journal':
                new_file = files.save_file_to_journal(request,
                                                      uploaded_file,
                                                      'News Item',
                                                      'News Item',
                                                      public=True)
                core_logic.resize_and_crop(
                    new_file.journal_path(request.journal), [750, 324],
                    'middle')
            elif request.model_content_type.name == 'press':
                new_file = files.save_file_to_press(request,
                                                    uploaded_file,
                                                    'News Item',
                                                    'News Item',
                                                    public=True)
                core_logic.resize_and_crop(new_file.press_path(), [750, 324],
                                           'middle')

        if form.is_valid():
            new_item = form.save(commit=False)
            new_item.content_type = request.model_content_type
            new_item.object_id = request.site_type.pk
            new_item.posted_by = request.user
            new_item.posted = timezone.now()
            new_item.large_image_file = new_file
            new_item.save()

            return redirect(reverse('core_manager_news'))

    template = 'core/manager/news/index.html'
    context = {
        'news_items': new_items,
        'action': 'new',
        'form': form,
    }

    return render(request, template, context)
Ejemplo n.º 3
0
def manage_issues(request, issue_id=None, event=None):
    from core.logic import resize_and_crop
    issue_list = models.Issue.objects.filter(journal=request.journal)
    issue, modal, form = None, None, issue_forms.NewIssue()

    if issue_id:
        issue = get_object_or_404(models.Issue, pk=issue_id)
        form = issue_forms.NewIssue(instance=issue)
        if event == 'edit':
            modal = 'issue'
        if event == 'delete':
            modal = 'deleteme'
        if event == 'remove':
            article_id = request.GET.get('article')
            article = get_object_or_404(submission_models.Article, pk=article_id, pk__in=issue.article_pks)
            issue.articles.remove(article)
            return redirect(reverse('manage_issues_id', kwargs={'issue_id': issue.pk}))

    if request.POST:
        if 'make_current' in request.POST:
            issue = models.Issue.objects.get(id=request.POST['make_current'])
            request.journal.current_issue = issue
            request.journal.save()
            issue = None
            return redirect(reverse('manage_issues'))

        if 'delete_issue' in request.POST:
            issue.delete()
            return redirect(reverse('manage_issues'))

        if issue:
            form = issue_forms.NewIssue(request.POST, request.FILES, instance=issue)
        else:
            form = issue_forms.NewIssue(request.POST, request.FILES)

        if form.is_valid():
            save_issue = form.save(commit=False)
            save_issue.journal = request.journal
            save_issue.save()
            if request.FILES and save_issue.large_image:
                resize_and_crop(save_issue.large_image.path, [750, 324])
            if issue:
                return redirect(reverse('manage_issues_id', kwargs={'issue_id': issue.pk}))
            else:
                return redirect(reverse('manage_issues'))
        else:
            modal = 'issue'

    template = 'journal/manage/issues.html'
    context = {
        'issues': issue_list if not issue else [issue],
        'issue': issue,
        'form': form,
        'modal': modal,
    }

    return render(request, template, context)
Ejemplo n.º 4
0
def edit_news(request, news_pk):
    """
    Allows an editor to edit an existing news item
    :param request: HttpRequest object
    :param news_pk: PK of an NewsItem object
    :return: HttpResponse object
    """
    new_items = models.NewsItem.objects.filter(content_type=request.model_content_type,
                                               object_id=request.site_type.pk).order_by('-posted')
    news_item = get_object_or_404(models.NewsItem, pk=news_pk)
    form = forms.NewsItemForm(instance=news_item)
    new_file = None

    if 'delete_image' in request.POST:
        delete_image_id = request.POST.get('delete_image')
        file = get_object_or_404(core_models.File, pk=delete_image_id)

        if file.owner == request.user or request.user.is_staff:
            file.delete()
            messages.add_message(request, messages.SUCCESS, 'Image deleted')
        else:
            messages.add_message(request, messages.WARNING, 'Only the owner or staff can delete this image.')

        return redirect(reverse('core_manager_edit_news', kwargs={'news_pk': news_item.pk}))

    if request.POST:
        form = forms.NewsItemForm(request.POST, instance=news_item)

        if request.FILES:
            uploaded_file = request.FILES.get('image_file')

            if request.model_content_type.name == 'journal':
                new_file = files.save_file_to_journal(request, uploaded_file, 'News Item', 'News Item', public=True)
                core_logic.resize_and_crop(new_file.journal_path(request.journal), [750, 324], 'middle')
            elif request.model_content_type.name == 'press':
                new_file = files.save_file_to_press(request, uploaded_file, 'News Item', 'News Item', public=True)
                core_logic.resize_and_crop(new_file.press_path(), [750, 324], 'middle')

        if form.is_valid():
            item = form.save(commit=False)
            if new_file:
                item.large_image_file = new_file
            item.save()
            return redirect(reverse('core_manager_news'))

    template = 'core/manager/news/index.html'
    context = {
        'news_item': news_item,
        'news_items': new_items,
        'action': 'edit',
        'form': form,
    }

    return render(request, template, context)
Ejemplo n.º 5
0
def set_article_image(request, article):
    from core import logic as core_logic

    if 'delete_image' in request.POST:
        delete_id = request.POST.get('delete_image')
        file_to_delete = get_object_or_404(core_models.File,
                                           pk=delete_id,
                                           article_id=article.pk)

        if file_to_delete == article.large_image_file and request.user.is_staff or request.user == file_to_delete.owner:
            file_to_delete.delete()

        article.fixedpubcheckitems.select_article_image = False
        article.fixedpubcheckitems.save()

    if request.POST and request.FILES:
        uploaded_file = request.FILES.get('image_file')

        if not article.large_image_file:
            new_file = files.save_file_to_article(uploaded_file, article,
                                                  request.user)
            new_file.label = 'Banner image'
            new_file.description = 'Banner image'
            new_file.privacy = 'public'
            new_file.save()

            article.large_image_file = new_file
            article.save()
            messages.add_message(request, messages.SUCCESS, 'New file loaded')
        else:
            new_file = files.overwrite_file(
                uploaded_file,
                article.large_image_file,
                ('articles', article.pk),
            )
            article.large_image_file = new_file
            article.save()
            messages.add_message(request, messages.SUCCESS,
                                 'File overwritten.')

            article.fixedpubcheckitems.select_article_image = True
            article.fixedpubcheckitems.save()

        core_logic.resize_and_crop(new_file.self_article_path(), [750, 324],
                                   'middle')