
    h2                       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mZ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 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Z) e* ejV                  d      d          Z,e,dk\  rd dl-m.Z. d dlm/Z/ nd dlm0Z/  G d d      Z.g Z1 G d de      Z2 G d dejf                        Z4ejj                  jm                  e#jn                  e4       y)    )annotations)apps)settings)admin)PermissionDenied)FModelPrefetchQQuerySet)Http404HttpRequestJsonResponse)path)gettext)BaseListView)__version__)Page)get_language_from_requestget_language_list   )models)LinkFormField
LinkWidget)get_manageru   　.   )GrouperModelAdmin)PageContent)Titlec                      e Zd Zy)r   N)__name__
__module____qualname__     D/home/dcms/DCMS/lib/python3.12/site-packages/djangocms_link/admin.pyr   r       s    r&   r   c                  x    e Zd ZdZ eedd      ZdZddZddZ	ddZ
ddZd	 Zdd
ZddZddZddZdddZy)AdminUrlsViewz3Handle AutocompleteWidget's AJAX requests for data.DJANGOCMS_LINK_PAGINATE_BY2   Nc                   |j                   j                  d      r| j                  |      S | j                  |      \  | _        | _        | _        | j                  |      st        | j                         g}| j                  |       | j                  |      | _        | j                         }| j                  |      }t        |d|d   j!                         id      S )aK  
        Return a JsonResponse with search results (query parameter "q") usable by
        Django admin's autocomplete view. Each item is returned as defined in
        serialize_result(), for example:
        {
            "results": [
                {
                    "text": "Page",
                    "children" : [
                        {
                             "id": "cms.page:5",
                             "text": "My first page",
                             "url": "/en/my-first-page/",
                             "verbose_name": "Pages",
                         }, ...
                    ]
                 }, ...
             ],
             "pagination": {"more": true}
        }

        If the endpoint is called with the query parameter "g" (for get), the view will
        search for the id (e.g., "cms.page:5") and return its entry as defined in
        serialize_results(), e.g.:
        {
             "id": "cms.page:5",
             "text": "My first page",
             "url": "/en/my-first-page/",
             "verbose_name": "Pages",
         }
        gmorepage_obj)results
pagination)GETgetget_referenceprocess_requesttermlanguagesitehas_permr   get_querysetadd_admin_querysetsget_paginated_multi_qsobject_listget_context_dataget_optgroupsr   has_next)selfrequestargskwargsqs_listcontextr0   s          r'   r3   zAdminUrlsView.get-   s    @ ;;??3%%g...2.B.B7.K+	4=$)}}W%""$$&'  )66w?'')$$W-"%wz':'C'C'EF
 	
r&   c                   | j                   }| j                  j                  |      xs) | j                  j                  j                  |      xs d}	 t        |      }|S # t        $ r t        t        d            w xY w)Nr   u:   Page is not “last”, nor can it be converted to an int.)	
page_kwargrD   r3   rB   r2   int
ValueErrorr   _)rA   rH   pagepage_numbers       r'   get_pagezAdminUrlsView.get_pageb   sz    __
{{z*Sdll.>.>.B.B:.NSRS	d)K
 	  	NO 	s   A! !A?c                   t        |      dk(  r|d   S | j                         | j                  z  }g }|D ]H  }|D ]0  }| j                  | j                  |      s |j                  |       2 t        |      |k\  sG |S  |S )zG
        Paginate multiple querysets and return a result list.
        r   r   )lenrN   paginate_byr9   rB   append)rA   rE   	max_itemsobjectsqsitems         r'   r<   z$AdminUrlsView.get_paginated_multi_qsm   s     w<11:MMOd&6&66	 	B )==t4NN4() 7|y( 	 r&   c                   	 |j                   j                  d      j                  d      \  }}|j                  d      \  }}t        j                  ||      }| j
                  j                  j                  |      }t        |      }|dk(  r	t        dk\  s|\t        |      j                  |      }|dk(  r"|j                  |d      j                  |_        t        | j                  |            S |dk(  rMt        |      j                  |      }|j                  |d      |_        t        | j                  |            S t!        |d	      r-|j#                  | j$                  d       j                  |      }n+|j'                  | j$                        j                  |      }t        | j                  |            S # t(        $ r }	t        d
t+        |	      i      cY d }	~	S d }	~	ww xY w)Nr-   :r   zcms.pager   )pkT)fallbackget_link_queryseterror)r2   r3   splitr   	get_model
admin_site	_registryr   _versionr   get_admin_contenttitle__link_text__r   serialize_result	get_titlehasattrr[   rB   r:   	Exceptionstr)
rA   rB   	model_strrY   appmodelmodel_adminr7   objes
             r'   r4   zAdminUrlsView.get_reference   s   	3#KKOOC066s;MIr"-JCNN3.E//3377>K09HJ&8q=K<O!%(,,,3
