This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Empty file.
@@ -1,5 +1,7 @@
# coding: utf-8

from __future__ import unicode_literals

from django.db import models
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
@@ -1,5 +1,7 @@
# coding: utf-8

from __future__ import unicode_literals

from django.conf import settings
from django.core.urlresolvers import reverse_lazy
from django.core.mail import send_mail

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Empty file.
@@ -1,26 +1,14 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-04-04 11:00
from __future__ import unicode_literals

from django.db import models, migrations
from django.conf import settings
import datetime
from django.utils.timezone import utc
from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='Member',
fields=[
('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
('is_member', models.BooleanField(default=False)),
('until', models.DateField(default=datetime.datetime(2015, 7, 22, 12, 27, 32, 45840, tzinfo=utc))),
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
],
),
]

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

@@ -1,12 +1,15 @@
# coding: utf-8

from __future__ import unicode_literals

from django.conf import settings
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.utils import timezone
from django.utils.text import slugify
from django.utils.translation import ugettext_lazy as _

import datetime as dt
@@ -44,9 +47,11 @@ class Member(models.Model):

wants_newsletter = models.BooleanField(default=True,
verbose_name=_("Newsletter"))
slug = models.SlugField(max_length=30)

def get_absolute_url(self):
return reverse('other-user-profile', kwargs={'pk': self.pk})
return reverse('other-user-profile',
kwargs={'slug': self.user.username})

def is_member(self):
return self.until > timezone.now().date()
@@ -67,7 +72,7 @@ class Meta:
def create_member_for_new_user(sender, created, instance, **kwargs):
if created:
member = Member(user=instance, image=None, location=None,
until=timezone.now())
until=timezone.now(), slug=slugify(instance.username))
member.save()


@@ -45,6 +45,9 @@ <h1 id="logo"><a href="{% url 'mainpage' %}">JDR-poly</a></h1>
<li><a href="{% url 'event-detail' 4 %}">Week-ends jeu de rôle</a></li>
</ul>
</li>
<li>
<a class="icon fa-heartbeat" href="{% url 'svz-main' %}">Students vs. Zombies</a>
</li>
<li>
<a href="{% url 'gallery-list' %}#main" class="icon fa-photo"><span>Photos</span></a>
</li>
@@ -7,26 +7,26 @@
{% load staticfiles %}

{% block title %}
{{ user.profile }}
Profile utilisateur de {{ member.user.username }}
{% endblock %}

{% block content %}
{% if member %}
<div class="row">
<header>
<h2>{{ member.profile }}</h2>
<h2>Profile de {{ member.user.username }}</h2>
</header>
<div class="6u 12u(mobile)">
<span class="image row 50%">
<img src="{% static 'images/default.jpg' %}" height="200" />
</span>
<div class="class 6u 12u(mobile)">
<strong>Nom d'utilisateur :</strong> {{ member.username }}
<strong>Nom d'utilisateur :</strong> {{ member.user.username }}
</div>
<div class="class 6u 12u(mobile)">
<strong>Addresse mail :</strong>
{% if member.email %}
{{ member.email }}
{% if member.user.email %}
{{ member.user.email }}
{% else %}
Non spécifiée
{% endif %}
@@ -48,7 +48,7 @@ <h2>{{ member.profile }}</h2>
{% endif %}
</div>
<div class="6u 12u(mobile)">
<strong>Membre jusqu'au</strong> {{ member.profile.until }}
<strong>Membre jusqu'au</strong> {{ member.until }}
</div>
</div>
{% if request.user == member %}
@@ -5,9 +5,9 @@
password_reset_complete,
password_reset_done,
password_reset_confirm)
from .views import (UserProfileView, SelfProfileView,
UserCreateView, PasswordChangeView, CodeUseView,
UserUpdateView, MainMemberView, CodeCreateView)
from .views import (SelfProfileView, BugFreeProfileView,
UserCreateView, CodeUseView, UserUpdateView,
MainMemberView, CodeCreateView)

