Ejemplo n.º 1
0
def news_create(request, article_category=None, instance=None):

    # Config for reuse
    ModelClass = News
    instance = instance or ModelClass()

    form = NewsForm(instance, ModelClass, request.user, request.POST)
    is_new = form.is_new()

    if article_category:
        try:
            article_category = ArticleCategory.objects.filter(
                level=0, permalink=article_category).first()
        except ArticleCategory.DoesNotExist:
            raise Http404()

    if instance.id:
        article_category = instance.categories.filter(level=0).first()

    if request.method == 'POST':

        form = NewsForm(instance, ModelClass, request.user, request.POST)

        is_new = form.is_new()

        if form.is_valid():

            # Relation
            if not instance.created_by_id:
                instance.created_by = request.user

            if not instance.party_created_by_id:
                instance.party_created_by = request.logged_in_party

            instance.permalink = form.cleaned_data['permalink']
            instance.title = form.cleaned_data['title']

            if form.cleaned_data['summary'] == '':
                summary = strip_tags(form.cleaned_data['description'])
                instance.summary = truncatechars(summary, 240)
            else:
                instance.summary = form.cleaned_data['summary']

            instance.description = form.cleaned_data['description']
            #instance.organization = form.cleaned_data['organization']
            instance.article_category = form.cleaned_data['article_category']
            instance.homepage_url = form.cleaned_data['homepage_url']

            instance_image = instance._meta.get_field('image')
            if instance_image:
                instance_image.save_form_data(instance,
                                              form.cleaned_data['image'])

            instance_files = instance._meta.get_field('files')
            if instance_files:
                instance_files.save_form_data(instance,
                                              form.cleaned_data['files'])

            instance.is_promoted = form.cleaned_data['is_promoted']
            instance.tags = form.cleaned_data['tags']

            instance.changed = timezone.now()
            instance.save()

            instance.topics.clear()
            for topic in form.cleaned_data['topics']:
                instance.topics.add(topic)

            instance.categories.clear()
            for category in form.cleaned_data['categories']:
                instance.categories.add(category)

            CmsHasParty.objects.filter(src=instance).exclude(
                dst=form.cleaned_data['in_the_news']).delete()
            for party in form.cleaned_data['in_the_news']:
                CmsHasParty.objects.get_or_create(src=instance, dst=party)

            message_success = get_cms_success_message(instance, is_new, [])
            messages.success(request, message_success)
            return redirect('article_edit', instance.id)
        else:
            messages.error(
                request,
                'Your submission error. Please, check in error fields.')

    else:
        if not instance.id:
            if request.user.is_staff:
                instance.is_promoted = True
            else:
                instance.is_promoted = False

        initial = {
            'permalink': instance.permalink,
            'title': instance.title,
            'image': instance.image,
            #'organization': instance.organization,
            'summary': instance.summary,
            'description': instance.description,
            'homepage_url': instance.homepage_url,
            'article_category': instance.article_category,
            'is_promoted': instance.is_promoted,
            'tags': instance.tags,
            'files': instance.files,
        }
        if instance.id:
            initial['topics'] = instance.topics.all()
            initial['categories'] = instance.categories.all()
            initial['in_the_news'] = Party.objects.filter(
                cms_has_party_dst__src=instance).distinct()

        else:
            initial['article_category'] = request.GET.get(
                'article_category')  # deprecate
            if article_category:
                initial['categories'] = [article_category]

        form = NewsForm(instance, ModelClass, request.user, initial=initial)
    return render(
        request, 'cms/news/form.html', {
            'form':
            form,
            'article_category':
            article_category,
            'show_category_field':
            article_category and article_category.get_children().count(),
            'is_staff':
            request.user.is_staff
        })