ó
IoòNc           @   s  d  d l  m Z m Z m Z d  d l m Z d  d l m Z 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 Td  d	 l Td  d
 l m Z d  d l Z d  d l Z e d „  ƒ Z e d „  ƒ Z e
 e d „  ƒ ƒ Z e
 e d d d „ ƒ ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z  e
 d „  ƒ Z! e
 d „  ƒ Z" e
 d „  ƒ Z# e
 d „  ƒ Z$ e
 d „  ƒ Z% e
 d „  ƒ Z& e
 d „  ƒ Z' e
 d „  ƒ Z( e
 d „  ƒ Z) d e* d „ Z+ d S(   iÿÿÿÿ(   t   HttpResponset   HttpResponseRedirectt   Http404(   t   render_to_response(   t   authenticatet   login(   t   login_required(   t   User(   t   logout(   t   csrf_protect(   t   RequestContext(   t   *(   t   datetimeNc         C   s  t  } |  j d k rÅ t |  j ƒ } | j ƒ  r¼ | j d } | j d } t j j | ƒ } | j	 rn d } n4 t
 j ƒ  } | j | j ƒ | j ƒ  } t | ƒ } t d | d | d ƒ St } n  t j j d ƒ }	 t |  i |	 d 6| d	 6ƒ }
 t d
 |
 ƒ S(   Nt   POSTt   roomNamet   passwordt   publics   rooms/t   /s	   +roomNamet   roomst   wrong_PWs	   home.html(   t   Falset   methodt   JoinRoomFormR   t   is_validt   cleaned_datat   Roomt   objectst   get_for_objectR   t   hashlibt   sha1t   updateR   t	   hexdigestt   strR   t   Truet   order_byR
   R   (   t   requestR   t   formR   t   pwt   rt   appendt   hashft   resultR   t	   variables(    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   home   s(    				c         C   s™   |  j  d k rm t |  j ƒ } | j ƒ  rv t j j d | j d d | j d d | j d ƒ } t d ƒ Sn	 t ƒ  } t	 |  i | d 6ƒ } t
 d | ƒ S(	   NR   t   usernameR   t	   password1t   emails   success/R$   s   registration/signup.html(   R   t   RegistrationFormR   R   R   R   t   create_userR   R   R
   R   (   R#   R$   t   userR*   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   signup+   s    		c         C   sª   |  j  d k r~ t |  j ƒ } | j ƒ  r‡ t j j |  j | j d | j d | j d | j d ƒ } | j	 ƒ  t
 d ƒ Sn	 t ƒ  } t |  i | d 6ƒ } t d | ƒ S(	   NR   R   t   commentR-   R   s   success/R$   s   roomcreate.html(   R   t   ChatRoomFormR   R   R   R   t   createR1   R   t   saveR   R
   R   (   R#   R$   t   roomR*   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   newroom@   s"    	



		c      	   C   si  | } | } t  } t j j | ƒ } |  j } | j | k rE t } n  | j rQ nM t j	 ƒ  } | j
 | j ƒ | j ƒ  } t | ƒ }	 |	 | k r” n
 t d ƒ St j j ƒ  j d | j d |  j j ƒ }
 t |
 ƒ d k rt d | j d | j d t ƒ } t | _ | j ƒ  n$ x! |
 D] } t | _ | j ƒ  qWt d i | j d 6d t |  i | d	 6| d
 6ƒ ƒS(   Ns   failtoenter/t   rnamet   unamei    t   talk_permissions
   rooms.htmlt   chat_idt   context_instanceR7   t   isowner(   R   R   R   R   R1   t   ownerR!   R   R   R   R   R   R   R    R   t   RoomUsert   allt   filterR   R,   t   lent   inroomR6   R   t   pkR
   (   R#   R   R'   R9   R>   R&   t   uR(   R)   t	   appendnewt   rut   ru_newt   i(    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyR   Y   s2    			
*!		c         C   s—   |  j  } t j j d t | d ƒ ƒ } t j j ƒ  j d | j d |  j	 j
 ƒ } x8 | D]0 } | j t k rY | j |  j	 | d ƒ PqY qY Wt d ƒ S(   sM   
    Expects the following POST parameters:
    chat_room_id
    message
    t   idt   chat_room_idR9   R:   t   messaget    (   R   R   R   t   gett   intR@   RA   RB   R   R1   R,   R;   R!   t   sayR    (   R#   t   pR&   t   entriesRJ   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   send{   s    	*c         C   s    |  j  d k r t ‚ n  |  j } | j d d  ƒ s< t ‚ n  t j j d | d ƒ } | j ƒ  } t t	 j
 | j ƒ  j ƒ  ƒ ƒ } t t i | d 6| d 6ƒ ƒ S(   NR   RK   t   last_message_idt   last_message_time(   R   R   R   RO   t   NoneR   R   RU   t   floatt   timet   mktimeRV   t	   timetupleR    t   jsonify(   R#   t   postR&   t   lmidt   lmtm(    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   syncŒ   s    			!c         C   s  |  j  d k r t ‚ n  |  j } | j d d  ƒ sG | j d d  ƒ rP t ‚ n  y t | d ƒ } Wn t ‚ n Xy t | d ƒ d } Wn( t t j t	 j
 ƒ  j ƒ  ƒ ƒ } n Xt j j d | ƒ } t	 j | ƒ } | j d | ƒ } t t | d d d d g ƒ ƒ S(	   NR   RK   t   offseti   t
   after_datet   authorRM   t   type(   R   R   R   RO   RW   RP   RX   RY   RZ   R   t   nowR[   R   R   t   fromtimestampt   messagesR    R\   (   R#   R]   t   room_idRa   R&   t   date_offsett   m(    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   receive   s"    		&	
%c         C   sB   |  j  } t j j d t | d ƒ ƒ } | j |  j ƒ t d ƒ S(   sM   
    Expects the following POST parameters:
    chat_room_id
    message
    RK   RL   RN   (   R   R   R   RO   RP   t   joinR1   R    (   R#   RR   R&   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyRl   ¹   s    	c         C   sB  |  j  } t j j d t | d ƒ ƒ } | j |  j ƒ t j j ƒ  j	 d | j
 d |  j j ƒ } x! | D] } t | _ | j ƒ  qi W| j r8t j j ƒ  j	 d | j
 d t ƒ } t | ƒ d k r8t j j	 d | ƒ } x | D] } | j ƒ  qá Wt j j	 d | j
 ƒ } x | D] } | j ƒ  qW| j ƒ  q8n  t d ƒ S(	   sM   
    Expects the following POST parameters:
    chat_room_id
    message
    RK   RL   R9   R:   RD   i    R7   RN   (   R   R   R   RO   RP   t   leaveR1   R@   RA   RB   R   R,   R   RD   R6   t   deletedR!   RC   t   Messaget   deleteR    (   R#   RR   R&   RH   RJ   t   msgsRj   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyRm   Æ   s$    	*		$c         C   sg   |  j  } t j j d t | d ƒ ƒ } | d } | d k rJ t | _ n	 t | _ | j ƒ  t	 d ƒ S(   NRK   t   rstateR   RN   (
   R   R   R   RO   RP   R!   R   R   R6   R    (   R#   RR   R&   Rr   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   setroomá   s    	
	
c         C   sâ   |  j  } t j j d t | d ƒ ƒ } t j j ƒ  j d | j d t	 ƒ } y d d  l
 } Wn d d  l j j } n Xg  } xN | D]F } i  } | j | d <| j r´ d | d <n
 d | d <| j | ƒ q… Wt | j | ƒ ƒ S(	   NRK   R9   RD   iÿÿÿÿR:   t   Enabledt
   permissiont   Disabled(   R   R   R   RO   RP   R@   RA   RB   R   R!   t   jsont   django.utils.simplejsont   utilst
   simplejsonR:   R;   R'   R    t   dumps(   R#   RR   R&   RS   Rw   t   outRJ   t   tmp(    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   refreshlistí   s     	$	
c         C   st   |  j  } t j j d t | d ƒ ƒ } t j j ƒ  j d | j ƒ } x! | D] } t	 | _
 | j ƒ  qM Wt d ƒ S(   NRK   RL   R9   RN   (   R   R   R   RO   RP   R@   RA   RB   R   R   R;   R6   R    (   R#   RR   R&   RS   RJ   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt
   disableall  s    		c         C   st   |  j  } t j j d t | d ƒ ƒ } t j j ƒ  j d | j ƒ } x! | D] } t	 | _
 | j ƒ  qM Wt d ƒ S(   NRK   RL   R9   RN   (   R   R   R   RO   RP   R@   RA   RB   R   R!   R;   R6   R    (   R#   RR   R&   RS   RJ   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt	   enableall  s    		c         C   s„   |  j  } t j j d t | d ƒ ƒ } | d } t j j ƒ  j d | j d | ƒ } x! | D] } t	 | _
 | j ƒ  q] Wt d ƒ S(   NRK   RL   R:   R9   RN   (   R   R   R   RO   RP   R@   RA   RB   R   R   R;   R6   R    (   R#   RR   R&   R:   RS   RJ   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   disable  s    	
$	c         C   s„   |  j  } t j j d t | d ƒ ƒ } | d } t j j ƒ  j d | j d | ƒ } x! | D] } t	 | _
 | j ƒ  q] Wt d ƒ S(   NRK   RL   R:   R9   RN   (   R   R   R   RO   RP   R@   RA   RB   R   R!   R;   R6   R    (   R#   RR   R&   R:   RS   RJ   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   enable!  s    	
$	c         C   sI   |  j  } t j j d t | d ƒ ƒ } | d | _ | j ƒ  t d ƒ S(   NRK   RL   R3   RN   (   R   R   R   RO   RP   R3   R6   R    (   R#   RR   R&   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   commentedit,  s
    	
c         C   s•   |  j  } t j j d t | d ƒ ƒ } d } | j | d k r~ | d | d k ru | d | _ | j ƒ  d } q~ d } n  t t i | d	 6ƒ ƒ S(
   NRK   RL   t   at   oldpwt   newpwt   newpw2t   bt   cR)   (	   R   R   R   RO   RP   R   R6   R    R\   (   R#   RR   R&   R}   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   changepw4  s    	
		c         C   st   |  j  } t j j d t | d ƒ ƒ } t } | j | d k r] t | _ | j	 ƒ  t } n  t
 t i | d 6ƒ ƒ S(   NRK   RL   R   Rn   (   R   R   R   RO   RP   R   R   R!   Rn   R6   R    R\   (   R#   RR   R&   R}   (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt
   deleteroomB  s    		
	c   
      C   s  y d d l  } Wn d d l j j } n Xg  } t |  ƒ t t t g k ró x© |  D]˜ } i  } | rµ x' | D] } t | j	 | ƒ ƒ | | <qm Wt
 t j | j j ƒ  ƒ ƒ | d <n* x' | j j ƒ  D] \ } }	 |	 | | <qÅ W| j | ƒ qT Wn |  } | r| S| j | ƒ Sd S(   s   Simple convert model to jsoniÿÿÿÿNRY   (   Rw   Rx   Ry   Rz   Rd   t   dictt   listt   tuplet   unicodet   __getattribute__RX   RY   RZ   t	   timestampR[   t   __dict__t	   iteritemsR'   R{   (
   t   objectt   fieldst   to_dictRw   R|   RJ   R}   t   fieldt   attrt   value(    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyR\   M  s&    %(,   t   django.httpR    R   R   t   django.shortcutsR   t   django.contrib.authR   R   t   django.contrib.auth.decoratorsR   t   django.contrib.auth.modelsR   R   t   django.views.decorators.csrfR	   t   django.templateR
   t   modelst   formsR   RY   R   R+   R2   R8   RW   R   RT   R`   Rk   Rl   Rm   Rs   R~   R   R€   R   R‚   Rƒ   RŠ   R‹   R   R\   (    (    (    s2   /home/panlixing/Python_Projects/Chat/chat/views.pyt   <module>   sD   

 

