
    S
hL                     b   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 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 Zd Zd Zd Z ej        de            ej        de            ej        de            ej        de           d Z d Z! G d dej"                  Z# G d dej"                  Z$d Z% G d de$          Z& G d  d!e$          Z' G d" d#e$          Z( G d$ d%e$          Z)d& Z*d' Z+ G d( d)e$          Z, G d* d+ej"                  Z-dS ),    N)settings)User)models)
ArrayField)Filestorages)Signer)reverse)classproperty)gettext_lazy   )PublicManager)_urls_for_jsc                 8    t          j        j        di | j        S N )r   USER_DISPLAY_NAMEformat__dict__selfs    V/var/www/html/01_SiteInternet/03_Maps/venv/lib/python3.11/site-packages/umap/models.pydisplay_namer      s    %,==t}===    c                 p    t          | t          j                  }t          t          j        d|i          S )N
identifierkwargs)getattrr   USER_URL_FIELDr   USER_MAPS_URLr   r   s     r   get_user_urlr$      s/    x677J8)<2LMMMMr   c                 \    t          | t          j                  }t          dd|i          S )N
user_starsr   r   )r    r   r!   r   r#   s     r   get_user_stars_urlr'       s,    x677J<z(BCCCCr   c                 V    | j         t          |           |                                 dS N)idnameurl)pkstrget_urlr   s    r   get_user_metadatar0   %   s*    gD		||~~  r   __str__r/   get_stars_urlget_metadatac                  2    t           j        pt          j        S N)r   UMAP_DEFAULT_SHARE_STATUSMapDRAFTr   r   r   get_default_share_statusr9   3   s    -::r   c                  2    t           j        pt          j        S r5   )r   UMAP_DEFAULT_EDIT_STATUSr7   OWNERr   r   r   get_default_edit_statusr=   7   s    ,9	9r   c                       e Zd Z ej        d ed          ddd          Z ej        dd ed                    Z ej	        e
d	          Zd
 Zd Zd Zd ZdS )Team   r+   TF)
max_lengthverbose_nameuniqueblanknulldescriptionrD   rE   rB   teams)related_namec                     | j         S r5   r+   r   s    r   __unicode__zTeam.__unicode__B   
    yr   c                     | j         S r5   rK   r   s    r   r1   zTeam.__str__E   rM   r   c                 2    t          dd| j        i          S )N	team_mapsr-   r   )r   r-   r   s    r   r/   zTeam.get_urlH   s    {D$'?;;;;r   c                 F    | j         | j        |                                 dS r)   )r-   r+   r/   r   s    r   r3   zTeam.get_metadataK   s    gtyHHHr   N)__name__
__module____qualname__r   	CharField_r+   	TextFieldrF   ManyToManyFieldr   usersrL   r1   r/   r3   r   r   r   r?   r?   ;   s        6QQvYYt5u  D #&"DqqGWGWXXXK"F"4g>>>E    < < <I I I I Ir   r?   c                   j    e Zd Z ej        d ed                    Z G d d          Zd Zd Z	dS )	
NamedModelr@   r+   )rA   rB   c                       e Zd ZdZdZdS )NamedModel.MetaTrK   N)rR   rS   rT   abstractorderingr   r   r   Metar]   R   s        r   r`   c                     | j         S r5   rK   r   s    r   rL   zNamedModel.__unicode__V   rM   r   c                     | j         S r5   rK   r   s    r   r1   zNamedModel.__str__Y   rM   r   N)
rR   rS   rT   r   rU   rV   r+   r`   rL   r1   r   r   r   r[   r[   O   sy        6s6CCCD             r   r[   c                  v    t           j                            t          t          dd                    d         S )z
    Returns a default Licence, creates it if it doesn't exist.
    Needed to prevent a licence deletion from deleting all the linked
    maps.
    UMAP_DEFAULT_LICENCE_NAMEzNo licence setrK   r   )Licenceobjectsget_or_creater    r   r   r   r   get_default_licencerh   ]   s>     ?((X:<LMM )   	 	r   c                   p    e Zd ZdZ ej         ed           ed                    Zed             Z	dS )re   z.
    The licence one map is published on.
    detailsz-Link to a page where the licence is detailed.)rB   	help_textc                      | j         | j        dS )N)r+   r,   )r+   rj   r   s    r   jsonzLicence.jsons   s    	$,777r   N)
