
    P1i\\                     .   d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	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mZ d dlmZ d dl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(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7 d dl8Z8 e8jr                  e:      Z; e       Z<d Z=ed        Z>eej~                  d               Z@ed        ZAed        ZBd ZCd ZDd ZEd ZFd  ZG G d! d"e      ZHej~                  d#        ZIy)$    )renderredirect)login_required)messages)loginauthenticatelogoutget_user_model)
LogoutView)AuthenticationForm)transaction)	send_mail)render_to_string)settings)timezone)urlsafe_base64_encodeurlsafe_base64_decode)force_bytes)	timedeltadatetime)reverse)
strip_tags)JsonResponse   )UserFormProfileFormUserRegistrationFormAccountDeletionFormPublicAccountDeletionFormQuickRegistrationFormTemporaryUserRegistrationFormPhoneAuthenticationForm)UserProfileAccountDeletionRequestDeletedUserDeletedUserProfile)transfer_user_datacleanup_temp_userNc                 D   | j                   j                  r7t        | j                   d      r!| j                   j                  rt	        d      S | j
                  dk(  rt        | j                        }|j                         r|j                         }|j                  d   }|j                  d   }t        | ||      }|St        | |       t        j                  | d       | j                  j!                  dd	      }t	        |      S t               }t#        | d
d|i      S )zHandle user registration.is_temporary_useraccounts:temp_registerPOSTphone	password1r-   passwordu   注册成功！next
main:indexzaccounts/register.htmlform)useris_authenticatedhasattrr*   r   methodr   r,   is_validsavecleaned_datar   r   r   successGETgetr   )requestr3   r4   r-   r0   	next_pages         0/home/cursorai/projects/iching/accounts/views.pyregisterrA      s     	%%12&&011~~#GLL1==?99;D%%g.E((5HuxHDgt$  *;<#KKOOFLA		**#%'3fd^DD    c                 ^    t        | d| j                  | j                  j                  d      S )z!Display user profile information.zaccounts/profile_view.html)r4   profile)r   r4   rD   r>   s    r@   profile_viewrF   9   s/     '7<<'':  rB   c                    t        | j                  d      r!| j                  j                  rt        d      S | j                  dk(  rt        | j                  | j                        }t        | j                  | j                  j                        }|j                         rQ|j                         rA|j                          |j                          t        j                  | d       t        d      S t        j                  | d       n6t        | j                        }t        | j                  j                        }t        | d||d	      S )
zEdit user profile information.r*   r+   r,   )instanceu   个人资料更新成功！accounts:profile_viewu   请修正下列错误。zaccounts/profile_edit.html)	user_formprofile_form)r6   r4   r*   r   r7   r   r,   r   rD   r8   r9   r   r;   errorr   )r>   rJ   rK   s      r@   profile_editrM   A   s    
 w||01gll6T6T011~~W\\GLLA	"7<<',,:N:NOL$9$9$;NNW&CD344NN7$>?gll3	"GLL,@,@A'7$:  rB   c                    | j                   dk(  rt        | j                  | j                        }|j	                         r~t        j                         t        d      z   }t        j                  j                  | j                  |d| j                  j                  | j                  j                  |j                  j                  dd            }| j                  t!        d	d
|j"                  i            }| j                  j                  xs | j                  j                  }| j                  |t        j                         j$                  t'        t(        dd      d}t+        d|      }d}t-        |t/        |      t(        j0                  |g|d       t3        d|      S t        | j                        }t5        | dd|i      S )Nr,   )r4   data   hoursTreason r4   
expires_at	is_activecontact_emailcontact_phonerS   accounts:confirm_deletiontokenkwargs
SITE_TITLE   易经r4   confirmation_urlcurrent_year
site_title2accounts/emails/account_deletion_confirmation.html   确认删除您的账户Fsubjectmessage
from_emailrecipient_listhtml_messagefail_silentlyzaccounts:deletion_email_sent)emailr4   zaccounts/delete_account.htmlr3   )r7   r   r4   r,   r8   r   nowr   r$   objectscreaterm   r-   r:   r=   build_absolute_urir   r[   yeargetattrr   r   r   r   DEFAULT_FROM_EMAILr   r   )	r>   r3   rV   deletion_requestra   rm   contextrk   rg   s	            r@   request_account_deletionrx   ]   s   ~~"7<<H==?!)"*==J5==DD\\%%ll00%ll00((,,Xr:  E    '993WFVF\F\<]^ 
 LL&&<',,*<*<E  $4 ( 3 3%hhG	G ,,`bijL0G"<0#66 %w)# :%HH"5'9FD>JJrB   c                      t        | dd|i      S )Nz!accounts/deletion_email_sent.htmlrm   r   )r>   rm   s     r@   deletion_email_sentr{      s    '>%@PQQrB   c           	      *   	 t         j                  j                  |d      }|j                  t	        j
                         k  r!t        j                  | d       t        d      S | j                  dk(  r=|j                  }|j                  xs d }t        j                  j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                        }	 |j*                  }d|j,                  r|j,                  j/                  d      nd i}t0        j                  j                  ||j                  |j2                  |	       d
