Skip to content
This repository has been archived by the owner on Jun 29, 2020. It is now read-only.

Commit

Permalink
Merge pull request #863 from kawazrepos/855
Browse files Browse the repository at this point in the history
イベント主催者が参加者を管理できるようになった closes #855
  • Loading branch information
giginet committed Mar 18, 2015
2 parents f8f366a + 99d793c commit 407b65b
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 19 deletions.
22 changes: 20 additions & 2 deletions src/kawaz/apps/events/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from kawaz.core.forms.fields import MarkdownField
from kawaz.core.forms.widgets import MaceEditorWidget
from kawaz.core.forms.mixins import Bootstrap3HorizontalFormHelperMixin
from kawaz.core.personas.forms.persona import PersonaChoiceField
from kawaz.core.personas.models import Persona
from .models import ATTENDANCE_DEADLINE_HELP_TEXT


Expand All @@ -18,11 +19,28 @@ class EventForm(Bootstrap3HorizontalFormHelperMixin, ModelForm):
widget=forms.DateTimeInput(attrs={'type': 'datetime'}),
required=False, help_text=ATTENDANCE_DEADLINE_HELP_TEXT)


class Meta:
model = Event
exclude = (
'organizer',
'created_at',
'updated_at',
)

class EventCreationForm(EventForm):
class Meta:
model = Event
exclude = (
'organizer',
'created_at',
'updated_at',
'attendees',
'attendees'
)

class EventUpdateForm(EventForm):
attendees = PersonaChoiceField(
label=_('Attendees'),
cache_choices=True,
queryset=Persona.objects.filter(is_active=True).order_by('pk'),
help_text=_('Add attendees of this event'))
21 changes: 21 additions & 0 deletions src/kawaz/apps/events/migrations/0002_auto_20150318_1351.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
from django.conf import settings


class Migration(migrations.Migration):

dependencies = [
('events', '0001_initial'),
]

operations = [
migrations.AlterField(
model_name='event',
name='attendees',
field=models.ManyToManyField(verbose_name='Attendees', to=settings.AUTH_USER_MODEL, related_name='events_attend'),
preserve_default=True,
),
]
7 changes: 3 additions & 4 deletions src/kawaz/apps/events/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,16 +85,15 @@ class Event(models.Model):
_('Attendance deadline'),
default=None, blank=True, null=True,
help_text=ATTENDANCE_DEADLINE_HELP_TEXT)
attendees = models.ManyToManyField(settings.AUTH_USER_MODEL,
verbose_name=_("Attendees"),
related_name="events_attend")
# 編集不可フィールド
organizer = models.ForeignKey(settings.AUTH_USER_MODEL,
verbose_name=_("Organizer"),
related_name="events_owned",
null=True,
editable=False)
attendees = models.ManyToManyField(settings.AUTH_USER_MODEL,
verbose_name=_("Attendees"),
related_name="events_attend",
editable=False)
category = models.ForeignKey(Category, verbose_name=_('Category'),
null=True, blank=True)
created_at = models.DateTimeField(_("Created at"), auto_now_add=True)
Expand Down
4 changes: 4 additions & 0 deletions src/kawaz/apps/events/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ def test_anonymous_user_can_not_update_via_update_view(self):
'pub_state': 'public',
'title': '変更後のイベントです',
'body': 'うえーい',
'attendees': [self.user.pk,],
'period_start': datetime.datetime.now()+datetime.timedelta(hours=1),
'period_end': datetime.datetime.now()+datetime.timedelta(hours=3),
})
Expand All @@ -207,6 +208,7 @@ def test_other_user_cannot_update_via_update_view(self):
'pub_state': 'public',
'title': '変更後のイベントです',
'body': 'うえーい',
'attendees': [self.user.pk,],
'period_start': datetime.datetime.now()+datetime.timedelta(hours=1),
'period_end': datetime.datetime.now()+datetime.timedelta(hours=3)
})
Expand All @@ -221,6 +223,7 @@ def test_organizer_can_update_via_update_view(self):
'pub_state': 'public',
'title': '変更後のイベントです',
'body': 'うえーい',
'attendees': [self.user.pk,],
'period_start': datetime.datetime.now()+datetime.timedelta(hours=1),
'period_end': datetime.datetime.now()+datetime.timedelta(hours=3)
})
Expand All @@ -244,6 +247,7 @@ def test_user_cannot_modify_organizer_id(self):
'pub_state': 'public',
'title': '変更後のイベントです',
'body': 'うえーい',
'attendees': [self.user.pk],
'period_start': datetime.datetime.now()+datetime.timedelta(hours=1),
'period_end': datetime.datetime.now()+datetime.timedelta(hours=3),
'organizer': other.pk # crackers attempt to masquerade
Expand Down
6 changes: 3 additions & 3 deletions src/kawaz/apps/events/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from kawaz.core.views.preview import SingleObjectPreviewViewMixin

from .models import Event
from .forms import EventForm
from .forms import EventForm, EventUpdateForm, EventCreationForm
from .utils.ical import generate_ical

class EventPublishedQuerySetMixin(MultipleObjectMixin):
Expand Down Expand Up @@ -59,7 +59,7 @@ class EventDetailView(DetailView):
@permission_required('events.add_event')
class EventCreateView(SuccessMessageMixin, CreateView):
model = Event
form_class = EventForm
form_class = EventCreationForm

def get_success_message(self, cleaned_data):
return _("""A event '%(title)s' was successfully created.""") % {
Expand All @@ -74,7 +74,7 @@ def form_valid(self, form):
@permission_required('events.change_event')
class EventUpdateView(SuccessMessageMixin, UpdateView):
model = Event
form_class = EventForm
form_class = EventUpdateForm

def get_success_message(self, cleaned_data):
return _("""The event '%(title)s' was successfully updated.""") % {
Expand Down
11 changes: 1 addition & 10 deletions src/kawaz/apps/products/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from django.forms import widgets
from django.forms.models import inlineformset_factory
from django.utils.translation import ugettext_lazy as _
from kawaz.core.personas.forms.persona import PersonaChoiceField
from kawaz.core.personas.models import Persona
from .models import Product
from .models import Platform
Expand All @@ -15,16 +16,6 @@
from .models import PackageRelease
from .models import URLRelease


class PersonaChoiceField(forms.ModelMultipleChoiceField):
"""
ラベルにニックネームが使われるようにする
"""

def label_from_instance(self, obj):
return obj.nickname


class ProductBaseForm(Bootstrap3HorizontalFormHelperMixin, ModelForm):
form_tag = False

Expand Down
7 changes: 7 additions & 0 deletions src/kawaz/core/personas/forms/persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@
from kawaz.core.forms.widgets import RadioSelectWithHelpText
from ..models import Persona

class PersonaChoiceField(forms.ModelMultipleChoiceField):
"""
ラベルにニックネームが使われるようにする
"""

def label_from_instance(self, obj):
return obj.nickname


class PersonaCreationForm(UserCreationForm):
Expand Down
7 changes: 7 additions & 0 deletions src/templates/events/event_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,10 @@ <h1>{% trans "Create a new event" %}</h1>
{% crispy form %}
</div>
{% endblock %}
{% block post_javascript %}
{{ block.super }}
<script type="text/javascript">
$('#id_attendees').attr('data-placeholder', "ここをクリックしてイベント参加者を追加してください")
.chosen({no_results_text: "指定されたユーザーが見つかりませんでした"});
</script>
{% endblock %}

0 comments on commit 407b65b

Please sign in to comment.