Exemplo n.º 1
0
def index(request):
    """
    Displays a list of pages and the sites navigation structure.
    :param request: HttpRequest object
    :return: HttpResponse object
    """
    pages = models.Page.objects.filter(content_type=request.model_content_type,
                                       object_id=request.site_type.pk)
    top_nav_items = models.NavigationItem.objects.filter(
        content_type=request.model_content_type,
        object_id=request.site_type.pk,
        top_level_nav__isnull=True)
    collection_nav_items = models.NavigationItem.get_content_nav_for_journal(
        request.journal)

    if request.POST and 'delete' in request.POST:
        page_id = request.POST.get('delete')
        page = get_object_or_404(models.Page,
                                 pk=page_id,
                                 content_type=request.model_content_type,
                                 object_id=request.site_type.pk)
        page.delete()
        return redirect(reverse('cms_index'))

    if request.POST:
        if request.FILES:
            file = request.FILES.get('xsltfile')
            files.save_file_to_journal(request,
                                       file,
                                       'XSLT File',
                                       'Journal XSLT File',
                                       xslt=True)
            messages.add_message(request, messages.INFO,
                                 "XSLT file has been uploaded.")
            request.journal.has_xslt = True
            request.journal.save()

        if 'clear' in request.POST:
            files.unlink_journal_file(request, file=None, xslt=True)
            request.journal.has_xslt = False
            request.journal.save()

        return redirect(reverse('cms_index'))

    template = 'cms/index.html'
    context = {
        'journal': request.journal,
        'pages': pages,
        'top_nav_items': top_nav_items,
        'collection_nav_items': collection_nav_items,
    }

    return render(request, template, context)
Exemplo n.º 2
0
def handle_file(request, setting_value, file):
    if setting_value.value:
        file_to_delete = models.File.objects.get(pk=setting_value.value)
        files.unlink_journal_file(request, file_to_delete)

    file = files.save_file_to_journal(request, file, setting_value.setting.name, 'A setting file.')
    return file.pk
Exemplo n.º 3
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)
Exemplo 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)
Exemplo n.º 5
0
def handle_press_override_image(request, journal, attr_form):
    if request.FILES.get('press_image_override'):
        new_file = files.save_file_to_journal(request, request.FILES.get('press_image_override'), 'Press Override',
                                              'default')
        if journal.press_image_override:
            journal.press_image_override.unlink_file(journal=journal)

        journal.press_image_override = new_file
        journal.save()

        return new_file

    return None
Exemplo n.º 6
0
def handle_default_thumbnail(request, journal, attr_form):
    if request.FILES.get('default_thumbnail'):
        new_file = files.save_file_to_journal(request, request.FILES.get('default_thumbnail'), 'Default Thumb',
                                              'default')

        if journal.thumbnail_image:
            journal.thumbnail_image.unlink_file(journal=journal)

        journal.thumbnail_image = new_file
        journal.save()

        return new_file

    return None