mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-10 11:59:23 +00:00
Some refactoring and misc improvements
This commit is contained in:
@ -14,12 +14,12 @@ class Migration(migrations.Migration):
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='club',
|
||||
name='edit_group',
|
||||
name='edit_groups',
|
||||
field=models.ManyToManyField(to='core.Group', blank=True, related_name='editable_club'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='club',
|
||||
name='view_group',
|
||||
name='view_groups',
|
||||
field=models.ManyToManyField(to='core.Group', blank=True, related_name='viewable_club'),
|
||||
),
|
||||
]
|
||||
|
@ -6,6 +6,7 @@ from django.core.exceptions import ValidationError
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from core.models import User, Group
|
||||
from subscription.models import Subscriber
|
||||
|
||||
# Create your models here.
|
||||
|
||||
@ -31,8 +32,8 @@ class Club(models.Model):
|
||||
# email = models.EmailField(_('email address'), unique=True) # This should, and will be generated automatically
|
||||
owner_group = models.ForeignKey(Group, related_name="owned_club",
|
||||
default=settings.AE_GROUPS['root']['id'])
|
||||
edit_group = models.ManyToManyField(Group, related_name="editable_club", blank=True)
|
||||
view_group = models.ManyToManyField(Group, related_name="viewable_club", blank=True)
|
||||
edit_groups = models.ManyToManyField(Group, related_name="editable_club", blank=True)
|
||||
view_groups = models.ManyToManyField(Group, related_name="viewable_club", blank=True)
|
||||
|
||||
def check_loop(self):
|
||||
"""Raise a validation error when a loop is found within the parent list"""
|
||||
@ -53,6 +54,38 @@ class Club(models.Model):
|
||||
def get_absolute_url(self):
|
||||
return reverse('club:club_view', kwargs={'club_id': self.id})
|
||||
|
||||
def is_owned_by(self, user):
|
||||
"""
|
||||
Method to see if that object can be super edited by the given user
|
||||
"""
|
||||
if user.groups.filter(name=settings.AE_GROUPS['board']['name']).exists():
|
||||
return True
|
||||
return False
|
||||
|
||||
def can_be_edited_by(self, user):
|
||||
"""
|
||||
Method to see if that object can be edited by the given user
|
||||
"""
|
||||
ms = self.get_membership_for(user)
|
||||
if ms is not None and ms.role >= 7:
|
||||
return True
|
||||
return False
|
||||
|
||||
def can_be_viewed_by(self, user):
|
||||
"""
|
||||
Method to see if that object can be seen by the given user
|
||||
"""
|
||||
sub = Subscriber.objects.filter(pk=user.pk).first()
|
||||
if sub is None:
|
||||
return False
|
||||
return sub.is_subscribed()
|
||||
|
||||
def get_membership_for(self, user):
|
||||
"""
|
||||
Returns the current membership the given user
|
||||
"""
|
||||
return self.members.filter(user=user.id).filter(end_date=None).first()
|
||||
|
||||
class Membership(models.Model):
|
||||
"""
|
||||
The Membership class makes the connection between User and Clubs
|
||||
|
@ -3,17 +3,16 @@
|
||||
{% block content %}
|
||||
<h3>Club</h3>
|
||||
<p><a href="{{ url('club:club_list') }}">Back to list</a></p>
|
||||
{% if user.can_edit(club) %}
|
||||
{% if can_edit(club, user) %}
|
||||
<p><a href="{{ url('club:club_edit', club_id=club.pk) }}">Edit</a></p>
|
||||
<p><a href="{{ url('club:club_members', club_id=club.pk) }}">Edit members</a></p>
|
||||
{% endif %}
|
||||
{% if user.is_owner(club) or user.membership.filter(end_date=None).filter(club=club.id).first() is not none %}
|
||||
{% if can_edit_prop(club, user) %}
|
||||
<p><a href="{{ url('club:club_prop', club_id=club.pk) }}">Prop</a>
|
||||
TODO FIXME: this code sucks and is just a test!
|
||||
We need something really easy to manage the views rights regarding the subscribing status and the membership of
|
||||
someone!
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if can_view(club, user) %}
|
||||
<p><a href="{{ url('club:club_members', club_id=club.pk) }}">Members</a></p>
|
||||
{% endif %}
|
||||
<h3>{{ club.name }}</h3>
|
||||
<p>{{ club.address }}</p>
|
||||
<ul>
|
||||
|
@ -6,7 +6,7 @@ urlpatterns = [
|
||||
url(r'^$', ClubListView.as_view(), name='club_list'),
|
||||
url(r'^(?P<club_id>[0-9]+)/$', ClubView.as_view(), name='club_view'),
|
||||
url(r'^(?P<club_id>[0-9]+)/edit$', ClubEditView.as_view(), name='club_edit'),
|
||||
url(r'^(?P<club_id>[0-9]+)/members$', ClubEditMembersView.as_view(), name='club_members'),
|
||||
url(r'^(?P<club_id>[0-9]+)/members$', ClubMembersView.as_view(), name='club_members'),
|
||||
url(r'^(?P<club_id>[0-9]+)/prop$', ClubEditPropView.as_view(), name='club_prop'),
|
||||
#url(r'^(?P<club_id>[0-9]+)/tools$', ClubToolsView.as_view(), name='club_tools'),
|
||||
|
||||
|
@ -3,10 +3,12 @@ from django.shortcuts import render
|
||||
from django.views.generic import ListView, DetailView
|
||||
from django.views.generic.edit import UpdateView, CreateView
|
||||
from django.forms import CheckboxSelectMultiple
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
|
||||
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin
|
||||
from club.models import Club, Membership
|
||||
from subscription.views import SubscriberMixin
|
||||
|
||||
class ClubListView(CanViewMixin, ListView):
|
||||
model = Club
|
||||
@ -31,23 +33,31 @@ class ClubMemberForm(forms.ModelForm):
|
||||
fields = ['user', 'role']
|
||||
|
||||
def clean(self):
|
||||
print(self.__dict__)
|
||||
# TODO: see how to get access to request.user! We need some right validation somewhere!
|
||||
return super(ClubMemberForm, self).clean()
|
||||
ret = super(ClubMemberForm, self).clean()
|
||||
ms = self.instance.club.get_membership_for(self._user)
|
||||
if ms is not None and ms.role >= self.cleaned_data['role']:
|
||||
return ret
|
||||
raise ValidationError("You do not have the permission to do that")
|
||||
|
||||
class ClubEditMembersView(CanEditMixin, UpdateView):
|
||||
class ClubMembersView(CanViewMixin, UpdateView):
|
||||
model = Club
|
||||
pk_url_kwarg = "club_id"
|
||||
form_class = ClubMemberForm
|
||||
template_name = 'club/club_members.jinja'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ClubMembersView, self).__init__(*args, **kwargs)
|
||||
# TODO FIXME: error forbidden when adding new member to club, because self.object changes to the Membership object
|
||||
# somewhere!!!
|
||||
|
||||
def get_form(self):
|
||||
form = super(ClubEditMembersView, self).get_form()
|
||||
form = super(ClubMembersView, self).get_form()
|
||||
if 'user' in form.data and form.data.get('user') != '': # Load an existing membership if possible
|
||||
form.instance = Membership.objects.filter(club=self.object).filter(user=form.data.get('user')).filter(end_date=None).first()
|
||||
if form.instance is None: # Instanciate a new membership
|
||||
form.instance = Membership(club=self.object, user=self.request.user)
|
||||
form.initial = {'user': self.request.user}
|
||||
form._user = self.request.user
|
||||
return form
|
||||
|
||||
class ClubEditPropView(CanEditPropMixin, UpdateView):
|
||||
|
Reference in New Issue
Block a user