*(+(=(=hQU(=(V(\(\C%#D$9$9#$>??j(!%(,,,3$'MM(TM$J!#D$9$9#$>??{$78!33DLL$GKKrKR!..t||<@@B@G 5 5c :;; 	3#a& 122	3s,   C2G 5AG A=G 	G.G)#G.)G.c                @   g }i }d }|d   D ]|  }|j                   j                  |k7  s|s<|r|j                  |       |j                   j                  }|j                         g d}|d   j                  | j	                  |             ~ |r|j                  |       |S )Nr=   )textchildrenrr   )_metaverbose_name_pluralrR   
capitalizere   )rA   rF   r0   rl   previous_modelrn   s         r'   r?   zAdminUrlsView.get_optgroups   s    =) 		ACyy,,>eNN5)!$!>!>*557 " *$$T%:%:3%?@		A NN5!r&   c           	        t        |t              rlt        |d      r`t        |d      rT|j                  D ci c]  }|j                  | c}|_        |j                  | j                        j                  |_        t        t        t        |dd      d      dz
  z  }|j                  j                   d|j                  j                   d|j                   |t        |dt!        |            xs t!        |      z   |j#                         t!        |j                  j$                        j'                         dS c c}w )	zn
        Convert the provided model object to a dictionary that is added to the
        results list.
        prefetched_contentrb   	__depth__r   r   rX   rd   )idrq   urlverbose_name)
isinstancer   rg   rx   r7   admin_content_cacherb   rc   rd   UNICODE_SPACEmaxgetattrrs   	app_label
model_namerY   ri   get_absolute_urlr|   ru   )rA   rn   transindentations       r'   re   zAdminUrlsView.serialize_result   s   
 c4 WS2F%GGTWYlLmJMJ`J`&au~~u'<&aC# # 5 5dmm D J JC#s73Q+G'Ka'OPYY(()399+?+?*@#&&J73S#J#VcRUhW'')		 6 67BBD	
 	
	 'bs   D<c                   t               }	 t        j                  j                  |      j                  t	        | j
                        t	        | j
                        z        j                         }t        j                  j                  |j                  dd            j                  t        dk\  rd	nd
      j                  t        ddt        j                  j                                     }| j
                  s&|j                  t        t        dk\  rdnd            }| j                   rAt        dk\  r|j                  | j                         n|j                  | j                         }|S # t"        f$ rT t%        t        d      j                  |      j                  t	        | j
                        t	        | j
                        z        }t        j                  j                  |j                  dd            j                  d
      j                  t        ddt%        t        d      j'                                     }dt        j(                  j*                  v r|j                  d      }| j
                  s|j                  t        d            }| j                   r|j                  | j                         }Y |S w xY w)z9Return queryset based on ModelAdmin.get_search_results().)language__in)title__icontains)menu_title__icontainspage_idT)flat)pk__in   r   
node__pathpagecontent_setrx   )to_attrquerysetdepthnode__depth)ry   site_id)node__site_id)current_content	title_setpublisher_draft)publisher_is_draft)r   r   admin_managerfilterr   r6   r   r   rT   values_listorder_byra   prefetch_relatedr
   annotater   r8   AttributeErrorr   allrs   