rR   rS   rT   __doc__r   URLFieldrV   rj   propertyrm   r   r   r   re   re   i   sl          foQy\\!CDD  G
 8 8 X8 8 8r   re   c                   `   e Zd Z ej        d ed                    Z ej        d          Z ej        d          Z	 ej        d          Z
 ej        d	d	 ed
                    Z ej        d          Zed             Zed             Zed             Z G d d          ZdS )	TileLayeri  z"URL template using OSM tile format)rA   rk   r   default   ,  rA   Tz'Order of the tilelayers in the edit box)rD   rE   rk   Fc                 N     t           fd j        j        D                       S )Nc              3   P   K   | ] }|j         t          |j                   fV  !d S r5   )r+   r    ).0fieldr   s     r   	<genexpr>z!TileLayer.json.<locals>.<genexpr>   sG       
 
8=UZuz223
 
 
 
 
 
r   )dict_metafieldsr   s   `r   rm   zTileLayer.json   s@     
 
 
 
AEAR
 
 
 
 
 	
r   c                 B    | j                             d          d         S )zW
        Returns the default tile layer (used for a map when no layer is set).
        rankr   )rf   order_by)clss    r   get_defaultzTileLayer.get_default   s    
 {##F++A..r   c                     |                                  }g }| j                                        D ]5}|j        }|r|j        |j        k    rd|d<   |                    |           6|S )NTselected)r   rf   allrm   r-   append)r   rt   ltr   s        r   get_listzTileLayer.get_list   sr    //##"" 	 	AVF *7:--%)z"HHVr   c                       e Zd ZdZdS )TileLayer.Meta)r   r+   NrR   rS   rT   r_   r   r   r   r`   r      s        #r   r`   N)rR   rS   rT   r   rU   rV   url_templateIntegerFieldminZoommaxZoomattributionSmallIntegerFieldr   BooleanFieldtmsrp   rm   classmethodr   r   r`   r   r   r   rr   rr   x   s7       #6#!!$H"I"I  L "f!!,,,G!f!"---G"&"c222K#6#+T)U)U  D &
e
,
,
,C
 
 X

 / / [/   [$ $ $ $ $ $ $ $ $ $r   rr   c            	           e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZe ed          fe ed	          ffZe ed
          fe ed          fe ed          ffZe ed          fe ed          ffZee	 ed          fe
 ed          fe ed          fe ed          ffz   Z ej        d          Z ej        d ed                    Z ej        d ed                    Z ej        d ed           ed                    Z ej        e ed           ed          ej        e          Z ej         d           Z! ej         d!          Z" ej        e#j$        ddd" ed#          ej%        $          Z& ej'        e#j$        d ed%          &          Z( ej        e)dd ed'          ej*        (          Z+ ej,        ee- ed)          *          Z. ej,        ee/ ed+          *          Z0 ej1        dd ed,          e2-          Z# e3 ej4        d./          de50          Z6 ej7                    Z8 e9            Z:e;d1             Z<e;d2             Z=e;d3             Z>d4 Z? fd5Z@d6 ZAd7 ZBd8 ZCd9 ZDdEd;ZEd< ZFdEd=ZGdEd>ZHd? ZIe;d@             ZJdA ZKdB ZLdC ZMeNdD             ZO xZPS )Fr7   z"
    A single thematical map.
    r         r   	   c   #Only editable with secret edit linkEveryone can editEveryoneEditors and team only
Owner onlyzDraft (private)zEveryone (public)zAnyone with linkBlockedDeletedT)db_indexcenter)	geographyrB      zoom)rt   rB   FlocatezLocate user on load?rt   rB   rk   zChoose the map licence.licence)rk   rB   	on_deletert   )auto_now_addauto_now
owned_mapsowner)rD   rE   rI   rB   r   editors)rD   rB   team)rD   rE   rB   r   edit statuschoicesrt   rB   share statusr   rD   rE   rB   rt   r@   rw   )rD   rt   c                 L    	 | j         d         d         S # t          $ r Y dS w xY w)N
propertiesrF    )r   KeyErrorr   s    r   rF   zMap.description   s;    	=.}== 	 	 	22	s    
##c                 p    | j                             t          j                                                  S )N)share_status)datalayer_setfilter	DataLayerINHERITr   r   s    r   
datalayerszMap.datalayers   s+    !((i6G(HHLLNNNr   c                    | j         }d |D             }| j        }d|vri |d<   |d                             t                                          j        g|t                      t          j        dddd| j        | j	        i d           |S )Nc                 6    g | ]}|                                 S r   )metadata)rz   cs     r   
<listcomp>z(Map.preview_settings.<locals>.<listcomp>  s     7771!**,,777r   r   disabledFT)
tilelayersr   urls
STATIC_URLeditModehashscrollWheelZoom	noControlr*   schema	slideshow)
r   r   updaterr   r   rm   r   r   r-   extra_schema)r   layersdatalayer_datamap_settingss       r   preview_settingszMap.preview_settings   s    77777}|++)+L&\"))(4466;<,$&1&#(!g+ 	
 	
 	
 r   c                 P    t           j        | _        |                                  d S r5   )r7   DELETEDr   saver   s    r   move_to_trashzMap.move_to_trash  s    K		r   c                     | j                                         D ]}|                                  t                      j        di |S r   )r   r   deletesuper)r   r   	datalayer	__class__s      r   r   z
