Rafał Pitoń 11 years ago
parent
commit
0c87be1a5d
2 changed files with 7 additions and 8 deletions
  1. 3 1
      misago/apps/threads/forms.py
  2. 4 7
      misago/apps/threads/posting.py

+ 3 - 1
misago/apps/threads/forms.py

@@ -68,6 +68,7 @@ class PollFormMixin(object):
 
 
     def clean_poll_choices(self):
     def clean_poll_choices(self):
         self.clean_choices = []
         self.clean_choices = []
+        self.new_choices = []
         data = self.cleaned_data['poll_choices']
         data = self.cleaned_data['poll_choices']
 
 
         if self.poll:
         if self.poll:
@@ -82,6 +83,7 @@ class PollFormMixin(object):
                     if len(choice) > 250:
                     if len(choice) > 250:
                         raise forms.ValidationError(_("Poll choices should be no longer than 250 characters."))
                         raise forms.ValidationError(_("Poll choices should be no longer than 250 characters."))
                     self.clean_choices.append(choice)
                     self.clean_choices.append(choice)
+                    self.new_choices.append(choice)
             if len(self.clean_choices) < 2:
             if len(self.clean_choices) < 2:
                 raise forms.ValidationError(_("Poll needs at least two choices."))
                 raise forms.ValidationError(_("Poll needs at least two choices."))
             if len(self.clean_choices) > 10:
             if len(self.clean_choices) > 10:
@@ -220,4 +222,4 @@ class PollVoteForm(Form):
                                                       self.poll.max_choices) % {'limit': self.poll.max_choices})
                                                       self.poll.max_choices) % {'limit': self.poll.max_choices})
         except TypeError:
         except TypeError:
             pass
             pass
-        return data
+        return data

+ 4 - 7
misago/apps/threads/posting.py

@@ -51,22 +51,19 @@ class PollFormMixin(object):
         poll.save()
         poll.save()
 
 
     def update_poll_choices(self, poll, form):
     def update_poll_choices(self, poll, form):
-        choices = []
         for option in form.changed_choices:
         for option in form.changed_choices:
-            option.save()
-            choices.append(option)
+            option.save(force_update=True)
         for option in form.deleted_choices:
         for option in form.deleted_choices:
             poll.votes -= option.votes
             poll.votes -= option.votes
             option.delete()
             option.delete()
-        for name in set(form.clean_choices) - set([x.name for x in form.changed_choices]):
+        for name in form.new_choices:
             option = PollOption.objects.create(
             option = PollOption.objects.create(
                                                poll=poll,
                                                poll=poll,
                                                forum=self.forum,
                                                forum=self.forum,
                                                thread=self.thread,
                                                thread=self.thread,
                                                name=name,
                                                name=name,
                                                )
                                                )
-            choices.append(option)
-        poll.choices_cache = choices
+        poll.choices_cache = [x for x in poll.option_set.all()]
 
 
     def delete_poll(self):
     def delete_poll(self):
         self.thread.poll.delete()
         self.thread.poll.delete()
@@ -113,7 +110,7 @@ class EditThreadView(EditThreadBaseView, TypeMixin, PollFormMixin, PrefixFormMix
     form_type = EditThreadForm
     form_type = EditThreadForm
 
 
     def after_form(self, form):
     def after_form(self, form):
-        if self.thread.poll:
+        if self.thread.poll and self.request.acl.threads.can_edit_poll(self.forum, self.thread.poll):
             if form.cleaned_data.get('poll_delete'):
             if form.cleaned_data.get('poll_delete'):
                 self.delete_poll()
                 self.delete_poll()
                 self.thread.save()
                 self.thread.save()