
9V)                 @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l m Z d  d l m Z d  d l m Z d  d l m Z m Z m Z d  d	 l m Z d  d
 l m Z d  d l m Z e d e j d e j  Z d1 Z d6 Z Gd  d!   d! e j   Z! Gd" d#   d# e j   Z" d$ d%   Z# Gd& d'   d' e j   Z$ Gd( d)   d) e$  Z% d* d+   Z& d S)7    N)models)get_template)RichTextField)	mark_safe)FileSystemStorage)settings)CourseFileKind
CourseFile)	get_epoch)PERMISSION_CHOICES)CourseRecordlocationbase_urllLecturer
RecitationbLabeExamhHolidayCClaremont onlyFPhysics faculty only1AnyoneLOnly registered usersc               @   s   e  Z d  Z e j e d d Z e j e d d d d Z e j	 d d d d d d  Z
 d d   Z d d	   Z d
 d   Z d d d d d  Z d S)
CourseSitenullTblank	help_textz4Define any CSS styles here you wish used on the sitec             C   s   d j  |  j j  S)NzCourseSite for {0})formatcoursenumber)self r*   !/var/www/djphys/courses/models.py__str__2   s    zCourseSite.__str__c             C   so   t  j j d |  j d | j d | j  } | j   d k rQ | j d | j  } | j   d k rk | d Sd  S)Nr'   yearsemester   part   r   )r   objectsfilterr'   r-   r.   countportion)r)   epochcrsr*   r*   r+   course_record5   s    zCourseSite.course_recordc          	   C   s  |  j  t |   } | s d  St j j d |  } t d  } g  } d \ } } } x | D] }	 |	 j d k r | d 7} | }
 n2 |	 j d k r | d 7} | }
 n | d 7} | }
 | j | j d |	 d |
 d	 | i   q\ Wt d
  } t	 | j d | d | i   S)Nr8   zcourses/meeting.htmlr   r   r1   r   meetingr(   requestzcourses/calendar.htmlmeetings)r   r   r   )
r8   r   Meetingr2   r3   r   session_typeappendrenderr   )r)   r:   
course_recr;   tempZmeetsZlecsrecslabsmxr*   r*   r+   calendar>   s,    
	
	
,	zCourseSite.calendar c          
   C   s^  | j    \ } } d d d d d d d d d	 d
 i } | | | } xt d d  D]}	 | |	 }
 |
 | k rT |	 | j   } | d k  r | d 7} | t j d |  } x | | k rUg  } |
 | k r | j d  |
 | k r | j d  |
 | k r| j d  x- | D]% } t j j d | d | d |  qW| t j d d  7} q WqT Wd  S)Nr   Mr1   Tr/   W   R   r         daysr   r   r   r8   r=   date)	spanrangeweekdaydatetime	timedeltar>   r<   r2   create)r)   r8   lecturesrecitationsrC   startfinishZdaymap
everythingdayZ	dayletterdtdZstypesstr*   r*   r+   make_calendarZ   s,    $

   zCourseSite.make_calendarN)__name__
__module____qualname__r   
ForeignKeyr   r'   r
   logo	TextFieldstyler,   r8   rF   ra   r*   r*   r*   r+   r"   ,   s   		r"   c               @   sU  e  Z d  Z e j e  Z e j d d d e  Z	 e j
   Z e j d d d d d d  Z e j d d d d d d  Z e j d d d d d d  Z e j d d d d d d  Z e d d d d  Z e d d	    Z d
 d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z Gd d   d  Z d S)r<   
max_lengthr1   choicesd   r$   Tr#   c             C   s
   |  j  j S)N)r8   r'   )r)   r*   r*   r+   r'   y   s    zMeeting.coursec             C   s   d j  |  j j |  j |  j    } |  j rC | d j  |  j  7} |  j rb | d j  |  j  7} |  j r | d j  |  j  7} | S)Nz{0} {1} {2}z: {0}z, Reading: {0}z, Homework due: {0})r&   r'   order_fieldrQ   Zget_session_type_displaytopicreadinghomework)r)   sr*   r*   r+   r,   }   s    			zMeeting.__str__c             C   s   |  j  j |  S)N)rQ   strftime)r)   fr*   r*   r+   r&      s    zMeeting.formatc             C   s   |  j  d  S)Nz%A)r&   )r)   r*   r*   r+   DayName   s    zMeeting.DayNamec             C   s   |  j  d  S)Nz%a)r&   )r)   r*   r*   r+   Day   s    zMeeting.Dayc             C   s   |  j  d  S)Nz%B)r&   )r)   r*   r*   r+   Month   s    zMeeting.Monthc             C   s   |  j  d  S)Nz%b)r&   )r)   r*   r*   r+   month   s    zMeeting.monthc             C   s   d j  |  j j |  j j  S)Nz{0}/{1})r&   rQ   rv   r]   )r)   r*   r*   r+   