Map.delete  sT     +//11 	 	Iuww~'''''r   c                    | j         }d|d<   |                    |                                           |d<   g }| j        D ]}|j                            d          5 }t          j        |                                          }d d d            n# 1 swxY w Y   |j         r%|j         	                    dd            |j         |d<   |
                    |           ||d<   |S )Numaptypeurirbr*   _umap_optionsr   )r   build_absolute_uriget_absolute_urlr   geojsonopenrm   loadsreadpopr   )r   requestumapjsonr   r   flayers          r   generate_umapjsonzMap.generate_umapjson$  s#   =!!44T5J5J5L5LMM
 	% 	%I"''-- -
16688,,- - - - - - - - - - - - - - -! <"&&tT222)2);o&e$$$$'s   'BB	B	c                 B    t          d| j        pd| j        d          S )Nmap)slugmap_idr   )r   r   r-   r   s    r   r   zMap.get_absolute_url3  s&    udi.@5DG%T%TUUUUr   c                     t                      }|                    | j                  }t          dd|i          }t          j        |z   S )Nmap_anonymous_edit_url	signaturer   )r
   signr-   r   r   SITE_URL)r   signerr   paths       r   get_anonymous_edit_urlzMap.get_anonymous_edit_url6  sD    KK((	/i8PQQQ 4''r   c                     | j         p| j        S r5   )r   r   r   s    r   
get_authorzMap.get_author<  s    y&DJ&r   Nc                 f    |sdS |j         r| j        |j         k    rdS |                     |          S NFT)userr   is_anonymous_ownerr   r   s     r   is_ownerzMap.is_owner?  s@     	5< 	DJ',664&&w///r   c                     |r| j         rdS | j        \  }}	 t          |                    |d                    |k    }n# t          $ r d}Y nw xY w|S )NF)r   signed_cookie_elementsintget_signed_cookie
ValueError)r   r   keyvaluehas_anonymous_cookies        r   r  zMap.is_anonymous_ownerF  s}     	$* 	50
U	)#&w'@'@e'L'L#M#MQV#V   	) 	) 	)#(   	)##s   '? AAc                 |    |sdS | j         r|j        | j         k    rdS | j         s|                     |          sdS dS r  )r   r  r  r  s     r   
can_deletezMap.can_deleteQ  sU     	5: 	',$*445z 	$"9"9'"B"B 	5tr   c                 f   d}|sdS |j         }| j        s$t          j        r|                     |          rd}nx| j        | j        k    rd}ne|j        sd}n[|| j        k    rd}nM| j        | j        k    r=|| j	        
                                v s | j        |j        
                                v rd}|S )a  
        Define if a user can edit or not the instance, according to his account
        or the request.

        In owner mode:
            - only owner by default (OWNER)
            - any editor or team member if mode is COLLABORATORS
            - anyone otherwise (ANONYMOUS)
        In anonymous owner mode:
            - only owner (has ownership cookie) by default (OWNER)
            - anyone otherwise (ANONYMOUS)
        FT)r  r   r   UMAP_ALLOW_ANONYMOUSr  edit_status	ANONYMOUSis_authenticatedCOLLABORATORSr   r   r   rH   r   r   canr  s       r   can_editzMap.can_editZ  s      	5|
	-	 ''00	
 CC//CC& 	CCTZCC!333t|''))))TY$*..:J:J-J-J
