From a85f2ee7cd64550e5f3c868e7849c1399047a3f3 Mon Sep 17 00:00:00 2001 From: Stanislas Kita Date: Thu, 12 Mar 2026 15:11:09 +0100 Subject: [PATCH 1/3] Feat(UI): rework main menu --- front/menu.php | 26 +++++++++++-------- pics/import.png | Bin 0 -> 5941 bytes pics/merge.png | Bin 0 -> 4739 bytes templates/menu.html.twig | 53 ++++++++++++++++++++------------------- 4 files changed, 42 insertions(+), 37 deletions(-) create mode 100644 pics/import.png create mode 100644 pics/merge.png diff --git a/front/menu.php b/front/menu.php index def095d..4696a74 100644 --- a/front/menu.php +++ b/front/menu.php @@ -44,24 +44,28 @@ $plugin_dir = Plugin::getWebDir('jamf'); $links = []; +$links = []; if (Session::haveRight('plugin_jamf_mobiledevice', CREATE)) { $links[] = [ - 'name' => _x('menu', 'Import devices', 'jamf'), - 'url' => PluginJamfImport::getSearchURL(), + 'name' => _x('menu', 'Import devices', 'jamf'), + 'url' => PluginJamfImport::getSearchURL(), + 'description' => __('Discover the devices in your Jamf Pro instance to ensure data integrity and prevent the creation of unwanted assets.', 'jamf'), + 'action' => __s('Import', 'jamf'), + 'pics' => $plugin_dir . '/pics/import.png', ]; $links[] = [ - 'name' => _x('menu', 'Merge existing devices', 'jamf'), - 'url' => "{$plugin_dir}/front/merge.php", - ]; -} -if (Session::haveRight('config', UPDATE)) { - $links[] = [ - 'name' => _x('menu', 'Configuration', 'jamf'), - 'url' => Config::getFormURL() . '?forcetab=PluginJamfConfig', + 'name' => _x('menu', 'Merge existing devices', 'jamf'), + 'url' => $plugin_dir . '/front/merge.php', + 'description' => __('Compare imported devices with those already present in GLPI using unique identifiers and facilitate the consolidation.', 'jamf'), + 'action' => __s('Merge', 'jamf'), + 'pics' => $plugin_dir . '/pics/merge.png', ]; } TemplateRenderer::getInstance()->display('@jamf/menu.html.twig', [ - 'links' => $links, + 'links' => $links, + 'can_configure' => Session::haveRight('config', UPDATE), + 'config_url' => Config::getFormURL() . '?forcetab=PluginJamfConfig$1', ]); + Html::footer(); diff --git a/pics/import.png b/pics/import.png new file mode 100644 index 0000000000000000000000000000000000000000..68eb8a8ad732ba3cad477028447dae9bc5cf1cad GIT binary patch literal 5941 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 literal 0 HcmV?d00001 diff --git a/pics/merge.png b/pics/merge.png new file mode 100644 index 0000000000000000000000000000000000000000..56f733948d004ddfb391670d0e0b26fc525f7942 GIT binary patch literal 4739 zcmZu#2T)Vpwk9Eg5Kuw@1w{xDdM7^u(gFlQiqfToDg-G4iZp)$2`WuG((7+Ws?w!J zq-g+A={15qKZCXU{ojpSAZoYtHQTt#5xj(ek44G59Gs3k%D!3nn;g z;JNzeg0TU2UAv!|EG!6?3pjn-2+&gTz5J!Wkmn06ymC!QKywfS{cmfbhd6R?Tn(i* zzLRzQ9$iHbbWVG2v*rBKr}vcCFM=LB|AZ~jO3Hr(ZPKQ3*r_rIFpx80+(R+ZV`FF@EtMoNQx%lr@2@?ep0lI zq=Yn?&CB{TVFmLyQD&Zh^>J4@rjEywQfGvZQ8L1U++>T+VNQdf+RoiuOl!zl_>Of4 zJsA=wRYr>E{^$6BITrL@h)5JEA%TT;@0?S{fS~v@L^)HG2nbrFB2$bM5S$R{N^>_S;A30zI`%FgHb zvh4z5Cccl!@i^K)TL1L&AXFws{%h9Pu=^k(8RfeQUt90e$IV)1%s{2Q)(|tKs1x!& zWZy%upes7_-Z`qG8#@Oj18g&4jZle=(_&192j>Y5@&^Y9nV^vb3n9p9tq1LTVpwei zgPw=lG`?mnVnb2+ENV4|(dFR9B()2RVv`e&T{jqx(*5X`+xP;!vS7{Bca+2|9w!nQ z7uWEt_M*J4A;!8I1z=s+s$Iws4L0t*E+@^}E)m_GDsVhx-HviiH5sE$mg1P&ysFd= zLm1|acGu?~8(oy8`Pud)K?*V9FJjr_&{*@tYkrITtB0$VKEL*t zNlYoua7B*QL*W2TFnJ4C{LvoTrX(+4#mCSM6K^z?^MtnP6c0GV z+%jBCJ#dksoeP5uPBx{Eay4|g6rrVZEar2;)r+NmleRuD8^9c>xqYckiasN>io~#r zY)$jVd|h_c8@!0>Ii>*pt$oZ0SQSjrv9N{k9x60-9p|s$w3#qjHGp z-e2?tf2Dfw-~GR}oL7>MaW(zI2?}p-GnJs3eAL=M^z&&gAap8ZoBS1x*53`;U7~A% zG^`OyVsR>rG-gz1d^PndG)hmJKKHCn4zr?8MWLr&uJN0&^uh$c@w`#yG~RR`eF|2* z;<+otBb1pa*rff^SPVwdHt7ChGLm>G!w&t;XY~m#Unrg%Vv*AB?vs!wP#OhuMR2 ztr|+mF-qKDGqO19J5B@^%Z+OA1q<5I%j$LMxeCmF40xdH{jUJcxpSAF_t{gtZL4m7 zJm>o^hdT@x!UQ0^KRI~=53aiOr0UZ4s26{*n(TkW(r^jogE0T9RcvD}))>H-cvO52 z#R>qpwEnbNnK%eK!_#4CMw2FIK%+*&r_J0W!0?D2#4pMKq*~TJ8WY!f@MzWCr^6zh z5qVG#X>F9ZE9~&=>$$kp6DTY@Jd$vxc&({AxciBdNaG0g8{;_cpa5?~f#rBfeJ~Nu zjP>ESnz)3tek$^FFXIL8-!D${EOPGu`unO)mI{voG<9O+$@ivq<>N%=HnYm^cGM{s z3M9tjMk9I(^`m02+ZfmV*7q7;ySMyBA(-5)O6CD`mDzsmO_Z=5#XtRm>d?#^mU&<4 z!y7jY9JE@W1@;Og+s&fN7V;0-@?u7n!)6^q{DxRa47x)?>?6ZYgK4Z66I9>% z{qK>8?hJ_e4bhpoI>SXoz^~(Mc-a8I`hRYC&7U5KC_lB#pkg0(2pUo7m1bCD@7Z^O z0=R)Ld=hT+?-2&`PKHmKhM8qLqFO;Jjuer4 z8^EDc*!lQJ%tWabWvET0Ytw_BJMpM?gO)nReM{?V>YzW&i&vSdu@W~np&L@%2`*y3 z-T+xXY#oqvXPg~3()MiJe7zC6WHb5>?H)Zwu2wgTCRtB4^>4Owq?{k5)0%n&)R#7a?csOpM@6= z6X>RTpRZ>vLJ7#-650>KqHdFR?`5%7;~O~%JxV7TLkNcIK+2lHJr$mf!I(%6FGQ{0 z*;|DoFxY2h&geQJ1Cu4^xfSBFUtb=c*QOR)7#8aFPy^f!jf#u7pbIzH@zi&8&UtR( z*0AU))#ZI+N#PW3;7m}!Yaqp*jq{Zh&q@tDQ!+XqU0fGu%SBJ|9>G zEFfbr2AP*g$%ZVgM?M)C9e)o@-Khg59&OwSme*L<>aBU+0Mrw|eA0}&T-wb+@pUcH zYIrkbH_SiMMt(ui-kTaClrhh7-IC(nuMm{fP?YlS#P@SzoxBVGkf`ZAF89!n(j0S# zcU&d$;dgWiUoIONgK||w-J@$>;UBKRVjQe4Z#Xr42{+K@U%k?AoP}6Zy{#=QG5sNI zyT9fPwN*!k*6J{~gd@S$28WWk>(^=?1gh`OE*#3xz6azRA;h@ZQG%rnWxAoh8aedZG?r-3k|4u@as8^+Gc`?Pp)BBNW5j-lfg!#dkAQ%M_#<$z9Uw3493B+jH`<*k;4CDPr_cYPM zc1pWKi+bImUkNn@-_f+qOcPv;9E|Zpc}@*)m$rv=+y==vMksZfIsuILOf5rrTvp^D zOw$(QuQaN-o9Pzp0IV?u|4FxcZAY3Tsy?kx{EP0b5$5EsPD(XcQGDTv?Y+q?bkzK% z$PxOVta@P!WEHF?>gIHYAXL8dn&!)jMj#va!*_?jiMw43REcKYEk+nZ@o_UZ#sV}? zXDbYa;-aOx4MDl0O?)oYjz76*y&jpCt*}3ZiJm$O*SL1|FZpyVowuu$+^DjjwWW6}{z7pvB1HOCDN5ZafSp zU%a;Eb4a&iLk271Qnds?5HpV!^KxQ3#Z^6Ke!A933px|)=^~=7SMel0n4bLlWlc4+ z*$Iykg9JQ(5mWVP>OsT2kMoX|gQAVo^je3W4~>bFJQ`RcUqvWUbu%-FK36=ez)2Wu~~iO(QZ>QG&;phs7@ zdf~!^ot2gi^Pj&Gz$-~H8?+DaC!8+v6&@?Bea#e%vZn|>unb}aFTQH-=xHp-AO_W; z!;OKm>;^@$^{^9`x$ulwGZT*2(oD-|*{hYqWDV^|8W z;r({@J&W=Clj6!)TDMyc_p%{Uh;7H7} zc`GMA!>3;D8e&bU@ogiPE=cw`XSwPc!FC>p%txU}5uLlW>aUMO@y87apt}2V&K(RB zLJTu<;*j6ceY>|9a~+)9TxCnwRe)3$ZG zDu<_H2M!yz8=mN`oPAmxd6}JW)pTL;M245SUqF(R!6&9MGGtkF1*Sgu{+7t+%M|Z( z5Y<_iz8*Xw&im8v?9usesk%Q9jq>^Nni(#aDcle0KU+3Fl6)(nbgW3mXP_~92ISb1Zs8#0Ek%=B<_6j_wCt9 zPC53zO2_r~A4B+11&V(S1n{0~R{{Y7M?k*#O`{8yLGiQT?QX)_<>9w$Afj z-OTq68G%bLc+K}Ocg${{2*$aOJ>IP0bedB-?M8;UbI}tXV+b1%zQ!CafIkI7BJ6pl z6S}MeE#wL8y2i;E=TcZsmu&oc9~hNc<+l5hMX~)Br-q+k`<~eYQC9+c_itZK_mT1`9Eg?V^M|f)2>oK6dsaZcO>O0lq!r%V3YY7Lpub1<&{eER)N5&aruF^s9c6x zyVmQ90dOx7H=y=HEUvc!t`ho9N8r;ExK{@^@E)pZvr$6KiH4-6nsf0es_0COZvtD` z)l-kuR*PE3iGh7$*d+~~x|_n(^+#i=Xm^B|=gJ)77d1N-|I2=Yzl~K5K}H7 zUG8+_%=iBi+BuDfAQY+IrixTW&%tM4*EMmkXu?49fW1nM*Iqy(yPP;2qu6ECO|10Q z^Lr(1d~y|jzgxd8K|m!-qfIIUPzP3Hdx1<|k{Yz6_O1%_TdhyN`J`T~LInpPBx=q? z7vs@L1IZTY0eH^zGK>{xN|p-nFxMYeKPon(C4qHw%N}0%S0%#>C>h&nGc1?^z>10c zEl(x`+X-^)<8ovKfSFFI1s@JB92QiHlxNSta)F>iZ$@1ug5e-&6rAuMmT&p&ADAX! zxJG6*(F~PG0v~4!U?LOHWhC*RQ%#UqAci|7Ob_ig7wt0Qh3uSgHg92-b%Q zgK*pdPDwnjE<1qNAnS0Axp3oj$|?ZoRnZZ0KH#4Ju!ixkXEK=cZiQ&e3s}(Q*p~$m zRiq_F@Zkds 0 %} -
- - - - - - - - {% for link in links %} - - - - {% endfor %} - -
{{ _x('plugin_info', 'Jamf plugin', 'jamf') }}
- {{ link.name }} -
-
-{% else %} -
-