fields_map)rA   	languages
content_qsrU   s       r'   r:   zAdminUrlsView.get_queryset   sL   %'	7	8 ))00i0Htyy1ADII4VV !"  ##:+A+A)RV+A+W#XHM&|D!!) 4!,!:!:!J!J!L  99[[8q=mL !  yy5=]RYYtyyY1		`d`i`i	Hj> 	=   	8 K>Y/tyy1ADII4VV  ##2>>)$>+O#P,'!!# 4!,[$!O!S!S!U  !DJJ$9$99YY$Y799[[. !  yyYYTYYY7	=	8s   E)E7 7EKKc                   t         D ]S  }	 t        |t              r| j                  |_        t	        |d      r'|j                  | j                  | j                        }n|j                  | j                        }t	        |j                  d      r?| j                  r3|j                  t        | j                        t        d      z        }n>t	        |j                  d      r(| j                  r|j                  | j                        }|j                  | j                  || j                        \  }}|r|j                         }|j                  |       V |S # t         $ r Y ew xY w)Nr[   r8   r   T)site__isnullsites)	sites__id)REGISTERED_ADMINr}   r   r7   rg   r[   rB   r8   r:   rl   r   r   get_search_resultsr6   distinctrR   rh   )rA   rU   rm   new_qssearch_use_distincts        r'   r;   z!AdminUrlsView.add_admin_querysets   s*   + 	Kk+<=+/==K(;(;< )::4<<SF(55dllCF{00&9dii!'dii01$3GG" !!2!2G<!'!C.9.L.LT\\[acgclcl.m++&#__.F		&!)	2 		  s   EE  	E-,E-c                :   |j                   j                  d|j                   j                  dd            j                  d      j                         }|j                   j                  dd      }	 t	        |      }t        |      }|||fS # t
        $ r d}Y w xY w)zT
        Validate request integrity, extract and return request parameters.
        r6   q u     r   N)r2   r3   striplowerrI   rJ   r   )rA   rB   r6   r8   r7   s        r'   r5   zAdminUrlsView.process_request  s     {{vw{{sB'?@FFvNTTV{{
	t9D -W5Xt##  	D	s   1B BBc                    |y| j                   j                  j                  |j                        }|y|j	                  ||      S )z9Check if user has permission to access the related model.TF)rn   )r_   r`   r3   	__class__has_view_permission)rA   rB   rn   rm   s       r'   r9   zAdminUrlsView.has_perm'  sG    ;oo//33CMMB..wC.@@r&   rB   r   returnr   )r   rI   )rE   list[QuerySet]r   zlist[Model] | QuerySet)rn   r	   r   dict)r   r   )rU   r   r   None)rB   r   r   ztuple[str, str, int | None])NrB   r   r   bool)r"   r#   r$   __doc__r   r   rQ   r_   r3   rN   r<   r4   r?   re   r:   r;   r5   r9   r%   r&   r'   r)   r)   '   sN    =($@"EKJ3
j	*34$
";z8$Ar&   r)   c                  F     e Zd ZdZeZeZdZ fdZ	ddZ
ddZd	dZ xZS )
	LinkAdminzmThe LinkAdmin class provides the endpoint for getting the urls. It is not visible in the
    admin interface.Nc                    t        |   |i | | j                  j                   d| j                  j                   d| _        y )NrK   _urls)super__init__optsr   r   global_link_url_name)rA   rC   rD   r   s      r'   r   zLinkAdmin.__init__9  sA    $)&)'+yy':':&;1TYY=Q=Q<RRW$X!r&   c                     y)NFr%   rA   rB   s     r'   has_module_permissionzLinkAdmin.has_module_permission=  s    r&   c                z    t        d| j                  j                  | j                        | j                        gS )Nurls)name)r   r_   
admin_viewurl_viewr   )rA   s    r'   get_urlszLinkAdmin.get_urlsA  s8     **4==9..
 	
r&   c                L    t        j                  | j                        |      S )N)r_   )r)   as_viewr_   r   s     r'   r   zLinkAdmin.url_viewK  s    $$$@IIr&   r   )r   listr   )r"   r#   r$   r   r   global_link_form_widgetr   global_link_form_fieldr   r   r   r   r   __classcell__)r   s   @r'   r   r   1  s2     )*Y
Jr&   r   N)8
__future__r   django.appsr   django.confr   django.contribr   django.core.exceptionsr   django.db.modelsr   r	   r
   r   r   django.httpr   r   r   django.urlsr   django.utils.translationr   rK   django.views.generic.listr   cmsr   
cms.modelsr   	cms.utilsr   r   r   r   fieldsr   r   helpersr   r   rI   r]   ra   cms.admin.utilsr   r   r    r   r)   
ModelAdminr   r8   registerLinkr%   r&   r'   <module>r      s    "      3 < < : :  1 2   B  -     {  %a()q=1&/   GAL GATJ   J< 

  FKK +r&   