r   c                    | j         t          j        t          j        fv rd}n| j         t          j        t          j        fv rd}n| j        "t          j        o| 	                    |          }n|j
        j        sd}nz|j
        | j        k    rd}ng| j         t          j        t          j        fv }|oD|j
        | j                                        vo$| j        |j
        j                                        v }|S r  )r   r7   BLOCKEDr   PUBLICOPENr   r   r  r  r  r  PRIVATEr8   r   r   r   rH   )r   r   r  
restricteds       r   can_viewzMap.can_view|  s    ck :::CC3:sx"888CCZ/TD4K4KG4T4TCC. 
	CC\TZ''CC*s{CI.FFJ >L(8(8(:(::>IW\%7%;%;%=%==C
 
r   c                 $    d| j         z  | j         fS )Nzanonymous_owner|%sr-   r   s    r   r	  zMap.signed_cookie_elements  s    $tw.88r   c                 B    | j         pt                                          S r5   )	tilelayerrr   r   r   s    r   get_tilelayerzMap.get_tilelayer  s    ~8!6!6!8!88r   c                    | j         j                            | j                  }d |_        t	          d          d| j        |_        d|v r|d         |_        |                                 | j        	                                D ]}|j        
                    |           | j        D ]}|                    |           |S )Nr#  zClone of r   )map_inst)r   rf   getr-   rV   r+   r   r   r   r   addr   clone)r   r   neweditorr   s        r   r,  z	Map.clone  s    n$((DG(44
mmmmTYY7fwCI


l&&(( 	$ 	$FKOOF#### 	* 	*IOOSO))))
r   c                 \    t          t          j                  fd| j        D             S )Nc                 @    g | ]}|                     ||          fS r   )r*  )rz   r   labelss     r   r   z(Map.get_tags_display.<locals>.<listcomp>  s,    999!FJJq!$$%999r   )r}   r   	UMAP_TAGStags)r   r1  s    @r   get_tags_displayzMap.get_tags_display  s/    h())9999ty9999r   c                 b    ddt           j        z  idt          t           j        d           idS )Nrt   z%sumap/img/marker.svgr   c                     | d         S )Nr   r   )is    r   <lambda>z"Map.extra_schema.<locals>.<lambda>  s
    1 r   )r  )iconUrlr3  )r   r   sortedr2  r   s    r   r   zMap.extra_schema  sB     2X5HH x'9~~ N N NO	
 
 	
r   r5   )QrR   rS   rT   rn   r  r  r<   r8   r  r  r  r  r   rV   ANONYMOUS_EDIT_STATUSEDIT_STATUSANONYMOUS_SHARE_STATUSSHARE_STATUSr   	SlugFieldr   
PointFieldr   r   r   r   r   
ForeignKeyre   SET_DEFAULTrh   r   DateTimeField
created_atmodified_atr   AUTH_USER_MODELPROTECTr   rX   r   r?   SET_NULLr   r   r=   r  r9   r   	JSONFieldr}   r   rU   listr3  Managerrf   r   publicrp   rF   r   r   r   r   r   r   r   r  r  r  r  r  r!  r	  r&  r,  r4  r   r   __classcell__r   s   @r   r7   r7      s         IMEEFDGGG	7889	AA)**+
 
