https://t.me/RX1948
Server : Apache
System : Linux iad1-shared-b8-43 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User : dh_edsupp ( 6597262)
PHP Version : 8.2.26
Disable Function : NONE
Directory :  /lib/python3/dist-packages/trac/ticket/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/trac/ticket/__pycache__/admin.cpython-310.pyc
o

�k�`���@stddlmZmZmZmZmZmZddlTddlm	Z	ddl
mZddlm
Z
ddlmZmZmZddlmZmZddlmZmZmZmZmZdd	lmZmZmZdd
lm Z m!Z!m"Z"ddl#m$Z$m%Z%m&Z&m'Z'm(Z(Gdd
�d
e)�Z*Gdd�de*�Z+Gdd�de*�Z,Gdd�de*�Z-Gdd�de*�Z.Gdd�de.�Z/Gdd�de.�Z0Gdd�de.�Z1Gdd�de.�Z2Gdd�de)�Z3d S)!�)�AdminCommandError�IAdminCommandProvider�IAdminPanelProvider�console_date_format�console_datetime_format�get_console_locale)�*)�ResourceNotFound)�model)�TicketSystem)�MilestoneModule�get_num_tickets_for_milestone�group_milestones)�as_int�getuser)�format_date�format_datetime�get_datetime_format_hint�
parse_date�	user_time)�exception_to_unicode�print_table�printout)�_�N_�gettext)�Chrome�add_ctxtnav�
add_notice�
add_script�add_warningc@sNeZdZeee�dZdZed�ed�fZ	dd�Z
dd�Zdd	�Zd
d�Z
dS)
�TicketAdminPanelT�	undefinedz(Undefined)ccs>�d|�dd|j�vrdtd�|jt|jd�fVdSdS)N�TICKET_ADMIN�admin�ticket/�ticket�
Ticket System���perm�_typerr�_label)�self�req�r/�3/usr/lib/python3/dist-packages/trac/ticket/admin.py�get_admin_panels/s�
��z!TicketAdminPanel.get_admin_panelsc
Cs6z	|�||||�WSty}zt|�|�d}~ww�N)�_render_admin_panel�AssertionError�	TracError)r-r.�cat�page�	path_info�er/r/r0�render_admin_panel4s
��z#TicketAdminPanel.render_admin_panelc
Cshz|j��Wn#ty*}z|j�dt|��t|td��WYd}~dSd}~wwt|td��dS)zbTry to save the config, and display either a success notice or a
        failure warning.
        zError writing to trac.ini: %szhError writing to trac.ini, make sure it is writable by the web server. Your changes have not been saved.N�Your changes have been saved.)	�config�save�EnvironmentError�log�errorrr rr)r-r.r9r/r/r0�_save_config;s���zTicketAdminPanel._save_configcCstd��)NzZClass inheriting from TicketAdminPanel has not implemented the _render_admin_panel method.)�NotImplemented)r-r.r6r7r8r/r/r0r3Jsz$TicketAdminPanel._render_admin_panelN)�__name__�
__module__�__qualname__�
implementsrr�abstractr+rr,r1r:rAr3r/r/r/r0r! s
r!c@s�eZdZdZed�ed�fZdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
ddd�Zdd�Zdd�Zdd�ZdS)�ComponentAdminPanel�
components�	Component�
ComponentscCs�|rdt�|j|�}|jdkrO|j�d�r?|j�d�|_|j�d�|_|j�d�|_|�	�t
|td��|�|j
�||��n|j�d�rO|�|j
�||��t|j�}|�|�|�|�d|d	�}n�|j�d
d�}|jdk�r=|j�d�r�|j�d�r�t�|j�}|j�d�|_|j�d�|_|��t
|td
|jd��n�|j�d�r�|j�d�}	|	s�ttd���|jj�'|	D]}
t�|j|
���|
|kr�|j�d
dd�|�|�q�Wd�n1s�wYt
|td��nD|j�d��r|j�d�}
|
�r|
|k�r|j�d|
�|j�d
d|
�|�|�n|j�d��r3|j�d�|j�d
dd�|�|�|�|j
�||��dttj�|j��|d�}t|j���}|du�r\|�dd�|�	d|i�d|fS)N�POSTr=�name�owner�descriptionr;�cancel�detail)�view�	componentr&�default_component�addz(The component "%(name)s" has been added.�rM�remove�selzNo component selected�z*The selected components have been removed.�apply�defaultzSetting default component to %s�clearzClearing default component�list)rRrIr[r�ownerszadmin_components.html) r
rJ�env�method�args�getrMrNrO�updaterr�redirect�hrefr$r�add_wiki_toolbars�add_auto_previewr<�insert�getlistr5�db_transaction�delete�setrAr?�infor]�selectr�get_allowed_owners)r-r.r6r7rS�comp�chrome�datar[rXrMr^r/r/r0r3Vs~




�
�
���
�
�
z'ComponentAdminPanel._render_admin_panelccsh�dddd|jfVddd|j|jfVddd	|j|jfVd
dd|j|jfVd
dd|j|jfVdS)Nzcomponent listrYzShow componentsz
component addz<name> [owner]z
Add componentzcomponent rename�<name> <newname>zRename componentzcomponent remove�<name>zRemove componentzcomponent chownz<name> <owner>zChange component owner)�_do_list�
_complete_add�_do_add�_complete_name�
_do_rename�
_do_remove�_complete_chown�	_do_chown�r-r/r/r0�get_admin_commands�s*�����
�z&ComponentAdminPanel.get_admin_commandscC�dd�tj�|j�D�S)NcS�g|]}|j�qSr/rV��.0�cr/r/r0�
<listcomp>��z:ComponentAdminPanel.get_component_list.<locals>.<listcomp>)r
rJrnr_r}r/r/r0�get_component_list��z&ComponentAdminPanel.get_component_listcCst|j���Sr2)rr_ror}r/r/r0�
get_user_list�sz!ComponentAdminPanel.get_user_listcC�t|�dkr
|��SdS)N�)�lenr��r-rar/r/r0rv���z!ComponentAdminPanel._complete_addcCr��Nr()r�r�r�r/r/r0rx�r�z"ComponentAdminPanel._complete_namecCs,t|�dkr
|��St|�dkr|��SdS)Nr(r�)r�r�r�r�r/r/r0r{��
�z#ComponentAdminPanel._complete_chowncC�.tdd�tj�|j�D�td�td�g�dS)NcSsg|]}|j|jf�qSr/)rMrNr�r/r/r0r��s�z0ComponentAdminPanel._do_list.<locals>.<listcomp>�Name�Owner)rr
rJrnr_rr}r/r/r0ru�s
��zComponentAdminPanel._do_listNcCs$t�|j�}||_||_|��dSr2)r
rJr_rMrNrh�r-rMrNrSr/r/r0rw�szComponentAdminPanel._do_addcC� t�|j|�}||_|��dSr2)r
rJr_rMrc)r-rM�newnamerSr/r/r0ry��zComponentAdminPanel._do_renamecC�t�|j|���dSr2)r
rJr_rk�r-rMr/r/r0rz��zComponentAdminPanel._do_removecCr�r2)r
rJr_rNrcr�r/r/r0r|�r�zComponentAdminPanel._do_chownr2)rCrDrEr+rr,r3r~r�r�rvrxr{rurwryrzr|r/r/r/r0rHOsL
rHc@szeZdZdZed�ed�fZdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zddd�Zdd�Z
dd�Zdd�Zdd�ZdS)�MilestoneAdminPanel�
milestones�	Milestone�
MilestonesccsV�|�dd|j�}d|vsd|vr'd|vr)dtd�|jt|jd�fVdSdSdS)	Nr$r%�MILESTONE_ADMIN�MILESTONE_VIEWr#r&r'r(r))r-r.r*r/r/r0r1�s�
��z$MilestoneAdminPanel.get_admin_panelscs:��dd|j�}|r�t�|j|��t|j�}�jdkrFd�jvr7|�d�|�	���r6��
�j�||��nd�jvrF��
�j�||��d�|�
��|jd�}��fd	d
�tj�|j�D�}t|d�jv�|d<t|j�d
d�|d<t|j�}	|	���|	���t�td��j�|���nv|j�dd�}
|j�dd�}�jdk�r�d�jvr�j�d�r�|�d��j�d�}z
tj|j|d�Wnty�t�|j��|�_t|j��	���Yn�wt�td|d��n�d�jv�rcd}
|�d��j�d�}|�sttd���|jj�?|D]4}t�|j|���� d�j!d���"�||
k�r2|j�#ddd �d
}
||k�rA|j�#ddd �d
}
�qWd�n	1�sNwY|
�r[|�$��t%�td!��nzd"�jv�r�d}
|�d��j�d#�}|�r�||
k�r�|j&�'d$|�|j�#dd|�d
}
�j�d%�}|�r�||k�r�|j&�'d&|�|j�#dd|�d
}
|
�r�|�$��n&d'�jv�r�|�d�|j&�'d(�|j�#ddd �|j�#ddd �|�$����
�j�||��t(|j�)d)����fd*d+�}d,tj�|j�|�fd-d+�|
|d.�}t|j��*��|�+d/t,�j-�i�d0|fS)1Nr$r%rLr=�MILESTONE_MODIFYrPrQ)rR�	milestone�default_due�retarget_tocs,g|]}|j�jkrd��|j�vr|�qS)r�)rMr*�resource�r��m)r�r.r/r0r�s
�z;MilestoneAdminPanel._render_admin_panel.<locals>.<listcomp>r#�milestone_groupsT)�exclude_closed�num_open_ticketszView Milestoner&�default_milestoner��default_retarget_torUrM�MILESTONE_CREATErVz@Milestone "%(name)s" already exists, please choose another name.rWF�MILESTONE_DELETErXzNo milestone selectedzMilestone deletedrYz*The selected milestones have been removed.rZ�ticket_defaultz&Setting default ticket milestone to %s�retarget_defaultz+Setting default retargeting milestone to %sr\z@Clearing default ticket milestone and default retarget milestonez�
                    SELECT milestone, COUNT(milestone) FROM ticket
                    WHERE milestone != ''
                    GROUP BY milestone
                cs�j�dd|fg�S)N)�group�statusr�)re�queryrV�r.r/r0�<lambda>is�z9MilestoneAdminPanel._render_admin_panel.<locals>.<lambda>r]cs��|jd�S)Nr)rbrM)r�)�num_ticketsr/r0r�os)rRr��
query_hrefr�r�r��
datetime_hintzadmin_milestones.html).r*r+r
r�r_rr`ra�require�save_milestonerdrer$�get_default_duer�rnrr
rrfrgrrr�r<rbr	rMr rir5rj�move_tickets�authnamerkrlrArr?rm�dict�db_query�
add_jquery_uircr�lc_time)r-r.r6r7�milestone_name�
perm_cache�milestone_modulerrr�rqr�r�rMr=rX�retargetr�r/)r�r�r.r0r3�s�



