Adds an ical feed
This commit is contained in:
		
							parent
							
								
									cdec6e2258
								
							
						
					
					
						commit
						a37d620afb
					
				
					 3 changed files with 46 additions and 0 deletions
				
			
		|  | @ -10,3 +10,4 @@ easy-thumbnails==2.3 | |||
| html5lib==0.9999999 | ||||
| markdown==2.6.5 | ||||
| pytz==2015.7 | ||||
| django-ical==1.4 | ||||
|  |  | |||
|  | @ -13,6 +13,7 @@ from .views import ( | |||
|     session_staff_email, | ||||
|     session_list, | ||||
|     session_detail, | ||||
|     EventFeed | ||||
| ) | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|  | @ -27,6 +28,7 @@ urlpatterns = [ | |||
|     url(r"^([\w\-]+)/presentations.csv$", schedule_list_csv, name="schedule_list_csv"), | ||||
|     url(r"^([\w\-]+)/edit/slot/(\d+)/", schedule_slot_edit, name="schedule_slot_edit"), | ||||
|     url(r"^conference.json", schedule_json, name="schedule_json"), | ||||
|     url(r"^conference.ics", EventFeed(), name="ical_feed"), | ||||
|     url(r"^sessions/staff.txt$", session_staff_email, name="schedule_session_staff_email"), | ||||
|     url(r"^sessions/$", session_list, name="schedule_session_list"), | ||||
|     url(r"^session/(\d+)/$", session_detail, name="schedule_session_detail"), | ||||
|  |  | |||
|  | @ -10,6 +10,8 @@ from django.contrib.auth.models import User | |||
| from django.contrib import messages | ||||
| from django.contrib.sites.models import Site | ||||
| 
 | ||||
| from django_ical.views import ICalFeed | ||||
| 
 | ||||
| from account.decorators import login_required | ||||
| 
 | ||||
| from symposion.schedule.forms import SlotEditForm, ScheduleSectionForm | ||||
|  | @ -256,6 +258,47 @@ def schedule_json(request): | |||
|         content_type="application/json" | ||||
|     ) | ||||
| 
 | ||||
| class EventFeed(ICalFeed): | ||||
| 
 | ||||
|     product_id = '-//linux.conf.au/schedule//EN' | ||||
|     timezone = 'Australia/Tasmania' | ||||
|     filename = 'conference.ics' | ||||
|      | ||||
|     def items(self): | ||||
|         return Slot.objects.filter( | ||||
|             day__schedule__published=True, | ||||
|             day__schedule__hidden=False | ||||
|         ).order_by("start")     | ||||
|      | ||||
|     def item_title(self, item): | ||||
|         if hasattr(item.content, 'proposal'): | ||||
|             return item.content.title | ||||
|         else: | ||||
|             item.content_override if item.content_override else "Slot" | ||||
|      | ||||
|     def item_description(self, item): | ||||
|         if hasattr(item.content, 'proposal'): | ||||
|             return item.content.abstract | ||||
|         else: | ||||
|             return None | ||||
|      | ||||
|     def item_start_datetime(self, item): | ||||
|         return item.start_datetime | ||||
|      | ||||
|     def item_end_datetime(self, item): | ||||
|         return item.end_datetime | ||||
|      | ||||
|     def item_location(self, item): | ||||
|         return ", ".join(room["name"] for room in item.rooms.values()) | ||||
|      | ||||
|     def item_link(self, item): | ||||
|         if hasattr(item.content, 'proposal'): | ||||
|             return 'http://%s%s' % ( | ||||
|                                     Site.objects.get_current().domain, | ||||
|                                     reverse('schedule_presentation_detail', args=[item.content.pk]) | ||||
|                                     ) | ||||
|         else: | ||||
|             return 'http://%s' % Site.objects.get_current().domain | ||||
| 
 | ||||
| def session_list(request): | ||||
|     sessions = Session.objects.all().order_by('pk') | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Scott Bragg
						Scott Bragg