Commit a8858fa7 authored by Skia's avatar Skia

Add home for users and clubs

parent 830c15a5
Pipeline #109 passed with stage
in 1 minute and 45 seconds
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0002_user_home'),
('club', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='club',
name='home',
field=models.OneToOneField(blank=True, null=True, related_name='home_of_club', verbose_name='home', to='core.SithFile'),
),
]
......@@ -3,10 +3,10 @@ from django.core import validators
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
from django.db import IntegrityError
from django.db import IntegrityError, transaction
from django.core.urlresolvers import reverse
from core.models import User, MetaGroup, Group
from core.models import User, MetaGroup, Group, SithFile
from subscription.models import Subscriber
# Create your models here.
......@@ -35,6 +35,7 @@ class Club(models.Model):
default=settings.SITH_GROUPS['root']['id'])
edit_groups = models.ManyToManyField(Group, related_name="editable_club", blank=True)
view_groups = models.ManyToManyField(Group, related_name="viewable_club", blank=True)
home = models.OneToOneField(SithFile, related_name='home_of_club', verbose_name=_("home"), null=True, blank=True)
def check_loop(self):
"""Raise a validation error when a loop is found within the parent list"""
......@@ -49,11 +50,45 @@ class Club(models.Model):
def clean(self):
self.check_loop()
def save(self):
if self.id is None:
MetaGroup(name=self.unix_name+settings.SITH_BOARD_SUFFIX).save()
MetaGroup(name=self.unix_name+settings.SITH_MEMBER_SUFFIX).save()
super(Club, self).save()
def _change_unixname(self, new_name):
c = Club.objects.filter(unix_name=new_name).first()
if c is None:
if self.home:
self.home.name = new_name
self.home.save()
else:
raise ValidationError(_("A club with that unix_name already exists"))
def make_home(self):
if not self.home:
home_root = SithFile.objects.filter(parent=None, name="clubs").first()
root = User.objects.filter(username="root").first()
if home_root and root:
home = SithFile(parent=home_root, name=self.unix_name, owner=root)
home.save()
self.home = home
self.save()
def save(self, *args, **kwargs):
with transaction.atomic():
creation = False
if self.id is None:
creation = True
else:
old = Club.objects.filter(id=self.id).first()
if old.unix_name != self.unix_name:
self._change_unixname(self.unix_name)
super(Club, self).save(*args, **kwargs)
if creation:
board = MetaGroup(name=self.unix_name+settings.SITH_BOARD_SUFFIX)
board.save()
member = MetaGroup(name=self.unix_name+settings.SITH_MEMBER_SUFFIX)
member.save()
subscribers = Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first()
self.make_home()
self.home.edit_groups = [board]
self.home.view_groups = [member, subscribers]
self.home.save()
def __str__(self):
return self.name
......
......@@ -8,7 +8,7 @@ from django.conf import settings
from django.db import connection
from core.models import Group, User, Page, PageRev
from core.models import Group, User, Page, PageRev, SithFile
from accounting.models import GeneralJournal, BankAccount, ClubAccount, Operation, AccountingType, Company
from club.models import Club, Membership
from subscription.models import Subscription, Subscriber
......@@ -38,6 +38,10 @@ class Command(BaseCommand):
is_superuser=True, is_staff=True)
root.set_password("plop")
root.save()
home_root = SithFile(parent=None, name="users", is_folder=True, owner=root)
home_root.save()
club_root = SithFile(parent=None, name="clubs", is_folder=True, owner=root)
club_root.save()
main_club = Club(name=settings.SITH_MAIN_CLUB['name'], unix_name=settings.SITH_MAIN_CLUB['unix_name'],
address=settings.SITH_MAIN_CLUB['address'])
main_club.save()
......@@ -57,6 +61,12 @@ class Command(BaseCommand):
c.save()
self.reset_index("counter")
Counter(name="Eboutic", club=main_club, type='EBOUTIC').save()
home_root.view_groups = [Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first()]
club_root.view_groups = [Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first()]
home_root.save()
club_root.save()
p = Page(name='Index')
p.set_lock(root)
p.save()
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='user',
name='home',
field=models.OneToOneField(null=True, verbose_name='home', to='core.SithFile', blank=True, related_name='home_of'),
),
]
......@@ -6,6 +6,7 @@ from django.core import validators
from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
from django.conf import settings
from django.db import transaction
from datetime import datetime, timedelta
import unicodedata
......@@ -99,6 +100,7 @@ class User(AbstractBaseUser):
),
)
groups = models.ManyToManyField(RealGroup, related_name='users', blank=True)
home = models.OneToOneField('SithFile', related_name='home_of', verbose_name=_("home"), null=True, blank=True)
objects = UserManager()
......@@ -157,6 +159,32 @@ class User(AbstractBaseUser):
return True
return self.groups.filter(name=group_name).exists()
def save(self, *args, **kwargs):
with transaction.atomic():
if self.id:
old = User.objects.filter(id=self.id).first()
if old.username != self.username:
self._change_username(self.username)
super(User, self).save(*args, **kwargs)
def make_home(self):
if self.home is None:
home_root = SithFile.objects.filter(parent=None, name="users").first()
if home_root is not None:
home = SithFile(parent=home_root, name=self.username, owner=self)
home.save()
self.home = home
self.save()
def _change_username(self, new_name):
u = User.objects.filter(username=new_name).first()
if u is None:
if self.home:
self.home.name = new_name
self.home.save()
else:
raise ValidationError(_("A user with that username already exists"))
def get_profile(self):
return {
"last_name": self.last_name,
......
......@@ -26,6 +26,12 @@
<div class="tool-bar">
<div class="tools">
<div>
{% set home = user.home %}
{% if home %}
<a href="{{ url('core:file_detail', home.id, popup) }}">{% trans %}My files{% endtrans %}</a>
{% endif %}
</div>
{% if file %}
<a href="{{ url('core:file_detail', file.id, popup) }}">{% trans %}View{% endtrans %}</a>
{% if can_edit(file, user) %}
......
......@@ -39,7 +39,9 @@
<p><a href="{{ url('core:download', file_id=file.id) }}">{% trans %}Download{% endtrans %}</a></p>
{% endif %}
{% if not file.home_of and not file.home_of_club and file.parent %}
<p><a href="{{ url('core:file_delete', file_id=file.id, popup=popup) }}">{% trans %}Delete{% endtrans %}</a></p>
{% endif %}
{% endblock %}
......
......@@ -2,13 +2,6 @@
{% block content %}
{{ super() }}
{% if user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) %}
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p() }}
<p><input type="submit" value="{% trans %}Add{% endtrans %}"></p>
</form>
{% endif %}
{% if file_list %}
<h3>{% trans %}File list{% endtrans %}</h3>
<ul>
......
......@@ -62,27 +62,9 @@ class AddFileForm(forms.Form):
self.add_error(None, _("Error uploading file %(file_name)s: %(msg)s") %
{'file_name': f, 'msg': str(e.message)})
class FileListView(ListView, FormMixin):
class FileListView(ListView):
template_name = 'core/file_list.jinja'
context_object_name = "file_list"
form_class = AddFileForm
def get(self, request, *args, **kwargs):
self.form = self.get_form()
return super(FileListView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
self.form = self.get_form()
files = request.FILES.getlist('file_field')
if request.user.is_authenticated() and request.user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) and self.form.is_valid():
self.form.process(parent=None, owner=request.user, files=files)
if self.form.is_valid():
return super(FileListView, self).form_valid(self.form)
return self.form_invalid(self.form)
def get_success_url(self):
return reverse('core:file_list', kwargs={'popup': self.kwargs['popup'] or ""})
def get_queryset(self):
return SithFile.objects.filter(parent=None)
......@@ -90,7 +72,6 @@ class FileListView(ListView, FormMixin):
def get_context_data(self, **kwargs):
kwargs = super(FileListView, self).get_context_data(**kwargs)
kwargs['popup'] = ""
kwargs['form'] = self.form
if self.kwargs['popup']:
kwargs['popup'] = 'popup'
return kwargs
......
......@@ -241,8 +241,8 @@ SITH_GROUPS = {
},
}
SITH_BOARD_SUFFIX="-board"
SITH_MEMBER_SUFFIX="-members"
SITH_BOARD_SUFFIX="-bureau"
SITH_MEMBER_SUFFIX="-membres"
SITH_MAIN_BOARD_GROUP=SITH_MAIN_CLUB['unix_name']+SITH_BOARD_SUFFIX
SITH_MAIN_MEMBERS_GROUP=SITH_MAIN_CLUB['unix_name']+SITH_MEMBER_SUFFIX
......
......@@ -54,6 +54,7 @@ class Subscription(models.Model):
from counter.models import Customer
if not Customer.objects.filter(user=self.member).exists():
Customer(user=self.member, account_id=Customer.generate_account_id(self.id), amount=0).save()
self.member.make_home()
def get_absolute_url(self):
return reverse('core:user_profile', kwargs={'user_id': self.member.pk})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment