o
    h%                     @   sp  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 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 d dlmZ d dlmZm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) G dd deZ*G dd dej+Z+G dd dZ,G dd de,ej-Z-G dd de,ej.Z.G dd dej/Z/d%d d!Z0d"d# Z1d$S )&    )InvalidPage	Paginator)transaction)Sum	functions)Http404)redirect)TemplateResponse)cached_property)gettext_lazy)messages)
SearchForm)render_modal_workflow)ColumnRelatedObjectsColumnTitleColumn)generic)formsmodels)QuerySearchPromotion)log)ModelPermissionPolicy)normalise_query_stringc                   @   s   e Zd ZdZdS )SearchPromotionColumnz4wagtailsearchpromotions/search_promotion_column.htmlN)__name__
__module____qualname__cell_template_name r   r   p/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/search_promotions/views/settings.pyr      s    r   c                       s   e Zd ZeZdZdZdZedZ	dZ
dZeeZdZdZd	gZd	Zd
ZedZed	edddd	dededddededdddgZdd Z fddZ  ZS )	IndexViewz"wagtailsearchpromotions/index.htmlz*wagtailsearchpromotions/index_results.htmlquerieszPromoted search resultspick   wagtailsearchpromotions:indexz%wagtailsearchpromotions:index_resultsquery_stringwagtailsearchpromotions:addzAdd new promoted resultzSearch term(s)z40%wagtailsearchpromotions:edit)labelwidthurl_namesort_keyeditors_pickszPromoted results)r)   r*   viewszViews (past week)z20%)r)   r*   r,   c                 C   sD   t jjddd}| jjj|d}|jttddd	dd	}|S )
Nquery_idT)flat)pk__indaily_hits__hitsr   )r.   r-   editors_picks__page)
r   objectsvalues_listmodelfilterannotater   Coalescer   prefetch_related)selfhas_promotionsquerysetr   r   r    get_base_queryset>   s   zIndexView.get_base_querysetc                    s   t   }|  |d d< |S )Nr)   )superget_breadcrumbs_itemsget_page_titler;   breadcrumbs	__class__r   r    rA   M   s   
zIndexView.get_breadcrumbs_items)r   r   r   r   r6   template_nameresults_template_namecontext_object_namer   
page_titleheader_iconpaginate_byr   r   permission_policyindex_url_nameindex_results_url_namesearch_fieldsdefault_orderingadd_url_nameadd_item_labelr   r   r   columnsr>   rA   __classcell__r   r   rE   r    r!      sH    r!   c                       s   e Zd ZeZeeZdZdZ	e
jZdZdZedZdddZ fd	d
Z fddZ fddZdd Zedd Z fddZ  ZS )SearchPromotionCreateEditMixinr%   r(   r#   TzPromoted search resultNc                 C   s   | j d|i S )Nquery)success_message)r;   instancer   r   r    get_success_message]   s   z2SearchPromotionCreateEditMixin.get_success_messagec                    s,   | j   }rddd |D S t  S )N c                 s   s    | ]}|V  qd S Nr   ).0errorr   r   r    	<genexpr>c   s    zCSearchPromotionCreateEditMixin.get_error_message.<locals>.<genexpr>)searchpicks_formsetnon_form_errorsjoinr@   get_error_message)r;   formset_errorsrE   r   r    rc   `   s   
z0SearchPromotionCreateEditMixin.get_error_messagec                    s   t   }tj|d d< |S )Nr)   )r@   rA   r!   rJ   rC   rE   r   r    rA   f   s   
z4SearchPromotionCreateEditMixin.get_breadcrumbs_itemsc                    s4   t  jdi |}| j|d< |d  | jj7  < |S )Nr`   mediar   )r@   get_context_datar`   rf   )r;   kwargscontextrE   r   r    rg   k   s   
z/SearchPromotionCreateEditMixin.get_context_datac           	      C   s
  | j }| s	dS t|jD ]\}}||j_dd |_qdd |jD }t	 S |D ]}t