urlpatterns = [
url(r'^$', MainMemberView.as_view(), name='user-main'),
@@ -22,14 +22,16 @@
password_reset_confirm, name='password_reset_confirm'),
url(r'^password_reset_done/$', password_reset_done,
name='password_reset_done'),
url(r'^password_reset_complete/$', password_reset_complete,
name='password_reset_complete'),
url(r'^password/$', password_change, name='user-password',
kwargs={'template_name': 'members/password_change.html',
'post_change_redirect': reverse_lazy('user-password-ok')}),
url(r'^password_done/$', password_change_done, name='user-password-ok',
kwargs={'template_name': 'members/password_change_ok.html'}),
url(r'^logout$', logout, name='logout',
kwargs={'next_page': reverse_lazy('login')}),
url(r'^(?P<pk>\d+)$', UserProfileView.as_view(),
url(r'^view/(?P<slug>[-\w]+)$', BugFreeProfileView.as_view(),
name='other-user-profile'),
url(r'^code$', CodeUseView.as_view(), name='use-code'),
url(r'^code-gen/$', CodeCreateView.as_view(), name='create-code'),
@@ -1,5 +1,7 @@
# coding: utf-8

from __future__ import unicode_literals

from django.contrib.auth.decorators import login_required, user_passes_test
from django.views.generic import (DetailView, CreateView, FormView,
View, UpdateView, TemplateView)
@@ -60,21 +62,24 @@ class PasswordChangeOkView(LoginRequiredMixin, View):
template_name = 'members/password_change_ok.html'


class UserProfileView(LoginRequiredMixin, DetailView):
"""
View pour voir le profil d'un utilisateur arbitraire
"""
model = User
class BugFreeProfileView(TemplateView):
template_name = 'members/view.html'
context_object_name = 'member'

def get_context_data(self, *args, **kwargs):
context = super(TemplateView, self).get_context_data()
context['member'] = Member.objects.get(slug=kwargs['slug'])
return context

class SelfProfileView(UserProfileView):

class SelfProfileView(BugFreeProfileView):
"""
View pour voir son propre profil utilisateur
"""
def get_object(self):
return self.request.user
def get_context_data(self, *args, **kwargs):
context = super(BugFreeProfileView, self).get_context_data(*args,
**kwargs)
context['member'] = self.request.user.profile
return context


class UserUpdateView(LoginRequiredMixin, UpdateView):
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-02-29 14:51
# Generated by Django 1.9.2 on 2016-04-04 09:22
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):
@@ -14,18 +15,84 @@ class Migration(migrations.Migration):

operations = [
migrations.CreateModel(
name='Player',
name='Gazette',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sciper', models.IntegerField(default=0, unique=True)),
('name', models.TextField(max_length=200)),
('contaminations', models.IntegerField(default=0)),
('token_spent', models.IntegerField(default=0)),
('zombie', models.BooleanField(default=False)),
('revive_count', models.IntegerField(default=0)),
('number', models.IntegerField(default=0, verbose_name='Num\xe9ro')),
('pdf', models.FileField(upload_to='svz/gazette/%Y', verbose_name='PDF')),
('preview', models.ImageField(upload_to='svz/gazette/p/%Y', verbose_name='Aper\xe7u')),
('short_description', models.TextField(verbose_name='Description courte')),
],
options={
'ordering': ('-number',),
'verbose_name': 'Gazette',
'verbose_name_plural': 'Gazettes',
},
),
migrations.CreateModel(
name='Player',
fields=[
('sciper', models.IntegerField(default=0, primary_key=True, serialize=False, verbose_name='SCIPER')),
('name', models.TextField(max_length=200, verbose_name='Nom')),
('contaminations', models.IntegerField(default=0, verbose_name='Contaminations')),
('token_spent', models.IntegerField(default=0, verbose_name='Token d\xe9pens\xe9s')),
('zombie', models.BooleanField(default=False, verbose_name='Zombie ?')),
('email', models.EmailField(max_length=300, null=True, verbose_name='Email')),
],
options={
'ordering': ('contaminations',),
'verbose_name': 'Joueur',
'verbose_name_plural': 'Joueurs',
},
),
migrations.CreateModel(
name='Reward',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, verbose_name='Nom')),
],
options={
'ordering': ('sponsor', 'name'),
'verbose_name': 'Lot',
'verbose_name_plural': 'Lots',
},
),
migrations.CreateModel(
name='Rule',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, verbose_name='Nom')),
('text', models.TextField(max_length=500, verbose_name='Contenu')),
('icon', models.CharField(choices=[('fa-lock', 'Cadenas'), ('fa-cog', 'Rouage'), ('fa-user', 'Personne'), ('fa-male', 'Homme'), ('fa-female', 'Femme'), ('fa-server', 'Serveur'), ('fa-crosshair', 'Viseur'), ('fa-check', 'Check'), ('fa-ticket', 'Ticket'), ('fa-heartbeat', 'Coeur'), ('fa-medkit', 'Medkit'), ('fa-trophy', 'Troph\xe9')], max_length=20, verbose_name='Icone')),
('importance', models.IntegerField(choices=[(0, 'Extr\xeame'), (1, 'Haute'), (2, 'Moyenne'), (3, 'Faible')], default=1, verbose_name='Importance')),
],
options={
'ordering': ('importance',),
'verbose_name': 'R\xe8gle',
'verbose_name_plural': 'R\xe8gles',
},
),
migrations.CreateModel(
name='Sponsor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(default='Nouveau sponsor', max_length=200, verbose_name='Nom')),
('description', models.TextField(default='Aucune description', verbose_name='Description')),
('grade', models.IntegerField(choices=[(1, 'Bronze'), (2, 'Silver'), (3, 'Gold'), (4, 'Platinum')], verbose_name='Grade')),
('logo', models.ImageField(height_field='logo_height', upload_to='svz/sponsors/%Y', width_field='logo_width')),
('logo_width', models.IntegerField(default=125, verbose_name='Largeur')),
('logo_height', models.IntegerField(default=125, verbose_name='Hauteur')),
('url', models.URLField(verbose_name='Lien externe')),
],
options={
'ordering': ('-grade',),
'verbose_name': 'Sponsor',
'verbose_name_plural': 'Sponsors',
},
),
migrations.AddField(
model_name='reward',
name='sponsor',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='svz.Sponsor', verbose_name='Sponsor'),
),
]

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.