diff --git a/forms.py b/forms.py index c9551fe..51faa40 100644 --- a/forms.py +++ b/forms.py @@ -17,7 +17,7 @@ class PostForm(ModelForm): class CategoryForm(ModelForm): class Meta: model = Category - exclude = ('parent', 'name_slug') + exclude = ('parent', 'name_slug', 'blog') class UserForm(ModelForm): class Meta: diff --git a/generators/post.py b/generators/post.py index 989a60a..e8fd14d 100644 --- a/generators/post.py +++ b/generators/post.py @@ -42,7 +42,7 @@ class Post(Index): node.removeChild(node.childNodes[0]) node.appendChild(dom.createTextNode(post.title)) - def generate(self, blog, src, output, posts): + def _generate(self, blog, src, output, posts): hooks = {'post' : self._createPost, 'meta' : self.createMetas} @@ -81,7 +81,7 @@ class Post(Index): posts = Post.objects.all() - return self.generate(blog, src, output, hooks, dom, posts) + return self._generate(blog, src, output, posts) def createPreview(self, values, dom, root, node): now = datetime.datetime.now() diff --git a/models.py b/models.py index d0f5049..e220d66 100644 --- a/models.py +++ b/models.py @@ -159,6 +159,7 @@ class Category(models.Model): name_slug = models.CharField(max_length=255) parent = models.ForeignKey('self', blank=True, null=True) description = models.TextField(max_length=255, blank=True) + blog = models.ForeignKey(Blog) def slugify(self): name = normalize('NFKD', self.name).encode('ascii', 'ignore').replace(' ', '-').lower() @@ -181,6 +182,7 @@ class Category(models.Model): class Tag(models.Model): name = models.CharField(max_length=255, unique=True) + blog = models.ForeignKey(Blog) class Post(models.Model): title = models.CharField(max_length=255) diff --git a/templates/base.html b/templates/base.html index 13a3063..5ab0eb1 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,7 +4,7 @@ {% block head %} {% endblock %} - Users Blogs Categories Disconnect

+ Users Blogs Disconnect

