From c2bcd7be227b49255d704d7db564d990220ca1b4 Mon Sep 17 00:00:00 2001 From: Edwin Noorlander Date: Tue, 11 Aug 2026 18:06:17 +0200 Subject: [PATCH] System plugin support: admin menu items, admin routes, API integration - PluginManager: getAdminMenuItems(), handleAdminRoute(), getPluginType() - admin.php: load PluginManager, pass plugin_admin_menu to Twig - admin.php: route to plugin admin pages via handleAdminRoute() - admin.twig: show 'Plugins' sidebar section for system plugins - plugins-new.twig: choose content or system plugin type - handlePluginsNew: generate proper template based on type (content/system) - plugin-admin.twig: renders plugin output in admin layout - GeoIPInfo: example system plugin (admin page with GeoIP info) - System plugins: getAdminMenu(), getAdminRoutes(), handleAdminRoute() - Content plugins: getSidebarContent() (unchanged) --- admin/theme/default/assets/img/favicon.ico | Bin 32038 -> 41662 bytes admin/theme/default/views/layouts/admin.twig | 12 +++ .../default/views/pages/plugin-admin.twig | 7 ++ .../default/views/pages/plugins-new.twig | 17 +++- cms/core/plugin/PluginManager.php | 78 ++++++++++++++++++ plugins/GeoIPInfo/GeoIPInfo.php | 57 +++++++++++++ plugins/GeoIPInfo/plugin.json | 7 ++ public/admin.php | 44 +++++++++- themes/default/assets/img/favicon.ico | Bin 0 -> 41662 bytes themes/default/base.twig | 2 +- themes/favicon.ico | Bin 32038 -> 0 bytes 11 files changed, 219 insertions(+), 5 deletions(-) create mode 100644 admin/theme/default/views/pages/plugin-admin.twig create mode 100644 plugins/GeoIPInfo/GeoIPInfo.php create mode 100644 plugins/GeoIPInfo/plugin.json create mode 100644 themes/default/assets/img/favicon.ico delete mode 100644 themes/favicon.ico diff --git a/admin/theme/default/assets/img/favicon.ico b/admin/theme/default/assets/img/favicon.ico index 78280bc367ee3e0debbd9e4c3dfbbc84653409c3..485452a2c7b8a3860995a704fbe2ce73127227ee 100644 GIT binary patch literal 41662 zcmeI4zmMEh5XXI4k}DE8Xd()dg#-{)qy#A3#lLV-}y5bA^`MI<7jK*O$}r2q;* zi0TLeB?1wF!msA&kdOc+|G+7T-xOQ$V}awG&)9x@&pzAl?XA7*#Pg!bd-G=A%)IZc zcRjYxK`_U^lP3fIzcYAmDF}83L2w_$RPYrf^U@xAD+u=Piz%AW{}cg5KoL*`6ahs* z5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKMW9v$!Z6$cor0DU zlJSl*r^pXNFG1&%{$QED%KQ)j%YD#QDBEO?Co0m7xjE>Sta8H3{9Jm4a=r+F-K|hw zE)sYnS?V}JaM}n9`qRGtRWFSIc)nhMsXcwltYUHt^ph>j8UM=MHnT>1KLo(+5cGcz zp4lm$5{nyxy;)%af7Gne-i-hlZiOxvV40oXOg=8UqfiZl0Dzy(f?mRBzps8S(KVuf z8OWoT+8hXg(_PS?1~^CmBl7I;dC|F5*3{FEP*e;8fc8-qxDx(}ENJK+DABh?SF&rB zPa^0#avf{MN#%>mDM8n+5>%E;8Tw2XIya`Il70T zqS{u@V;(WORrc7u3HlcDX_B)Cef*<$%*P-)ANtsH>0oCURD_=$$_pO0jDw=xDwHG7Dz&1#(jkucZ>vpqlvpqIGb~#GqYxMUQ`9ZcF^2w{1ljEea z?=Eb0p+6v>CNbVtw2!=b^rupb;O8En4OlvF=fx{?=sacV`3z4K*&25qXA{*LE`Qjc zN-ct)aWVY9D0Xa}gT`rvxh?XMH;=} zX4@?rqs))U@Kt*)f{!YXk9Wq*$Hd16{wk|AJn~U{Ey8~89TUTIMR8+i+}z5a zqHnt4uku>M6%0OWuSM{23G!)je)T|6%*dn$^tnbYzJ7sjF0$pCXKgLDhKJwUYZ3Og z8}d0%ebFP{N3pdEl{Gm}KkTwqCTD#uwMLmwk>PhLwFrLhhQ5LF+K@@PZsPSk1$vSb z`TXZKIew0~_FX1teHW^&)+qBWGJH>~7Ln^$k3(-lpFr?}?lP zf06XUr|$V=*ZJ_+sI}H`#en~*)FQ4pnji;@Wag*i=ShjF;#M3#P&VwG5c;}KBiKO%o_VV|Ky`_-&YbRaZRNb z$-`vUbL_n_zvl)EVmbi%v>WajEjHbl^Iek<>4~egwFrA}L_L_v#~Ggk1f3i587=lT z)9WR6E|TM;?X^gkoXqTcVm2R1PFh=wB>R`^oW9Nb*`7SCedY+HwY5l+kD1($D#{J{ zXl*TGFad+9->)^k^LpZGZ7pK(0E4ML&tQBO^~BQJTEt)i292soh^Mu+h?SGZ)FkAi z)wPI~lSb4ecQIn99*4H9dPG(+{kPodzOhV|vW2Q9;{+eYtOvP?`g#PLy2=NBe&be${)i>=UQPfSMdBdcnA_?24ZHxK_; ztMb`&J76*P`}(Tf6aIZ_k=EoxumuyJnxyjYtHk$ykK^Nfm7js8+X4@HzVT`aE+U)w zZ-t6*!1f0vzUBQvh3~y6vU$DFv*&$KUQT3g!~2k{+%NX!^YA59KoL*` z6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6aht`xd?Edf7AwqIbs+n?}Nwc!b$>K zjMs3!zZg%%{GgNNgRU)K>7@DPjr@YG-|zI({Ct`Z7MABN{k08zcexXW{czBY;#&>6 zEAT;YWg+5+!6N)xu(&**@V%8e_-?-w@q?f@me=@-VRE%UQmIytlr--$A*z zZaReWITux9NS-IJnZ5=%8&G>#d5=`+y{?qL {% block title %}CodePress Admin{% endblock %} + @@ -124,6 +125,17 @@ {% endif %} {% endif %} + {% if plugin_admin_menu is not empty %} + + {% for item in plugin_admin_menu %} + + {% endfor %} + {% endif %} + {% if has_permission('guide') %}