annotate gpp/gcalendar/forms.py @ 6:b6263ac72052

Use DRY principle to manage third party javascript libraries. Created script_tags template tags to generate the correct link and script tags for 3rd party libraries. The settings.py file is the only place where the full path name is specified.
author Brian Neal <bgneal@gmail.com>
date Sat, 11 Apr 2009 22:50:56 +0000
parents dbd703f7d63a
children f408971657b9
rev   line source
gremmie@1 1 """
gremmie@1 2 Forms for the gcalendar application.
gremmie@1 3 """
gremmie@1 4 import datetime
gremmie@1 5 import pytz
gremmie@1 6 from django import forms
bgneal@6 7 from django.conf import settings
gremmie@1 8
gremmie@1 9 from gcalendar.models import Event
gremmie@1 10
gremmie@1 11
gremmie@1 12 TIME_CHOICES = (
gremmie@1 13 ('00:00', '12:00 am (00:00)'),
gremmie@1 14 ('00:30', '12:30 am (00:30)'),
gremmie@1 15 ('01:00', '1:00 am (01:00)'),
gremmie@1 16 ('01:30', '1:30 am (01:30)'),
gremmie@1 17 ('02:00', '2:00 am (02:00)'),
gremmie@1 18 ('02:30', '2:30 am (02:30)'),
gremmie@1 19 ('03:00', '3:00 am (03:00)'),
gremmie@1 20 ('03:30', '3:30 am (03:30)'),
gremmie@1 21 ('04:00', '4:00 am (04:00)'),
gremmie@1 22 ('04:30', '4:30 am (04:30)'),
gremmie@1 23 ('05:00', '5:00 am (05:00)'),
gremmie@1 24 ('05:30', '5:30 am (05:30)'),
gremmie@1 25 ('06:00', '6:00 am (06:00)'),
gremmie@1 26 ('06:30', '6:30 am (06:30)'),
gremmie@1 27 ('07:00', '7:00 am (07:00)'),
gremmie@1 28 ('07:30', '7:30 am (07:30)'),
gremmie@1 29 ('08:00', '8:00 am (08:00)'),
gremmie@1 30 ('08:30', '8:30 am (08:30)'),
gremmie@1 31 ('09:00', '9:00 am (09:00)'),
gremmie@1 32 ('09:30', '9:30 am (09:30)'),
gremmie@1 33 ('10:00', '10:00 am (10:00)'),
gremmie@1 34 ('10:30', '10:30 am (10:30)'),
gremmie@1 35 ('11:00', '11:00 am (11:00)'),
gremmie@1 36 ('11:30', '11:30 am (11:30)'),
gremmie@1 37 ('12:00', '12:00 am (12:00)'),
gremmie@1 38 ('12:30', '12:30 am (12:30)'),
gremmie@1 39 ('13:00', '1:00 pm (13:00)'),
gremmie@1 40 ('13:30', '1:30 pm (13:30)'),
gremmie@1 41 ('14:00', '2:00 pm (14:00)'),
gremmie@1 42 ('14:30', '2:30 pm (14:30)'),
gremmie@1 43 ('15:00', '3:00 pm (15:00)'),
gremmie@1 44 ('15:30', '3:30 pm (15:30)'),
gremmie@1 45 ('16:00', '4:00 pm (16:00)'),
gremmie@1 46 ('16:30', '4:30 pm (16:30)'),
gremmie@1 47 ('17:00', '5:00 pm (17:00)'),
gremmie@1 48 ('17:30', '5:30 pm (17:30)'),
gremmie@1 49 ('18:00', '6:00 pm (18:00)'),
gremmie@1 50 ('18:30', '6:30 pm (18:30)'),
gremmie@1 51 ('19:00', '7:00 pm (19:00)'),
gremmie@1 52 ('19:30', '7:30 pm (19:30)'),
gremmie@1 53 ('20:00', '8:00 pm (20:00)'),
gremmie@1 54 ('20:30', '8:30 pm (20:30)'),
gremmie@1 55 ('21:00', '9:00 pm (21:00)'),
gremmie@1 56 ('21:30', '9:30 pm (21:30)'),
gremmie@1 57 ('22:00', '10:00 pm (22:00)'),
gremmie@1 58 ('22:30', '10:30 pm (22:30)'),
gremmie@1 59 ('23:00', '11:00 pm (23:00)'),
gremmie@1 60 ('23:30', '11:30 pm (23:30)'),
gremmie@1 61 )
gremmie@1 62
gremmie@1 63
gremmie@1 64 class EventEntryForm(forms.ModelForm):
gremmie@1 65 what = forms.CharField(widget=forms.TextInput(attrs={'size': 60}))
gremmie@1 66 start_date = forms.DateField(widget=forms.TextInput(attrs={'size': 10}))
gremmie@1 67 start_time = forms.TimeField(required=False, widget=forms.Select(choices=TIME_CHOICES))
gremmie@1 68 end_date = forms.DateField(widget=forms.TextInput(attrs={'size': 10}))
gremmie@1 69 end_time = forms.TimeField(required=False, widget=forms.Select(choices=TIME_CHOICES))
gremmie@1 70 time_zone = forms.CharField(required=False, widget=forms.HiddenInput())
gremmie@1 71 where = forms.CharField(required=False, widget=forms.TextInput(attrs={'size': 60}))
gremmie@1 72
gremmie@1 73 TIME_FORMAT = '%H:%M'
gremmie@1 74 DEFAULT_START_TIME = '19:00'
gremmie@1 75 DEFAULT_END_TIME = '20:00'
gremmie@1 76
gremmie@1 77 class Meta:
gremmie@1 78 model = Event
gremmie@1 79 fields = ('what', 'start_date', 'start_time', 'end_date', 'end_time',
gremmie@1 80 'all_day', 'time_zone', 'where', 'description')
gremmie@1 81
gremmie@1 82 class Media:
gremmie@1 83 css = {
bgneal@6 84 'all': settings.GPP_THIRD_PARTY_CSS['markitup'] + \
bgneal@6 85 settings.GPP_THIRD_PARTY_CSS['jquery-ui'] + \
bgneal@6 86 ('css/gcalendar.css', )
gremmie@1 87 }
bgneal@6 88 js = settings.GPP_THIRD_PARTY_JS['jquery'] + \
bgneal@6 89 settings.GPP_THIRD_PARTY_JS['markitup'] + \
bgneal@6 90 settings.GPP_THIRD_PARTY_JS['jquery-ui'] + \
bgneal@6 91 ('js/gcalendar.js', )
gremmie@1 92
gremmie@1 93 def __init__(self, *args, **kwargs):
gremmie@1 94 initial = kwargs.get('initial', {})
gremmie@1 95 instance = kwargs.get('instance', None)
gremmie@1 96
gremmie@1 97 if len(args) == 0: # no POST arguments
gremmie@1 98 if instance is None:
gremmie@1 99 init_day = datetime.date.today().strftime('%m/%d/%Y')
gremmie@1 100 if 'start_date' not in initial:
gremmie@1 101 initial['start_date'] = init_day
gremmie@1 102 if 'end_date' not in initial:
gremmie@1 103 initial['end_date'] = init_day
gremmie@1 104 if 'start_time' not in initial:
gremmie@1 105 initial['start_time'] = self.DEFAULT_START_TIME
gremmie@1 106 if 'end_time' not in initial:
gremmie@1 107 initial['end_time'] = self.DEFAULT_END_TIME
gremmie@1 108 else:
gremmie@1 109 if instance.all_day:
gremmie@1 110 initial['start_time'] = self.DEFAULT_START_TIME
gremmie@1 111 initial['end_time'] = self.DEFAULT_END_TIME
gremmie@1 112 else:
gremmie@1 113 if 'start_time' not in initial:
gremmie@1 114 initial['start_time'] = instance.start_time.strftime(self.TIME_FORMAT)
gremmie@1 115 if 'end_time' not in initial:
gremmie@1 116 initial['end_time'] = instance.end_time.strftime(self.TIME_FORMAT)
gremmie@1 117
gremmie@1 118 kwargs['initial'] = initial
gremmie@1 119
gremmie@1 120 super(EventEntryForm, self).__init__(*args, **kwargs)
gremmie@1 121
gremmie@1 122 def clean(self):
gremmie@1 123 start_date = self.cleaned_data.get('start_date')
gremmie@1 124 start_time = self.cleaned_data.get('start_time')
gremmie@1 125 all_day = self.cleaned_data.get('all_day')
gremmie@1 126 end_date = self.cleaned_data.get('end_date')
gremmie@1 127 end_time = self.cleaned_data.get('end_time')
gremmie@1 128
gremmie@1 129 if start_date and start_time and (all_day or (end_date and end_time)):
gremmie@1 130 if all_day:
gremmie@1 131 start = start_date
gremmie@1 132 end = end_date
gremmie@1 133 else:
gremmie@1 134 start = datetime.datetime.combine(start_date, start_time)
gremmie@1 135 end = datetime.datetime.combine(end_date, end_time)
gremmie@1 136 if start > end:
gremmie@1 137 raise forms.ValidationError("The start date of the event "
gremmie@1 138 "is after the ending time!")
gremmie@1 139
gremmie@1 140 return self.cleaned_data
gremmie@1 141
gremmie@1 142 def clean_time_zone(self):
gremmie@1 143 tz = self.cleaned_data['time_zone']
gremmie@1 144 try:
gremmie@1 145 pytz.timezone(tz)
gremmie@1 146 except pytz.UnknownTimeZoneError:
gremmie@1 147 raise forms.ValidationError("Invalid timezone.")
gremmie@1 148 return tz
gremmie@1 149
gremmie@1 150
gremmie@1 151 class PasswordForm(forms.Form):
gremmie@1 152 password = forms.CharField(widget=forms.PasswordInput())
gremmie@1 153
gremmie@1 154
gremmie@1 155 # vim: ts=4 sw=4