short_form   s    zMeeting.short_formc             C   s=   i  } x0 d D]( } t  |  |  r t  |  |  | | <q W| S)Nro   rn   exam)zhomeworkzreadingzexam)getattr)r)   dickr*   r*   r+   fields   s
    zMeeting.fieldsc               @   s   e  Z d  Z d g Z d S)zMeeting.MetarQ   N)rb   rc   rd   orderingr*   r*   r*   r+   Meta   s   r~   N)rb   rc   rd   r   re   r   r8   	CharFieldSESSION_TYPEr=   	DateFieldrQ   rm   ro   rn   rx   r   notespropertyr'   r,   r&   rs   rt   ru   rv   rw   r|   r~   r*   r*   r*   r+   r<   o   s$   r<   c       
      C   s   t  |  t  r |  j j } | j j } | j } | j } | j } | d k rT d } d j	 | | |  } t
 j j d | |  } n d } t
 j j | |  }	 |	 S)NarG   z	{0}{1}{2}coursesunknown)
isinstanceMeetingFiler9   r8   r'   rl   r-   r.   r0   r&   ospathjoin)
objfilenamecreccnamer-   r.   r5   Zysemfolder	full_pathr*   r*   r+   FileLocation   s    			r   c               @   s$  e  Z d  Z e j d d d d d Z e j d d  Z e j e  Z	 e j
 d e d e  Z e j d d	 d d d d  Z e j d d
 d e d d  Z e j d d d d  Z e j d d d d  Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d S)SecureCourseFilez	auth.Userr#   Tr$   auto_now_add	upload_tostorageri      r1   rj   defaultr   c             C   sC   |  j  r' t |  j   d k r' |  j  n |  j } d j |  j |  S)Nr   z	{0} - {1})descriptionlendocumentr&   kind)r)   extrar*   r*   r+   r,      s    0zSecureCourseFile.__str__c             C   s   |  j  p |  j S)N)release_timerelease_until)r)   r*   r*   r+   
has_window   s    zSecureCourseFile.has_windowc             C   sQ   t  j  j t j  } |  j r1 | |  j k  r1 d S|  j rM | |  j k rM d Sd S)NFT)rU   nowpytzutcr   r   )r)   r   r*   r*   r+   	in_window   s    zSecureCourseFile.in_windowc             C   s=   | j  j   r d S|  j d k r3 | j d s3 d S|  j   S)NTr   	ClaremontF)useris_authenticatedaccesssessionr   )r)   r:   r*   r*   r+   
has_access   s    zSecureCourseFile.has_accessc             C   s   t  j j t |  j   d } | d d   j   } d d d d d d d d d d d	 d d
 d
 d d d d d d d d d d i } y | | } Wn d } Yn Xd j |  } | S)Nr1   xlsexcelxlsxdocworddocxjpgjpegnbpdfpngtexlatextxtunkzico/{0}.png)r   r   splitextstrr   lowerr&   )r)   extmappingicoiconr*   r*   r+   r      s(    zSecureCourseFile.iconc             C   s   t  j j d j |  j   S)Nz/c/private/{0})urllibparsequoter&   r   )r)   r*   r*   r+   url  s    zSecureCourseFile.urlc             C   s   |  j  r' t |  j   d k r' |  j  n |  j } | j j   rE d n d } |  j   rs | |  j   rl d n d 7} d } | j |  j   | t	 j
 |  j   |  } t |  S)Nr   profstudentz	 inwindowz
 outwindowzD<a href="{0}" class="{1}"><img src="{2}{3}" width="36">&nbsp;{4}</a>)r   r   r   r   r   r   r   r&   r   r   
STATIC_URLr   r   )r)   r:   descklassrp   r   r*   r*   r+   link  s    	'*zSecureCourseFile.linkN)rb   rc   rd   r   re   uploaded_byDateTimeFielddate_postedr	   r   	FileFieldr   
private_fsr   r   r   ACCESS_CHOICESr   r   r   r,   r   r   r   r   r   r   r*   r*   r*   r+   r      s"   	r   c               @   s   e  Z d  Z e j e  Z d S)r   N)rb   rc   rd   r   re   r<   r9   r*   r*   r*   r+   r   !  s   r   c              C   sb   t  j j d d  }  t j j d |  d d  } t j j d |   } | j | d d d d	 d  S)
Nrl   p117r'   r-   i  rX   ZTRrY   r   )r   r2   getr   r"   ra   )r   r   Zcsiter*   r*   r+   test'  s    r   r   r   r   r   r   zLabr   r   r   r   )r   r   r   r   r   r   r   r   r   r   zAnyoner    r!   )r   r   r   r   )'rU   r   r   urllib.parser   	django.dbr   Zdjango.template.loaderr   mezzanine.core.fieldsr   django.utils.safestringr   django.core.files.storager   django.confr   djphys.modelsr   r	   r
   djphys.funcsr   djphys.constantsr   people.modelsr   PRIVATE_ROOTPRIVATE_URLr   r   r   Modelr"   r<   r   r   r   r   r*   r*   r*   r+   <module>   s:   	       C64H