{% block content %} {% endblock %} diff --git a/templates/category.html b/templates/category.html index 78453d4..c851876 100644 --- a/templates/category.html +++ b/templates/category.html @@ -7,12 +7,10 @@ {% else %} {% for category in categories %} - {% if user.is_superuser %}{% endif %} + {% endfor %}
{{ category.id }}{{ category.name }}EditDelete
{{ category.id }}{{ category.name }}EditDelete
{% endif %} -{% if user.is_superuser %} -
  • Add a category
  • -{% endif %} +
  • Add a category
  • {% endblock %} diff --git a/templates/edit_category.html b/templates/edit_category.html index c7a813f..5fba483 100644 --- a/templates/edit_category.html +++ b/templates/edit_category.html @@ -4,10 +4,6 @@
    {% csrf_token %} {{ form.as_p }} -{% if user.is_superuser %} - -{% else %} - -{% endif %} +
    {% endblock %} diff --git a/templates/generate.html b/templates/generate.html index 6c6c82b..dbd51d9 100644 --- a/templates/generate.html +++ b/templates/generate.html @@ -1,6 +1,7 @@ {% extends "templates/base.html" %} {% block content %} +Categories {% if user.is_superuser %}
    {% csrf_token %} @@ -24,7 +25,9 @@ {% else %} {% for post in posts %} +{% with post.id as cur_id %} + {% endwith %} {% endfor %} {% endif %}
    {{ post.id }}{{ post.title }}{{ post.category.name }}{{ post.creation_date }}{{ post.modification_date }}{{ post.published }}{{ post.front_page }}{{ comments|hash:cur_id|default_if_none:"0" }} comment{{ comments|hash:cur_id|pluralize }}Delete
    diff --git a/templates/view_blog.html b/templates/view_blog.html index dca0a0e..38c6f43 100644 --- a/templates/view_blog.html +++ b/templates/view_blog.html @@ -1,6 +1,7 @@ {% extends "templates/base.html" %} {% block content %} +Categories {% if user.is_superuser %} {% csrf_token %} diff --git a/urls.py b/urls.py index ac27bf8..2ef1d75 100644 --- a/urls.py +++ b/urls.py @@ -13,21 +13,21 @@ urlpatterns = patterns('', url(r'^user/add$', 'dynastie.views.add_user', name='add_user'), url(r'^user/edit/(\d+)$', 'dynastie.views.edit_user', name='edit_user'), url(r'^user/(\d+)$', 'dynastie.views.edit_user', name='view_user'), - url(r'^category$', 'dynastie.views.category', name='category'), - url(r'^category/add$', 'dynastie.views.add_category', name='add_category'), + url(r'^category/(\d+)$', 'dynastie.views.category', name='category'), + url(r'^category/add/(\d+)$', 'dynastie.views.add_category', name='add_category'), url(r'^category/edit/(\d+)$', 'dynastie.views.edit_category', name='edit_category'), url(r'^category/delete/(\d+)$', 'dynastie.views.delete_category', name='delete_category'), url(r'^blog$', 'dynastie.views.blog', name='blog'), url(r'^blog/add$', 'dynastie.views.add_blog', name='add_blog'), url(r'^blog/(\d+)$', 'dynastie.views.view_blog', name='view_blog'), url(r'^blog/edit/(\d+)$', 'dynastie.views.edit_blog', name='edit_blog'), - url(r'^post/add/(\d+)$', 'dynastie.views.add_post', name='add_post'), - url(r'^post/edit/(\d+)$', 'dynastie.views.edit_post', name='edit_post'), - url(r'^post/delete/(\d+)$','dynastie.views.delete_post', name='delete_post'), + url(r'^post/add/(\d+)$', 'dynastie.views.add_post', name='add_post'), + url(r'^post/edit/(\d+)$', 'dynastie.views.edit_post', name='edit_post'), + url(r'^post/delete/(\d+)$', 'dynastie.views.delete_post', name='delete_post'), url(r'^generate/(\d+)$', 'dynastie.views.generate', name='generate'), url(r'^preview/(\d+)$', 'dynastie.views.preview', name='preview'), - url(r'^tinyMCEExternalList/post/add/(\d+)$', 'dynastie.views.tinymcelist_add', name='tinymce'), - url(r'^tinyMCEExternalList/post/edit/(\d+)$', 'dynastie.views.tinymcelist_edit', name='tinymce'), + url(r'^tinyMCEExternalList/post/add/(\d+)$', 'dynastie.views.tinymcelist_add', name='tinymce'), + url(r'^tinyMCEExternalList/post/edit/(\d+)$', 'dynastie.views.tinymcelist_edit', name='tinymce'), url(r'^comment/add/(\d+)/(\d+)$', 'dynastie.views.add_comment', name='add_comment'), url(r'^comment/edit/(\d+)$', 'dynastie.views.edit_comment', name='edit_comment'), url(r'^comment/delete/(\d+)$','dynastie.views.delete_comment',name='delete_comment'), diff --git a/views.py b/views.py index d046cfe..ebe6e8a 100644 --- a/views.py +++ b/views.py @@ -14,6 +14,7 @@ from django.template import Variable, VariableDoesNotExist @register.filter def hash(object, attr): + return None pseudo_context = { 'object' : object } try: value = Variable('object.%s' % attr).resolve(pseudo_context) @@ -21,10 +22,13 @@ def hash(object, attr): value = None return value -def have_I_right(request, blog_id=None, post_id=None): +def have_I_right(request, blog_id=None, post_id=None, must_be_superuser=False): b = None p = None + if must_be_superuser and not request.user.is_superuser: + raise Http404 + if not post_id is None: p = Post.objects.filter(pk=post_id) @@ -37,15 +41,16 @@ def have_I_right(request, blog_id=None, post_id=None): if not blog_id is None: if not request.user.is_superuser: - b = Blog.objects.filter(pk=blog_id).filter(writers=request.user.id)[0] + b = Blog.objects.filter(pk=blog_id).filter(writers=request.user.id) + if len(b) == 0: + raise Http404 + b = b[0] else: b = Blog.objects.get(pk=post.blog.id) if b is None: raise Http404 - b = b - return (b, p) def index(request): @@ -143,28 +148,30 @@ def edit_user(request, user_id): return render(request, 'templates/edit_user.html', c) @login_required -def category(request): - categories = Category.objects.all() +def category(request, blog_id): + b = have_I_right(request, blog_id) + + categories = Category.objects.filter(blog_id=blog_id) c = {'categories' : categories} return render(request, 'templates/category.html', c) @login_required -def add_category(request): - if not request.user.is_superuser: - return HttpResponseRedirect('/category') +def add_category(request, blog_id): + b = have_I_right(request, blog_id)[0] if request.method == 'POST': # If the form has been submitted... if 'add' in request.POST: form = CategoryForm(request.POST) # A form bound to the POST data + form.blog = b if form.is_valid(): # All validation rules pass form = form.save() # Process the data in form.cleaned_data # ... - return HttpResponseRedirect('/category') # Redirect after POST + return HttpResponseRedirect('/category/' + str(b.id)) else: - return HttpResponseRedirect('/category') # Redirect after POST + return HttpResponseRedirect('/category/' + str(b.id)) else: form = CategoryForm() # An unbound form @@ -179,16 +186,19 @@ def edit_category(request, category_id): if category is None: raise Http404 + b = have_I_right(request, category.blog.id)[0] + if request.method == 'POST': # If the form has been submitted... if 'cancel' in request.POST: - return HttpResponseRedirect('/category') - if 'edit' in request.POST and request.user.is_superuser: + return HttpResponseRedirect('/category' + str(b.id)) + if 'edit' in request.POST: name = category.name form = CategoryForm(request.POST, instance=category) # A form bound to the POST data if form.is_valid(): # All validation rules pass if request.POST['name'] != name: category.remove() form.save() + return HttpResponseRedirect('/category/' + str(b.id)) else: form = CategoryForm(instance=category) # An unbound form @@ -198,18 +208,17 @@ def edit_category(request, category_id): @login_required def delete_category(request, category_id): - if not request.user.is_superuser: - return HttpResponseRedirect('/category/' + str(category_id)) - category = Category.objects.get(pk=category_id) if category is None: raise Http404 + b = have_I_right(request, category.blog.id)[0] + category.remove() category.delete() - return HttpResponseRedirect('/category') + return HttpResponseRedirect('/category/' + str(b.id)) @login_required def blog(request): @@ -300,8 +309,7 @@ def edit_blog(request, blog_id): @login_required def add_post(request, blog_id): - if not request.user.is_superuser: - (b,) = have_I_right(request, blog_id) + (b,) = have_I_right(request, blog_id) if request.method == 'POST': # If the form has been submitted... if 'add' in request.POST: @@ -401,7 +409,22 @@ def generate(request, blog_id): b = Blog.objects.get(pk=blog_id) form = BlogForm(instance=b) - c = {'blog' : b, 'posts' : posts, 'form' : form, 'report': report} + comments = Comment.objects.filter(post=post).order_by('date') + + comment_list_list = [] + for comment in comments: + try: + if comment.parent.id is None: + comment_list_list.append([comment]) + else: + for comment_list in comment_list_list: + if comment_list[0] == comment.parent: + comment_list[0].append(comment) + break + except Comment.DoesNotExist: + comment_list_list.append([comment]) + + c = {'blog' : b, 'posts' : posts, 'form' : form, 'report': report, 'comments' : comment_list_list} return render(request, 'templates/generate.html', c) @@ -530,7 +553,7 @@ def add_comment(request, post_id, parent_id): if inspect.isclass(obj) and obj.__module__.startswith("dynastie") \ and obj.__module__.endswith("post"): e = obj() - content = e.generate(blog, b.src_path, b.output_path, post) + content = e._generate(blog, b.src_path, b.output_path, post) break # Send emails