o Êÿ’dC[ã@s”ddlZddlmZmZmZmZmZmZmZmZddl Z ddl Z ddlm Z ddl m Z ddlmZddlmZddlZddlZddlmZddlZdd lmZddl Z ddlZdd lmZmZdd lmZdd lmZm Z ed e!dd�Z"e #e$dƒ¡Z%e j&Z&dd„Z'dd„Z(e"j)ddgd�dd„ƒZ*e"j)dddgd�e'dd„ƒƒZ+e"j)dddgd�dd „ƒZ,e" )d!¡d"d#„ƒZ-e" )d$¡e'd%d&„ƒƒZ.e" )d'¡d(d)„ƒZ/e" )d*¡d+d,„ƒZ0e" )d-¡d.d/„ƒZ1e"j)d0dgd�d1d2„ƒZ2e" )d3¡d4d5„ƒZ3e"j)d6dgd�d7d8„ƒZ4e"j)d9dgd�d:d;„ƒZ5e" )d<¡d=d>„ƒZ6e" )d?¡d@dA„ƒZ7e" )dB¡dCdD„ƒZ8e"j)dEdgd�dFdG„ƒZ9e" )dH¡dIdJ„ƒZ:dKdL„Z;e" )dM¡dNdO„ƒZ.decorated_viewr)rr rrrÚfirst_login_requiredsr!csŠt|dƒ�}t |¡p g}Wdƒn1swY‡fdd„|Dƒ}t|dƒ�}tj||dd�WdƒdS1s>wYdS)NÚrcsg|] }| d¡ˆkr|‘qS©Úcomponent_name)Úget©Ú.0Úitemr#rrÚ <óz)remove_from_yaml_file..ÚwF)Údefault_flow_style)ÚopenÚyamlÚ safe_loadÚdump)Ú file_pathr$ÚfZ existing_dataZ updated_datarr#rÚremove_from_yaml_file8s ÿ "ÿr3z/api/languagesÚGET)ÚmethodscCsZtj ¡}g}| d¡|D]}d|jd|jd}| |¡qd |¡}t|ƒ|S)NÚ languagesz components/ú/z /languagesú;)r ÚqueryÚallÚappendÚnameÚjoinÚprint)rZlanguages_pathsÚ componentZcomponent_languages_directoryÚresultrrrÚ find_languageBs    rAz/homeÚPOSTcCstdƒS)Nú /dashboard)rrrrrÚhomeQsrDz /first-logincCsltjdkr2tj d¡}tj d¡}tdD]}|d|kr/|d|kr/|td<ttdƒƒSqdStdƒS)NrBrÚpasswordZusersúcomponents.dashboarduBÐ�евірне ім'Ñ� кориÑ�тувача або пароль.zfirst-login.html) r ÚmethodÚformr%Úconfigrrrr)rrEÚuserrrrÚ first_loginWs    €rKz/change_language/cCs|td<|t_ttdƒƒS)NÚlangrF)rr Úcurrent_languagerr)rLrrrÚchange_languageds rNrCcsšzt tj›d�¡}| ¡}dd„|Dƒ}Wnd}Ytj ¡}dd„|Dƒ}tj  d¡‰g}ˆr=‡fdd„|Dƒ}n|}tj }t d|||ˆtj d�S) Núapi/componentscSsg|]}|‘qSrrr&rrrr)tszdashboard..cSóg|]}|j‘qSr©r<©r'r?rrrr)zóÚ search_querycsRg|]%}|drˆ ¡|d ¡vs%n |dr#ˆ ¡|d ¡vrn q|‘qS)r<FÚ description)ÚlowerrR©rTrrr)€sÿÿÿÿþzdashboard.html)rÚcomponents_namesÚcomponent_serverrTÚlanguage) Úrequestsr%r Ú update_domainÚjsonr r9r:r rrMrÚmenu)ÚresponseÚ json_datarYrrXZfiltered_componentsrMrrWrÚ dashboardks$  þraz&/show_components/cs>t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}td|d�S)NrOc3ó �|] }|dˆkr|VqdS©ÚidNrrR©Ú component_idrrÚ ‘ó€z"show_components..zcomponent-info.html)Úselected_component)r[r%r r\r]Únextr)rfr_r`rirrerÚshow_components�s rkz-/install_components_git/c sœd}t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}|d}tj ||¡}|d}zŠtj  |¡s6t  |¡tj |d¡}tj  |¡sJt |dƒ  ¡d d d d d d|d|g} t  | ¡d} |d} t | dƒ�} |  d¡|  | ¡|  d¡Wdƒn1s�wYtjj|dd� ¡} | s²t|d|d|d|d|ddd�}tj |¡tj ¡dWSt jyÍ}z dt|ƒWYd}~Sd}~ww)NrrOc3rbrcrrRrerrrgœrhz)install_components_git..r<Úgit_linkz __init__.pyÚazvenv/Scripts/python.exez-mZpipÚinstallz --use-pep517zgit+z --target=ú routes.pyÚ dependenciesÚ rQrUÚversionT©r<rUrrrlrpÚ installedzOInstalled successfully zError installing : )r[r%r r\r]rjÚosÚpathr=ÚexistsÚmakedirsr-ÚcloseÚ subprocessÚ check_callÚwriter r9Ú filter_byÚfirstÚdbrÚaddÚcommitÚCalledProcessErrorÚstr)rfÚproject_folderr_r`riÚrepository_nameÚrepository_folderZ git_repo_urlZ init_fileÚcommandr1ÚcodeÚfiler?Z new_componentÚerrerÚinstall_components_git•sR   ÿ     üú €ÿr‹z)/install_components/c sÊd}t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}|dur!dS|d}|d}�z tj |¡}tj |dd �tj|dd �}|  ¡tj ||d ›d �¡}t |d ƒ�} |j dd�D]} |   | ¡q[Wdƒn1smwYt |d¡� } |  |¡Wdƒn1sˆwYt |¡|d } tj || d¡} tj || ¡}tj | ¡r¸tj | ¡r¸t | |¡d}d|d ›d|d ›d|d ›d|d ›d|d ›d� }t |dƒ�} |   d¡|   |¡|   d¡Wdƒn1sõwYtjj|d d� ¡}|�st|d |d||d|dd�}tj |¡n||_|d|_||_d|_tj  ¡t !¡d|d ›d |›d!tj"›d"|d ›d#� WSt#�yd}z d$t$|ƒ›�WYd}~Sd}~ww)%NrrOc3rbrcrrRrerrrgßrhz1install_component_from_archive..zComponent not foundZlatest_component_dataZlatest_versionT)Úexist_ok)Ústreamr<z.zipÚwbi )Ú chunk_sizer"z.gitrozfrom components.Ú.z.views import z app.register_blueprint(z, url_prefix='/z')rmrqrQrUrlrsz"Component installed successfully: z vÚ z�, please wait installing requirments... zError installing component: )%r[r%r r\r]rjrurvr=rxÚraise_for_statusr-Ú iter_contentr|ÚzipfileÚZipFileÚ extractallÚremoverwÚisdirÚrenamer r9r}r~rrr€rrrlrprtr�Ú$search_babel_translation_directoriesÚbabel_translation_directoriesÚ Exceptionrƒ)rfr„r_r`riZ archive_urlrrZcomponent_folderZ archive_pathr‰ÚchunkZzip_refr$Zold_folder_pathZnew_folder_pathr1rˆr?rŠrrerÚinstall_component_from_archiveØsv   ÿÿ ÿ  8    üú   þ€ÿržz5/install-requirments/cCsFtƒtj d|d¡}tj |¡r!tj›d|›�}tj|ddd�dS)Nrzrequirements.txtz/python -m pip install -r T)ÚshellÚcheckzµRequirements installed successfully please wait installing requirments components... ) Úget_admin_menururvr=Úisfiler Ú venv_bin_pathrzÚrun)Zselected_component_nameÚrequirements_fileZ pip_commandrrrÚinstall_requirments,s  r¦z/install-requirments-componentscCspd}d}tj |¡r%tddƒ�}| ¡ ¡}Wdƒn1s wY|r6|D] }t d|›�¡}q)dSdS)Nzrequirements_components.txtr"ú/install_components/ziRequirements components installed successfully z8)rurvr¢r-ÚreadÚ splitlinesr[r%)r¥Z component_idsr‰rfr_rrrÚinstall_requirements_components<s  ÿÿrªz*/remove_dependencies/cs¼tj |¡‰ˆs dSˆj}t tj›d�¡d}t|dƒ� }| ¡}Wdƒn1s,wY‡fdd„|Dƒ}t|dƒ� }|  |¡Wdƒn1sOwYdˆ_ t j   ¡d S) NúLComponent not found úapi/add-to-menuror"csg|] }| ¡ˆjvr|‘qSr)Ústriprp)r'Úline©r?rrr)_r*z'remove_dependencies..r+FzXComponent successfully turn off )r r9r%r<r[r Údomainr-Ú readlinesÚ writelinesrtrrr�)rfr$r1r‰ÚlinesZ updated_linesrr¯rÚremove_dependenciesOs   ÿ  ÿ r´z'/add_dependencies/cCsftj |¡}|s dSd}|j}t|dƒ� }| |¡Wdƒn1s$wYd|_tj  ¡dS)Nr«rormTzXDependencies added successfully ) r r9r%rpr-r|rtrrr�)rfr?r1rˆr‰rrrÚadd_dependenciesis   þ rµz'/remove-component/c CsŒd}tj |¡}|j}tj ||¡}ztj |¡rt  |¡|r+t j   |¡t j   ¡WdStyE}z dt|ƒWYd}~Sd}~ww)NrzWComponent removed successfully zError removing component: )r r9r%r<rurvr=rwÚshutilÚrmtreerrÚdeleter�rœrƒ)rfr„r?r…r†rŠrrrÚremove_component}s     €þr¹z/component/addcCs\z#t tj›d�¡}| ¡}|D]}tj›d|d›�|d<qWt|ƒSd}Yt|ƒS)NrOr§rdZbutton)r[r%r r\r]r°r)r_r`r(rrrÚ component_add—sÿþrºz/component/listcCs˜g}tj ¡}|D]>}i}|j|d<|j|d<|j|d<|j|d<tj›d|j›�|d<tj›d|j›�|d<tj›d |j›�|d <|  |¡q t |ƒS) Nr<rdrUrrz/remove_dependencies/Z button_offz/add_dependencies/Z button_onz/remove-component/Z button_del) r r9r:r<rdrUrrr r°r;r)Úcomponent_listrr?Zcomponent_dictrrrr»¦s      r»z/api/add-to-menucCs$g}t tj›d�¡}| | ¡d¡| ¡dd}| ¡ddD]}|d}|d}t|||ƒq$tj  ¡}dd„|Dƒ}|D]H}t tj›|›d�¡}|j dkr€| | ¡d¡| ¡dd}| ¡ddD]}|d}|d}t|||ƒqnn||D]}||d <q„qC|t_ tj S) Nú/menu-admin-itemsrÚtitleÚchildrenÚtocSrPrrQrRrrrr)ÄrSzadd_to_menu..éÈr$) r[r%r r°r;r]Úadd_menu_with_permissions_dbr r9r:Ú status_coder^)Údatar_Ú prev_menur(Ú name_menuÚ caption_menurrXrrrÚ add_to_menu¹s4  ý ÿrÇz/api/main-menu/cCs‚g}t tj›d�¡}t d¡}| ¡D](}g}|dD] }|d|vr)| |¡q|r<||d<| |¡| ddi¡qt|ƒS)Nr¬éÿÿÿÿr¾r¿Úheadingz APPS & PAGES) r[r%r r°rZget_menu_items_by_rolesr]r;r)Z filter_menur_Zmenu_items_listr(Zfiltered_childrenZimrrrr¡Øs     € €r¡cCs–tdƒ}tj |d|i¡ ¡}|d}|dkrIt||||d�}tj |¡tj ¡t|j ddddddddddddd� }tj |¡tj ¡dSdS)Nz>SELECT COUNT(*) FROM k2admin_menus WHERE namemenu = :name_menurÅr)ZnamemenuZprevmenuZcaptionÚ module_namerÈ) Úmenuidrr"r+ÚiÚdÚcÚexpÚimpÚsettableÚcutpastÚenableZroleid) rrrÚexecuteÚfetchonerr€r�rrË)rÅrÄrÆr^r@ÚcountZnew_menu_elementZ new_pravarrrrÁís<ü  ó ärÁr¼cCs&dddidddœdddœgd œg}|S) NzAdd componentsÚiconzmdi-account-circle-outlinezInstall componentsz component-add)r½r¿zInstalled componentszcomponent-list)r½r×r¾r)r^rrrÚ menu_itemssþýþ rØ)=r”Úflaskrrrrrrrrur¶r Úk2cfgr Zk2compr Z flask_migrater r[rzrr.Ú functoolsrÚsysZ k2admmenurrÚ sqlalchemyrÚflask_jwt_extendedrrÚ__name__Ú components_bpr/r-rIrr!r3ÚrouterArDrKrNrarkr‹ržr¦rªr´rµr¹rºr»rÇr¡rÁrØrrrrÚs|(              B S         %