�
����




��
��
�


�
�
����

��
�
�


�
�z'MilestoneAdminPanel._render_admin_panelccs��t|j�}t|�td�d�}dddd|jfVdddd|jfVd	d
d|j|jfVdd
d||j|jfVddd||j|jfVddd|j|j	fVdS)N�iso8601��datetimer�zmilestone listrYzShow milestonesz
milestone addz<name> [due]z
Add milestonezmilestone renamerszRename milestonez
milestone duez<name> <due>a^Set milestone due date

               The <due> date must be specified in the "%(datetime)s"
               or "%(iso8601)s" (ISO 8601) format.
               Alternatively, "now" can be used to set the due date to the
               current time. To remove the due date from a milestone, specify
               an empty string ("").
               zmilestone completedz<name> <completed>awSet milestone complete date

               The <completed> date must be specified in the "%(datetime)s"
               or "%(iso8601)s" (ISO 8601) format.
               Alternatively, "now" can be used to set the completion date to
               the current time. To remove the completion date from a
               milestone, specify an empty string ("").
               zmilestone removertzRemove milestone)
rr_rrurwrxry�_do_due�
_do_completedrz�r-�locale�hintsr/r/r0r~|sB�
������
��

�z&MilestoneAdminPanel.get_admin_commandscCr)NcSr�r/rVr�r/r/r0r��r�z:MilestoneAdminPanel.get_milestone_list.<locals>.<listcomp>)r
r�rnr_r}r/r/r0�get_milestone_list�r�z&MilestoneAdminPanel.get_milestone_listcCr�r�)r�r�r�r/r/r0rx�r�z"MilestoneAdminPanel._complete_namecCs4tdd�tj�|j�D�td�td�td�g�dS)NcSs<g|]}|j|jrt|jt�nd|jrt|jt�ndf�qSr2)rM�duerr�	completedrrr�r/r/r0r��s����z0MilestoneAdminPanel._do_list.<locals>.<listcomp>r��Due�	Completed)rr
r�rnr_rr}r/r/r0ru�s
��zMilestoneAdminPanel._do_listNcCs<t�|j�}||_|durt|dt|j�d�|_|��dS�Nr�)�hintr�)r
r�r_rMrrr�rh�r-rMr�r�r/r/r0rw�s�zMilestoneAdminPanel._do_addcCs&t�|j|�}||_|jt�d�dS)N)�author)r
r�r_rMrcr)r-rMr�r�r/r/r0ry�szMilestoneAdminPanel._do_renamecC�8t�|j|�}|rt|dt|j�d�nd|_|��dSr�)r
r�r_rrr�rcr�r/r/r0r������zMilestoneAdminPanel._do_duecCr�r�)r
r�r_rrr�rc)r-rMr�r�r/r/r0r��r�z!MilestoneAdminPanel._do_completedcCr�r2)r
r�r_rkr�r/r/r0rz�r�zMilestoneAdminPanel._do_remover2)rCrDrEr+rr,r1r3r~r�rxrurwryr�r�rzr/r/r/r0r��s'
	r�c@sveZdZdZed�ed�fZdd�Zedd��Zdd	�Z	d
d�Z
dd
�Zdd�Zddd�Z
dd�Zdd�Zdd�ZdS)�VersionAdminPanel�versions�Version�VersionscCs�|rct�|j|�}|jdkrN|j�d�r>|j�d�|_|�|�|_|j�d�|_	|�
�t|td��|�
|j�||��n|j�d�rN|�
|j�||��t|j�}|�|�|�|�d|d�}n�|j�d	d
�}|jdk�r;|j�d�r�|j�d�r�t�|j�}|j�d�|_|�|�|_|��t|td|jd
��n�|j�d�r�|j�d�}	|	s�ttd���|jj�'|	D]}
t�|j|
���|
|kr�|j�d	d
d�|�|�q�Wd�n1s�wYt|td��nD|j�d��r|j�d�}
|
�r|
|k�r|j�d|
�|j�d	d
|
�|�|�n|j�d��r1|j�d�|j�d	d
d�|�|�|�
|j�||��dttj�|j��|d�}t|j��|�|�
dt |j!�i�d|fS)NrLr=rMrOr;rPrQ)rR�versionr&�default_versionrUz&The version "%(name)s" has been added.rVrWrXzNo version selectedrYz(The selected versions have been removed.rZr[zSetting default version to %sr\zClearing default versionr])rRr�r[r�zadmin_versions.html)"r
r�r_r`rarbrM�_get_user_time�timerOrcrrrdrer$rrfrgr<rhrir5rjrkrlrAr?rmr]rnr�rr�)r-r.r6r7r��verrqrrr[rXrMr/r/r0r3�sz




�
�
���
�
�z%VersionAdminPanel._render_admin_panelcCs$|j�d�}|rt|t|dd�SdS)Nr�r�)r�)rarbrr)�clsr.r�r/r/r0r�!s
��z VersionAdminPanel._get_user_timeccs��t|j�}t|�td�d�}dddd|jfVdddd|jfVd	d
d|j|jfVdd
d|j|jfVddd||j|jfVdS)Nr�r�zversion listrYz
Show versionszversion addz
<name> [time]zAdd versionzversion renamerszRename versionzversion removertzRemove versionzversion timez
<name> <time>aRSet version date

               The <time> must be specified in the "%(datetime)s"
               or "%(iso8601)s" (ISO 8601) format.
               Alternatively, "now" can be used to set the version date to
               the current time. To remove the date from a version, specify
               an empty string ("").
               )	rr_rrurwrxryrz�_do_timer�r/r/r0r~)s6�
������
�z$VersionAdminPanel.get_admin_commandscCr)NcSr�r/rV�r��vr/r/r0r�Gr�z6VersionAdminPanel.get_version_list.<locals>.<listcomp>)r
r�rnr_r}r/r/r0�get_version_listFr�z"VersionAdminPanel.get_version_listcCr�r�)r�r�r�r/r/r0rxIr�z VersionAdminPanel._complete_namecCr�)NcSs(g|]}|j|jrt|jt�ndf�qSr2)rMr�rrr�r/r/r0r�Ns���z.VersionAdminPanel._do_list.<locals>.<listcomp>r��Time)rr
r�rnr_rr}r/r/r0ruMs
��zVersionAdminPanel._do_listNcCs<t�|j�}||_|rt|dt|j�d�nd|_|��dSr�)r
r�r_rMrrr�rh�r-rMr�r�r/r/r0rwTs���zVersionAdminPanel._do_addcCr�r2)r
r�r_rMrc)r-rMr�r�r/r/r0ry\r�zVersionAdminPanel._do_renamecCr�r2)r
r�r_rkr�r/r/r0rzar�zVersionAdminPanel._do_removecCr�r�)r
r�r_rrr�rcr�r/r/r0r�dr�zVersionAdminPanel._do_timer2)rCrDrEr+rr,r3�classmethodr�r~r�rxrurwryrzr�r/r/r/r0r��sH

r�c@sxeZdZdZdZdZdd�Zdddd	d
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�AbstractEnumAdminPanelT�unknownNcs�dd�|jD�}|d|d|jd�}|rv|�|j|�}�jdkr[�j�d�rK�j�d�|_�j�d	�|_|�	�t
�td
�����j
�||��n�j�d�r[���j
�||��t|j�}|���|���|�	d|d
��d'|fS|j�dd|j�}	�jdk�rƈj�d�r��j�d�r�|�|j�}�j�d�|_|��t
�td|d|jd���n
�j�d��r�j�d�}
|
s�ttd�|j��|jj�*|
D]}|�|j|���||	kr�|j�dd|jd�|j��q�Wd�n1s�wYt
�td|dd��n��j�d��r��j�d�}|�r:||	k�r:|j�d|j|�|j�dd|j|�|����fdd��jD�}dd�|��D�}
t|�t|
�k�r\ttd���d }|jj�'|j�|j�D]}||j }||j k�r�||_ |�	�d!}�qjWd�n	1�s�wY|�r�t
�td
��n�j�d"��r�|j�d#|j�|j�dd|jd�|������j
�||��t|j��!��t"�d$�|�	t#t$|j�|j��|	d%d&��d'|fS)(NcSsg|]}t|��qSr/)r�r��eachr/r/r0r�v�z>AbstractEnumAdminPanel._render_admin_panel.<locals>.<listcomp>rr()�label_singular�label_plural�typerLr=rMrOr;rPrQ)rR�enumr&z
default_%srUz.The %(field)s value "%(name)s" has been added.)�fieldrMrWrXzNo %s selectedrYz0The selected %(field)s values have been removed.)r�rZr[zSetting default %s to %scs8i|]}|�d�rtt|dd���t�j�|���qS)�value_�N)�
startswith�str�intra�getint)r��keyr�r/r0�
<dictcomp>�s(�z>AbstractEnumAdminPanel._render_admin_panel.<locals>.<dictcomp>cSsi|]}|d�qS)Tr/)r��valr/r/r0r��r�zOrder numbers must be uniqueFTr\zClearing default %szcommon/js/admin_enums.jsr])�enumsr[rRzadmin_enums.html)%r,r+�	_enum_clsr_r`rarbrMrOrcrrrdrer$rrfrgr<rhrir5rjrkrlr=r?rmrA�valuesr�rn�valuer�rr�r])r-r.r6r7r8�labelrrr�rqr[rXrM�orderr��changed�	new_valuer/r�r0r3us��



H�
�

�
���
���

�

����

�z*AbstractEnumAdminPanel._render_admin_panelzShow possible ticket %szAdd a %s value optionzChange a %s valuezRemove a %s valuez&Move a %s value up or down in the list�r]rU�changerWrccs��t|d|j�}tdd�|jD��}d|d|jd|dd|jfVd|d	|jd
|dd|jfVd|d
|jd|d|j|jfVd|d	|jd|d|j|j	fVd|d|jd|d|j
|jfVdS)N�
_command_typecss�|]}|��VqdSr2)�lowerr�r/r/r0�	<genexpr>�s�z<AbstractEnumAdminPanel.get_admin_commands.<locals>.<genexpr>z%s listrYr]r(z%s addz<value>rUrz	%s changez<value> <newvalue>rz	%s removerWz%s orderz<value> up|downr)�getattrr+�tupler,�
_command_helprurw�_complete_change_remove�
_do_changerz�_complete_order�	_do_order)r-�	enum_typerr/r/r0r~�s.�����
�z)AbstractEnumAdminPanel.get_admin_commandscCsdd�|j�|j�D�S)NcSr�r/rV�r�r9r/r/r0r��r�z8AbstractEnumAdminPanel.get_enum_list.<locals>.<listcomp>)r�rnr_r}r/r/r0�
get_enum_list�r�z$AbstractEnumAdminPanel.get_enum_listcCr�r��r�rr�r/r/r0r�r�z.AbstractEnumAdminPanel._complete_change_removecCs,t|�dkr
|��St|�dkrddgSdS)Nr(r��up�downrr�r/r/r0r�r�z&AbstractEnumAdminPanel._complete_ordercCs(tdd�|j�|j�D�td�g�dS)NcSsg|]}|jf�qSr/rVrr/r/r0r��r�z3AbstractEnumAdminPanel._do_list.<locals>.<listcomp>zPossible Values)rr�rnr_rr}r/r/r0ru�s�zAbstractEnumAdminPanel._do_listcCs|�|j�}||_|��dSr2)r�r_rMrh)r-rMr�r/r/r0rwszAbstractEnumAdminPanel._do_addcCs |�|j|�}||_|��dSr2)r�r_rMrc)r-rMr�r�r/r/r0r
r�z!AbstractEnumAdminPanel._do_changecCs|�|j|���dSr2)r�r_rk)r-r�r/r/r0rzr�z!AbstractEnumAdminPanel._do_removecCs�|dvrttd|d���|dkrdnd}|�|j|�}tt|j�|�|_|j�|j�D]}tt|j��|jkrDtt|j�|�|_nq,dS|jj�|�	�|�	�Wd�dS1s_wYdS)N)rrz Invalid up/down value: %(value)s)r�r���r()
rrr�r_r��floatr�rnrjrc)r-rM�up_down�	direction�enum1�enum2r/r/r0rs"��

"�z AbstractEnumAdminPanel._do_order)rCrDrErGr+r�r3rr~rrrrurwr
rzrr/r/r/r0r�ls(a�r�c@�eZdZdZejZejjZdS)�PriorityAdminPanel�priorityN)	rCrDrEr+r
�Priorityr�rr,r/r/r/r0r �rc@r)�ResolutionAdminPanel�
resolutionN)	rCrDrEr+r
�
Resolutionr�rr,r/r/r/r0r!&r r!c@r)�SeverityAdminPanel�severityN)	rCrDrEr+r
�Severityr�rr,r/r/r/r0r$,r r$c@s2eZdZdZejZejjZdZ	dddddd�Z
d	S)
�TicketTypeAdminPanelr��ticket_typezShow possible %szAdd a %szChange a %szRemove a %sz Move a %s up or down in the listrN)rCrDrEr+r
�Typer�rr,rrr/r/r/r0r'2s
�r'c@s0eZdZdZee�dd�Zdd�Zdd�ZdS)	�TicketAdminz6trac-admin command provider for ticket administration.ccs*�dddd|jfVdddd|jfVdS)Nz
ticket removez	<ticket#>z
Remove ticketzticket remove_commentz<ticket#> <comment#>zRemove ticket comment)rz�_do_remove_commentr}r/r/r0r~Hs��
�zTicketAdmin.get_admin_commandscCslt|d�}|durttd���|jj�t�|j|���Wd�n1s'wYttd|d��dS)N�<ticket#> must be a numberz0Ticket #%(num)s and all associated data removed.��num)	rrrr_rjr
�Ticketrkr)r-�numberr/r/r0rzNs

��zTicketAdmin._do_removecCs�t|d�}|durttd���t|d�}|durttd���|jj�#t�|j|�}|�|�}|s9ttd|d���|�|�Wd�n1sHwYt	td||d��dS)Nr,z<comment#> must be a numberzComment %(num)s not foundr-z>The ticket comment %(num)s on ticket #%(id)s has been deleted.)r.�id)
rrrr_rjr
r/�
get_change�
delete_changer)r-�
ticket_number�comment_numberr&rr/r/r0r+Ws$



���zTicketAdmin._do_remove_commentN)	rCrDrE�__doc__rFrr~rzr+r/r/r/r0r*As	r*N)4�trac.admin.apirrrrrr�	trac.core�
trac.resourcer	�trac.ticketr
�trac.ticket.apir�trac.ticket.roadmaprr
r�	trac.utilrr�trac.util.datefmtrrrrr�trac.util.textrrr�trac.util.translationrrr�trac.web.chromerrrrr rJr!rHr�r�r�rr!r$r'r*r/r/r/r0�<module>s2 
/s5

https://t.me/RX1948 - 2025