dlm} |j                  j=                  |      j?                  |j                  d        d
dl m!}	 |	j                  j=                  |      j?                  |j                  d        d|_"        |jG                          | j                  jH                  r| j                  |k(  rtK        |        |jM                          |gt	        j
                         jN                  tQ        tR        dd      d}
tU        d|
      }d}tW        |tY        |      tR        jZ                  |g|d       t]        | d      S t]        | dd|i      S # t4        j6                  $ r Y kw xY w# t         j6                  $ r$ t        j                  | d       t        d      cY S w xY w)NT)r[   rW   u<   删除确认链接已过期。请重新提交删除请求。rI   r,   )original_idr-   rm   
first_name	last_namedate_joinedrS   
birth_date%Y-%m-%d)deleted_userr}   
created_atprofile_datar   )Person)
created_by)ori_userr   )liuyaorn   )r   r4   Fr^   r_   )rb   rc   z1accounts/emails/account_deleted_confirmation.htmlu   您的账户已成功删除rf   zaccounts/account_deleted.htmlzaccounts/confirm_deletion.htmlrv   u   无效的删除确认链接。)/r$   rp   r=   rV   r   ro   r   rL   r   r7   r4   rX   r%   rq   idr-   rm   r~   r   r   rS   rD   r   strftimer&   r   r#   DoesNotExistbazi.modelsr   filterupdateliuyao.modelsr   rW   r9   r5   r	   deleters   rt   r   r   r   r   ru   r   )r>   r[   rv   r4   rX   r   rD   r   r   r   rw   rk   rg   s                r@   confirm_account_deletionr      s   _1199==EUY=Z &&7NN7$bc344 >>V##((D -::BdM '..55 GGjjjj??.. ,,'.. 6 L,, !WM_M_'"4"4"="=j"Iei  #**11!- '

&11!-	 2  +NN!!T!299 :  -NN!!t!,33 4  */&!!# ||,,1Ew KKM ($,LLN$7$7")(L("K
  00celm7#&|4'::$1?!-"' '#BCC g? 0B
  	e ++ l ".. 1w @A/001sE   A"K %BK >A.K ,EK 2K KK KK 4LLc                 `   | j                   dk(  rct        | j                        }|j                         rG|j                  d   }|j                  d   }|j                  j                  d      }	 t        j                  j                  ||      }t        j                         t        d      z   }t        j                  j                  ||d|||	      }| j                  t        d
d|j                  i            }||t        j                         j                   t#        t$        dd      d}	t'        d|	      }
d}t)        |t+        |
      t$        j,                  |g|
d       t1        d      S t               }t3        | dd|i      S # t        j.                  $ r Y t1        d      S w xY w)z(Handle public account deletion requests.r,   r-   rm   rS   )r-   rm   rP   rQ   TrU   rZ   r[   r\   r^   r_   r`   rd   re   Frf   z!main:public_deletion_request_sentz#accounts/public_delete_account.htmlr3   )r7   r   r,   r8   r:   r=   Userrp   r   ro   r   r$   rq   rr   r   r[   rs   rt   r   r   r   r   ru   r   r   r   )r>   r3   r-   rm   rS   r4   rV   rv   ra   rw   rk   rg   s               r@   public_request_account_deletionr      s   ~~(6==?%%g.E%%g.E&&**84F'||''e5'A &\\^ib.AA
#9#A#A#H#H)""'"'! $I $  $+#=#=7JZJ`J`@ab$  !(8$,LLN$7$7")(L("K	  00dfmn4#&|4'::$)7!-"' ?@@(*'@64.QQ $$  ?@@s   1C8F F-,F-c                     t        | d      S )z6Show confirmation message for public deletion request.z*accounts/public_deletion_request_sent.htmlrz   rE   s    r@   public_deletion_request_sentr   -  s    'GHHrB   c                    | j                   j                  r7t        | j                   d      r!| j                   j                  rt	        d      S | j
                  dk(  rt        | j                        }|j                         r;|j                  d   }|j                  d   }|j                  d   }t        d|j                          t        j                  j                  |||      }|j                  j                  d	      r$|j                  d	   |_        |j!                          |j                  j                  d
      r$|j                  d
   |_        |j!                          t$        j                  j'                  |      \  }}|j                  j                  d      rk|j                  d   }|j)                  dd      j)                  dd      j)                  dd      }	 t+        j,                  |d      j/                         |_        |j                  j                  d      r7	 t+        j,                  |j                  d   d      j5                         |_        |j                  j                  d      r	 t;        |j                  d         |_        |j                  j                  d      rk|j                  d   }	|	j)                  dd      j)                  dd      j)                  dd      }		 t+        j,                  |	d      j/                         |_        |j                  j                  d      rk|j                  d   }
