o
    g                     @   s   d dl Z d dl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mZ d dl
mZ d dlZd dlmZmZ d dlmZmZ d d	lmZmZ d d
l
mZ d dlZd dlmZ dd ZdddZdd Zdd Zdd Zdd ZdS )    N)UserGroup
Permission)ContentType)settings)
URLPatternURLResolver)get_resolver)LanguageLinks)ObjectDoesNotExistMultipleObjectsReturned)SumQ)resolve)geocoderc           	   
   C   s   t j  }|d}tjtjd| d}tj|s!t	| | |  d}| }z5tj|r4dnd}t
||}||d d|d	 d
 W d    W d S 1 sYw   Y  W d S  tys } zW Y d }~d S d }~ww )Nz%Y%mzlog/functions//z.logaw%Y/%m/%d %H:%M:%S: zutf-8z
)datetimenowstrftimeospathjoinr   BASE_DIRexistsmakedirsopenwritedecode	Exception)	functxtdtnmr   fnameftoutfilee r,   +/var/www/Entralon-Web-Backend/main/utils.pylog_func   s    


$&r.   enc                 K   st   t jj| d }|d u rt jjdd }|jdkrd}|S |jdkr(d}|S |jdkr1d}|S |jdkr8d	}|S )
N)coder/   z4Entralon | international online real estate platformfauV   انترالون | پلتفرم آنلاین مشاور املاک بین المللیaruH   انترالون | منصة مشاورة العقارات الدوليةruu^   Entralon | международная онлайн-платформа недвижимости)r
   objectsfilterfirstr0   )languagekwargslangoutr,   r,   r-   set_page_title#   s   
	


r;   c                      s$   g d fdd	  t  j S )N c                    s`   | D ]+}t |tr|t|j }||j|jjd qt |tr- |j	|t|j  qd S )N)r   nameview)

isinstancer   strpatternappendr=   callback__name__r   url_patterns)rE   parent_pathrA   r   recursive_urlsurlsr,   r-   rH   8   s   


z$extract_urls.<locals>.recursive_urls)r<   )r	   rE   r,   r,   rG   r-   extract_urls6   s   rJ   c                  C   s  t  } tjt}| D ]}|d drtjj|d |d\}}ztjj	|d |d d}W nF t
yK   tjj|d |d |d dd|d}Y n* tyt   tjj|d |d d }tjj|d |d dj|jd	  Y nw ||_d|_|jd u s|jd
kr|jd ur|j|_|  |  qz	tjj	dd}W n   tjjdd|d}Y tjjg ddj|d tjjd ddD ]A}|j}z	tjj	|d}W n ty   tjj||d}Y nw ||_d|_|jd u s|jd
kr|jd ur|j|_|  |  qddg}|D ]d}tjj|d d\}	}|d }
|d dkr2tjtddtddB }n(|d dv rJtjtg ddtddB }ntjt|d dtddB }tjjd |
d}|	jj|  |	jj|  qd S )Nr   masterr>   )codenamecontent_type)viewslink_ )rN   rO   r=   
permission)idr<   
main_pages)rL   z
main pages)rL   r=   rM   )#r<   r   z/master/z/master/login/z/master/login/submit/)link__in)rR   master_)rR   views__startswith)
super_userz
super user)rK   rK      )r=   r   rY   )codename__startswith)rK   )rK   master_panelmaster_dashboard)codename__in)groupsusername__icontains)rJ   r   r4   get_for_modelr   
startswithr   get_or_creater   getr   createreplacer   r5   r6   excluderS   deleterR   use_forr=   saveupdaterN   r#   r   r   user_setaddpermissions)rI   cturlrR   rP   rO   r=   default_groupxgroupunrn   usersr,   r,   r-   create_linksH   sd   ,*
" rv   c                 C   sd   t | jj}ddd}| jjs|S tjj|d }|r,|j	r,| j
|j	r*d|d< |S d|d< |S )zC
    Check user permissions based on Links model configuration
    Fz/login/)has_permredirect_uri)rN   Trw   )r   	path_infourl_nameuseris_authenticatedr   r4   r5   r6   rR   rw   )requestcurrent_urlresultrO   r,   r,   r-   user_control{   s   
r   c              
   C   s   | sdS t | tst| } | dsd|  } zt| }t|j}t|d}| d|j dW S  t	yX } zt
dtj d d|  d	|  W Y d }~dS d }~ww )
Nr<   +r/   ()z	error on r   z : analyze phone number r   )r?   r@   rb   phonenumbersparser   region_code_for_country_codecountry_code_region_display_namer#   printr   r   r   )phone_numberparsed_numberrcountryr+   r,   r,   r-   analyze_phone_number   s    



&r   )r/   ) r   r   django.contrib.auth.modelsr   r   r   "django.contrib.contenttypes.modelsr   django.confr   django.urlsr   r   r	   r   main.modelsr
   r   django.core.exceptionsr   r   django.db.modelsr   r   r   r   r.   r;   rJ   rv   r   r   r,   r,   r,   r-   <module>   s(    
3