From 5c2cbbbad008ba448082f4cf0e89125309342143 Mon Sep 17 00:00:00 2001 From: Xatiko <107261855+Anymorexxx@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:11:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0:=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8,=20=D0=B1=D1=83=D1=80=D0=B3=D0=B5=D1=80-=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8E.=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D0=BA,?= =?UTF-8?q?=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=BF=D1=80=D0=BE=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BE=D1=81=D0=BF=D0=BE=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D1=81=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/config.cpython-313.pyc | Bin 460 -> 709 bytes assets/settings.png | Bin 0 -> 30027 bytes config.py | 13 +- database/DogAcademy.db | Bin 24576 -> 24576 bytes .../__pycache__/db_events.cpython-313.pyc | Bin 1915 -> 1915 bytes .../__pycache__/db_session.cpython-313.pyc | Bin 1309 -> 1339 bytes database/__pycache__/models.cpython-313.pyc | Bin 2526 -> 2526 bytes database/db_session.py | 1 + requirements | 1 + src/__pycache__/utils.cpython-313.pyc | Bin 0 -> 442 bytes .../__pycache__/admin_logging.cpython-313.pyc | Bin 0 -> 2010 bytes .../__pycache__/content.cpython-313.pyc | Bin 0 -> 1001 bytes .../__pycache__/db_management.cpython-313.pyc | Bin 0 -> 1994 bytes .../knowledge_base.cpython-313.pyc | Bin 0 -> 2692 bytes .../__pycache__/statistics.cpython-313.pyc | Bin 0 -> 1525 bytes src/admin_functions/admin_logging.py | 32 +++ src/admin_functions/content.py | 17 ++ src/admin_functions/db_management.py | 36 ++++ src/admin_functions/knowledge_base.py | 50 +++++ src/admin_functions/statistics.py | 24 +++ src/main.py | 8 + src/ui/__pycache__/admin_ui.cpython-313.pyc | Bin 2867 -> 9847 bytes src/ui/__pycache__/auth_ui.cpython-313.pyc | Bin 10171 -> 10171 bytes src/ui/admin_ui.py | 188 ++++++++++++++---- src/utils.py | 4 + 25 files changed, 330 insertions(+), 44 deletions(-) create mode 100644 assets/settings.png create mode 100644 src/__pycache__/utils.cpython-313.pyc create mode 100644 src/admin_functions/__pycache__/admin_logging.cpython-313.pyc create mode 100644 src/admin_functions/__pycache__/content.cpython-313.pyc create mode 100644 src/admin_functions/__pycache__/db_management.cpython-313.pyc create mode 100644 src/admin_functions/__pycache__/knowledge_base.cpython-313.pyc create mode 100644 src/admin_functions/__pycache__/statistics.cpython-313.pyc create mode 100644 src/admin_functions/admin_logging.py create mode 100644 src/admin_functions/content.py create mode 100644 src/admin_functions/db_management.py create mode 100644 src/admin_functions/knowledge_base.py create mode 100644 src/admin_functions/statistics.py create mode 100644 src/utils.py diff --git a/__pycache__/config.cpython-313.pyc b/__pycache__/config.cpython-313.pyc index 700288bc1b374adfd68c41be5e138a3b5d34ce3b..a11615e38ecc9bbd03e1bc0f460423c5f89a0f3f 100644 GIT binary patch delta 406 zcmX@Ze3X^%GcPX}0}xD_Xp?TlJdsa=(Pg5#Qaxi4doX(uM=(bbXD~|$%wUlqHuiGgv7i6xMcmS$#bVh$1k1F%RM5NI;};&sl?%}iDZ zPRuJ-@C|+`3A9g>sfYoXh`%3HOdLfl#5E!WD!~PjaP#*Ixy8>1Rpsd(4-%Mou9oi>Pq1r9h^L=> zaJ;9l`($rMQ!{CxKNx|yI2lNMU}j`wd?2ZGfkEtsnEV9>;TxiI7Z`+YNGV@n5Wm5z g)WCH^P_2RQ1KZ>&jD~y-JRjH?1XLS&ia-Ga0Fd5ty#N3J delta 155 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 literal 0 HcmV?d00001 diff --git a/config.py b/config.py index be71e20..9eb19e0 100644 --- a/config.py +++ b/config.py @@ -1,6 +1,12 @@ -# config.py +# Админ-интерфейс (тёмные цвета) +ADMIN_BACKGROUND_COLOR = "#403d49" +ADMIN_PRIMARY_COLOR = "#ff6347" +ADMIN_BUTTON_COLOR = "#444444" +ADMIN_BUTTON_TEXT_COLOR = "#ffffff" +ADMIN_FONT = ("Comic Sans MS", 25) +ADMIN_BIG_FONT = ("Comic Sans MS", 40) -# Интерфейс +# Интерфейс пользователя BACKGROUND_COLOR = "#f8e1e1" PRIMARY_COLOR = "#ff6347" BUTTON_COLOR = "#87ceeb" @@ -14,3 +20,6 @@ ADMIN_PASSWORD = "admin123" # База данных DATABASE_URL = "sqlite:///database/DogAcademy.db" # Обновлено на правильный путь + +# Иконки +SETTINGS_IMG = "assets/settings.png" diff --git a/database/DogAcademy.db b/database/DogAcademy.db index 3f0c2bb68aebd886a5570d6f9a57693c7080a3dd..695b5476cb7740bca6d4b8e67b68641757c9941b 100644 GIT binary patch delta 301 zcmZoTz}Rqrae_1>$3z)tMvjdMOZYjM_^&hYzvREZSy13KzmNbE3xlL&RbozQL1Jl9 zqM?!T;M2`^POn` delta 57 zcmZoTz}Rqrae_1>>qHr6M%Il9OZeFs`Cl^dzuYWnaG!tjOL=J^{}TiMCm{a?|K?Bn MLJFH%4F2!~02`VUX#fBK diff --git a/database/__pycache__/db_events.cpython-313.pyc b/database/__pycache__/db_events.cpython-313.pyc index 87f6cf44fb94cbb98d8ed16d816ec7e7c547552b..b221d7677ef6dfc9ededc81a4723c231931d69fe 100644 GIT binary patch delta 20 acmey(_nVLVGcPX}0}ya#*=*!4U+ zP+>7hc>}`}ZlP|=3oIf=3.7.0 diff --git a/src/__pycache__/utils.cpython-313.pyc b/src/__pycache__/utils.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5416ad6e5ead53d4902bf81f66799d19791049a2 GIT binary patch literal 442 zcmey&%ge<81O@wT(w772#~=<2FhUuhK}x1F1T#o66fvYTYBD9mWIzg-q4;wUSXC%P z5V9;t1rV4*C jxW!?Uo1apelWJGQ4djB&14Y0GW=2NF&rHmWl3=v}T)1?Z literal 0 HcmV?d00001 diff --git a/src/admin_functions/__pycache__/admin_logging.cpython-313.pyc b/src/admin_functions/__pycache__/admin_logging.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a722fc15f8f81fb8fc6977b8d6eaf3884f9e3c8 GIT binary patch literal 2010 zcmah~(N7dd7@ysp-P=1r6wx9{>!Ln*6%kMqK{PeB*1&O5R%jDR$g;P0oZRiw**y<= zI_!hAwSk(Nk~Fa-O&@%tw6t0)wtqmAS&M;;nl!C1zL8R5(x-m2+)-(5~y3m1$0KM3O+C?I2tC&P2z@!e` zE)y9rT#JaJ%OFE3A*wv(ZsJjaNuDQal;6eO3U!c?U8#+tx(pz*^qjv!O3f>uwehuhte-!LyKzCcC_W-}+ zU!~u2J)H){EZBolLv9Cm`Dw8B*1uLp#gU5Foow3Fbi;PFPW|a-Fpr81d)BbWaMH28 zo6-tD0D27qnx)_S<15^Te!MP**_9d&ezs8@{#B+9SVkgkr(AFyGM!8=Yr71)15TcB z-%)|^{E{**%0V#P?|1{}cp%AiCc_kKc*w953^B>F6E~%i&CQL?hxRu$?Qd$)nwnb= zHs*H2G6)J12WguLzP^~a836A=@N@nsoo2F;$fj+$=E_AQle64^Iy>0f*qDoQXP-l! zr=NGUVV3=I7S1{eix{3m;!&0GThByqkjXKl-^wsNWSE15^MC30by6KKX^ynEM zpIyK`KJJ;vZ$Bxo9FM&po7_hCCTTYBmk$@-Sj6Egoui!-^;5ltP9HZH=d@}M-FJ*5 z$Jda0da#otagMZ)wojazI#g))@!ll`$&o9u(bz=QL^s`?D#Uy|z>U_RcM7rlm@Gq} z$mF8b_#NSST>cdV)H|pn2Soe1I;2Z_P!se}3l@FcltOi=9_=k^5>P#pqK0-N4W4-IF=;1C z3eiZMYy%6zsWqbVV{9mmZ?XV^sG$t`J;dSqlqsAz1zwWQIM= literal 0 HcmV?d00001 diff --git a/src/admin_functions/__pycache__/content.cpython-313.pyc b/src/admin_functions/__pycache__/content.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67ab3411c3d4eb75f86b761fe646f22754476143 GIT binary patch literal 1001 zcmc&zO=}ZD7@pakP1PE0rTBGPMGv{;WD80WM3G`OmM+ml17W+Fgf;t-&d!SUl(q*w zdg;-F$J}Bum=-_&!Yo({qdn=RH);NW@9d_fAYOWLV4s=y>)GLb-WlZcrx2{Q-RZ`@ zhR{!C94xTYHMj=bIG#=WE)RUxTJIxN3M%uVYHN=!t z_it6^Son-OJgVFa8`V3GU8DYTC1Os+uK8|It;d1G-7ttM4lvVz7hB6R@7sahpjD4P zr(VRyflPHXx(?7rzsT7)#y4{Q2g$vfS)F-Z7MJG4Q!gR@4q*vl+k_7w5&dWNQVHJv zrIh#zt~SW|N%V#iZkWjmDES_oTcTf#Z@}fnF)En>g-p#=iK)lI&H!XmFr}g#ANI8d zQnYNC@Q6)-|FlZ`XKx>iC(VR-J7g&#OWP!3=ODe1lOw$8f?|w~D(aIUX))$5$fZUj x)hs3NptK;nz=>%;ti>L^%`QTc8j|P&z;7L6{2fi~qAUAE$1xs^>6qiR@DCZ7F>L?< literal 0 HcmV?d00001 diff --git a/src/admin_functions/__pycache__/db_management.cpython-313.pyc b/src/admin_functions/__pycache__/db_management.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ae9899a5ba72bf48f9272a964892469b45b0ccc GIT binary patch literal 1994 zcmaJ>TWl0n7(O#|W_R}1uFw`GUKT`Q6S9c})RKlo#ZtBxbf=q`bjxPCbGjWnJ6q1o za`C||7@*pRR+Gj)7}G=_F(c(DODqO{5hNYL9=l7Welz(em zfy|>3!M6fYg?&vqg~})`4%PO9)&0^tT>ieYR*oA}Da`BClrjyF4f=x>W zO|KYMalB@g{F(~-Sh1p6TA5Uc%9WA z0-wL}UtoQ_k9pMUlZ9C@=uuj`GlTRaB*JDHnds(G>SJc?yk00&ifmguIaB zb!=E8ydr-Er^vMjmKI;%MI7O^`YX37kXqb7Ay#EI)Gb+3Udna0e1W8f;iq(qDfA!y zh#L7{e^iaG`~Rg2YD|r*34ecaGwOq*TNpBJ3G%nN+NQSWaqj7sC6K_%pZkUd)@L`E zK;0{;$!;ly246!chM+1T_rjA=K?h-0o=R`39e@b;Ywsg?{Xcl;U@m6)FkA%&wjcfB zxdijF41V8t31*6$Z+NF+WUjeaGPRw2i?22YyUQu}iQu&OLE^1y#VDmz&9YO2>V1BT zX^~-voOBo-uUbx8V&dV0kN9(NKWk-s#K*=T>PzmjcZMkwMAHqcY{S39rK(x0ST@7< zMD+yacbyjKW?;076W($_l&Ui^%yW$!rU}S%a!RvwhL}VwokP)a%>-l`N+&75OeQ*$ zOdin2h{^DjR+?mCwE<*IK2{_26y-Chz}5|LWU>z#Oj)<^d?~&fbDwO$OmW>$_do!j1=|C{ z!KHmpzJv+wXJi;s2{qM-12$i)5I6X&E&4z z$=zOZ_swLcet0$BK0ENqz(S|HYrs`Uz4+1k+jnr}{NU-qxg86`^+6AB5A@99hg^R( z(04BuxW0$$+0)s%-o?H3tcQ2q>v(QjxuYaz;~&T8atoc`DBs2|#FpN>JbH2Tr@mj0 z{CvdSIXoS|spS8ZQ0MaxLP(DDglCWVNS1DAVP_JsnNYe7s%*5r%|2#oW@!R2Ia8$- z${~xj>l$=Wvq`2>)ro00?rZb96@a?gbsFOF5kT`y%`qU7-#^{K2?tXjRsH5}gkGfw zwyv4v0DT?eILO+s0C^w@f^Zjgte`C`Xy*!gX$8H!g0}q;?ON#dqA%9N53wlp2@e%f Nh^#4_gbu&7zX1=50c-#O literal 0 HcmV?d00001 diff --git a/src/admin_functions/__pycache__/knowledge_base.cpython-313.pyc b/src/admin_functions/__pycache__/knowledge_base.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb424814ef4a35164f21eb82b69fadcdc6861314 GIT binary patch literal 2692 zcmc&$TW=dh6yD4DmN=Itl&Y10g@TAFvJj#`N*k%rgetKkPCHljH+Chy&!#QDd4-u90o*NHqG21^v#Jp)<`Txv;t0uY|&|M=w*1; z;vlXFBO7bO!eM8u2qWv~6C%jjx21bY7>4tzk}7x05zm$dXL#7@6(NlRuF{7vrI%@y zUZb;gjxN!8x=a`8yaHm``i54mGQCA-t?yvIsL-lHSGcZ9e+TWiidAv;-VBxkPvUDv z`m*JNVj-JQR82ROuzIf@w$Dg5GVwXnMyaB14$eS;L2FB9&US^gIL_N>OiScuMBBxq zXRxR!_OZSr(T_;+3{IFv^h7ZoJD$*zxNtsdkVI5V7P5LQRnik?wx}D?oL(Hy<767g z;+lbjW9MzJmQ2R7da6h|z?};o;}sBP;Vx>Ma@|JH{*By|CnrvRKTP+ZpaZ8Zq}5Q$ zLa9}hSp!4iDTCMxN1)RH9biIlS`%~;P^$u*v+H0kz;FfB6)?J?&^d+Uy})o@0Gqnq zjbQ1}lX)U6VF}zHVURSlVH=1#CS(r`Z9h(C%^1OnB1sx#FQ{6WMZ@U!(Qw>Ci5kjS zD6@*rkWMgv%F%rfjzE9ovE6b#c0_cME;uo@F6@Zu3%l>%HIA)GoW~~Kh~z%-$)edf zl1J$Ak1g~`4Mi;!T}7jhiR7DbiT-P{8DUAnTZ9wu`mEk_(n6|Bb$83UI4nk3mh5OM z(5mX~mK34Ex=;0OtUrSI)F!oA^*j4np6+OBi`uHTsqNh|e?udSJ#~w8N1(IxD!8D( zvbzQs>lVlftK29H7+UlvxM`3$+Y)3G`+)S&&pmE3>_bM1^r~}ro$G9SGgwPz^|TR? zY)_(?FBNpdMn;GiWkky5E!CVHlMfM_}rMLCvCx&v7QV_CH{h6 z;9S?>J7yuvf$>WR*;_ALW$SBt9T;QD`Vsg7Xu`USJyi5-rW11eO>96!p z^-aH3?zd3aeYfChnhaG!Qyo*o^x$Y2-VtL)8>&ysp+C@PkGY-y+phqxBA56N00WTM zd2o0;FBdUT|*j)?}m_XXq_ zuioS}0PuB&WWyTLLwiqIXrzXqPM=;yaUR=1lkG8cS>42h=N8X5+Xw##!IGKH8}%e) z<)2q6!U&dU4S(T`z@5|+%zLy@OqTMvhXlch{eT$kK=)-)6z>T8{t}+KBfR(k$zoP~ W&@PKPE@L45;wf?Md09+|+}pnucqkVD literal 0 HcmV?d00001 diff --git a/src/admin_functions/__pycache__/statistics.cpython-313.pyc b/src/admin_functions/__pycache__/statistics.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b999857e60b156ba3225950d23ccf24ee2d39293 GIT binary patch literal 1525 zcmaJ>&2Jl35P!S-yv|46G@;Os1KH$)Rv=deMIxc1lvJjQlZtq2)GCpzwY}ahUazgU zZ=0m2xK$Mdm6}VXiUS|w1gB7u;u0nO7v6%UR1b2Zm)wxdAHckgHz73QNxSo#ncs|O z=6SZ0O7$T)?`~hPHxz{a6iR&LF6ev+;2|=QA!QMfK+0J(B@aa0Be@ ztMCrnVn2qho(>ui&?*t!-r!Mp}fD?%;y3u|fY88A1(`|M|sk0bXw+klv-8hFFI zkVDuvg(V%F6WPCgDb3pdq|xQusmXfHDQSl3`Pz)JdjgW^GRM?fq#Rf39@UlG$!Y7B z*afv_`qUyE7wh!qHBouRab2!jiw)B& zU)5720Xex$t2{An7A=?KhFPj|rQuTE;|IltTcQWg$1V!h~qLb7j(=M(L!>i;@Dg^7r9!Bw$>Lh8XP{JnVA2W)IYUK)Stgx zw+oj_X4$GO&HJP@ZpVtX6AA$Hr?`&&f=Ll4}~-7mc6N6VAXfthJ$ ze(itjhiV&72z9zS%?2mh_&uS_G-p=RZ9LM&Z0KSefAAvp`XfI~onOv8$9>!Qbcj#? zhR<%};Sdjh^U2y}CeS$eR{Rza? zJxNXq|H!}mMYu4_EBom#fZ3b2y>}PAFuQa>9oLU8I-1M(h>VIK(nO-33$=PVaIN== k4yyPH`eIT4QY1a(?hT&oJu(1qkD}yIcEX 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 ZAPA30>=$zUAvylH^oF3#6A(NX{{h_A(Axk2 diff --git a/src/ui/__pycache__/auth_ui.cpython-313.pyc b/src/ui/__pycache__/auth_ui.cpython-313.pyc index 452c1572627318b42e5ac0334b57e2570cf0d835..3ab9d5c8389a9596351a36790db39c61b8dd7781 100644 GIT binary patch delta 20 acmdn(zuTYtGcPX}0}y