|
j)                  dd      j)                  dd      j)                  dd      }
	 t+        j,                  |
d      j/                         |_         |j!                          tC        | ||      }|tE        | |       tG        jH                  | d       | jJ                  j                  d d      }d!|v rtM        d"      }nd#|v rtM        d$      }ntM        d%      }| jN                  j                  d&      d'k(  rtQ        d(|d)      S t	        |      S tG        jH                  | d*       | jN                  j                  d&      d'k(  rtQ        d(tM        d+      d)      S t	        d+      S | jN                  j                  d&      d'k(  r0tQ        d,|jR                  jU                         d-      S t               }tW        | d.d/|i      S # t2        $ rL 	 t+        j,                  |d      j/                         |_        n# t2        $ r t        d|        Y nw xY wY ^w xY w# t2        t8        f$ r t        d|j                  d           Y =w xY w# t2        t8        f$ r t        d|j                  d           Y 5w xY w# t2        $ rL 	 t+        j,                  |	d      j/                         |_        n# t2        $ r t        d|	        Y nw xY wY w xY w# t2        $ rL 	 t+        j,                  |
d      j/                         |_         n# t2        $ r t        d|
        Y nw xY wY w xY w)0z4Handle quick registration from number power results.r*   r+   r,   r-   rm   r0   zForm data: )r-   rm   r0   namegenderrn   r   u   年-u   月u   日rT   r   z%Y%m%dzFailed to parse birth date: 
birth_timez%H:%MzFailed to parse birth time: 	twin_typezFailed to parse twin type: 
father_dobzFailed to parse father DOB: 
mother_dobzFailed to parse mother DOB: r/   u0   注册成功！您的数字能量图已保存。HTTP_REFERERbazizbazi:person_listr   zliuyao:listznumber:chartszX-Requested-WithXMLHttpRequestT)r;   r   u!   注册成功！请登录继续。zaccounts:loginF)r;   errorszaccounts/quick_register.htmlr3   ),r4   r5   r6   r*   r   r7   r    r,   r8   r:   printr   rp   create_userr=   r~   r9   r   r#   get_or_createreplacer   strptimedater   
ValueErrortimer   	TypeErrorintr   r   r   r   r   r   r;   METAr   headersr   r   as_jsonr   )r>   r3   r-   rm   r0   r4   rD   createdbirth_date_strfather_dob_strmother_dob_strrefererredirect_urls                r@   quick_registerr   1  s     	%%12&&011~~$W\\2==?%%g.E%%g.E((4H K 1 1234 <<++! , D   $$V,"&"3"3F";		   $$X."//9		  +22@@d@KGW   $$\2!%!2!2<!@!/!7!7s!C!K!KESV!W!_!_`egi!jO)1):):>:)V)[)[)]G&   $$\2\)1):):4;L;L\;Z\c)d)i)i)kG&   $$[1Z(+D,=,=k,J(KG%   $$\2!%!2!2<!@!/!7!7s!C!K!KESV!W!_!_`egi!jO)1):):>:)V)[)[)]G&   $$\2!%!2!2<!@!/!7!7s!C!K!KESV!W!_!_`egi!jO)1):):>:)V)[)[)]G& LLN
  uxHDgt$  *\] ",,**>2>W$#*+=#>L(#*=#9L#*?#;L ??&&'9:>NN'Dl(STT  --  *MN ??&&'9:>NN'DgN^F_(`aa 011 ""#56:JJ#ATATAV$WXX %& '9FD>JJ{ " OO-5->->~x-X-]-]-_*% O <^<LMNO	O #I. \89J9J<9X8YZ[\ #I. Z78I8I+8V7WXYZ " OO-5->->~x-X-]-]-_*% O <^<LMNO	O " OO-5->->~x-X-]-]-_*% O <^<LMNO	Os   ))T .6U4  V% :)W  )X. 	U1&)UU1U*'U1)U**U10U14*V"!V"%*WW	X+ )X
	X+
