
    Bh%                         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mZmZ d d	lmZ d d
lmZ d dlmZ  e       Zd Z G d de      Z G d de      Z G d de      Zy)    )settings)get_user_model)Site)CommandError)transaction)copy_plugins_to_language)SubcommandsCommand)EmptyPageContentPagePageContentPageUrlStaticPlaceholder)get_language_list)get_available_slug)copy_plugins_to_placeholderc                 v   | d   r| d   rt        d      | d   r$	 t        j                  j                  | d         S | d   r$	 t        j                  j                  | d         S y # t        j                  $ r t        d| d    d      w xY w# t        j                  $ r t        d| d    d      w xY w)	NuseridusernamezFOnly either one of the options '--userid' or '--username' may be givenpkzNo user with id z found)r   zNo user with name )r   UserobjectsgetDoesNotExist)optionss    X/home/dcms/DCMS/lib/python3.12/site-packages/cms/management/commands/subcommands/copy.pyget_userr      s    xWZ0cddx	M<<##wx'8#99 z	Q<<##WZ-@#AA     	M!1'(2C1DFKLL	M
    	Q!3GJ4G3HOPP	Qs   "A) "B )&B&B8c                   $    e Zd ZdZdZdZd Zd Zy)CopyLangCommandzYDuplicate the cms content from one lang to another (to boot a new lang) using draft pageslangzplugin name (eg SamplePlugin)c                 B   |j                  ddddd       |j                  ddddd	       |j                  d
ddd       |j                  ddddd       |j                  ddddd       |j                  dt        ddd       |j                  dt        d       y )Nz--from-langstore	from_langT"Language to copy the content from.actiondestrequiredhelpz	--to-langto_lang Language to copy the content to.z--sitesitezSite to work on.)r&   r'   r)   z--forcestore_false
only_emptyzJIf set content is copied even if destination language already has content.)r&   r'   defaultr)   z--skip-contentcopy_contentz\If set content is not copied, and the command will only create titles in the given language.
--usernamer    2Username of user needed create new content objectstyper'   r/   r)   --userid1User id of user needed create new content objectsr5   r)   add_argumentstrintselfparsers     r   add_argumentszCopyLangCommand.add_arguments'   s    M'VZ!E 	 	GKiRV!C 	 	EHW6!3 	 	5Im,X\"0 	 	1 	,]$( 0` 	 	a 	LsR!U 	 	WJS7jk    c           
         |j                  d      dkD  }|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        |      }	 t        |j                  dd             }		 |t        |	      v sJ |t        |	      v sJ 	 t        j                  j                  |	      j                  d	      D ]  }
||
j                         v r#|
j                  |d
      }t        |t               r|
j                  |      }|r,| j"                  j%                  d|j&                   d| d       |st        d      ddlm}  ||      }|j-                  dd        ||d<   |
|d<   t/        j                  j1                  |      j2                  d$i | ||
j                         vr#|
j5                  |
j                         |gz          |
j6                  j                  |      }|
j8                  } ||      }|j-                  dd        |
|d<   ||d<   |r1|j;                  |      }|r|d|j<                  n|j<                  }nd}|j<                  }t?        |	||      |d<   |r
|d|d   n|d   |d	<   tA        j                  j1                  |      j2                  d$i | |s|r1| j"                  j%                  d|
jC                  |       d| d       tE        |
|||       :|s>| j"                  j%                  d|
jC                  |
j                         d          d| d        |rtF        j                  jI                         D ]  }g }|jJ                  jM                         D ]#  }|jN                  |k(  s|jQ                  |       % |sH|r/| j"                  j%                  d|jR                   d| d | d!       tU        ||jJ                  |"        | j"                  j%                  d#       y # t        $ r t        j
                  }	Y w xY w# t        $ r t        d      w xY w)%N	verbosity   r.   r0   r#   r*   r,   zRBoth languages have to be present in settings.LANGUAGES and settings.CMS_LANGUAGESpathF)fallbackzcopying page content z from language 