AAjMM"	1223	, K 
#$$%	&''( *	qq#$$%	!!+,,-	!!I,,	!!I,,	- L 6T***DVAAhKKHHHF6qqqyyAAAD V AAhKK11=S;T;T  F  f!-..Qy\\$#  G &%4888J&&&555KF !QwZZ.  E %f$ 11Y<<  G 6QvYY/  D +&*'Q}%%  K
 ,6+(Q~&&  L
  vAAjMM4  H :&f&#666dDQQQDfnG]__F  X O O XO   X.  ( ( ( ( (  V V V( ( (' ' '0 0 0 0	$ 	$ 	$          D  ( 9 9 X99 9 9  : : : 
 
 ]
 
 
 
 
r   r7   c                       e Zd ZdZ ej        d          Z ej        ddd          Z ej        d          Z	e
d             Zd	S )
	Pictogramz/
    An image added to an icon of the map.
    rv   rw   T)rA   rE   rD   	pictogram)	upload_toc                 N    | j         | j        | j        | j        | j        j        dS )N)r*   r   r+   categorysrc)r-   r   r+   rT  rQ  r,   r   s    r   rm   zPictogram.json  s0     '+I>%
 
 	
r   N)rR   rS   rT   rn   r   rU   r   rT  	FileFieldrQ  rp   rm   r   r   r   rP  rP    s|          #&"c222Kv3TFFFH  ;777I
 
 X
 
 
r   rP  c                 @    | j         j                            |           S r5   )r   storagemake_filename)instancefilenames     r   rR  rR    s    #11(;;;r   c                      t           d         S )Ndatar   r   r   r   set_storager^    s    Fr   c                       e Zd ZdZdZdZdZdZdZe e	d          fe e	d          ffZ
e e	d          fe e	d	          fe e	d
          fe e	d          ffZe e	d          fe e	d          fe e	d          ffZ ej        ddd          Z ej        dd          Z ej        eej                  Z ej        dd e	d                    Z ej        edde          Z ej        d e	d           e	d                    Z ej        d          Z ej         dd e	d          e!          Z" ej        ee e	d                    Z# ej        e
