1 from django
.db
import models
3 from pgweb
.core
.models
import Country
, Language
, Organisation
4 from pgweb
.core
.text
import ORGANISATION_HINT_TEXT
5 from pgweb
.util
.moderation
import TwostateModerateModel
8 class Event(TwostateModerateModel
):
9 org
= models
.ForeignKey(Organisation
, null
=False, blank
=False, verbose_name
="Organisation", help_text
=ORGANISATION_HINT_TEXT
, on_delete
=models
.CASCADE
)
10 title
= models
.CharField(max_length
=100, null
=False, blank
=False)
11 isonline
= models
.BooleanField(null
=False, default
=False, verbose_name
="Online event")
12 city
= models
.CharField(max_length
=50, null
=False, blank
=True)
13 state
= models
.CharField(max_length
=50, null
=False, blank
=True)
14 country
= models
.ForeignKey(Country
, null
=True, blank
=True, on_delete
=models
.CASCADE
)
15 language
= models
.ForeignKey(Language
, null
=True, blank
=True, default
='eng', help_text
="Primary language for event. When multiple languages, specify this in the event description", on_delete
=models
.CASCADE
)
17 badged
= models
.BooleanField(null
=False, blank
=False, default
=False, verbose_name
='Community event', help_text
='Choose "Community event" if this is a community recognized event following the <a href="/about/policies/conferences/" target="_blank" rel="noopener">community event guidelines</a>.')
18 description_for_badged
= models
.TextField(blank
=True, null
=True, verbose_name
='Description for community event', help_text
='DEPRECRATED: This was used in the beginning of community events to collect additional information.')
19 startdate
= models
.DateField(null
=False, blank
=False, verbose_name
="Start date")
20 enddate
= models
.DateField(null
=False, blank
=False, verbose_name
="End date")
22 summary
= models
.TextField(blank
=False, null
=False, help_text
="A short introduction (shown on the events listing page)")
23 details
= models
.TextField(blank
=False, null
=False, help_text
="Complete event description")
25 account_edit_suburl
= 'events'
26 markdown_fields
= ('details', 'summary', )
27 moderation_fields
= ['org', 'title', 'isonline', 'city', 'state', 'country', 'language', 'badged', 'description_for_badged', 'startdate', 'enddate', 'summary', 'details']
30 yield '/about/event/%s/' % self
.pk
31 yield '/about/event/.*-%s' % self
.pk
32 yield '/about/events/'
34 # FIXME: when to expire the front page?
38 return "%s: %s" % (self
.startdate
, self
.title
)
40 def verify_submitter(self
, user
):
41 return (len(self
.org
.managers
.filter(pk
=user
.pk
)) == 1)
44 def has_organisation(self
):
45 mgrs
= self
.org
.managers
.all()
48 return False # Migration organisation
50 return True # Has an actual organisation
52 # More than one manager means it must be new
54 return False # Has no organisastion at all
57 def displaydate(self
):
58 if self
.startdate
== self
.enddate
:
61 return "%s – %s" % (self
.startdate
, self
.enddate
)
64 def locationstring(self
):
68 return "%s, %s, %s" % (self
.city
, self
.state
, self
.country
)
70 return "%s, %s" % (self
.city
, self
.country
)
73 ordering
= ('-startdate', '-enddate', )
76 def get_formclass(self
):
77 from pgweb
.events
.forms
import EventForm