%Specify either --userid or --usernamer   )model_to_dictidlanguagepage)rK   /r2   slugzcopying plugins for z from zSkipping page z, language z not defined
z)copying plugins from static_placeholder "z" in "z" to "z"
)pluginsplaceholderrK   zall done )+r   r   r<   	Exceptionr   SITE_IDr   AssertionErrorr   r   r   on_siteorder_byget_languagesget_content_obj
isinstancer
   stdoutwritetitledjango.formsrI   popr   	with_usercreateupdate_languagesurlsparentget_pathrN   r   r   get_page_titler   r   alldraftget_pluginsrK   appendnamer   )r>   argsr   verboser.   r0   r#   r*   userr,   rL   r\   rI   	new_titlepage_urlparent_pagenew_urlbaserE   static_placeholderplugin_listplugins                         r   handlezCopyLangCommand.handle8   s=   ++k*Q.[[.
{{>2KK,	++i( 	$w{{6401D	u 1$ 7777/5555
 LL((.77? 4	DD..00,,Wu,Ee%56 00;E)),A%++o^g]hhj*kl*+RSS: -e 4IMM$-,3Ij)(,If%''11$7>>KKd&8&8&::--d.@.@.BgY.NO  $yy}}i}@H"&++K+H5GKKd+&*GFO*1GJ'"*33G<BF$>HMM!'}}&8tW&MGFOKOwv&GU\]cUdGFOOO--d3::EWE))243F3Fy3Q2RRXYbXccef -T9gzRKK%%()<)<T=O=O=QRS=T)U(VVabkallz{e4	l &7&?&?&C&C&E " 066BBD 3F)3#**623 ))GHZH_H_G``fgpfqqwx  xA  AD  E 0 +$6$<$<!(" 	*%e  	$##D	$  	ustt	us   %P  Q   P=<P= QN)__name__
__module____qualname__help_stringcommand_namelabelr@   rv   rQ   rA   r   r   r   !   s    'KL+El"\&rA   r   c                   &    e Zd ZdZdZd Zd Zd Zy)CopySiteCommandz3Duplicate the CMS pagetree from a specific SITE_ID.r,   c                     |j                  ddddd       |j                  ddddd	       |j                  d
t        ddd       |j                  dt        d       y )Nz--from-siter"   	from_siteTr$   r%   z	--to-siteto_siter+   r1   r   r2   r3   r4   r6   r7   r8   r9   r=   s     r   r@   zCopySiteCommand.add_arguments   sw    M'VZ!E 	 	GKiRV!C 	 	ELsR!U 	 	WJS7jkrA   c                 V   	 t        |j                  dd             }	 t        |j                  dd             }	 ||k7  sJ 	 | j                  |      }| j                  |      }t        |      }|st        d      t        j                  j                  |      j                  d      j                  d      }t        j                         5  |D ]3  }|j!                  d ||      }|j"                  s$|j%                          5 	 d d d        | j&                  j)                  d	|j*                   d
|j*                   d       y # t        $ r t        j                  }Y Fw xY w# t        $ r t        j                  }Y Jw xY w# t
        $ r t        d      w xY w# 1 sw Y   xY w)Nr   r   zSites must be differentrH   rD   )depthrE   )target_pagetarget_siterm   zCopied CMS Tree from SITE_ID z successfully to SITE_ID z.
)r<   r   rR   r   rS   rT   r   get_siter   r   r   rU   filterrV   r   atomiccopy_with_descendantsis_homeset_as_homepagerZ   r[   r   )	r>   rk   r   r   r   rm   pagesrL   new_pages	            r   rv   zCopySiteCommand.handle   s   	)GKKT:;I	''++i67G	:''' MM),	--( FGG WWYV!V_Xf 	 ! 		/ /55 $ ' 6  <<,,./		/ 	+ILL>9RSZS]S]R^^ab	
G  	) ((I	)  	'&&G	'  	:899	:"		/ 		/s?   E E' F &F5FE$#E$'FFFF(c                     |r!	 t         j                  j                  |      S y # t        t         j                  f$ r t        d      w xY w)Nr   z$There is no site with given site id.)r   r   r   
ValueErrorr   r   )r>   site_ids     r   r   zCopySiteCommand.get_site   sR    K||''7'33   1 12 K"#IJJKs	   % %A
N)rw   rx   ry   rz   r{   r@   rv   r   rQ   rA   r   r~   r~      s    GKLl(
TrA   r~   c                   "    e Zd ZdZdZdZeedZy)CopyCommandz1Copy content from one language or site to anothercopyzfoo bar)r    r,   N)	rw   rx   ry   rz   r{   missing_args_messager   r~   subcommandsrQ   rA   r   r   r      s    EKL$KrA   r   N)django.confr   django.contrib.authr   django.contrib.sites.modelsr   django.core.managementr   	django.dbr   cms.apir   (cms.management.commands.subcommands.baser	   
cms.modelsr
   r   r   r   r   	cms.utilsr   cms.utils.pager   cms.utils.pluginsr   r   r   r   r~   r   rQ   rA   r   <module>r      sa      . , / ! , G V V ' - 9 s&( s&l>( >B$ rA   