Use miniconf schedule based on sections
This commit is contained in:
		
							parent
							
								
									96cbe2d7ee
								
							
						
					
					
						commit
						2cce659c28
					
				
					 6 changed files with 96 additions and 32 deletions
				
			
		|  | @ -0,0 +1,9 @@ | ||||||
|  | <a | ||||||
|  |   class="nav-item nav-link {% if active %}active{% endif %}" | ||||||
|  |   id="{{ section.schedule.section.slug }}-{{ timetable.day.date|date:"l"|lower}}-tab" | ||||||
|  |   data-toggle="tab" href="#{{section.schedule.section.slug}}-{{ timetable.day.date|date:"l"|lower}}" | ||||||
|  |   role="tab" | ||||||
|  |   aria-controls="{{section.schedule.section.slug}}-{{ timetable.day.date|date:"l"|lower}}" | ||||||
|  |   aria-selected="{% if active %}true{% else %}false{% endif %}"> | ||||||
|  |   {{ label }} | ||||||
|  | </a> | ||||||
|  | @ -21,16 +21,41 @@ | ||||||
| 
 | 
 | ||||||
|   <nav class="mb-4"> |   <nav class="mb-4"> | ||||||
|     <div class="nav schedule-nav" id="schedule-nav" role="tablist"> |     <div class="nav schedule-nav" id="schedule-nav" role="tablist"> | ||||||
|  |       Monday | ||||||
|       {% for section in sections %} |       {% for section in sections %} | ||||||
|  |       {% if "Miniconf" in section.schedule.section.name %} | ||||||
|       {% for timetable in section.days %} |       {% for timetable in section.days %} | ||||||
|       <a |       {% if timetable.day.date|date:"Y-m-d" == "2019-01-21" %} | ||||||
|       class="nav-item nav-link {% if forloop.first %}active{% endif %}" id="schedule_day_{{ timetable.day.date|date:"l"|lower}}-tab" data-toggle="tab" href="#{{ timetable.day.date|date:"l"|lower}}" role="tab" aria-controls="{{ timetable.day.date|date:"l"|lower}}" aria-selected="{% if forloop.first %}true{% else %}false{% endif %}"> |       <a class="nav-item nav-link" id="123" data-toggle="tab" href="#123" role="tab" aria-controls="123" aria-selected="false"> | ||||||
|       {{ timetable.day.date|date:"l"}} |         {{ section.schedule.section.name }} | ||||||
|     </a> |       </a> | ||||||
|     {% endfor %} |       {% endif %} | ||||||
|     {% endfor %} |       {% endfor %} | ||||||
|   </div> |       {% endif %} | ||||||
| </nav> |       {% endfor %} | ||||||
|  |       <br /> | ||||||
|  | 
 | ||||||
|  |       Tuesday | ||||||
|  |       {% for section in sections %} | ||||||
|  |       {% if "Miniconf" in section.schedule.section.name %} | ||||||
|  |       {% for timetable in section.days %} | ||||||
|  |       {% if timetable.day.date|date:"Y-m-d" == "2019-01-22" %} | ||||||
|  |       {% include "symposion/schedule/_schedule_nav_link.html" with label=section.schedule.section.name %} | ||||||
|  |       {% endif %} | ||||||
|  |       {% endfor %} | ||||||
|  |       {% endif %} | ||||||
|  |       {% endfor %} | ||||||
|  |       <br /> | ||||||
|  | 
 | ||||||
|  |       {% for section in sections %} | ||||||
|  |       {% if "Miniconf" not in section.schedule.section.name %} | ||||||
|  |       {% for timetable in section.days %} | ||||||
|  |       {% include "symposion/schedule/_schedule_nav_link.html" with active=forloop.first label=timetable.day.date|date:"l" %} | ||||||
|  |       {% endfor %} | ||||||
|  |       {% endif %} | ||||||
|  |       {% endfor %} | ||||||
|  |     </div> | ||||||
|  |   </nav> | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| <div class="schedule-page bg-secondary text-primary pt-4 pb-4 mb-0"> | <div class="schedule-page bg-secondary text-primary pt-4 pb-4 mb-0"> | ||||||
|  | @ -39,25 +64,21 @@ | ||||||
|       <div class="tab-content schedule-wrapper"> |       <div class="tab-content schedule-wrapper"> | ||||||
|         {% for section in sections %} |         {% for section in sections %} | ||||||
|         {% for timetable in section.days %} |         {% for timetable in section.days %} | ||||||
|         <div |         <div class="tab-pane fade {% if timetable.day.date|date:'Y-m-d' == '2019-01-23' %}show active{% endif %}" id="{{ section.schedule.section.slug }}-{{ timetable.day.date|date:"l"|lower}}" | ||||||
|         class="tab-pane fade {% if forloop.first %}show active{% endif %}" |           role="tabpanel" aria-labelledby="{{ section.schedule.section.slug }}-{{ timetable.day.date|date:"l"|lower}}-tab"> | ||||||
|         id="{{ timetable.day.date|date:"l"|lower}}" |           <div class="table-responsive hidden-md-down"> | ||||||
|         role="tabpanel" |             {% include "symposion/schedule/_grid.html" %} | ||||||
|         aria-labelledby="schedule_day_{{ timetable.day.date|date:"l"|lower}}-tab" |           </div> | ||||||
|         > |           <div class="mobile-schedule"> | ||||||
|         <div class="table-responsive hidden-md-down"> |             {% include "symposion/schedule/_mobile.html" %} | ||||||
|           {% include "symposion/schedule/_grid.html" %} |           </div> | ||||||
|         </div> |  | ||||||
|         <div class="mobile-schedule"> |  | ||||||
|           {% include "symposion/schedule/_mobile.html" %} |  | ||||||
|         </div> |         </div> | ||||||
|  |         {% endfor %} | ||||||
|  |         {% endfor %} | ||||||
|       </div> |       </div> | ||||||
|       {% endfor %} |  | ||||||
|       {% endfor %} |  | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
| </div> |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
| 
 | 
 | ||||||