e e	d                    Z$ ej%        d          Z& G d  d!          Z' fd"Z( fd#Z)d-d%Z*d-d&Z+e,d'             Z-e,d(             Z.d) Z/d* Z0d-d+Z1d, Z2 xZ3S ).r   z%
    Layer to store Features in.
    r   r   r   r   r   Inheritr   r   r   r   r   r   TF)rC   primary_keyeditable)rE   rD   r   rF   rG   )rR  rD   rE   rX  zdisplay on loadzDisplay this layer on load.r   rs   r   r   r   r   r   r   c                       e Zd ZdZdS )DataLayer.Meta)r   Nr   r   r   r   r`   re    s        r   r`   c                      t          t          |           j        di | | j        j                            |            t          | d          r| `d S d S )N_reference_versionr   )r   r   r   r   rX  onDatalayerSavehasattrrg  r   r   r   s     r   r   zDataLayer.save	  sh    #i#--f---,,T2224-.. 	('''	( 	(r   c                 t    | j         j                            |             t                      j        di |S r   )r   rX  onDatalayerDeleter   r   rj  s     r   r   zDataLayer.delete  s8    ..t444uww~'''''r   Nc                    | j         }|s	 t          j        | j                                                                                  }n# t          $ r i }Y nw xY w|                    d          }|s| j        | j	        d}|| _         | 
                    dg           | j        r
| j        |d<   | j        |d<   d| j        i|d<   |                     |          rd	nd
|d<   | j        |d<   |S )Nr   )r+   displayOnLoadr   )update_fieldsold_idr*   r  permissionsadvancedr   r   _referenceVersion)r   rm   r   r   r   decodeFileNotFoundErrorr*  r+   display_on_loadr   rp  r-   r  r  reference_version)r   r   r   r]  s       r   r   zDataLayer.metadata  s    = 	2z$,"3"3"5"5"<"<">">??$   xx00H  I%)%9 
 %DMIIZLI111; 	-!%HX#0$2B"C-1]]7-C-CSzz(,(>$%s   =A	 	AAc                    | j         j                            | j                  }d|j        _        t          j                    |_        |r||_        t          |j
        j        j        d          |_
        |                                 |S )Nr#  TtmpnamerK   )r   rf   r*  r-   _stateaddinguuiduuid4r   r   r   filer   )r   r)  r-  s      r   r,  zDataLayer.clone/  ss    n$((DG(44 
 	CG3;+0yAAA



r   c                 x    t          | d          s$| j        j                            |           | _        | j        S )Nrg  )ri  r   rX  get_reference_versionrg  r   s    r   rw  zDataLayer.reference_version9  s;    t122 	W&*l&:&P&PQU&V&VD#&&r   c                 @    | j         j                            |           S r5   )r   rX  list_versionsr   s    r   versionszDataLayer.versions?  s    |#11$777r   c                 B    | j         j                            ||           S r5   )r   rX  get_versionr   refs     r   r  zDataLayer.get_versionC  s    |#//T:::r   c                 B    | j         j                            ||           S r5   )r   rX  get_version_pathr  s     r   r  zDataLayer.get_version_pathF  s    |#44S$???r   c                    | j         | j        k    r| j                            |          S d}|sdS |j        }| j        j        s(t          j        r| j                            |          rd}| j         | j	        k    rd}nx|j
        r|| j        j        k    rd}n^|j
        rW| j         | j        k    rG|| j        j                                        v s%| j        j        |j                                        v rd}|S )zq
        Define if a user can edit or not the instance, according to his account
        or the request.
        FT)r  r   r   r  r  r   r   r  r  r  r  r  r   r   r   rH   r  s       r   r  zDataLayer.can_editI  s   
 t|++8$$W--- 	5|x~ 	, 1L1LW1U1U t~--CC" 	ttx~'='=CC" 	t'74;M'M'Mtx'++----$*..BRBR1R1R
r   c                 P    t           j        | _        |                                  d S r5   )r   r   r   r   r   s    r   r   zDataLayer.move_to_trash`  s    %-		r   r5   )4rR   rS   rT   rn   r   r  r  r<   r   rV   r>  r<  r;  r   	UUIDFieldr|  r   rp  rA  r7   CASCADEr   rW   rF   rV  rR  r^  r   r   rv  r   r   rI  r}   r   r  r   rC  rE  r`   r   r   r   r,  rp   rw  r  r  r  r  r   rM  rN  s   @r   r   r     sq         GIMEG	!!I,,	!!I,,L
 
!!I,,	AAjMM"	1223	, 	K 
!!I,,	7889	AA)**+
 64TEJJJD V d$777F
&
C6>
:
:
:C"&"DqqGWGWXXXKf4dK  G *f)Q())!122  O
 $6#A...DvAAjMM4  H +&*Q}%%  K
 ,6+Q~&&  L
 '&&555K       ( ( ( ( (( ( ( ( (   8    ' ' X'
 8 8 X8; ; ;@ @ @   .      r   r   c                       e Zd Z ej        d          Z ej        eej                  Z	 ej        e
j        dej                  ZdS )StarTr   rc  stars)rI   r   N)rR   rS   rT   r   rC  atrA  r7   r  r   r   rF  byr   r   r   r  r  e  sa        		t	,	,	,B
&
C6>
:
:
:C		 w&.
 
 
BBBr   r  ).rm   r|  django.confr   django.contrib.auth.modelsr   django.contrib.gis.dbr   django.contrib.postgres.fieldsr   django.core.files.baser   django.core.files.storager	   django.core.signingr
   django.urlsr   django.utils.functionalr   django.utils.translationr   rV   managersr   utilsr   r   r$   r'   r0   add_to_classr9   r=   Modelr?   r[   rh   re   rr   r7   rP  rR  r^  r   r  r   r   r   <module>r     sO                 + + + + + + ( ( ( ( ( ( 5 5 5 5 5 5 ' ' ' ' ' ' . . . . . . & & & & & &       1 1 1 1 1 1 6 6 6 6 6 6 # # # # # #      > > >N N N
D D D
    )\ * * *  )\ * * *  /#5 6 6 6  ."3 4 4 4; ; ;: : :I I I I I6< I I I(       		 		 		8 8 8 8 8j 8 8 8&$ &$ &$ &$ &$
 &$ &$ &$RO
 O
 O
 O
 O
* O
 O
 O
d
 
 
 
 

 
 
 
,< < <  Q Q Q Q Q
 Q Q Qh    6<     r   