From ba00f38e32319daa91c0d8e46ffa38cc47f474a6 Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Tue, 11 Mar 2014 09:25:34 +0100 Subject: [PATCH 1/3] changed dependency to python 2.6.9 --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 919830cfc..6420c928c 100644 --- a/README.rst +++ b/README.rst @@ -26,7 +26,7 @@ Installation on GNU/Linux or Mac OS X 1. Check requirements - Make sure that you have installed Python Programming Language 2 (>= 2.6) + Make sure that you have installed Python Programming Language 2 (>= 2.6.9) on your system. You will also need the Python development headers. For example for Ubuntu run:: @@ -77,7 +77,7 @@ portable version you should observe the following install steps.* 1. Check requirements - Make sure that you have installed Python Programming Language 2 (>= 2.6) + Make sure that you have installed Python Programming Language 2 (>= 2.6.9) and Setuptools on your system. a. Download and run the `Python 32-bit MSI installer From 39de1924cb9dcfa93a5bdd95fa30c273f72fe420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norman=20J=C3=A4ckel?= Date: Fri, 7 Mar 2014 18:57:03 +0100 Subject: [PATCH 2/3] Added extra permission check to speaker widget, fixed #1191 only for 1.5.x branch --- CHANGELOG | 2 ++ openslides/agenda/views.py | 2 +- openslides/projector/api.py | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 33acad76f..8f2f06e50 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,8 @@ Version 1.5.1 (unreleased) ========================== [https://github.com/OpenSlides/OpenSlides/issues?milestone=15] +Agenda: +- Fixed permission error in list of speakers widget. Participant: - Added permission to see participants also to the manager group. Files: diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index 18637e688..ae2fb286c 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -669,6 +669,6 @@ def get_widgets(request): name='append_to_list_of_speakers', display_name=_('List of speakers'), template='agenda/speaker_widget.html', - permission_required='agenda.can_be_speaker', + permission_required=('agenda.can_be_speaker', 'agenda.can_manage_agenda'), # Short hack only for OpenSlides >=1.5.1, <1.6.0 default_column=1, default_weight=30)] diff --git a/openslides/projector/api.py b/openslides/projector/api.py index f1b52ddbc..5af433a2b 100644 --- a/openslides/projector/api.py +++ b/openslides/projector/api.py @@ -250,6 +250,11 @@ def get_all_widgets(request, session=False): session_widgets = request.session.get('widgets', {}) widgets = SortedDict() for widget in all_module_widgets: + if isinstance(widget.permission_required, tuple): + for perm in widget.permission_required: + if request.user.has_perm(perm): + widget.permission_required = None + break if (widget.permission_required is None or request.user.has_perm(widget.permission_required)): if not session or session_widgets.get(widget.get_name(), True): From ee3ec3d4b6c5cd1e5c0a7257306fd34f707f11e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norman=20J=C3=A4ckel?= Date: Thu, 27 Mar 2014 20:38:13 +0100 Subject: [PATCH 3/3] Fixed flake8 errors. --- openslides/agenda/views.py | 2 +- openslides/assignment/models.py | 2 +- openslides/assignment/views.py | 2 +- openslides/mediafile/forms.py | 2 +- openslides/motion/models.py | 20 ++++++++++---------- openslides/motion/views.py | 2 +- openslides/participant/forms.py | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index ae2fb286c..fe2af34c8 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -70,7 +70,7 @@ class Overview(TemplateView): if minutes < 10: minutes = "%s%s" % (0, minutes) item.duration = "%s:%s" % (hours, minutes) - if not start is None: + if start is not None: item.tooltip = start + duration if start is None: diff --git a/openslides/assignment/models.py b/openslides/assignment/models.py index 67f75c93e..de82dbdd2 100644 --- a/openslides/assignment/models.py +++ b/openslides/assignment/models.py @@ -178,7 +178,7 @@ class Assignment(SlideMixin, models.Model): participants.append(candidate.person) participants.sort(key=lambda person: person.sort_name) return participants - #return candidates.values_list('person', flat=True) + # return candidates.values_list('person', flat=True) def set_elected(self, person, value=True): candidate = self.assignment_candidates.get(person=person) diff --git a/openslides/assignment/views.py b/openslides/assignment/views.py index 9fd602094..3037394d1 100644 --- a/openslides/assignment/views.py +++ b/openslides/assignment/views.py @@ -221,7 +221,7 @@ class PollUpdateView(PollFormView): def get_success_url(self): return_url = '' - if not 'apply' in self.request.POST: + if 'apply' not in self.request.POST: return_url = reverse('assignment_detail', args=[self.poll.assignment.id]) return return_url diff --git a/openslides/mediafile/forms.py b/openslides/mediafile/forms.py index 9b684b8a9..fb129d304 100644 --- a/openslides/mediafile/forms.py +++ b/openslides/mediafile/forms.py @@ -29,7 +29,7 @@ class MediafileUpdateForm(CssClassMixin, ModelForm): """ Method to save the form. Here the overwrite is to delete old files. """ - if not self.instance.pk is None: + if self.instance.pk is not None: old_file = Mediafile.objects.get(pk=self.instance.pk).mediafile if not old_file == self.instance.mediafile: old_file.delete() diff --git a/openslides/motion/models.py b/openslides/motion/models.py index cdb7c4d02..37316293b 100644 --- a/openslides/motion/models.py +++ b/openslides/motion/models.py @@ -72,7 +72,7 @@ class Motion(SlideMixin, models.Model): """ # TODO: proposal - #master = models.ForeignKey('self', null=True, blank=True) + # master = models.ForeignKey('self', null=True, blank=True) class Meta: permissions = ( @@ -542,8 +542,8 @@ class MotionVersion(models.Model): creation_time = models.DateTimeField(auto_now=True) """Time when the version was saved.""" - #identifier = models.CharField(max_length=255, verbose_name=ugettext_lazy("Version identifier")) - #note = models.TextField(null=True, blank=True) + # identifier = models.CharField(max_length=255, verbose_name=ugettext_lazy("Version identifier")) + # note = models.TextField(null=True, blank=True) class Meta: unique_together = ("motion", "version_number") @@ -625,11 +625,11 @@ class Category(models.Model): class Meta: ordering = ['prefix'] -## class Comment(models.Model): - ## motion_version = models.ForeignKey(MotionVersion) - ## text = models.TextField() - ## author = PersonField() - ## creation_time = models.DateTimeField(auto_now=True) +# class Comment(models.Model): + # motion_version = models.ForeignKey(MotionVersion) + # text = models.TextField() + # author = PersonField() + # creation_time = models.DateTimeField(auto_now=True) class MotionLog(models.Model): @@ -727,8 +727,8 @@ class MotionPoll(RelatedModelMixin, CountInvalid, CountVotesCast, BasePoll): def set_options(self): """Create the option class for this poll.""" - #TODO: maybe it is possible with .create() to call this without poll=self - # or call this in save() + # TODO: maybe it is possible with .create() to call this without poll=self + # or call this in save() self.get_option_class()(poll=self).save() def append_pollform_fields(self, fields): diff --git a/openslides/motion/views.py b/openslides/motion/views.py index 5bc0221ed..4fd19cd9c 100644 --- a/openslides/motion/views.py +++ b/openslides/motion/views.py @@ -183,7 +183,7 @@ class MotionCreateView(MotionEditMixin, CreateView): """ response = super(MotionCreateView, self).form_valid(form) self.object.write_log([ugettext_noop('Motion created')], self.request.user) - if (not 'submitter' in form.cleaned_data or + if ('submitter' not in form.cleaned_data or not form.cleaned_data['submitter']): self.object.add_submitter(self.request.user) return response diff --git a/openslides/participant/forms.py b/openslides/participant/forms.py index 4724c8f2b..8bde79a8c 100644 --- a/openslides/participant/forms.py +++ b/openslides/participant/forms.py @@ -127,7 +127,7 @@ class GroupForm(forms.ModelForm, CssClassMixin): # TODO: Check this in clean_users or clean_permissions if (self.request and not self.request.user.is_superuser and - not self.request.user in self.cleaned_data['users'] and + self.request.user not in self.cleaned_data['users'] and not Group.objects.exclude(pk=self.instance.pk).filter( permissions__in=[get_protected_perm()], user__pk=self.request.user.pk).exists()):