|d q+|  |jD ]}t
|d q:||kr\| j|d |jD ]	\}}t
|d	 qQn|jD ]\}}|rjt
|d	 q_W d    d
S W d    d
S 1 s~w   Y  d
S )NFc                   S   s   dS )NTr   r   r   r   r    <lambda>{   s    zASearchPromotionCreateEditMixin.save_searchpicks.<locals>.<lambda>c                 S   s   g | ]	}|j jr|j qS r   )rY   pk)r]   formr   r   r    
<listcomp>~   s    zCSearchPromotionCreateEditMixin.save_searchpicks.<locals>.<listcomp>wagtail.deletezwagtail.create)rW   zwagtail.editT)r`   is_valid	enumerateordered_formsrY   
sort_orderhas_changeddeleted_formsr   atomicr   savenew_objectsget_querysetupdatechanged_objects)	r;   rW   	new_queryr`   irl   items_for_deletionsearch_pickchanged_fieldsr   r   r    save_searchpicksq   s@   




z/SearchPromotionCreateEditMixin.save_searchpicksc                 C   s.   | j jdkrtj| j j| jdS tj| jdS )NPOST)rY   )requestmethodr   SearchPromotionsFormSetr   object)r;   r   r   r    r`      s
   
z2SearchPromotionCreateEditMixin.searchpicks_formsetc                    sd   || _ t|jd }| js|| _| | j|r,tj| j| 	| j| 
 d t| jS t |S )Nr&   )buttons)rl   r   getcleaned_datar   r   r   successr   rZ   get_success_buttonsr   rN   r@   form_invalid)r;   rl   r{   rE   r   r    
form_valid   s   

z)SearchPromotionCreateEditMixin.form_validr\   )r   r   r   r   r6   r   r   rM   rN   edit_url_namer   	QueryForm
form_classrK   _show_breadcrumbsr   page_subtitlerZ   rc   rA   rg   r   r
   r`   r   rU   r   r   rE   r    rV   S   s"    
)
rV   c                   @   s$   e Zd ZedZedZdZdZdS )
CreateViewz'Editor's picks for '%(query)s' created.z3Recommendations have not been created due to errorsz wagtailsearchpromotions/add.htmlr'   N)r   r   r   r   rX   error_messagerG   rR   r   r   r   r    r      s
    r   c                   @   s,   e Zd ZdZdZdZedZedZdZ	dS )EditViewr/   rW   wagtailsearchpromotions:deletez'Editor's picks for '%(query)s' updated.z1Recommendations have not been saved due to errorsz!wagtailsearchpromotions/edit.htmlN)
r   r   r   pk_url_kwargrI   delete_url_namer   rX   r   rG   r   r   r   r    r      s    r   c                   @   s@   e Zd ZeZeeZdZdZ	e
dZdZdZdZdZdd	 Zd
S )
DeleteViewr/   rW   zEditor's picks deleted.r%   r   r#   z+wagtailsearchpromotions/confirm_delete.htmlc                 C   sV   | j j }t  |D ]}t|d q|  W d    d S 1 s$w   Y  d S )Nrn   )r   r-   allr   ru   r   delete)r;   r-   r~   r   r   r    delete_action   s   

"zDeleteView.delete_actionN)r   r   r   r   r6   r   r   rM   r   rI   r   rX   rN   r   rK   rG   r   r   r   r   r    r      s    r   Fc                 C   s   t j }d| jv r!t| j}| r |jd }|jt|d}nt }t	|dd}z|
| jdd}W n	 ty?   tw |rJt| dd|iS t| d	d ||d
ddidS )Nq)query_string__icontains
   )per_pagep   z4wagtailsearchpromotions/queries/chooser/results.htmlr"   z4wagtailsearchpromotions/queries/chooser/chooser.html)r"   
searchformstepchooser)	json_data)r   r   get_most_popularGETr   ro   r   r7   r   r   pager   r   r   r	   r   )r   get_resultsr"   r   r&   	paginatorr   r   r    r      s@   



r   c                 C   s   t | ddS )NT)r   )r   )r   r   r   r    chooserresults  s   r   N)F)2django.core.paginatorr   r   	django.dbr   django.db.modelsr   r   django.httpr   django.shortcutsr   django.template.responser	   django.utils.functionalr
   django.utils.translationr   wagtail.adminr   wagtail.admin.forms.searchr   wagtail.admin.modal_workflowr   wagtail.admin.ui.tablesr   r   r   wagtail.admin.viewsr   !wagtail.contrib.search_promotionsr   r   (wagtail.contrib.search_promotions.modelsr   r   wagtail.log_actionsr    wagtail.permission_policies.baser   wagtail.search.utilsr   r   r!   rV   r   r   r   r   r   r   r   r   r    <module>   s4    9`	
+