def setUp(self): self.u1 = User(username='******') self.u2 = User(username='******') self.u1.save() self.u2.save() self.article1 = Article(slug=u'TDT4100') self.article1.save() self.article2 = Article(slug=u'TIØ4258') self.article2.save() self.ac1 = ArticleContent(article=self.article1, updated=datetime.datetime(2012, 1, 1)) self.ac2 = ArticleContent(article=self.article1, updated=datetime.datetime(2013, 1, 1), title='per') self.ac3 = ArticleContent(article=self.article2, updated=datetime.datetime(2001, 3, 7)) self.ac4 = ArticleContent(article=self.article2, updated=datetime.datetime(2001, 3, 8), lang='nb') self.ac1.edited_by = self.u1 self.ac2.edited_by = self.u2 self.ac3.edited_by = self.u1 self.ac4.edited_by = self.u2 self.ac1.save() self.ac2.save() self.ac3.save() self.ac4.save()
def setUp(self): self.article1 = Article(slug=u'TDT4100') self.article1.save() self.ac1 = ArticleContent(article=self.article1, updated=datetime.datetime(2012, 1, 1), title='Cooking and baking', lang='fr', content='# Title') self.ac2 = ArticleContent(article=self.article1, updated=datetime.datetime(2014, 1, 1), title='Cooking and baking', lang='fr') self.ac1.save() self.ac2.save()
def preview(request): if request.method == 'POST': content = request.POST.get('content', '') article_content = ArticleContent(content=content) html = article_content.get_html_content() return JsonResponse(html) return JsonResponse({'error': 'Method not allowed'})
def edit(request, slug, lang='en'): article = get_object_or_404(Article, slug=slug) article_content = article.get_newest_content(lang) if request.method == 'POST': new_article_content = ArticleContent(article=article, lang=lang) form = EditArticleForm(request.POST, instance=new_article_content) if form.is_valid(): new_article_content.article = article new_article_content.edited_by = request.user new_article_content.parent = article_content new_article_content.save() article_content.child = new_article_content article_content.save(change_updated_time=False) return HttpResponseRedirect(new_article_content.get_absolute_url()) else: form = EditArticleForm(instance=article_content) available_languages = article.get_available_languages(article_content) language_list = map(lambda x: (x[0], x[1].get_edit_url), available_languages or []) return render(request, 'edit.html', { 'mathjax': True, 'language_list': language_list, 'articleContent': article_content, 'form': form, 'title': 'Edit: ' + article.slug, })
def new(request, slug=None): if request.POST: form = NewArticleForm(request.POST) if form.is_valid(): slug = request.POST.get('slug') article = Article(slug=slug) article.save() article_content = form.save(commit=False) article_content.article = article article_content.edited_by = request.user article_content.save() return HttpResponseRedirect(article_content.get_absolute_url()) else: article_content = None if slug: slug = slug.upper() article_content = ArticleContent(article=Article(slug=slug), lang=None) form = NewArticleForm(instance=article_content) return render(request, 'edit.html', { 'mathjax': True, 'form': form, 'title': 'Create compendium', })
def merge_contents_if_needed(self): parent_id = self.cleaned_data['parent_id'] article = None articleContent = None slug = self.cleaned_data['slug'] lang = self.cleaned_data['lang'] try: article = Article.objects.get(slug=slug) except: article = Article(slug=slug) articleContent = article.get_newest_content(lang) if articleContent is None: articleContent = ArticleContent(article=article, lang=lang) if parent_id and parent_id != articleContent.pk: parent = ArticleContent.objects.get(id=parent_id) a = parent b = articleContent ancestors = set() commonAncestor = None while True: if a and a.pk in ancestors: commonAncestor = a break if b and b.pk in ancestors: commonAncestor = b break ancestors.add(a.pk) ancestors.add(b.pk) a = a.parent b = b.parent if a and a.parent is None and b and b.parent is None: break try: merged = merge(self.cleaned_data['content'], commonAncestor.content, articleContent.content) self.cleaned_data['content'] = merged except MergeError as e: raise ValidationError('Merge conflict.', params={'diff': e.diff}) return True
def test_title_cannot_contain_slashes(self): ac = ArticleContent() ac.title = 'asdf/sdfi' ac.article = self.article1 with self.assertRaises(ValidationError): ac.save()