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)
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)
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)
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)
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')