| {%block footer_class %}footer-no-margin{% endblock %} | {%block footer_class %}footer-no-margin{% endblock %} | ||||||
|  | @ -74,9 +95,10 @@ | ||||||
|   var trailing = ' January 2019'; |   var trailing = ' January 2019'; | ||||||
| 
 | 
 | ||||||
|   $('a[data-toggle="tab"]').on('show.bs.tab', function (e) { |   $('a[data-toggle="tab"]').on('show.bs.tab', function (e) { | ||||||
|     var day = e.target.attributes['aria-controls'].value; |     var day = e.target.attributes['aria-controls'].value.split('-'); | ||||||
|  |     day = day[day.length - 1]; | ||||||
|     $('#schedule-date').text(day + ' ' + dates[day] + trailing); |     $('#schedule-date').text(day + ' ' + dates[day] + trailing); | ||||||
|   }) |   }) | ||||||
| </script> | </script> | ||||||
| {{ block.super }} | {{ block.super }} | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  | @ -376,6 +376,10 @@ hr { | ||||||
|     tr.calendar-row { |     tr.calendar-row { | ||||||
|         height: 120px; |         height: 120px; | ||||||
| 
 | 
 | ||||||
|  |         td.time { | ||||||
|  |             width: 85px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         td.time > p { |         td.time > p { | ||||||
|             font-size: 1.25rem; |             font-size: 1.25rem; | ||||||
|             text-transform: lowercase; |             text-transform: lowercase; | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								vendor/symposion/managers.py
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/symposion/managers.py
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | from django.db.models import Manager | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class DefaultSelectRelatedManager(Manager): | ||||||
|  |     def get_queryset(self): | ||||||
|  |         symposion_meta = getattr(self.model, 'SymposionMeta', None) | ||||||
|  |         if symposion_meta is None: | ||||||
|  |             return super().get_queryset() | ||||||
|  | 
 | ||||||
|  |         select_related = getattr(symposion_meta, 'select_related', None) | ||||||
|  |         if select_related is None: | ||||||
|  |             return super().get_queryset() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         return super().get_queryset().select_related(*select_related) | ||||||
|  | 
 | ||||||
							
								
								
									
										6
									
								
								vendor/symposion/schedule/admin.py
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/symposion/schedule/admin.py
									
										
									
									
										vendored
									
									
								
							|  | @ -33,14 +33,12 @@ update_slot_names.short_description = "Update slot names" | ||||||
| 
 | 
 | ||||||
| class SlotAdmin(admin.ModelAdmin): | class SlotAdmin(admin.ModelAdmin): | ||||||
|     list_filter = ("day", "kind","exclusive","slotroom__room") |     list_filter = ("day", "kind","exclusive","slotroom__room") | ||||||
|     list_display = ("day", "start", "end", "kind", "room_names", |     list_display = ("day", "start", "end", "kind", "room_names", "content_override", "exclusive") | ||||||
|                     "content_override","exclusive") |  | ||||||
|     list_editable = ("exclusive","kind","start","end") |  | ||||||
|     inlines = [SlotRoomInline] |     inlines = [SlotRoomInline] | ||||||
|     actions = [update_slot_names] |     actions = [update_slot_names] | ||||||
| 
 | 
 | ||||||
|     def room_names(self, slot): |     def room_names(self, slot): | ||||||
|         return ", ".join(room.name for room in slot.rooms.all()) |         return ", ".join(room.name for room in slot.rooms) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class RoomAdmin(admin.ModelAdmin): | class RoomAdmin(admin.ModelAdmin): | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								vendor/symposion/schedule/models.py
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/symposion/schedule/models.py
									
										
									
									
										vendored
									
									
								
							|  | @ -5,6 +5,7 @@ from django.contrib.auth.models import User | ||||||
| from django.db import models | from django.db import models | ||||||
| from django.utils.translation import ugettext_lazy as _ | from django.utils.translation import ugettext_lazy as _ | ||||||
| 
 | 
 | ||||||
|  | from symposion.managers import DefaultSelectRelatedManager | ||||||
| from symposion.text_parser import parse | from symposion.text_parser import parse | ||||||
| from symposion.proposals.models import ProposalBase | from symposion.proposals.models import ProposalBase | ||||||
| from symposion.conference.models import Section | from symposion.conference.models import Section | ||||||
|  | @ -12,6 +13,7 @@ from symposion.speakers.models import Speaker | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Schedule(models.Model): | class Schedule(models.Model): | ||||||
|  |     objects = DefaultSelectRelatedManager() | ||||||
| 
 | 
 | ||||||
|     section = models.OneToOneField(Section, verbose_name=_("Section")) |     section = models.OneToOneField(Section, verbose_name=_("Section")) | ||||||
|     published = models.BooleanField(default=True, verbose_name=_("Published")) |     published = models.BooleanField(default=True, verbose_name=_("Published")) | ||||||
|  | @ -20,6 +22,9 @@ class Schedule(models.Model): | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         return "%s Schedule" % self.section |         return "%s Schedule" % self.section | ||||||
| 
 | 
 | ||||||
|  |     class SymposionMeta: | ||||||
|  |         select_related = ('section', ) | ||||||
|  | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|         ordering = ["section"] |         ordering = ["section"] | ||||||
|         verbose_name = _('Schedule') |         verbose_name = _('Schedule') | ||||||
|  | @ -27,12 +32,17 @@ class Schedule(models.Model): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Day(models.Model): | class Day(models.Model): | ||||||
|  |     objects = DefaultSelectRelatedManager() | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|     schedule = models.ForeignKey(Schedule, verbose_name=_("Schedule")) |     schedule = models.ForeignKey(Schedule, verbose_name=_("Schedule")) | ||||||
|     date = models.DateField(verbose_name=_("Date")) |     date = models.DateField(verbose_name=_("Date")) | ||||||
| 
 | 
 | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         return "%s" % self.date |         return "%s: %s" % (self.schedule.section.name, self.date) | ||||||
|  | 
 | ||||||
|  |     class SymposionMeta: | ||||||
|  |         select_related = ('schedule__section', ) | ||||||
| 
 | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|         unique_together = [("schedule", "date")] |         unique_together = [("schedule", "date")] | ||||||
|  | @ -82,7 +92,7 @@ class SlotKind(models.Model): | ||||||
|     label = models.CharField(max_length=50, verbose_name=_("Label")) |     label = models.CharField(max_length=50, verbose_name=_("Label")) | ||||||
| 
 | 
 | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         return self.label |         return ": ".join((self.schedule.section.name, self.label)) | ||||||
| 
 | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|         verbose_name = _("Slot kind") |         verbose_name = _("Slot kind") | ||||||
|  | @ -90,6 +100,7 @@ class SlotKind(models.Model): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Slot(models.Model): | class Slot(models.Model): | ||||||
|  |     objects = DefaultSelectRelatedManager() | ||||||
| 
 | 
 | ||||||
|     name = models.CharField(max_length=512, editable=False) |     name = models.CharField(max_length=512, editable=False) | ||||||
|     day = models.ForeignKey(Day, verbose_name=_("Day")) |     day = models.ForeignKey(Day, verbose_name=_("Day")) | ||||||
|  | @ -161,13 +172,16 @@ class Slot(models.Model): | ||||||
|         return Room.objects.filter(pk__in=self.slotroom_set.values("room")) |         return Room.objects.filter(pk__in=self.slotroom_set.values("room")) | ||||||
| 
 | 
 | ||||||
|     def save(self, *args, **kwargs): |     def save(self, *args, **kwargs): | ||||||
|         roomlist = ' '.join(map(lambda r: r.__unicode__(), self.rooms)) |         roomlist = ' '.join(map(str, self.rooms)) | ||||||
|         self.name = "%s %s (%s - %s) %s" % (self.day, self.kind, self.start, self.end, roomlist) |         self.name = "%s %s (%s - %s) %s" % (self.day, self.kind, self.start, self.end, roomlist) | ||||||
|         self.content_override_html = parse(self.content_override) |         self.content_override_html = parse(self.content_override) | ||||||
|         super(Slot, self).save(*args, **kwargs) |         super(Slot, self).save(*args, **kwargs) | ||||||
| 
 | 
 | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         return self.name |         return "%s: %s" % (self.kind.schedule.section.name, self.name) | ||||||
|  | 
 | ||||||
|  |     class SymposionMeta: | ||||||
|  |         select_related = ('kind__schedule__section', 'day') | ||||||
| 
 | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|         ordering = ["day", "start", "end"] |         ordering = ["day", "start", "end"] | ||||||
|  | @ -194,6 +208,7 @@ class SlotRoom(models.Model): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Presentation(models.Model): | class Presentation(models.Model): | ||||||
|  |     objects = DefaultSelectRelatedManager() | ||||||
| 
 | 
 | ||||||
|     slot = models.OneToOneField(Slot, null=True, blank=True, related_name="content_ptr", verbose_name=_("Slot")) |     slot = models.OneToOneField(Slot, null=True, blank=True, related_name="content_ptr", verbose_name=_("Slot")) | ||||||
|     title = models.CharField(max_length=100, verbose_name=_("Title")) |     title = models.CharField(max_length=100, verbose_name=_("Title")) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Tobias
						Tobias