X$!X+#X$$X+*X+.	Z8)Y"!Z"Y<9Z;Y<<ZZc                    | j                   j                  r,t        | j                   d      r| j                   j                  s!t	        j
                  | d       t        d      S | j                  dk(  rt        | j                   | j                        }|j                         rI	 |j                  | j                         }t        | |       t	        j                  | d       t        d      S |j$                  j'                         D ]j  \  }}|D ]`  }|j(                  j+                  |      r&t-        |j(                  j+                  |      d|      n|}t	        j
                  | | d|        b l nt        | j                         }t/        | d|| j                   d      S # t        $ r[}t        j                  d| j                   j                    d|        t	        j
                  | d	t#        |              Y d
}~yd
}~ww xY w)zB
    Handle temporary user registration to permanent account.
    r*   u$   此页面仅限临时用户访问。r2   r,   )	temp_userrO   u-   账户注册成功！您的数据已保存。zError converting temp user z to permanent: u   注册过程中发生错误：Nlabel: )r   z accounts/temp_user_register.html)r3   r4   )r4   r5   r6   r*   r   rL   r   r7   r!   r,   r8   r9   r   r;   	Exceptionloggerr   strr   itemsfieldsr=   rt   r   )r>   r3   permanent_userefieldr   rL   field_labels           r@   temp_user_registerr     s   
 LL))GLL"56LL**w FG%%~~,w||',,W==?S!%7<<!8 g~.  *YZ-- "&!2!2!4v#EUYU`U`UdUdejUk'$++//%*@'5"QqvKNN7{m2eW,EF $ "5
 -w||D'=@    S:7<<??:K?[\Z]^_w*HQ(QRRSs   &AF& &	H
/AHH
c                   "     e Zd ZdZ fdZ xZS )CustomLogoutViewzACustom logout view that handles both regular and temporary users.c                     |j                   j                  rBt        |j                   d      r,|j                   j                  rt	        j
                  |d       t        |   |g|i |S )Nr*   u   临时用户数据已清除。)r4   r5   r6   r*   r   infosuperdispatch)selfr>   argsr]   	__class__s       r@   r   zCustomLogoutView.dispatch  sW    LL))GLL"56LL**MM'#CD w9$9&99rB   )__name__
__module____qualname____doc__r   __classcell__)r   s   @r@   r   r     s    K
: 
:rB   r   c           
         d}d}| j                   j                  r%t        | j                   dd      r| j                   }d}| j                  dk(  rt	        | | j
                        }|j                         r|j                         }|r{|j                  ro	 t        ||      }t        |       |d   dkD  s|d	   dkD  r0d
|d    d|d	    d}|d   r|dz  }t        j                  | |       nt        j                  | d       nt        j                  | d       t%        | |       | j&                  j)                  dd      }t+        |      S t	               }t-        | d||| j&                  j)                  dd      d      S # t        $ rR}t        j                  d|j                    d|j                    d|        t        j"                  | d       Y d}~d}~ww xY w)zM
    Enhanced login view that handles data transfer for temporary users.
    NFr*   Tr,   )rO   bazi_recordsr   liuyao_recordsu   登录成功！已转移 u    个八字记录和 u"    个六爻记录到您的账户。owner_flag_cleareduO    注意：由于您已有主命盘，转移的记录已调整为非主命盘。u   登录成功！z'Error transferring data from temp user z to r   u0   数据转移时发生错误，请联系客服。r1   /zregistration/login.html)r3   is_temp_userr1   )r4   r5   rt   r7   r"   r,   r8   get_userr*   r'   r(   r   r;   r   r   rL   r   warningr   r<   r=   r   r   )	r>   r   r   r3   target_usersummaryrh   r   next_urls	            r@   enhanced_loginr     s   
 IL ||$$?RTY)ZLL	~~&wW\\B==?--/K Y88b0KHG%i0 ~.2g>N6ORS6S$=gn>U=VVjkr  tD  lE  kF  Fh  #i"#78#'xxG ((': ((2CD
   *;< ';' {{vs3HH%%&('4$,7   ! bLL#J9<<.X\]h]k]k\llnopnq!rs$$W.`aabs   A-F 	G
AGG)Jdjango.shortcutsr   r   django.contrib.auth.decoratorsr   django.contribr   django.contrib.authr   r   r	   r
   django.contrib.auth.viewsr   django.contrib.auth.formsr   	django.dbr   django.core.mailr   django.template.loaderr   django.confr   django.utilsr   django.utils.httpr   r   django.utils.encodingr   r   r   django.urlsr   django.utils.htmlr   django.httpr   formsr   r   r   r   r   r    r!   r"   modelsr#   r$   r%   r&   utilsr'   r(   logging	getLoggerr   r   r   rA   rF   atomicrM   rx   r{   r   r   r   r   r   r   r    rB   r@   <module>r      s$   - 9 # K K 0 8 ! & 3   ! J - (  ( $, , , Y X 8 			8	$E6     4 .K .K` R R`1D7RrIMKd&R:z :  2 2rB   