gosa-plugin-opsi-2.7.4/0000755000175000017500000000000011752422560013721 5ustar cajuscajusgosa-plugin-opsi-2.7.4/html/0000755000175000017500000000000011752422560014665 5ustar cajuscajusgosa-plugin-opsi-2.7.4/html/images/0000755000175000017500000000000011752422560016132 5ustar cajuscajusgosa-plugin-opsi-2.7.4/html/images/product.png0000644000175000017500000000112311054733222020310 0ustar cajuscajusPNG  IHDRVΎWgAMA abKGD pHYs  ~tIME   A IDATx1A ll2)N X)>"7IU:QoUYD9ŝ${ 1 ط緳!0>1pGBBB *Of!xqy{{{lp849g4Ecv:HUU]~/3uzU'߿hEj>Pz׼ck<@~yHta*wr,9汔8|[@*«޼jPup4'O+9iYju;PDU]9l& ~DJUL .YaZKݦhQ.dYF c&ɢ<OӅֿ7Zkk-YQ0c/e%I|oT S*tW HBi)oDXNc'IENDB`gosa-plugin-opsi-2.7.4/html/images/opsi.png0000644000175000017500000000441511054733222017611 0ustar cajuscajusPNG  IHDR00WsBIT|d pHYs11(RtEXtSoftwarewww.inkscape.org<IDATxZOlWڻ뵝FT.J)TB R"(WT@o ( 6'C/ ThR\;׻]>7o*PT/yo{/UZk<7rJ)S ȔH҇h62)sLqϮyB>O333455E)ݻty(X:A@Z*m^tJmoo\{a͹/qLΞ=Kn*)m͕xi`Er=|29sz>azZYasbbVWWinnz"B"#B$- 6`8drfQހ['OL@AWxQ?3toDt.wW9nqqGU ,}v[~D1x&NJ^'D<.ر$vFlq%j Rb<9k-X֊IqOx:q^IQY/%FU,<ˆ $M0x$`#C=Ysg=9*L@++o11l ?@lނՉ+c^B$V֏^@+9?BcFZBVHf̒cJ%317AE_[_ ,2-QI {Nqʒƚ2:zz'kfg aa q +'VkcjqC!XYU(nralPnfJ&|Pڑ 6qx68'FkL zN dN`9q!LC=Bjc r>zq =GҠ LV۽ q1k~St\FjyFdfU̺XO<%D׎ckY W!dVt+:ㅤIHaV 'l:fj'xģĊI";Vei]AXJ=%p<دPP_XXMX НX1*e;%BHKKK4;;Kf=0-lmrܧAw=X~Au˨Z]d%p듬l@#>% T! g4:^jT"PrB2U)Fw^Zߡvsdz kd7O>}vK1N(y}VBBGHe!zd&i2o$O#a_>ipmg>c;2e%=I&ޢ~ا?x=ױ ݹsOH.^:Sod;wæ8Ud=#* z =ܲ =Ы wyYALn+CZG4Gn݊q 䄍-Z,\:n΅ ƞR -..!f@NBC (= ۷ơfRS$p׸k*LQ(r ?q cs,|J̇j7o|v}cc=}![eލv?Q^W---ƹ w^gJ׾Uyk׾KV6V9u¼?WS33!?:еjv[GF75:A7@ܯժwW&`$|-H b&C0/9B@d^ZWVVʈs[[_Z_XM_OyW=٩&”[icGłԄHyoU2p٦EȂ58%pJs }C28IENDB`gosa-plugin-opsi-2.7.4/html/images/netboot_package.png0000644000175000017500000000626111056764042021773 0ustar cajuscajusPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڜjQ|Ȉ0mjЭ]t3$-teyKfG)3t"1Cs.Du{D^o{y]V:@@dЯJ)D.FJ2̛i, qq3l!|> 8x aܞAF#޼}3g+A&pprpB^t:e|;?' v &ym?9tʓ=3iZR)"p8LDL&C4e6H&XyIyP ضM:P(8x[Vl|>Oݦ2T*t]TU|g6!"Ern\.S*X.(4P(eY8mD"eYaGZuDh4z;}~4zǙIENDB`gosa-plugin-opsi-2.7.4/html/images/local_package.png0000644000175000017500000000637511056764042021421 0ustar cajuscajusPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڜOKQyF D ?BEB "h1ҢMA-zm]EHA`h ͊҅ݜ9GT?X, ~)&I "HZ[P@=>.cT[jͻl@d%:+3ja]`"nM_d|jLEϽZ5lǓ8e6}JG>yK'YIcTlW=V-}3Wb)_D$8_&z n5qr/D]>Ĺ~B[0&l;~cOB%IZ34D1V,xH`(ɁH=0z68_yDIENDB`gosa-plugin-opsi-2.7.4/html/images/plugin.png0000644000175000017500000001155511261072215020136 0ustar cajuscajusPNG  IHDR00W EiCCPICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧ5bKGD pHYs  tIME  ʿIDAThil\7,qH$%)mPPj)m*ZZ*6HPM?t aQ [qY<3{DH9_ޛ7{{r|Iډ(-I"x1^ pr pGZ㽙3OD|ͬ :6P]|0|fҠP#VG;HzoIBd+p="ph Kűz` X+y-SNJ:Ff5$ѓ/>|c~H"±FB r3pw%3K۔c6MuamG۪w]\ر)uʏ_-h[.C[Zכz\ e Ʊ-B>fևX0c {7;J@"'޿3jޕTn]{r6v*+Pp1%Ÿޤ;2El[$bM3h9i2J}-ur&j]!RJ.;29zTzy\8*=vX6aU$b6Ui'0o]qSD.3c[YT"Je ؖϱmMÔg2?_4!oݦh-P|#n ,R=S߀ jyMjP0.PQS(yCEK],3ޭW'o~WRzs\6G0BFVeha[#)Eh9`)zEf7iRqPhbE-o_~I<Xk':+t z(cdyxe%vUi@)UXbGo~ĻӸf{&G8D(]JiAG[`x&%?B0sLeM.O;7yVSF쉈xOԩ5LhZ eyq{]tYu rAKC8olT(M;/.v]hډ^f̑ZZK(mf/-Dme;ws ;"',S> F\-<͚M; ;HĶT(pqu7u@ډVMfGT~ 1> :J)P({ l?<"Pܶ0K 0Pve3ǺD,'ԠȍLB./:PiJԡZ;Gf*ݛTfQj1GqSX@?ۖrs度[ɗ h3&j}lݯM (uXg>myW^fe{̮iBm) eMoDyegJw>@u +/J ZA2%HcmîVBZR|(呍͈\Ā%cV$QO@?;9Y? U5x O 9!'hcsIENDB`gosa-plugin-opsi-2.7.4/html/images/software_info.png0000644000175000017500000000124311054734441021504 0ustar cajuscajusPNG  IHDRabKGD pHYs  d_tIME &(2*0IDATx=Lq]+M TzmTbR`(!!02982888Hd1܌F ba)QN g%'%(GG-*s څ˳cn&8K+1%6(*+Pzd߾8_yߧ G}dX,L=\Ja2RZ!nu_?(z+b4[O ԿouJ]q:1e– |'hw=`v)#24LaT\A2e ?T:ُVJA*]C8M;C޸vhxUάlHf vwi湔!w!atNs7/Ab:V H@!ݼIsQOdw` Z,ּDQ[¾p3xZg= $cj!]L~UM4wynL 0?Fh&VP|6_t&)[9Y.:{7:?=e aOIENDB`gosa-plugin-opsi-2.7.4/html/images/client_generic.png0000644000175000017500000000136111054733222021606 0ustar cajuscajusPNG  IHDRagAMA7IDATx}KSqƟםM7]n6'bhP # @z 01 "*owы`Ė\Uwί+E{<|>_`琊7&h1[}G.ޝ>y֋,^6X8p\cS+.3KB?ݦjkwHS,:":,X⫛?m奚VeeIe DyG0nu+=@AHuBqta  A\᷊܏% 31D=7׷}^RUe H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧ5bKGD pHYs  tIME  3IDAT8͓Kq_>k$ Ҳ<ԊF 2Зg.Q%Tץr.ꡈsĢ`Eda_ *P˛7 6@;:nKQ75=G`jw&Z<pX?&" IENDB`gosa-plugin-opsi-2.7.4/html/images/hardware_info.png0000644000175000017500000000155711054733222021453 0ustar cajuscajusPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% X.?0Dgïen|%20}Çocg8wn@d`óg?'h: ncSAQUAXVJ^a߿uA@5HPZCK_NAw?b󛁁Ve Xxygij%++ 01332* $?Al VRL[N=߿U"//&U@P/a X@/߲ _0\u( ff!,@< >@ @LxQɰ*ELP42A430 30(H ՍS_72|'W 6B A~ X޼9y20| Жw1t6׮|gXbד5yZbۯKW]LYCO{_! }G~1lް=xP+3Zwlkڦl9 ;6zaݴYߏH@ym~e&Bv~q%7nlx zf LedܹeBߙS{?}zyϟObHiv0'3/rIENDB`gosa-plugin-opsi-2.7.4/doc/0000755000175000017500000000000011752422560014466 5ustar cajuscajusgosa-plugin-opsi-2.7.4/plugin.dsc0000644000175000017500000000044411336200072015702 0ustar cajuscajus[gosa-plugin] name = opsi description = "opsi plugin for managing system deployment" version = 2.6.8 author = "Fabian Hickert " maintainer = "GOsa packages maintainers group " homepage = https://oss.gonicus.de/labs/gosa/ depends = goto,fai gosa-plugin-opsi-2.7.4/locale/0000755000175000017500000000000011752422560015160 5ustar cajuscajusgosa-plugin-opsi-2.7.4/locale/pt_BR/0000755000175000017500000000000011752422560016166 5ustar cajuscajusgosa-plugin-opsi-2.7.4/locale/pt_BR/LC_MESSAGES/0000755000175000017500000000000011752422560017753 5ustar cajuscajusgosa-plugin-opsi-2.7.4/locale/pt_BR/LC_MESSAGES/messages.po0000644000175000017500000003514111475426262022133 0ustar cajuscajus# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: GOsa plugins - opsi\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-04 15:24+0100\n" "PO-Revision-Date: 2010-03-11 21:05-0300\n" "Last-Translator: Marcos Amorim \n" "Language-Team: Marcos Amorim Clever de Oliveira " "\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Portuguese\n" "X-Poedit-Country: BRAZIL\n" #: admin/opsi/properties.tpl:2 #, fuzzy msgid "OPSI product properties" msgstr "Editar propriedades do posix" #: admin/opsi/properties.tpl:6 msgid "This OPSI product has no options." msgstr "" #: admin/opsi/properties.tpl:9 admin/opsi/generic.tpl:84 #, fuzzy msgid "Package settings" msgstr "Configurações do Samba" #: admin/opsi/generic.tpl:2 admin/opsi/generic.tpl:11 #, fuzzy msgid "OPSI host" msgstr "Período de notificação de host" #: admin/opsi/generic.tpl:7 admin/opsi/opsiware.tpl:7 #: admin/opsiLicenses/licenseUsage.tpl:5 #: admin/opsiLicenses/licenseUsageByHost.tpl:5 #: admin/opsiLicenses/licenseByProduct.tpl:5 #: admin/opsiLicenses/licenseGeneric.tpl:6 #: admin/opsiLicenses/licensePoolGeneric.tpl:6 msgid "Retry" msgstr "" #: admin/opsi/generic.tpl:14 admin/opsi/generic.tpl:60 #: admin/opsi/class_opsigeneric.inc:747 #: admin/opsiLicenses/class_licenseGeneric.inc:280 #: admin/opsiLicenses/licensePoolGeneric.tpl:17 #, fuzzy msgid "Generic" msgstr "Geral" #: admin/opsi/generic.tpl:18 admin/opsi/generic.tpl:29 #: admin/opsi/class_opsigeneric.inc:91 admin/opsi/class_opsigeneric.inc:102 #: admin/opsi/class_opsigeneric.inc:251 admin/opsi/class_opsigeneric.inc:256 #: admin/opsi/class_opsigeneric.inc:259 admin/opsi/class_opsigeneric.inc:756 #: admin/opsiLicenses/class_licenseGeneric.inc:242 #: admin/opsiLicenses/class_licenseGeneric.inc:288 #: admin/opsiLicenses/opsiLicense-list.xml:41 #: admin/opsiLicenses/class_licensePoolGeneric.inc:525 #: admin/opsiLicenses/licenseGeneric.tpl:21 #: admin/opsiLicenses/licensePoolGeneric.tpl:20 #, fuzzy msgid "Name" msgstr "Nome" #: admin/opsi/generic.tpl:39 admin/opsi/class_opsigeneric.inc:760 #, fuzzy msgid "Net boot product" msgstr "Product-ID" #: admin/opsi/generic.tpl:51 #, fuzzy msgid "Configure product" msgstr "Product-ID" #: admin/opsi/generic.tpl:62 admin/opsi/class_opsigeneric.inc:91 #: admin/opsi/class_opsigeneric.inc:102 admin/opsi/class_opsigeneric.inc:758 #: admin/opsiLicenses/class_licenseGeneric.inc:299 #: admin/opsiLicenses/opsiLicense-list.xml:49 #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 #: admin/opsiLicenses/class_licensePoolGeneric.inc:526 #: admin/opsiLicenses/licenseGeneric.tpl:45 #: admin/opsiLicenses/licensePoolGeneric.tpl:32 #, fuzzy msgid "Description" msgstr "Descrição" #: admin/opsi/generic.tpl:70 #, fuzzy msgid "Notes" msgstr "Notas" #: admin/opsi/generic.tpl:87 #, fuzzy msgid "Installed products" msgstr "não instalado" #: admin/opsi/generic.tpl:93 #, fuzzy msgid "Available products" msgstr "Membros disponíveis" #: admin/opsi/generic.tpl:105 admin/opsi/class_opsigeneric.inc:762 #, fuzzy msgid "Action" msgstr "Ação" #: admin/opsi/generic.tpl:109 msgid "Reinstall" msgstr "" #: admin/opsi/generic.tpl:111 #, fuzzy msgid "Install" msgstr "Reinstalar" #: admin/opsi/generic.tpl:113 #, fuzzy msgid "Wake" msgstr "Ilha de Wake" #: admin/opsi/generic.tpl:117 #, fuzzy msgid "Execute" msgstr "Executar:" #: admin/opsi/class_opsi.inc:74 admin/opsi/class_opsigeneric.inc:753 msgid "Opsi" msgstr "" #: admin/opsi/class_opsi.inc:74 #, php-format msgid "More than one Opsi server were found, using the first result '%s'." msgstr "" #: admin/opsi/class_opsi.inc:150 #, fuzzy msgid "Service infrastructure" msgstr "Erro de infraestrutura" #: admin/opsi/class_opsigeneric.inc:257 msgid "The field 'Name' must contain a domain part!" msgstr "" #: admin/opsi/class_opsigeneric.inc:265 admin/opsi/class_opsigeneric.inc:757 #, fuzzy msgid "MAC address" msgstr "Endereço MAC" #: admin/opsi/class_opsigeneric.inc:306 admin/opsi/class_opsigeneric.inc:307 #: admin/opsi/class_opsigeneric.inc:309 admin/opsi/class_opsigeneric.inc:310 msgid "OPSI" msgstr "" #: admin/opsi/class_opsigeneric.inc:410 admin/opsi/class_opsigeneric.inc:423 #: admin/opsi/class_opsigeneric.inc:447 admin/opsi/class_opsigeneric.inc:458 #: admin/opsi/class_opsigeneric.inc:464 admin/opsi/class_opsigeneric.inc:481 #: admin/opsi/class_opsigeneric.inc:499 admin/opsi/class_opsigeneric.inc:505 #: admin/opsi/class_opsigeneric.inc:534 admin/opsi/class_opsigeneric.inc:574 #: admin/opsi/class_opsigeneric.inc:721 #: admin/opsiLicenses/class_licenseUsage.inc:76 #: admin/opsiLicenses/class_licenseUsageByHost.inc:91 #: admin/opsiLicenses/class_licenseUsageByHost.inc:100 #: admin/opsiLicenses/class_licenseUsageByHost.inc:113 #: admin/opsiLicenses/class_licenseUsageByHost.inc:240 #: admin/opsiLicenses/class_licenseUsageByHost.inc:247 #: admin/opsiLicenses/class_licensePoolGeneric.inc:107 #: admin/opsiLicenses/class_licensePoolGeneric.inc:117 #: admin/opsiLicenses/class_licensePoolGeneric.inc:130 #: admin/opsiLicenses/class_licensePoolGeneric.inc:412 #: admin/opsiLicenses/class_licensePoolGeneric.inc:438 #: admin/opsiLicenses/class_licensePoolGeneric.inc:452 #: admin/opsiLicenses/class_licensePoolGeneric.inc:473 #: admin/opsiLicenses/class_licensePoolGeneric.inc:500 #: admin/opsiLicenses/class_filterOpsiLicense.inc:45 #: admin/opsiLicenses/class_licenseByProduct.inc:78 #, fuzzy msgid "Error" msgstr "Erro" #: admin/opsi/class_opsigeneric.inc:748 #, fuzzy msgid "OPSI generic" msgstr "Editar propriedade gerais" #: admin/opsi/class_opsigeneric.inc:759 #, fuzzy msgid "Note" msgstr "Nota, selecionando %s ao invés de %s\n" #: admin/opsi/class_opsigeneric.inc:761 #, fuzzy msgid "Local boot product" msgstr "Product-ID" #: admin/opsi/opsiware.tpl:4 #, fuzzy msgid "Information" msgstr "Informação" #: admin/opsi/opsiware.tpl:11 #, fuzzy msgid "Hardware information" msgstr "Informação de conexão" #: admin/opsi/opsiware.tpl:14 #, fuzzy msgid "Software information" msgstr "Informação de conexão" #: admin/opsi/opsiware.tpl:19 #, fuzzy msgid "Device" msgstr "Dispositivo" #: admin/opsi/class_opsiProperties.inc:113 msgid "Products" msgstr "" #: admin/opsi/class_opsiProperties.inc:114 #, fuzzy msgid "Product properties" msgstr "Editar propriedades" #: admin/opsiLicenses/licenseUsage.tpl:4 #: admin/opsiLicenses/licenseUsageByHost.tpl:4 #: admin/opsiLicenses/licenseByProduct.tpl:4 #: admin/opsiLicenses/licenseGeneric.tpl:5 #: admin/opsiLicenses/licensePoolGeneric.tpl:5 msgid "Check if the GOsa support daemon (gosa-si) is running." msgstr "" #: admin/opsiLicenses/licenseUsage.tpl:12 #: admin/opsiLicenses/class_licenseUsage.inc:160 #: admin/opsiLicenses/class_licenseUsage.inc:161 #: admin/opsiLicenses/licenseUsageByHost.tpl:12 #: admin/opsiLicenses/licenseByProduct.tpl:12 #, fuzzy msgid "License usage" msgstr "Uso da quota" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Host" msgstr "" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Key" msgstr "" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Pool" msgstr "" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/opsiLicense-list.xml:15 #: admin/opsiLicenses/opsiLicense-list.xml:74 #: admin/opsiLicenses/licenseGeneric.tpl:11 #: admin/opsiLicenses/class_licenseByProduct.inc:58 #, fuzzy msgid "License" msgstr "Lincença" #: admin/opsiLicenses/class_licenseGeneric.inc:132 #: admin/opsiLicenses/class_licensePoolGeneric.inc:279 msgid "Retail" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:133 #: admin/opsiLicenses/class_licensePoolGeneric.inc:278 msgid "OEM" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:134 #, fuzzy msgid "Volume" msgstr "Volume" #: admin/opsiLicenses/class_licenseGeneric.inc:230 #: admin/opsiLicenses/class_licenseGeneric.inc:234 #: admin/opsiLicenses/class_licenseGeneric.inc:238 #: admin/opsiLicenses/class_licenseGeneric.inc:298 #: admin/opsiLicenses/licenseGeneric.tpl:103 #, fuzzy msgid "Expiration date" msgstr "Data de nascimento" #: admin/opsiLicenses/class_licenseGeneric.inc:246 #: admin/opsiLicenses/class_licenseGeneric.inc:290 #: admin/opsiLicenses/licenseGeneric.tpl:166 #, fuzzy msgid "License key" msgstr "Capturar tecla" #: admin/opsiLicenses/class_licenseGeneric.inc:281 #, fuzzy msgid "License generic" msgstr "Editar propriedade gerais" #: admin/opsiLicenses/class_licenseGeneric.inc:289 #: admin/opsiLicenses/licenseGeneric.tpl:35 msgid "Partner" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:291 #: admin/opsiLicenses/licenseGeneric.tpl:55 #, fuzzy msgid "License model" msgstr "Inserir Advertência de Licença _BSD" #: admin/opsiLicenses/class_licenseGeneric.inc:292 #, fuzzy msgid "License pool id" msgstr "Editar propriedade gerais" #: admin/opsiLicenses/class_licenseGeneric.inc:293 #: admin/opsiLicenses/licenseGeneric.tpl:177 #, fuzzy msgid "Maximum installations" msgstr "Pós-processamento Máximo" #: admin/opsiLicenses/class_licenseGeneric.inc:294 #, fuzzy msgid "Reserved for host" msgstr "Procurar por" #: admin/opsiLicenses/class_licenseGeneric.inc:295 msgid "Usage" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:296 #: admin/opsiLicenses/licenseGeneric.tpl:128 #, fuzzy msgid "Notification date" msgstr "Data de nascimento" #: admin/opsiLicenses/class_licenseGeneric.inc:297 #: admin/opsiLicenses/licenseGeneric.tpl:78 #, fuzzy msgid "Conclusion date" msgstr "Data de nascimento" #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #, fuzzy msgid "License ID" msgstr "Lincença" #: admin/opsiLicenses/class_licenseUsageByHost.inc:259 #, fuzzy msgid "Usage by host" msgstr "Restringir uso do proxy por quota" #: admin/opsiLicenses/class_licenseUsageByHost.inc:260 #, fuzzy msgid "License usage by host" msgstr "Restringir uso do proxy por quota" #: admin/opsiLicenses/class_licenseUsageByHost.inc:267 #: admin/opsiLicenses/licenseGeneric.tpl:205 #, fuzzy msgid "Used by" msgstr "criado por" #: admin/opsiLicenses/class_licenseUsageByHost.inc:268 #, fuzzy msgid "License reservation" msgstr "Inserir Advertência de Licença _BSD" #: admin/opsiLicenses/opsiLicense-list.xml:11 #, fuzzy msgid "List of license pools" msgstr "Lista de recipientes de mensagens" #: admin/opsiLicenses/opsiLicense-list.xml:57 #, fuzzy msgid "Actions" msgstr "Ações" #: admin/opsiLicenses/opsiLicense-list.xml:68 #, fuzzy msgid "Create" msgstr "Criar" #: admin/opsiLicenses/opsiLicense-list.xml:86 #, fuzzy msgid "Edit" msgstr "Editar" #: admin/opsiLicenses/opsiLicense-list.xml:93 #, fuzzy msgid "Remove" msgstr "Remover" #: admin/opsiLicenses/opsiLicense-list.xml:108 #, fuzzy msgid "Edit license" msgstr "Editar de qualquer maneira" #: admin/opsiLicenses/opsiLicense-list.xml:116 #, fuzzy msgid "Remove license" msgstr "Remover objetos" #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 #, fuzzy msgid "Section" msgstr "Ações" #: admin/opsiLicenses/class_licensePoolGeneric.inc:271 msgid "unlimited" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:277 #, fuzzy, php-format msgid "Volume license (#%s)" msgstr "Volume 100%" #: admin/opsiLicenses/class_licensePoolGeneric.inc:280 msgid "Concurrent" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:517 #, fuzzy msgid "Pool generic" msgstr "Editar propriedade gerais" #: admin/opsiLicenses/class_licensePoolGeneric.inc:518 #, fuzzy msgid "License pool generic" msgstr "Editar propriedade gerais" #: admin/opsiLicenses/class_licensePoolGeneric.inc:527 #: admin/opsiLicenses/licensePoolGeneric.tpl:58 #, fuzzy msgid "Applications" msgstr "Aplicações" #: admin/opsiLicenses/class_licensePoolGeneric.inc:528 #: admin/opsiLicenses/licensePoolGeneric.tpl:79 #, fuzzy msgid "Windows software IDs" msgstr "grupo de estações windows" #: admin/opsiLicenses/class_licensePoolGeneric.inc:529 #: admin/opsiLicenses/licensePoolGeneric.tpl:43 msgid "Licenses" msgstr "" #: admin/opsiLicenses/licenseUsageByHost.tpl:14 #: admin/opsiLicenses/licenseGeneric.tpl:189 #, fuzzy msgid "Reserved for" msgstr "Procurar por" #: admin/opsiLicenses/licenseUsageByHost.tpl:28 #, fuzzy msgid "Licenses used" msgstr "Pacotes usados" #: admin/opsiLicenses/class_opsiLicenses.inc:25 msgid "Software licenses" msgstr "" #: admin/opsiLicenses/class_opsiLicenses.inc:26 msgid "Manage software licenses for Windows system deployments" msgstr "" #: admin/opsiLicenses/licenseGeneric.tpl:13 #, fuzzy msgid "License settings" msgstr "Configurações do usuário" #: admin/opsiLicenses/licenseGeneric.tpl:18 #: admin/opsiLicenses/licensePoolGeneric.tpl:18 #, fuzzy msgid "Generic settings" msgstr "Configurações gerais do usuário" #: admin/opsiLicenses/licenseGeneric.tpl:75 #, fuzzy msgid "Additional settings" msgstr "Outras configurações do GOsa" #: admin/opsiLicenses/licenseGeneric.tpl:158 #: admin/opsiLicenses/licenseGeneric.tpl:160 #: admin/opsiLicenses/licenseGeneric.tpl:163 #, fuzzy msgid "License key settings" msgstr "Inserir Advertência de Licença _BSD" #: admin/opsiLicenses/licenseGeneric.tpl:194 #, fuzzy msgid "none" msgstr "nenhum" #: admin/opsiLicenses/class_licenseByProduct.inc:149 #, fuzzy msgid "Usage by product" msgstr "Restringir uso do proxy por quota" #: admin/opsiLicenses/class_licenseByProduct.inc:150 #, fuzzy msgid "License usage by product" msgstr "Restringir uso do proxy por quota" #: admin/opsiLicenses/licensePoolGeneric.tpl:12 #, fuzzy msgid "Lincense settings" msgstr "Configurações do usuário" #: admin/opsiLicenses/opsiLicense-filter.xml:18 #, fuzzy msgid "Default filter" msgstr "Aplicar filtro" #: admin/opsiLicenses/opsiLicense-filter.xml:33 #, fuzzy msgid "By product" msgstr "Product-ID" #, fuzzy #~ msgid "Warning" #~ msgstr "Aviso" #, fuzzy #~ msgid "" #~ "Please double check if you really want to do this since there is no way " #~ "for GOsa to get your data back." #~ msgstr "" #~ "Por favor, verifique se você realmente quer fazer isso já que não há " #~ "caminho para GOsa para obter seus dados de volta." #, fuzzy #~ msgid "" #~ "So - if you're sure - press 'Delete' to continue or 'Cancel' to abort." #~ msgstr "" #~ "Portanto - se você está certo - pressione 'Excluir' para continuar ou " #~ "\"Cancelar\" para abortar." #, fuzzy #~ msgid "Filter" #~ msgstr "Filtro" gosa-plugin-opsi-2.7.4/locale/de/0000755000175000017500000000000011752422560015550 5ustar cajuscajusgosa-plugin-opsi-2.7.4/locale/de/LC_MESSAGES/0000755000175000017500000000000011752422560017335 5ustar cajuscajusgosa-plugin-opsi-2.7.4/locale/de/LC_MESSAGES/messages.po0000644000175000017500000003342511511625777021523 0ustar cajuscajus# translation of messages.po to deutsch # translation of messages.po to # GOsa2 Translations # Copyright (C) 2003 GONICUS GmbH, Germany # This file is distributed under the same license as the GOsa2 package. # # # Alfred Schroeder , 2004. # Cajus Pollmeier , 2004, 2005, 2006, 2008, 2009. # Jan Wenzel , 2004,2005, 2008. # Stefan Koehler , 2005. msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-04 15:24+0100\n" "PO-Revision-Date: 2010-09-17 10:24+0100\n" "Last-Translator: Fabian Hickert \n" "Language-Team: de \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: admin/opsi/properties.tpl:2 msgid "OPSI product properties" msgstr "OPSI Produkteigenschaften" #: admin/opsi/properties.tpl:6 msgid "This OPSI product has no options." msgstr "Dieses OPSI Produkt hat keine Optionen." #: admin/opsi/properties.tpl:9 admin/opsi/generic.tpl:84 msgid "Package settings" msgstr "Paket-Einstellungen" #: admin/opsi/generic.tpl:2 admin/opsi/generic.tpl:11 msgid "OPSI host" msgstr "OPSI-Client" #: admin/opsi/generic.tpl:7 admin/opsi/opsiware.tpl:7 #: admin/opsiLicenses/licenseUsage.tpl:5 #: admin/opsiLicenses/licenseUsageByHost.tpl:5 #: admin/opsiLicenses/licenseByProduct.tpl:5 #: admin/opsiLicenses/licenseGeneric.tpl:6 #: admin/opsiLicenses/licensePoolGeneric.tpl:6 msgid "Retry" msgstr "Wiederholen" #: admin/opsi/generic.tpl:14 admin/opsi/generic.tpl:60 #: admin/opsi/class_opsigeneric.inc:747 #: admin/opsiLicenses/class_licenseGeneric.inc:280 #: admin/opsiLicenses/licensePoolGeneric.tpl:17 msgid "Generic" msgstr "Allgemein" #: admin/opsi/generic.tpl:18 admin/opsi/generic.tpl:29 #: admin/opsi/class_opsigeneric.inc:91 admin/opsi/class_opsigeneric.inc:102 #: admin/opsi/class_opsigeneric.inc:251 admin/opsi/class_opsigeneric.inc:256 #: admin/opsi/class_opsigeneric.inc:259 admin/opsi/class_opsigeneric.inc:756 #: admin/opsiLicenses/class_licenseGeneric.inc:242 #: admin/opsiLicenses/class_licenseGeneric.inc:288 #: admin/opsiLicenses/opsiLicense-list.xml:41 #: admin/opsiLicenses/class_licensePoolGeneric.inc:525 #: admin/opsiLicenses/licenseGeneric.tpl:21 #: admin/opsiLicenses/licensePoolGeneric.tpl:20 msgid "Name" msgstr "Name" #: admin/opsi/generic.tpl:39 admin/opsi/class_opsigeneric.inc:760 msgid "Net boot product" msgstr "Netboot-Produkt" #: admin/opsi/generic.tpl:51 msgid "Configure product" msgstr "Produkt bearbeiten" #: admin/opsi/generic.tpl:62 admin/opsi/class_opsigeneric.inc:91 #: admin/opsi/class_opsigeneric.inc:102 admin/opsi/class_opsigeneric.inc:758 #: admin/opsiLicenses/class_licenseGeneric.inc:299 #: admin/opsiLicenses/opsiLicense-list.xml:49 #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 #: admin/opsiLicenses/class_licensePoolGeneric.inc:526 #: admin/opsiLicenses/licenseGeneric.tpl:45 #: admin/opsiLicenses/licensePoolGeneric.tpl:32 msgid "Description" msgstr "Beschreibung" #: admin/opsi/generic.tpl:70 msgid "Notes" msgstr "Notizen" #: admin/opsi/generic.tpl:87 msgid "Installed products" msgstr "Installierte Produkte" #: admin/opsi/generic.tpl:93 msgid "Available products" msgstr "Verfügbare Produkte" #: admin/opsi/generic.tpl:105 admin/opsi/class_opsigeneric.inc:762 msgid "Action" msgstr "Aktion" #: admin/opsi/generic.tpl:109 msgid "Reinstall" msgstr "Neu-Installation" #: admin/opsi/generic.tpl:111 msgid "Install" msgstr "Installieren" #: admin/opsi/generic.tpl:113 msgid "Wake" msgstr "Aufwecken" #: admin/opsi/generic.tpl:117 msgid "Execute" msgstr "Ausführen" #: admin/opsi/class_opsi.inc:74 admin/opsi/class_opsigeneric.inc:753 msgid "Opsi" msgstr "OPSI" #: admin/opsi/class_opsi.inc:74 #, php-format msgid "More than one Opsi server were found, using the first result '%s'." msgstr "Es ist mehr als ein OPSI server verfügbar, verwende '%s'." #: admin/opsi/class_opsi.inc:150 msgid "Service infrastructure" msgstr "Dienst-Infrastruktur" #: admin/opsi/class_opsigeneric.inc:257 msgid "The field 'Name' must contain a domain part!" msgstr "Das Feld 'Name' muß einen Domänen-Anteil enthalten!" #: admin/opsi/class_opsigeneric.inc:265 admin/opsi/class_opsigeneric.inc:757 msgid "MAC address" msgstr "MAC-Adresse" #: admin/opsi/class_opsigeneric.inc:306 admin/opsi/class_opsigeneric.inc:307 #: admin/opsi/class_opsigeneric.inc:309 admin/opsi/class_opsigeneric.inc:310 msgid "OPSI" msgstr "OPSI" #: admin/opsi/class_opsigeneric.inc:410 admin/opsi/class_opsigeneric.inc:423 #: admin/opsi/class_opsigeneric.inc:447 admin/opsi/class_opsigeneric.inc:458 #: admin/opsi/class_opsigeneric.inc:464 admin/opsi/class_opsigeneric.inc:481 #: admin/opsi/class_opsigeneric.inc:499 admin/opsi/class_opsigeneric.inc:505 #: admin/opsi/class_opsigeneric.inc:534 admin/opsi/class_opsigeneric.inc:574 #: admin/opsi/class_opsigeneric.inc:721 #: admin/opsiLicenses/class_licenseUsage.inc:76 #: admin/opsiLicenses/class_licenseUsageByHost.inc:91 #: admin/opsiLicenses/class_licenseUsageByHost.inc:100 #: admin/opsiLicenses/class_licenseUsageByHost.inc:113 #: admin/opsiLicenses/class_licenseUsageByHost.inc:240 #: admin/opsiLicenses/class_licenseUsageByHost.inc:247 #: admin/opsiLicenses/class_licensePoolGeneric.inc:107 #: admin/opsiLicenses/class_licensePoolGeneric.inc:117 #: admin/opsiLicenses/class_licensePoolGeneric.inc:130 #: admin/opsiLicenses/class_licensePoolGeneric.inc:412 #: admin/opsiLicenses/class_licensePoolGeneric.inc:438 #: admin/opsiLicenses/class_licensePoolGeneric.inc:452 #: admin/opsiLicenses/class_licensePoolGeneric.inc:473 #: admin/opsiLicenses/class_licensePoolGeneric.inc:500 #: admin/opsiLicenses/class_filterOpsiLicense.inc:45 #: admin/opsiLicenses/class_licenseByProduct.inc:78 msgid "Error" msgstr "Fehler" #: admin/opsi/class_opsigeneric.inc:748 msgid "OPSI generic" msgstr "Allgemein" #: admin/opsi/class_opsigeneric.inc:759 msgid "Note" msgstr "Notiz" #: admin/opsi/class_opsigeneric.inc:761 msgid "Local boot product" msgstr "Lokales Produkt" #: admin/opsi/opsiware.tpl:4 msgid "Information" msgstr "Information" #: admin/opsi/opsiware.tpl:11 msgid "Hardware information" msgstr "Hardware-Informationen" #: admin/opsi/opsiware.tpl:14 msgid "Software information" msgstr "Software-Informationen" #: admin/opsi/opsiware.tpl:19 msgid "Device" msgstr "Gerät" #: admin/opsi/class_opsiProperties.inc:113 msgid "Products" msgstr "Produkte" #: admin/opsi/class_opsiProperties.inc:114 msgid "Product properties" msgstr "Produkteigenschaften" #: admin/opsiLicenses/licenseUsage.tpl:4 #: admin/opsiLicenses/licenseUsageByHost.tpl:4 #: admin/opsiLicenses/licenseByProduct.tpl:4 #: admin/opsiLicenses/licenseGeneric.tpl:5 #: admin/opsiLicenses/licensePoolGeneric.tpl:5 msgid "Check if the GOsa support daemon (gosa-si) is running." msgstr "" "Bitte prüfen Sie ob der GOsa-Unterstützungs-Dienst (gosa-si) aktiv ist." #: admin/opsiLicenses/licenseUsage.tpl:12 #: admin/opsiLicenses/class_licenseUsage.inc:160 #: admin/opsiLicenses/class_licenseUsage.inc:161 #: admin/opsiLicenses/licenseUsageByHost.tpl:12 #: admin/opsiLicenses/licenseByProduct.tpl:12 msgid "License usage" msgstr "Lizenznutzung" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Host" msgstr "Host" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Key" msgstr "Schlüssel" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Pool" msgstr "Pool" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/opsiLicense-list.xml:15 #: admin/opsiLicenses/opsiLicense-list.xml:74 #: admin/opsiLicenses/licenseGeneric.tpl:11 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "License" msgstr "Lizenz" #: admin/opsiLicenses/class_licenseGeneric.inc:132 #: admin/opsiLicenses/class_licensePoolGeneric.inc:279 msgid "Retail" msgstr "Retail" #: admin/opsiLicenses/class_licenseGeneric.inc:133 #: admin/opsiLicenses/class_licensePoolGeneric.inc:278 msgid "OEM" msgstr "OEM" #: admin/opsiLicenses/class_licenseGeneric.inc:134 msgid "Volume" msgstr "Volume" #: admin/opsiLicenses/class_licenseGeneric.inc:230 #: admin/opsiLicenses/class_licenseGeneric.inc:234 #: admin/opsiLicenses/class_licenseGeneric.inc:238 #: admin/opsiLicenses/class_licenseGeneric.inc:298 #: admin/opsiLicenses/licenseGeneric.tpl:103 msgid "Expiration date" msgstr "Ablaufdatum" #: admin/opsiLicenses/class_licenseGeneric.inc:246 #: admin/opsiLicenses/class_licenseGeneric.inc:290 #: admin/opsiLicenses/licenseGeneric.tpl:166 msgid "License key" msgstr "Lizenzschlüssel" #: admin/opsiLicenses/class_licenseGeneric.inc:281 msgid "License generic" msgstr "Allgemein" #: admin/opsiLicenses/class_licenseGeneric.inc:289 #: admin/opsiLicenses/licenseGeneric.tpl:35 msgid "Partner" msgstr "Vertragspartner" #: admin/opsiLicenses/class_licenseGeneric.inc:291 #: admin/opsiLicenses/licenseGeneric.tpl:55 msgid "License model" msgstr "Lizenzmodell" #: admin/opsiLicenses/class_licenseGeneric.inc:292 msgid "License pool id" msgstr "Lizenzpool-ID" #: admin/opsiLicenses/class_licenseGeneric.inc:293 #: admin/opsiLicenses/licenseGeneric.tpl:177 msgid "Maximum installations" msgstr "Maximale Installationen" #: admin/opsiLicenses/class_licenseGeneric.inc:294 msgid "Reserved for host" msgstr "Reserviert für" #: admin/opsiLicenses/class_licenseGeneric.inc:295 msgid "Usage" msgstr "Nutzung" #: admin/opsiLicenses/class_licenseGeneric.inc:296 #: admin/opsiLicenses/licenseGeneric.tpl:128 msgid "Notification date" msgstr "Benachrichtigungsdatum" #: admin/opsiLicenses/class_licenseGeneric.inc:297 #: admin/opsiLicenses/licenseGeneric.tpl:78 msgid "Conclusion date" msgstr "Abschlussdatum" #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 msgid "License ID" msgstr "Lizenz-ID" #: admin/opsiLicenses/class_licenseUsageByHost.inc:259 msgid "Usage by host" msgstr "Benutzt von" #: admin/opsiLicenses/class_licenseUsageByHost.inc:260 msgid "License usage by host" msgstr "Lizenznutzung pro Host" #: admin/opsiLicenses/class_licenseUsageByHost.inc:267 #: admin/opsiLicenses/licenseGeneric.tpl:205 msgid "Used by" msgstr "Benutzt von" #: admin/opsiLicenses/class_licenseUsageByHost.inc:268 msgid "License reservation" msgstr "Lizenzreservierung" #: admin/opsiLicenses/opsiLicense-list.xml:11 msgid "List of license pools" msgstr "Liste der Lizenzpools" #: admin/opsiLicenses/opsiLicense-list.xml:57 msgid "Actions" msgstr "Aktionen" #: admin/opsiLicenses/opsiLicense-list.xml:68 msgid "Create" msgstr "Anlegen" #: admin/opsiLicenses/opsiLicense-list.xml:86 msgid "Edit" msgstr "Bearbeiten" #: admin/opsiLicenses/opsiLicense-list.xml:93 msgid "Remove" msgstr "Entfernen" #: admin/opsiLicenses/opsiLicense-list.xml:108 msgid "Edit license" msgstr "Lizenz bearbeiten" #: admin/opsiLicenses/opsiLicense-list.xml:116 msgid "Remove license" msgstr "Lizenz löschen" #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 msgid "Section" msgstr "Sektion" #: admin/opsiLicenses/class_licensePoolGeneric.inc:271 msgid "unlimited" msgstr "unbegrenzt" #: admin/opsiLicenses/class_licensePoolGeneric.inc:277 #, php-format msgid "Volume license (#%s)" msgstr "Volumenlizenz %s" #: admin/opsiLicenses/class_licensePoolGeneric.inc:280 msgid "Concurrent" msgstr "Nebeneinander" #: admin/opsiLicenses/class_licensePoolGeneric.inc:517 msgid "Pool generic" msgstr "Allgemein" #: admin/opsiLicenses/class_licensePoolGeneric.inc:518 msgid "License pool generic" msgstr "Allgemein" #: admin/opsiLicenses/class_licensePoolGeneric.inc:527 #: admin/opsiLicenses/licensePoolGeneric.tpl:58 msgid "Applications" msgstr "Anwendungen" #: admin/opsiLicenses/class_licensePoolGeneric.inc:528 #: admin/opsiLicenses/licensePoolGeneric.tpl:79 msgid "Windows software IDs" msgstr "Windows Software-IDs" #: admin/opsiLicenses/class_licensePoolGeneric.inc:529 #: admin/opsiLicenses/licensePoolGeneric.tpl:43 msgid "Licenses" msgstr "Lizenzen" #: admin/opsiLicenses/licenseUsageByHost.tpl:14 #: admin/opsiLicenses/licenseGeneric.tpl:189 msgid "Reserved for" msgstr "Reserviert für" #: admin/opsiLicenses/licenseUsageByHost.tpl:28 msgid "Licenses used" msgstr "Verwendete Lizenzen" #: admin/opsiLicenses/class_opsiLicenses.inc:25 msgid "Software licenses" msgstr "Softwarelizenzen" #: admin/opsiLicenses/class_opsiLicenses.inc:26 msgid "Manage software licenses for Windows system deployments" msgstr "Software-Lizenzen for Windows basierte Installationen verwalten" #: admin/opsiLicenses/licenseGeneric.tpl:13 msgid "License settings" msgstr "Lizenz-Einstellungen" #: admin/opsiLicenses/licenseGeneric.tpl:18 #: admin/opsiLicenses/licensePoolGeneric.tpl:18 msgid "Generic settings" msgstr "Allgemeine Benutzereinstellungen" #: admin/opsiLicenses/licenseGeneric.tpl:75 msgid "Additional settings" msgstr "Zusätzliche-Einstellungen" #: admin/opsiLicenses/licenseGeneric.tpl:158 #: admin/opsiLicenses/licenseGeneric.tpl:160 #: admin/opsiLicenses/licenseGeneric.tpl:163 msgid "License key settings" msgstr "Lizenz-Schlüssel Einstellungen" #: admin/opsiLicenses/licenseGeneric.tpl:194 msgid "none" msgstr "keine" #: admin/opsiLicenses/class_licenseByProduct.inc:149 msgid "Usage by product" msgstr "Benutzung pro Produkt" #: admin/opsiLicenses/class_licenseByProduct.inc:150 msgid "License usage by product" msgstr "Lizenznutzung pro Produkt" #: admin/opsiLicenses/licensePoolGeneric.tpl:12 msgid "Lincense settings" msgstr "Lizent Einstellungen" #: admin/opsiLicenses/opsiLicense-filter.xml:18 msgid "Default filter" msgstr "Standard-Filter" #: admin/opsiLicenses/opsiLicense-filter.xml:33 msgid "By product" msgstr "Per Produkt" gosa-plugin-opsi-2.7.4/locale/fr/0000755000175000017500000000000011752422560015567 5ustar cajuscajusgosa-plugin-opsi-2.7.4/locale/fr/LC_MESSAGES/0000755000175000017500000000000011752422560017354 5ustar cajuscajusgosa-plugin-opsi-2.7.4/locale/fr/LC_MESSAGES/messages.po0000644000175000017500000003367011475426262021541 0ustar cajuscajus# translation of messages.po to # GOsa2 Translations # Copyright (C) 2003 GONICUS GmbH, Germany # This file is distributed under the same license as the GOsa2 package. # # # Alfred Schroeder , 2004. # Cajus Pollmeier , 2004, 2005, 2006, 2008. # Jan Wenzel , 2004,2005, 2008. # Stefan Koehler , 2005. # Benoit Mortier , 2008, 2009, 2010. msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-04 15:24+0100\n" "PO-Revision-Date: 2010-11-26 23:36+0100\n" "Last-Translator: Benoit Mortier \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: admin/opsi/properties.tpl:2 msgid "OPSI product properties" msgstr "Propriétés des produits OPSI" #: admin/opsi/properties.tpl:6 msgid "This OPSI product has no options." msgstr "Ce produit OPSI n'a pas d'options." #: admin/opsi/properties.tpl:9 admin/opsi/generic.tpl:84 msgid "Package settings" msgstr "Configuration du paquet" #: admin/opsi/generic.tpl:2 admin/opsi/generic.tpl:11 msgid "OPSI host" msgstr "Client OPSI" #: admin/opsi/generic.tpl:7 admin/opsi/opsiware.tpl:7 #: admin/opsiLicenses/licenseUsage.tpl:5 #: admin/opsiLicenses/licenseUsageByHost.tpl:5 #: admin/opsiLicenses/licenseByProduct.tpl:5 #: admin/opsiLicenses/licenseGeneric.tpl:6 #: admin/opsiLicenses/licensePoolGeneric.tpl:6 msgid "Retry" msgstr "Réessayer" #: admin/opsi/generic.tpl:14 admin/opsi/generic.tpl:60 #: admin/opsi/class_opsigeneric.inc:747 #: admin/opsiLicenses/class_licenseGeneric.inc:280 #: admin/opsiLicenses/licensePoolGeneric.tpl:17 msgid "Generic" msgstr "Informations" #: admin/opsi/generic.tpl:18 admin/opsi/generic.tpl:29 #: admin/opsi/class_opsigeneric.inc:91 admin/opsi/class_opsigeneric.inc:102 #: admin/opsi/class_opsigeneric.inc:251 admin/opsi/class_opsigeneric.inc:256 #: admin/opsi/class_opsigeneric.inc:259 admin/opsi/class_opsigeneric.inc:756 #: admin/opsiLicenses/class_licenseGeneric.inc:242 #: admin/opsiLicenses/class_licenseGeneric.inc:288 #: admin/opsiLicenses/opsiLicense-list.xml:41 #: admin/opsiLicenses/class_licensePoolGeneric.inc:525 #: admin/opsiLicenses/licenseGeneric.tpl:21 #: admin/opsiLicenses/licensePoolGeneric.tpl:20 msgid "Name" msgstr "Nom" #: admin/opsi/generic.tpl:39 admin/opsi/class_opsigeneric.inc:760 msgid "Net boot product" msgstr "Produit Netboot" #: admin/opsi/generic.tpl:51 msgid "Configure product" msgstr "Configurer le produit" #: admin/opsi/generic.tpl:62 admin/opsi/class_opsigeneric.inc:91 #: admin/opsi/class_opsigeneric.inc:102 admin/opsi/class_opsigeneric.inc:758 #: admin/opsiLicenses/class_licenseGeneric.inc:299 #: admin/opsiLicenses/opsiLicense-list.xml:49 #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 #: admin/opsiLicenses/class_licensePoolGeneric.inc:526 #: admin/opsiLicenses/licenseGeneric.tpl:45 #: admin/opsiLicenses/licensePoolGeneric.tpl:32 msgid "Description" msgstr "" #: admin/opsi/generic.tpl:70 msgid "Notes" msgstr "" #: admin/opsi/generic.tpl:87 msgid "Installed products" msgstr "Produits installés" #: admin/opsi/generic.tpl:93 msgid "Available products" msgstr "Produits disponibles" #: admin/opsi/generic.tpl:105 admin/opsi/class_opsigeneric.inc:762 #, fuzzy msgid "Action" msgstr "fonction" #: admin/opsi/generic.tpl:109 msgid "Reinstall" msgstr "Réinstaller" #: admin/opsi/generic.tpl:111 msgid "Install" msgstr "Installer" #: admin/opsi/generic.tpl:113 msgid "Wake" msgstr "Réveiller" #: admin/opsi/generic.tpl:117 msgid "Execute" msgstr "Exécuter" #: admin/opsi/class_opsi.inc:74 admin/opsi/class_opsigeneric.inc:753 msgid "Opsi" msgstr "" #: admin/opsi/class_opsi.inc:74 #, php-format msgid "More than one Opsi server were found, using the first result '%s'." msgstr "Plus d'un serveur Opsi on été trouvés, j'utilise le premier '%s'." #: admin/opsi/class_opsi.inc:150 msgid "Service infrastructure" msgstr "Infrastructure de service" #: admin/opsi/class_opsigeneric.inc:257 msgid "The field 'Name' must contain a domain part!" msgstr "Le champ 'nom' doit contenir le nom complet incluant le domaine !" #: admin/opsi/class_opsigeneric.inc:265 admin/opsi/class_opsigeneric.inc:757 msgid "MAC address" msgstr "Adresse MAC" #: admin/opsi/class_opsigeneric.inc:306 admin/opsi/class_opsigeneric.inc:307 #: admin/opsi/class_opsigeneric.inc:309 admin/opsi/class_opsigeneric.inc:310 msgid "OPSI" msgstr "" #: admin/opsi/class_opsigeneric.inc:410 admin/opsi/class_opsigeneric.inc:423 #: admin/opsi/class_opsigeneric.inc:447 admin/opsi/class_opsigeneric.inc:458 #: admin/opsi/class_opsigeneric.inc:464 admin/opsi/class_opsigeneric.inc:481 #: admin/opsi/class_opsigeneric.inc:499 admin/opsi/class_opsigeneric.inc:505 #: admin/opsi/class_opsigeneric.inc:534 admin/opsi/class_opsigeneric.inc:574 #: admin/opsi/class_opsigeneric.inc:721 #: admin/opsiLicenses/class_licenseUsage.inc:76 #: admin/opsiLicenses/class_licenseUsageByHost.inc:91 #: admin/opsiLicenses/class_licenseUsageByHost.inc:100 #: admin/opsiLicenses/class_licenseUsageByHost.inc:113 #: admin/opsiLicenses/class_licenseUsageByHost.inc:240 #: admin/opsiLicenses/class_licenseUsageByHost.inc:247 #: admin/opsiLicenses/class_licensePoolGeneric.inc:107 #: admin/opsiLicenses/class_licensePoolGeneric.inc:117 #: admin/opsiLicenses/class_licensePoolGeneric.inc:130 #: admin/opsiLicenses/class_licensePoolGeneric.inc:412 #: admin/opsiLicenses/class_licensePoolGeneric.inc:438 #: admin/opsiLicenses/class_licensePoolGeneric.inc:452 #: admin/opsiLicenses/class_licensePoolGeneric.inc:473 #: admin/opsiLicenses/class_licensePoolGeneric.inc:500 #: admin/opsiLicenses/class_filterOpsiLicense.inc:45 #: admin/opsiLicenses/class_licenseByProduct.inc:78 msgid "Error" msgstr "Erreur" #: admin/opsi/class_opsigeneric.inc:748 msgid "OPSI generic" msgstr "Informations OPSI" #: admin/opsi/class_opsigeneric.inc:759 msgid "Note" msgstr "" #: admin/opsi/class_opsigeneric.inc:761 msgid "Local boot product" msgstr "Produit localboot" #: admin/opsi/opsiware.tpl:4 msgid "Information" msgstr "Information" #: admin/opsi/opsiware.tpl:11 msgid "Hardware information" msgstr "Information Hardware" #: admin/opsi/opsiware.tpl:14 msgid "Software information" msgstr "Informations Logiciels" #: admin/opsi/opsiware.tpl:19 msgid "Device" msgstr "Périphériques" #: admin/opsi/class_opsiProperties.inc:113 msgid "Products" msgstr "Produits" #: admin/opsi/class_opsiProperties.inc:114 msgid "Product properties" msgstr "Propriétés du produit" #: admin/opsiLicenses/licenseUsage.tpl:4 #: admin/opsiLicenses/licenseUsageByHost.tpl:4 #: admin/opsiLicenses/licenseByProduct.tpl:4 #: admin/opsiLicenses/licenseGeneric.tpl:5 #: admin/opsiLicenses/licensePoolGeneric.tpl:5 msgid "Check if the GOsa support daemon (gosa-si) is running." msgstr "Veuillez vérifier si le service Gosa (gosa-si) fonctionne." #: admin/opsiLicenses/licenseUsage.tpl:12 #: admin/opsiLicenses/class_licenseUsage.inc:160 #: admin/opsiLicenses/class_licenseUsage.inc:161 #: admin/opsiLicenses/licenseUsageByHost.tpl:12 #: admin/opsiLicenses/licenseByProduct.tpl:12 msgid "License usage" msgstr "Utilisation des Licences" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Host" msgstr "Hôte" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Key" msgstr "Clef" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Pool" msgstr "Réservoir" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/opsiLicense-list.xml:15 #: admin/opsiLicenses/opsiLicense-list.xml:74 #: admin/opsiLicenses/licenseGeneric.tpl:11 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "License" msgstr "licence" #: admin/opsiLicenses/class_licenseGeneric.inc:132 #: admin/opsiLicenses/class_licensePoolGeneric.inc:279 msgid "Retail" msgstr "Vente au détail" #: admin/opsiLicenses/class_licenseGeneric.inc:133 #: admin/opsiLicenses/class_licensePoolGeneric.inc:278 msgid "OEM" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:134 msgid "Volume" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:230 #: admin/opsiLicenses/class_licenseGeneric.inc:234 #: admin/opsiLicenses/class_licenseGeneric.inc:238 #: admin/opsiLicenses/class_licenseGeneric.inc:298 #: admin/opsiLicenses/licenseGeneric.tpl:103 msgid "Expiration date" msgstr "Date d'expiration" #: admin/opsiLicenses/class_licenseGeneric.inc:246 #: admin/opsiLicenses/class_licenseGeneric.inc:290 #: admin/opsiLicenses/licenseGeneric.tpl:166 msgid "License key" msgstr "Clef de licence" #: admin/opsiLicenses/class_licenseGeneric.inc:281 msgid "License generic" msgstr "Licence par défaut" #: admin/opsiLicenses/class_licenseGeneric.inc:289 #: admin/opsiLicenses/licenseGeneric.tpl:35 msgid "Partner" msgstr "Partenaire" #: admin/opsiLicenses/class_licenseGeneric.inc:291 #: admin/opsiLicenses/licenseGeneric.tpl:55 msgid "License model" msgstr "Modèle de licence" #: admin/opsiLicenses/class_licenseGeneric.inc:292 msgid "License pool id" msgstr "Réservoir de licences" #: admin/opsiLicenses/class_licenseGeneric.inc:293 #: admin/opsiLicenses/licenseGeneric.tpl:177 msgid "Maximum installations" msgstr "Nombre maximum d'installations" #: admin/opsiLicenses/class_licenseGeneric.inc:294 msgid "Reserved for host" msgstr "Réservé pour l'hôte" #: admin/opsiLicenses/class_licenseGeneric.inc:295 msgid "Usage" msgstr "Utilisation" #: admin/opsiLicenses/class_licenseGeneric.inc:296 #: admin/opsiLicenses/licenseGeneric.tpl:128 msgid "Notification date" msgstr "Date de notification" #: admin/opsiLicenses/class_licenseGeneric.inc:297 #: admin/opsiLicenses/licenseGeneric.tpl:78 msgid "Conclusion date" msgstr "Date de fin" #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 msgid "License ID" msgstr "Numéro de licence" #: admin/opsiLicenses/class_licenseUsageByHost.inc:259 msgid "Usage by host" msgstr "Utilisation par hôte" #: admin/opsiLicenses/class_licenseUsageByHost.inc:260 msgid "License usage by host" msgstr "Utilisation des licences par hôte" #: admin/opsiLicenses/class_licenseUsageByHost.inc:267 #: admin/opsiLicenses/licenseGeneric.tpl:205 msgid "Used by" msgstr "Utilisé par" #: admin/opsiLicenses/class_licenseUsageByHost.inc:268 msgid "License reservation" msgstr "Réservation de licence" #: admin/opsiLicenses/opsiLicense-list.xml:11 msgid "List of license pools" msgstr "Liste des réservoir de licences" #: admin/opsiLicenses/opsiLicense-list.xml:57 msgid "Actions" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:68 msgid "Create" msgstr "Créer" #: admin/opsiLicenses/opsiLicense-list.xml:86 msgid "Edit" msgstr "Editer" #: admin/opsiLicenses/opsiLicense-list.xml:93 msgid "Remove" msgstr "Supprimer" #: admin/opsiLicenses/opsiLicense-list.xml:108 msgid "Edit license" msgstr "Editer la license" #: admin/opsiLicenses/opsiLicense-list.xml:116 msgid "Remove license" msgstr "Suppression de la licence" #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 msgid "Section" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:271 msgid "unlimited" msgstr "illimité" #: admin/opsiLicenses/class_licensePoolGeneric.inc:277 #, php-format msgid "Volume license (#%s)" msgstr "Licence en volume (#%s)" #: admin/opsiLicenses/class_licensePoolGeneric.inc:280 msgid "Concurrent" msgstr "Simultané" #: admin/opsiLicenses/class_licensePoolGeneric.inc:517 msgid "Pool generic" msgstr "Réservoir par défaut" #: admin/opsiLicenses/class_licensePoolGeneric.inc:518 msgid "License pool generic" msgstr "Réservoir de licences par défaut" #: admin/opsiLicenses/class_licensePoolGeneric.inc:527 #: admin/opsiLicenses/licensePoolGeneric.tpl:58 msgid "Applications" msgstr "Applications" #: admin/opsiLicenses/class_licensePoolGeneric.inc:528 #: admin/opsiLicenses/licensePoolGeneric.tpl:79 msgid "Windows software IDs" msgstr "IDs logiciel Windows" #: admin/opsiLicenses/class_licensePoolGeneric.inc:529 #: admin/opsiLicenses/licensePoolGeneric.tpl:43 msgid "Licenses" msgstr "licences" #: admin/opsiLicenses/licenseUsageByHost.tpl:14 #: admin/opsiLicenses/licenseGeneric.tpl:189 msgid "Reserved for" msgstr "Réservé pour" #: admin/opsiLicenses/licenseUsageByHost.tpl:28 msgid "Licenses used" msgstr "Licences utilisées" #: admin/opsiLicenses/class_opsiLicenses.inc:25 msgid "Software licenses" msgstr "Licences logicielles" #: admin/opsiLicenses/class_opsiLicenses.inc:26 msgid "Manage software licenses for Windows system deployments" msgstr "Gère les licences pour les déploiement Windows" #: admin/opsiLicenses/licenseGeneric.tpl:13 msgid "License settings" msgstr "Configuration des licences" #: admin/opsiLicenses/licenseGeneric.tpl:18 #: admin/opsiLicenses/licensePoolGeneric.tpl:18 msgid "Generic settings" msgstr "Paramètres par défaut" #: admin/opsiLicenses/licenseGeneric.tpl:75 msgid "Additional settings" msgstr "Paramètres supplémentaire" #: admin/opsiLicenses/licenseGeneric.tpl:158 #: admin/opsiLicenses/licenseGeneric.tpl:160 #: admin/opsiLicenses/licenseGeneric.tpl:163 msgid "License key settings" msgstr "Paramètres de la clef de licence" #: admin/opsiLicenses/licenseGeneric.tpl:194 msgid "none" msgstr "aucun" #: admin/opsiLicenses/class_licenseByProduct.inc:149 msgid "Usage by product" msgstr "Utilisation par produit" #: admin/opsiLicenses/class_licenseByProduct.inc:150 msgid "License usage by product" msgstr "Utilisation des licences par produit" #: admin/opsiLicenses/licensePoolGeneric.tpl:12 msgid "Lincense settings" msgstr "Configuration des licences" #: admin/opsiLicenses/opsiLicense-filter.xml:18 msgid "Default filter" msgstr "Filtre par défaut" #: admin/opsiLicenses/opsiLicense-filter.xml:33 msgid "By product" msgstr "Par produit" gosa-plugin-opsi-2.7.4/locale/messages.po0000644000175000017500000003012411475426262017334 0ustar cajuscajus# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-04 15:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: admin/opsi/properties.tpl:2 msgid "OPSI product properties" msgstr "" #: admin/opsi/properties.tpl:6 msgid "This OPSI product has no options." msgstr "" #: admin/opsi/properties.tpl:9 admin/opsi/generic.tpl:84 msgid "Package settings" msgstr "" #: admin/opsi/generic.tpl:2 admin/opsi/generic.tpl:11 msgid "OPSI host" msgstr "" #: admin/opsi/generic.tpl:7 admin/opsi/opsiware.tpl:7 #: admin/opsiLicenses/licenseUsage.tpl:5 #: admin/opsiLicenses/licenseUsageByHost.tpl:5 #: admin/opsiLicenses/licenseByProduct.tpl:5 #: admin/opsiLicenses/licenseGeneric.tpl:6 #: admin/opsiLicenses/licensePoolGeneric.tpl:6 msgid "Retry" msgstr "" #: admin/opsi/generic.tpl:14 admin/opsi/generic.tpl:60 #: admin/opsi/class_opsigeneric.inc:747 #: admin/opsiLicenses/class_licenseGeneric.inc:280 #: admin/opsiLicenses/licensePoolGeneric.tpl:17 msgid "Generic" msgstr "" #: admin/opsi/generic.tpl:18 admin/opsi/generic.tpl:29 #: admin/opsi/class_opsigeneric.inc:91 admin/opsi/class_opsigeneric.inc:102 #: admin/opsi/class_opsigeneric.inc:251 admin/opsi/class_opsigeneric.inc:256 #: admin/opsi/class_opsigeneric.inc:259 admin/opsi/class_opsigeneric.inc:756 #: admin/opsiLicenses/class_licenseGeneric.inc:242 #: admin/opsiLicenses/class_licenseGeneric.inc:288 #: admin/opsiLicenses/opsiLicense-list.xml:41 #: admin/opsiLicenses/class_licensePoolGeneric.inc:525 #: admin/opsiLicenses/licenseGeneric.tpl:21 #: admin/opsiLicenses/licensePoolGeneric.tpl:20 msgid "Name" msgstr "" #: admin/opsi/generic.tpl:39 admin/opsi/class_opsigeneric.inc:760 msgid "Net boot product" msgstr "" #: admin/opsi/generic.tpl:51 msgid "Configure product" msgstr "" #: admin/opsi/generic.tpl:62 admin/opsi/class_opsigeneric.inc:91 #: admin/opsi/class_opsigeneric.inc:102 admin/opsi/class_opsigeneric.inc:758 #: admin/opsiLicenses/class_licenseGeneric.inc:299 #: admin/opsiLicenses/opsiLicense-list.xml:49 #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 #: admin/opsiLicenses/class_licensePoolGeneric.inc:526 #: admin/opsiLicenses/licenseGeneric.tpl:45 #: admin/opsiLicenses/licensePoolGeneric.tpl:32 msgid "Description" msgstr "" #: admin/opsi/generic.tpl:70 msgid "Notes" msgstr "" #: admin/opsi/generic.tpl:87 msgid "Installed products" msgstr "" #: admin/opsi/generic.tpl:93 msgid "Available products" msgstr "" #: admin/opsi/generic.tpl:105 admin/opsi/class_opsigeneric.inc:762 msgid "Action" msgstr "" #: admin/opsi/generic.tpl:109 msgid "Reinstall" msgstr "" #: admin/opsi/generic.tpl:111 msgid "Install" msgstr "" #: admin/opsi/generic.tpl:113 msgid "Wake" msgstr "" #: admin/opsi/generic.tpl:117 msgid "Execute" msgstr "" #: admin/opsi/class_opsi.inc:74 admin/opsi/class_opsigeneric.inc:753 msgid "Opsi" msgstr "" #: admin/opsi/class_opsi.inc:74 #, php-format msgid "More than one Opsi server were found, using the first result '%s'." msgstr "" #: admin/opsi/class_opsi.inc:150 msgid "Service infrastructure" msgstr "" #: admin/opsi/class_opsigeneric.inc:257 msgid "The field 'Name' must contain a domain part!" msgstr "" #: admin/opsi/class_opsigeneric.inc:265 admin/opsi/class_opsigeneric.inc:757 msgid "MAC address" msgstr "" #: admin/opsi/class_opsigeneric.inc:306 admin/opsi/class_opsigeneric.inc:307 #: admin/opsi/class_opsigeneric.inc:309 admin/opsi/class_opsigeneric.inc:310 msgid "OPSI" msgstr "" #: admin/opsi/class_opsigeneric.inc:410 admin/opsi/class_opsigeneric.inc:423 #: admin/opsi/class_opsigeneric.inc:447 admin/opsi/class_opsigeneric.inc:458 #: admin/opsi/class_opsigeneric.inc:464 admin/opsi/class_opsigeneric.inc:481 #: admin/opsi/class_opsigeneric.inc:499 admin/opsi/class_opsigeneric.inc:505 #: admin/opsi/class_opsigeneric.inc:534 admin/opsi/class_opsigeneric.inc:574 #: admin/opsi/class_opsigeneric.inc:721 #: admin/opsiLicenses/class_licenseUsage.inc:76 #: admin/opsiLicenses/class_licenseUsageByHost.inc:91 #: admin/opsiLicenses/class_licenseUsageByHost.inc:100 #: admin/opsiLicenses/class_licenseUsageByHost.inc:113 #: admin/opsiLicenses/class_licenseUsageByHost.inc:240 #: admin/opsiLicenses/class_licenseUsageByHost.inc:247 #: admin/opsiLicenses/class_licensePoolGeneric.inc:107 #: admin/opsiLicenses/class_licensePoolGeneric.inc:117 #: admin/opsiLicenses/class_licensePoolGeneric.inc:130 #: admin/opsiLicenses/class_licensePoolGeneric.inc:412 #: admin/opsiLicenses/class_licensePoolGeneric.inc:438 #: admin/opsiLicenses/class_licensePoolGeneric.inc:452 #: admin/opsiLicenses/class_licensePoolGeneric.inc:473 #: admin/opsiLicenses/class_licensePoolGeneric.inc:500 #: admin/opsiLicenses/class_filterOpsiLicense.inc:45 #: admin/opsiLicenses/class_licenseByProduct.inc:78 msgid "Error" msgstr "" #: admin/opsi/class_opsigeneric.inc:748 msgid "OPSI generic" msgstr "" #: admin/opsi/class_opsigeneric.inc:759 msgid "Note" msgstr "" #: admin/opsi/class_opsigeneric.inc:761 msgid "Local boot product" msgstr "" #: admin/opsi/opsiware.tpl:4 msgid "Information" msgstr "" #: admin/opsi/opsiware.tpl:11 msgid "Hardware information" msgstr "" #: admin/opsi/opsiware.tpl:14 msgid "Software information" msgstr "" #: admin/opsi/opsiware.tpl:19 msgid "Device" msgstr "" #: admin/opsi/class_opsiProperties.inc:113 msgid "Products" msgstr "" #: admin/opsi/class_opsiProperties.inc:114 msgid "Product properties" msgstr "" #: admin/opsiLicenses/licenseUsage.tpl:4 #: admin/opsiLicenses/licenseUsageByHost.tpl:4 #: admin/opsiLicenses/licenseByProduct.tpl:4 #: admin/opsiLicenses/licenseGeneric.tpl:5 #: admin/opsiLicenses/licensePoolGeneric.tpl:5 msgid "Check if the GOsa support daemon (gosa-si) is running." msgstr "" #: admin/opsiLicenses/licenseUsage.tpl:12 #: admin/opsiLicenses/class_licenseUsage.inc:160 #: admin/opsiLicenses/class_licenseUsage.inc:161 #: admin/opsiLicenses/licenseUsageByHost.tpl:12 #: admin/opsiLicenses/licenseByProduct.tpl:12 msgid "License usage" msgstr "" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Host" msgstr "" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Key" msgstr "" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "Pool" msgstr "" #: admin/opsiLicenses/class_licenseUsage.inc:56 #: admin/opsiLicenses/opsiLicense-list.xml:15 #: admin/opsiLicenses/opsiLicense-list.xml:74 #: admin/opsiLicenses/licenseGeneric.tpl:11 #: admin/opsiLicenses/class_licenseByProduct.inc:58 msgid "License" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:132 #: admin/opsiLicenses/class_licensePoolGeneric.inc:279 msgid "Retail" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:133 #: admin/opsiLicenses/class_licensePoolGeneric.inc:278 msgid "OEM" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:134 msgid "Volume" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:230 #: admin/opsiLicenses/class_licenseGeneric.inc:234 #: admin/opsiLicenses/class_licenseGeneric.inc:238 #: admin/opsiLicenses/class_licenseGeneric.inc:298 #: admin/opsiLicenses/licenseGeneric.tpl:103 msgid "Expiration date" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:246 #: admin/opsiLicenses/class_licenseGeneric.inc:290 #: admin/opsiLicenses/licenseGeneric.tpl:166 msgid "License key" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:281 msgid "License generic" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:289 #: admin/opsiLicenses/licenseGeneric.tpl:35 msgid "Partner" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:291 #: admin/opsiLicenses/licenseGeneric.tpl:55 msgid "License model" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:292 msgid "License pool id" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:293 #: admin/opsiLicenses/licenseGeneric.tpl:177 msgid "Maximum installations" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:294 msgid "Reserved for host" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:295 msgid "Usage" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:296 #: admin/opsiLicenses/licenseGeneric.tpl:128 msgid "Notification date" msgstr "" #: admin/opsiLicenses/class_licenseGeneric.inc:297 #: admin/opsiLicenses/licenseGeneric.tpl:78 msgid "Conclusion date" msgstr "" #: admin/opsiLicenses/class_licenseUsageByHost.inc:59 #: admin/opsiLicenses/class_licenseUsageByHost.inc:69 msgid "License ID" msgstr "" #: admin/opsiLicenses/class_licenseUsageByHost.inc:259 msgid "Usage by host" msgstr "" #: admin/opsiLicenses/class_licenseUsageByHost.inc:260 msgid "License usage by host" msgstr "" #: admin/opsiLicenses/class_licenseUsageByHost.inc:267 #: admin/opsiLicenses/licenseGeneric.tpl:205 msgid "Used by" msgstr "" #: admin/opsiLicenses/class_licenseUsageByHost.inc:268 msgid "License reservation" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:11 msgid "List of license pools" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:57 msgid "Actions" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:68 msgid "Create" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:86 msgid "Edit" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:93 msgid "Remove" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:108 msgid "Edit license" msgstr "" #: admin/opsiLicenses/opsiLicense-list.xml:116 msgid "Remove license" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:92 msgid "Section" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:271 msgid "unlimited" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:277 #, php-format msgid "Volume license (#%s)" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:280 msgid "Concurrent" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:517 msgid "Pool generic" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:518 msgid "License pool generic" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:527 #: admin/opsiLicenses/licensePoolGeneric.tpl:58 msgid "Applications" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:528 #: admin/opsiLicenses/licensePoolGeneric.tpl:79 msgid "Windows software IDs" msgstr "" #: admin/opsiLicenses/class_licensePoolGeneric.inc:529 #: admin/opsiLicenses/licensePoolGeneric.tpl:43 msgid "Licenses" msgstr "" #: admin/opsiLicenses/licenseUsageByHost.tpl:14 #: admin/opsiLicenses/licenseGeneric.tpl:189 msgid "Reserved for" msgstr "" #: admin/opsiLicenses/licenseUsageByHost.tpl:28 msgid "Licenses used" msgstr "" #: admin/opsiLicenses/class_opsiLicenses.inc:25 msgid "Software licenses" msgstr "" #: admin/opsiLicenses/class_opsiLicenses.inc:26 msgid "Manage software licenses for Windows system deployments" msgstr "" #: admin/opsiLicenses/licenseGeneric.tpl:13 msgid "License settings" msgstr "" #: admin/opsiLicenses/licenseGeneric.tpl:18 #: admin/opsiLicenses/licensePoolGeneric.tpl:18 msgid "Generic settings" msgstr "" #: admin/opsiLicenses/licenseGeneric.tpl:75 msgid "Additional settings" msgstr "" #: admin/opsiLicenses/licenseGeneric.tpl:158 #: admin/opsiLicenses/licenseGeneric.tpl:160 #: admin/opsiLicenses/licenseGeneric.tpl:163 msgid "License key settings" msgstr "" #: admin/opsiLicenses/licenseGeneric.tpl:194 msgid "none" msgstr "" #: admin/opsiLicenses/class_licenseByProduct.inc:149 msgid "Usage by product" msgstr "" #: admin/opsiLicenses/class_licenseByProduct.inc:150 msgid "License usage by product" msgstr "" #: admin/opsiLicenses/licensePoolGeneric.tpl:12 msgid "Lincense settings" msgstr "" #: admin/opsiLicenses/opsiLicense-filter.xml:18 msgid "Default filter" msgstr "" #: admin/opsiLicenses/opsiLicense-filter.xml:33 msgid "By product" msgstr "" gosa-plugin-opsi-2.7.4/admin/0000755000175000017500000000000011752422560015011 5ustar cajuscajusgosa-plugin-opsi-2.7.4/admin/opsi/0000755000175000017500000000000011752422560015763 5ustar cajuscajusgosa-plugin-opsi-2.7.4/admin/opsi/class_opsigeneric.inc0000644000175000017500000007166211700347114022160 0ustar cajuscajusinitTime = microtime(TRUE); $this->opsi = new opsi($config); $this->config = $config; /* Check if we are are part of a windows workstation */ $this->parent = $parent; if($parent instanceof wingeneric){ $this->standalone = FALSE; } /* Get hostId */ if($hostId != "new"){ if(preg_match("/^opsi:/",$hostId)){ $this->hostId = preg_replace("/^opsi:=([^,]*),.*$/","\\1",$hostId); }elseif($this->parent instanceof wingeneric){ $this->hostId = $this->parent->cn; $this->hostId = preg_replace('/\$$/',"",$this->hostId); } } /* Try to plugin */ $this->init(); // Prepare lists $this->selectedList = new sortableListing(); $this->selectedList->setDeleteable(false); $this->selectedList->setEditable(false); $this->selectedList->setWidth("100%"); $this->selectedList->setHeight("200px"); $this->selectedList->setColspecs(array('*','*','40px')); $this->selectedList->setHeader(array(_("Name"),_("Description"))); $this->selectedList->setDefaultSortColumn(1); $this->selectedList->setAcl('rwcdm'); // All ACLs, we filter on our own here. // Prepare lists $this->availableList = new sortableListing(); $this->availableList->setDeleteable(false); $this->availableList->setEditable(false); $this->availableList->setWidth("100%"); $this->availableList->setHeight("200px"); $this->availableList->setColspecs(array('20px','*','*')); $this->availableList->setHeader(array("",_("Name"),_("Description"))); $this->availableList->setDefaultSortColumn(1); // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } /*! \brief Try to load opsi client informations from the gosa support daemon. */ private function init() { $err = FALSE; $this->init_failed = FALSE; $this->initially_was_account = FALSE; /* We are a standalone plugin. */ if($this->standalone ) { $this->is_account = TRUE; } /* Try to load client infos from the gosa support daemon */ if(!empty($this->hostId)){ $list = $this->opsi->list_clients($this->hostId); $err |= $this->opsi->is_error(); /* Walk through all returned opsi clients and try to detect one that matches our hostId. #FIXME Implement an opsi method which returns infos for only one opsi client, not all. */ foreach($list as $entry){ if(preg_match("/^".preg_quote($this->hostId, '/')."$/i",$entry['NAME'][0]['VALUE'])){ $this->initially_was_account = TRUE; $this->is_account = TRUE; foreach(array( "is_installed" => "LASTSEEN", "description" => "DESCRIPTION", "mac" => "MAC", "note" => "NOTES") as $des => $src){ $des2 = "initial_".$des; $this->$des2 = $this->$des = $entry[$src][0]['VALUE']; } break; } } } // Get package info $list = array(); $list = $this->opsi->get_full_product_host_information($this->hostId); $err |= $this->opsi->is_error(); /* Read informations about available netboot products. If not already done, before. */ if(!$err){ foreach($list as $key => $entry){ $tmp = array('DESC'=>$entry['data']['DESCRIPTION'],'NAME'=>$key); if($entry['configurable']){ $tmp['CFG'] = $entry['data']['PROPERTIES']; } if($entry['data']['TYPE'] == "localboot"){ if(!$entry['installed'] || $entry['request'] == "uninstall"){ $this->a_availableLocalProducts[$key] = $tmp; }else{ $this->a_selectedLocalProducts[$key] = $tmp; } }else{ $this->a_availableNetbootProducts[$key] = $tmp; if($entry['installed']){ $this->s_selectedNetbootProduct= $key; } } } } /* Check if everything went fine else reset everything and display a retry button */ if($err){ $this->init_failed = TRUE; }else{ /* Remember initial settings */ $this->a_initial_selectedLocalProducts = $this->a_selectedLocalProducts; $this->s_initial_selectedNetbootProduct = $this->s_selectedNetbootProduct; $this->a_initial_availableNetbootProducts = $this->a_availableNetbootProducts; /* Ensure that a valid netboot is selected product is. */ if(empty($this->s_selectedNetbootProduct)){ $this->s_selectedNetbootProduct = key($this->a_availableNetbootProducts); } // Now fake a valid ldap entry ... this is necessary to avoid // modifications in the dns/dhcp classes // First fake cn $this->attrs['hostId'][0] = $this->hostId; $this->attrs['cn'][0] = $this->hostId; // Second detect DNS settings. $ldap = $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); $strippedHostId = preg_replace("/\..*$/","",$this->hostId); $ldap->search("(&(objectClass=dNSZone)(|(relativeDomainName=".$this->hostId.")(relativeDomainName=".$strippedHostId."))(aRecord=*))",array("aRecord")); if($ldap->count()){ $attrs = $ldap->fetch(); $this->attrs['ipHostNumber']['count'] = 0; $this->attrs['ipHostNumber'][0] = $attrs['aRecord'][0]; } $this->attrs['macAddress']['count'] = 1; $this->attrs['macAddress'][0] = &$this->mac; // Initialize DHCP and DNS $this->netConfigDNS = new termDNS($this->config,$this,$this->objectclasses, FALSE, "hostId"); $this->netConfigDNS->set_acl_category("opsi"); $this->netConfigDNS->set_acl_base($this->config->current['BASE']); $this->netConfigDNS->IPisMust = FALSE; $this->netConfigDNS->MACisMust = FALSE; } } /*! \brief Check given data. @return Array Returns an array with all issues. */ public function check() { // In case of initialization problem, we do not save anything. // We can skip checks here, the date isn't usable. if($this->init_failed){ return; }; $messages = plugin::check(); $messages= array_merge($messages, $this->netConfigDNS->check()); if(empty($this->hostId)){ $messages[] = msgPool::required(_("Name")); }elseif(!preg_match("/\./",$this->hostId)){ /* The hostId must contain a domain part */ $messages[] = msgPool::invalid(_("Name"),$this->hostId,"", _("The field 'Name' must contain a domain part!")); }elseif(preg_match("/[^a-z0-9\.\-_]/",$this->hostId)){ $messages[] = msgPool::invalid(_("Name"),$this->hostId,"/[a-z0-9\.\-_]/"); } /* Ensure that the mac address is valid */ if(!tests::is_mac($this->mac) || empty($this->mac)){ $messages[] = msgPool::invalid(_("MAC address"),$this->mac,"","00:0C:7F:31:33:F1"); } return($messages); } /*! \brief Create the html ui of this plugin @return String HTML content. */ public function execute() { plugin::execute(); $display =""; /* The pluign initialization failed due to communication problems with the gosa daemon. A retry button will be displayed here. */ if($this->init_failed){ $smarty = get_smarty(); $smarty->assign("standalone ", $this->standalone ); $smarty->assign("init_failed",TRUE); $smarty->assign("message",$this->opsi->get_error()); return($smarty->fetch(get_template_path("generic.tpl",TRUE,dirname(__FILE__)))); } /* If we are not a stand alone opsi client, we must be a samba client which has the opsi tab enabled. Check if the opsi is added or removed and display state buttons. */ if(!$this->standalone ){ /* Do we need to flip is_account state? */ if(isset($_POST['modify_state'])){ if($this->is_account && $this->acl_is_removeable()){ $this->is_account= FALSE; }elseif(!$this->is_account && $this->acl_is_createable()){ $this->is_account= TRUE; } } if($this->is_account){ $display = $this->show_disable_header(msgPool::removeFeaturesButton(_("OPSI")), msgPool::featuresEnabled(_("OPSI"))); }else{ $display = $this->show_enable_header(msgPool::addFeaturesButton(_("OPSI")), msgPool::featuresDisabled(_("OPSI"))); return($display); } } /* Check if we have a sub dialog opened */ if(is_object($this->dialog)){ $this->dialog->save_object(); return($this->dialog->execute()); } /* Create HTML output of this plugin */ $smarty = get_smarty(); $smarty->assign("standalone", $this->standalone ); foreach($this->attributes as $attr){ $smarty->assign($attr,$this->$attr); } /* Assign ACLs */ $tmp = $this->plInfo(); foreach($tmp['plProvidedAcls'] as $name => $translated){ $smarty->assign($name."ACL",$this->getacl($name)); } $smarty->assign("is_installed", $this->is_installed); $smarty->assign("init_failed",FALSE); /* Create list of available local products */ $data = $lData=array(); foreach($this->a_availableLocalProducts as $name => $data){ if(isset($this->a_selectedLocalProducts[$name])) continue; $add_tab = ""; if($this->acl_is_writeable("localProduct")){ $add_tab = image('images/back.png','add_lp_'.$name); } $data[$name] = $name; $lData[$name] = array('data' => array($add_tab,$name,$data['DESC'])); } $this->availableList->setAcl($this->getacl("localProduct")); $this->availableList->setListData($data,$lData); $this->availableList->update(); /* Create list of selected local products */ $data = $lData=array(); foreach($this->a_selectedLocalProducts as $name => $data){ $edit = image('images/empty.png'); if(count($data['CFG'])){ $edit = image('images/lists/edit.png','edit_lp_'.$name); } $del = image('images/lists/trash.png','del_lp_'.$name); $data[$name] = $name; $lData[$name] = array('data' => array( $name,$data['DESC'],$edit.$del)); } $this->selectedList->setAcl($this->getacl("localProduct")); $this->selectedList->setListData($data,$lData); $this->selectedList->update(); /* Check if netboot product is configurable */ $cfg_able =FALSE; if(isset($this->a_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG'])){ $cfg_able = count($this->a_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG']) != 0; $cfg_able &= $this->acl_is_readable("netbootProduct"); } // Get net config template $str = $this->netConfigDNS->execute(); if(is_object($this->netConfigDNS->dialog)){ return($str); } $smarty->assign("netconfig", $str); $smarty->assign("netboot_configurable",$cfg_able); $smarty->assign("hostId", $this->hostId); $smarty->assign("divSLP", $this->selectedList->render()); $smarty->assign("divALP", $this->availableList->render()); $smarty->assign("SNP", $this->s_selectedNetbootProduct); $smarty->assign("ANP", $this->a_availableNetbootProducts); return($display.$smarty->fetch(get_template_path("generic.tpl",TRUE,dirname(__FILE__)))); } /*! \brief Save modifications using the gosa support daemon. */ public function save() { if($this->init_failed){ return; } /* Check if we have to create a new opsi client or just have to save client modifications. */ if(!$this->initially_was_account && $this->is_account){ $res = $this->opsi->add_client($this->hostId,$this->mac,$this->note,$this->description); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } }else{ /* Update client modifcations. -Only if necessary */ if($this->note != $this->initial_note || $this->description != $this->initial_description || $this->mac != $this->initial_mac){ $this->opsi->modify_client($this->hostId,$this->mac,$this->note,$this->description); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } } /*********** Detect local netboot product changes - Check which products were removed. - Check which products were added. ***********/ /* Detect which products were removed an which added. */ $del = array_diff_assoc($this->a_initial_selectedLocalProducts,$this->a_selectedLocalProducts); $add = array_diff_assoc($this->a_selectedLocalProducts,$this->a_initial_selectedLocalProducts); /* Remove products from client */ foreach($del as $name => $data){ $this->opsi->del_product_from_client($name,$this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } /* Add products to client And set the product properties. */ foreach($add as $name => $data){ $this->opsi->add_product_to_client($name,$this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } if(!empty($data['CFG'])){ $this->opsi->set_product_properties($name,$data['CFG'],$this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } } /* Save local product properties */ foreach($this->a_selectedLocalProducts as $name => $data){ if(isset($del[$name]) || isset($add[$name])) continue; /* Update product properties if there are changes */ $diffs = $this->get_config_changes($data['CFG'],$this->a_initial_selectedLocalProducts[$name]['CFG']); if(count($diffs)){ $this->opsi->set_product_properties($name,$diffs,$this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } } /********* Detect Netboot product changes - Check if another netboot product was selected. - Check if the product properties were changes. *********/ /* Update used netboot product. */ if($this->s_selectedNetbootProduct != $this->s_initial_selectedNetbootProduct){ if(!empty($this->s_initial_selectedNetbootProduct)){ $this->opsi->del_product_from_client($this->s_initial_selectedNetbootProduct,$this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } $this->opsi->add_product_to_client($this->s_selectedNetbootProduct,$this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } /* Check if we have to update the netboot product properties This is the case, if this product is newly selected. Or if there was at least one configuration attribute modified. */ $cfg_1 = $cfg_2 = array(); if(isset($this->a_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG'])){ $cfg_1 = $this->a_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG']; } if(isset($this->a_initial_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG'])){ $cfg_2 = $this->a_initial_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG']; } $diffs = $this->get_config_changes($cfg_1,$cfg_2); $to_update = array(); if( !$this->initially_was_account || $this->s_selectedNetbootProduct != $this->s_initial_selectedNetbootProduct){ $to_update = $this->a_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG']; }elseif(count($diffs)){ $to_update = $diffs; } if(count($to_update)){ $name = $this->s_selectedNetbootProduct; $this->opsi->set_product_properties($name,$to_update,$this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } $this->netConfigDNS->cn = $this->hostId; $this->netConfigDNS->save(); } public function get_config_changes($c1,$c2) { /* Get key which are not present in both entries */ $res = array(); foreach($c2 as $name => $value){ if(!isset($c1[$name]) || $c1[$name]['CURRENT'] != $c2[$name]['CURRENT']){ $res[$name] = $c2[$name]; } } foreach($c1 as $name => $value){ if(!isset($c2[$name]) || $c2[$name]['CURRENT'] != $c1[$name]['CURRENT']){ $res[$name] = $c1[$name]; } } return($res); } /*! \brief Removes the opsi client */ public function remove_from_parent() { if($this->init_failed){ return; } $this->netConfigDNS->remove_from_parent(); $this->opsi->del_client($this->hostId); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); return; } } /*! \brief Save html posts */ public function save_object() { /* Init failed; reinit is triggered here. */ if(isset($_POST['reinit']) && $this->init_failed){ $this->init(); } /* Property are currently edited, close the dialog. */ if(isset($_POST['cancel_properties']) && is_object($this->dialog)){ $this->dialog = NULL; } /* Save product property changes */ if(isset($_POST['save_properties']) && ($this->dialog instanceof opsiProperties)){ $this->dialog->save_object(); $pro = $this->dialog->get_product(); $CFG = $this->dialog->get_cfg(); if(isset($this->a_selectedLocalProducts[$pro])){ if($this->acl_is_writeable("localProduct")){ $this->a_selectedLocalProducts[$pro]['CFG'] = $CFG; } $this->dialog = NULL; }elseif($this->s_selectedNetbootProduct == $pro){ if($this->acl_is_writeable("netbootProduct")){ $this->a_availableNetbootProducts[$pro]['CFG'] = $CFG; } $this->dialog = NULL; }else{ trigger_error("Fatal, unknown product was configured."); } } /* Save html post */ if(isset($_POST['opsiGeneric_posted'])){ plugin::save_object(); $this->netConfigDNS->save_object(); $this->mac = $this->netConfigDNS->macAddress; /* Get hostId */ if(isset($_POST['hostId']) && $this->standalone && $this->acl_is_writeable("hostId")){ $this->hostId = get_post('hostId'); } /* Send actions like 'install' or 'wake' to the si server */ if($this->acl_is_writeable("triggerAction") && isset($_POST['opsi_action']) && isset($_POST['opsi_trigger_action']) && $this->standalone ){ $action = get_post('opsi_action'); if($action == "install"){ $this->install_client(); } if($action == "wake"){ $this->wake_client(); } } /* Get selected netboot product. */ if(isset($_POST['opsi_netboot_product']) && $this->acl_is_writeable("netbootProduct")){ $SNP = get_post('opsi_netboot_product'); if(isset($this->a_availableNetbootProducts[$SNP])){ if(!isset($this->a_availableNetbootProducts[$SNP]['CFG'])){ $CFG = $this->opsi->get_product_properties($SNP); $this->a_availableNetbootProducts[$SNP]['CFG'] = $CFG; if($this->opsi->is_error()){ $this->init_failed = TRUE; return; } } $this->s_selectedNetbootProduct = $SNP; } } /* Add/remove/edit local products */ foreach($_POST as $name => $value){ /* Check if netboot product configuration is requested */ if(preg_match("/^configure_netboot/",$name) && $this->acl_is_readable("netbootProduct")){ $pro = $this->s_selectedNetbootProduct; $cfg = $this->a_availableNetbootProducts[$pro]['CFG']; $this->dialog = new opsiProperties($this->config,$pro,$cfg,$this->hostId); break; } /* Add product */ if(preg_match("/^add_lp_/",$name) && $this->acl_is_writeable("localProduct")){ $product = preg_replace("/^add_lp_(.*)$/","\\1",$name); if(isset($this->a_availableLocalProducts[$product]) && !isset($this->a_selectedLocalProducts[$product])){ $this->a_selectedLocalProducts[$product] = $this->a_availableLocalProducts[$product]; $CFG = $this->opsi->get_product_properties($product); if($this->opsi->is_error()){ $this->init_failed = TRUE; return; } $this->a_selectedLocalProducts[$product]['CFG'] = $CFG; } break; } /* Delete product */ if(preg_match("/^del_lp_/",$name) && $this->acl_is_writeable("localProduct")){ $product = preg_replace("/^del_lp_(.*)$/","\\1",$name); if(isset($this->a_selectedLocalProducts[$product])){ unset($this->a_selectedLocalProducts[$product]); } break; } /* Edit a product */ if(preg_match("/^edit_lp_/",$name) && $this->acl_is_readable("localProduct")){ $product = preg_replace("/^edit_lp_(.*)$/","\\1",$name); $this->dialog = new opsiProperties($this->config, $product,$this->a_selectedLocalProducts[$product]['CFG'],$this->hostId); break; } } } } /* Triggers client installation */ function install_client() { $this->opsi->send_action("install",$this->hostId,$this->mac); if($this->opsi->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->opsi->get_error()),ERROR_DIALOG); } } /* Wake up client */ function wake_client() { /* Check if we are able to communicate with the GOsa supprot daemon */ if(class_available("gosaSupportDaemon")){ $o = new gosaSupportDaemon(); if($o->connect() && class_available("DaemonEvent_wakeup")){ $evt = new DaemonEvent_wakeup($this->config); $evt->add_targets(array($this->mac)); $o->append($evt); } } } /* Return plugin informations for acl handling */ static function plInfo() { return (array( "plShortName" => _("Generic"), "plDescription" => _("OPSI generic"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 1, "plSection" => array("administration"), "plCategory" => array("opsi" => array("description" => _("Opsi"))), "plProvidedAcls"=> array( "hostId" => _("Name"), "mac" => _("MAC address"), "description" => _("Description"), "note" => _("Note"), "netbootProduct" => _("Net boot product"), "localProduct" => _("Local boot product"), "triggerAction" => _("Action")) )); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsi/opsiware.tpl0000644000175000017500000000142311352111103020315 0ustar cajuscajus {if $init_failed}

{t}Information{/t}

{msgPool type=siError p=$message} {else} {if $type == 0}

{t}Hardware information{/t}

{else}

{t}Software information{/t}

{/if}{foreach from=$info item=item key=key}

{t}Device{/t} {$key+1}

{foreach from=$item key=name item=value}
{$name}: 
{$value.0.VALUE} 
{/foreach}

{/foreach} {/if}gosa-plugin-opsi-2.7.4/admin/opsi/class_opsi.inc0000644000175000017500000004475311700352046020624 0ustar cajuscajus. */ /******** public function __construct($config) public function enabled() function get_hosts_for_system_management() private function xml_to_array($xml,$alternative_method = FALSE) public function send_action($type,$hostId,$mac) public function list_clients( $hostId = "") public function add_client($hostId,$macaddress,$notes,$description) public function modify_client($hostId,$mac,$notes,$description) public function get_netboot_products($host = "") public function get_local_products($host = "") public function get_product_properties($productId,$hostId = "") public function set_product_properties($productId,$cfg,$hostId = "") public function add_product_to_client($productId,$hostId) public function del_product_from_client($productId,$hostId) public function get_client_hardware($hostId) public function get_client_software($hostId) public function del_client($hostId) public function job_opsi_install_client($hostId,$mac) ********/ /*! \brief This is the opsi base class, it handles . gosa daemon requests and prepares data for opsi plugins. */ class opsi extends gosaSupportDaemon { private $config = NULL; protected $use_alternative_xml_parse_method = TRUE; protected $target = ""; /*! \brief Create opsi object. @param @return */ public function __construct($config) { $this->config = $config; gosaSupportDaemon::__construct($config); /* Detect the target opsi host */ if($this->config->pluginEnabled("faiManagement")){ $opsi_hosts = $this->get_hosts_with_module("opsi_com"); /* Just use the first result of the opsi hosts */ if(count($opsi_hosts) == 1 && isset($opsi_hosts[0])){ $this->target = $opsi_hosts[0]; }elseif(count($opsi_hosts) > 1){ $this->target = $opsi_hosts[0]; msg_dialog::display(_("Opsi"),sprintf(_("More than one Opsi server were found, using the first result '%s'."),$this->target)); } } } public function enabled() { return($this->config->pluginEnabled('faiManagement') && !empty($this->target)); } /****************** Opsi handling ******************/ function get_hosts_for_system_management() { $res = $this->list_clients(); $data = array(); $ui = get_userinfo(); foreach($res as $entry){ if(!isset($entry['MAC'][0]['VALUE'])) $entry['MAC'][0]['VALUE'] = ""; $obj = array( "dn" => "opsi:=".$entry['NAME'][0]['VALUE'].",".get_ou("wingeneric", "sambaMachineAccountRDN").$this->config->current['BASE'], "objectClass" => array("gosa_opsi_client"), "cn" => array(0 => $entry['NAME'][0]['VALUE']), "macAddress" => array(0 => $entry['MAC'][0]['VALUE']), "opsi_notes" => array(0 => $entry['NOTES'][0]['VALUE'])); /* Check permissions */ $opsi_acl = $ui->get_permissions($obj['dn'],"opsi/opsiGeneric"); if(preg_match("/r/",$opsi_acl)){ if(!empty($entry['DESCRIPTION'][0]['VALUE'])){ $obj["description"]= array(); $obj["description"][0]= $entry['DESCRIPTION'][0]['VALUE']; } $data[] = $obj; } } return($data); } /*! \brief Maps all xml to array conversion to an alternative method then used in the parent class 'gosaSupportDaemon'. The alternative method is able to handle more complex data. */ private function xml_to_array($xml,$alternative_method = FALSE) { return(gosaSupportDaemon::xml_to_array($xml,TRUE)); } /*! \brief Trigger an event like wake or install for a specific hostId. */ public function send_action($type,$hostId,$mac) { switch($type){ case 'install' : $this->job_opsi_install_client($hostId,$mac); break; default : trigger_error('Unknown type '.$type.'.'); } } public function job_opsi_activate_client($id,$mac) { $events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT); $o_queue = new gosaSupportDaemon(); if(isset($events['TRIGGERED']['DaemonEvent_activate'])){ $evt = $events['TRIGGERED']['DaemonEvent_activate']; $tmp = new $evt['CLASS_NAME']($this->config); $tmp->set_type(TRIGGERED_EVENT); $tmp->add_targets(array($mac)); if(!$o_queue->append($tmp)){ msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG); } } } /****************** SI Communication functions ******************/ /*! \brief Returns a list of all opsi clients. @param @return */ public function list_clients( $hostId = "") { $data = array(); $res = $this->send_data("gosa_opsi_list_clients",$this->target,$data,TRUE); $items = array(); if(isset($res['XML'][0]['ITEM'])){ $items = $res['XML'][0]['ITEM']; } return($items); } /*! \brief Adds a new opsi client. @param @return */ public function add_client($hostId,$macaddress,$notes,$description) { $data = array("hostId" => $hostId,"macaddress" => $macaddress); if(empty($hostId)){ trigger_error("No valid host id given, check parameter 1."); return; } /* Add optional attributes */ foreach(array("notes","description") as $attr) { if(!empty($$attr)){ $data[$attr] = $$attr; } } /* Query SI server */ $res = $this->send_data("gosa_opsi_add_client",$this->target,$data,TRUE); } /*! \brief Modify an opsi client. @param @return */ public function modify_client($hostId,$mac,$notes,$description) { $data = array("hostId" => $hostId,"mac" => $mac); if(empty($hostId)){ trigger_error("No valid host id given, check parameter 1."); return; } /* Add optional attributes */ foreach(array("notes","description") as $attr) { $data[$attr] = $$attr; } /* Query SI server */ $res = $this->send_data("gosa_opsi_modify_client",$this->target,$data,TRUE); } /*! \brief Returns a list of netboot products. @param @return */ public function get_netboot_products($host = "") { /* Append host attribute to query data */ $data = array(); if(!empty($host)){ $data['hostId'] = trim($host); } $res = $this->send_data("gosa_opsi_get_netboot_products",$this->target,$data,TRUE); $items = array(); if(isset($res['XML'][0]['ITEM'])){ foreach($res['XML'][0]['ITEM'] as $entry){ $e = array("DESC" => $entry['DESCRIPTION'][0]['VALUE'], "NAME" => $entry['PRODUCTID'][0]['VALUE']); $items[$entry['PRODUCTID'][0]['VALUE']] = $e; } } return($items); } /*! \brief Returns a list of all local products. @param @return */ public function get_local_products($host = "") { /* Append host attribute to query data */ $data = array(); if(!empty($host)){ $data['hostId'] = trim($host); } $res = $this->send_data("gosa_opsi_get_local_products",$this->target,$data,TRUE); $items = array(); if(isset($res['XML'][0]['ITEM'])){ foreach($res['XML'][0]['ITEM'] as $entry){ $e = array("DESC" => $entry['DESCRIPTION'][0]['VALUE'], "NAME" => $entry['PRODUCTID'][0]['VALUE']); $items[$entry['PRODUCTID'][0]['VALUE']] = $e; } } return($items); } /*! \brief Returns a list of netboot products. @param @return */ public function get_full_product_host_information($host = "") { /* Append host attribute to query data */ $data = array(); if(!empty($host)){ $data['hostId'] = trim($host); } $res = $this->send_data("gosa_opsi_get_full_product_host_information",$this->target,$data,TRUE); $items = array(); $attrs = array("TYPE","PRIORITY","ONCESCRIPT","LICENSEREQUIRED","PACKAGEVERSION","PRODUCTVERSION", "ADVICE","SETUPSCRIPT","WINDOWSSOFTWAREIDS","PXECONFIGTEMPLATE","NAME","CREATIONTIMESTAMP", "TYPE", "ALWAYSSCRIPT","PRODUCTID","DESCRIPTION","UNINSTALLSCRIPT","UPDATESCRIPT","PRODUCTCLASSNAMES"); if(isset($res['XML'][0]['ITEM'])){ foreach($res['XML'][0]['ITEM'] as $entry){ $e = array(); foreach($attrs as $attr){ if(isset($entry[$attr])){ foreach($entry[$attr] as $key => $value){ if(isset($value['VALUE'])){ $e['data'][$attr] = $value['VALUE']; }elseif($value['ELEMENT']){ foreach($value['ELEMENT'] as $element){ $e['data'][$attr][] = $element['VALUE']; } } } } } $e["configurable"] = FALSE; if(isset($entry['PROPERTIES']) && count($entry['PROPERTIES'])){ $e["configurable"] = TRUE; $p_data = array(); foreach($entry['PROPERTIES'][0] as $p_name => $p_values){ if(empty($p_values)) continue; $p_data[$p_name]= array(); foreach(array('CURRENT','DEFAULT','DESCRIPTION') as $p_tmp){ if(isset($p_values[0][$p_tmp])){ if(isset($p_values[0][$p_tmp][0]['VALUE'])){ $p_data[$p_name][$p_tmp] = $p_values[0][$p_tmp][0]['VALUE']; } } } if(isset($p_values[0]['VALUES'][0]['ELEMENT'])){ foreach($p_values[0]['VALUES'][0]['ELEMENT'] as $val){ $p_data[$p_name]['VALUE'][] = $val['VALUE']; } $p_data[$p_name]['VALUE_CNT'] = count($p_data[$p_name]['VALUE']); } } $e["data"]['PROPERTIES'] = $p_data; } $e["request"] = ""; if(isset($entry['ACTIONREQUEST'])){ $e["request"] = $entry['ACTIONREQUEST']['0']['VALUE']; } $e["installed"] = FALSE; if(($e['request'] == "setup") || (isset($entry['INSTALLATIONSTATUS']) && $entry['INSTALLATIONSTATUS']['0']['VALUE'] == 'installed')){ $e["installed"] = TRUE; } $e["requires_licence"] = FALSE; if(isset($e['data']['LICENSEREQUIRED']) && preg_match("/true/i",$e['data']['LICENSEREQUIRED'])){ $e["requires_licence"] = TRUE; } $items[$entry['PRODUCTID'][0]['VALUE']] = $e; } } return($items); } /*! \brief Returns a list of all product properties. \ . Additionally you can specify the host parameter to \ . get host specific product properties @param @return */ public function get_product_properties($productId,$hostId = "") { $data = array("productId" => $productId); /* Append host attribute to query data */ if(!empty($hostId)){ $data['hostId'] = trim($hostId); } /* Check parameter */ if(empty($productId)){ trigger_error("No valid product id given, check parameter 1."); return(array()); } /* Query SI server */ $res = $this->send_data("gosa_opsi_get_product_properties",$this->target,$data,TRUE); $items = array(); if(isset($res['XML'][0]['ITEM'])){ foreach($res['XML'][0]['ITEM'] as $entry){ foreach($entry as $name => $val){ foreach(array("DESCRIPTION","CURRENT") as $attr){ $items[$name][$attr] = ""; if(isset($val[0][$attr])){ $items[$name][$attr] = $val[0][$attr][0]['VALUE']; } } $items[$name]['VALUE'] = array(); if(isset($val['0']['VALUE'])){ foreach($val['0']['VALUE'] as $value){ $items[$name]['VALUE'][] = $value['VALUE']; } } $items[$name]['VALUE_CNT'] = count($items[$name]['VALUE']); } } } return($items); } /*! \brief Set product properties, globally or per host. @param @return */ public function set_product_properties($productId,$cfg,$hostId = "") { $data = array("productId" => $productId); /* Append host attribute to query data */ if(!empty($hostId)){ $data['hostId'] = trim($hostId); } /* Check parameter */ if(empty($productId)){ trigger_error("No valid product id given, check parameter 1."); return(array()); } if(!count($cfg)) return; /* Add properties */ $data['item'] = array(); foreach($cfg as $name => $value){ $data['item'][] = "".$name."".$value['CURRENT'].""; } /* Query SI server */ $res = $this->send_data("gosa_opsi_set_product_properties",$this->target,$data,TRUE); } /*! \brief Adds a given product to a client. @param @return */ public function add_product_to_client($productId,$hostId) { $data = array("productId" => $productId,"hostId" => $hostId); /* Check parameter */ if(empty($productId)){ trigger_error("No valid product id given, check parameter 1."); return; } if(empty($hostId)){ trigger_error("No valid host id given, check parameter 2."); return; } /* Query SI server */ $res = $this->send_data("gosa_opsi_add_product_to_client",$this->target,$data,TRUE); } /*! \brief Removes a given product from a client. @param @return */ public function del_product_from_client($productId,$hostId) { $data = array("productId" => $productId,"hostId" => $hostId); /* Check parameter */ if(empty($productId)){ trigger_error("No valid product id given, check parameter 1."); return; } if(empty($hostId)){ trigger_error("No valid host id given, check parameter 2."); return; } /* Query SI server */ $res = $this->send_data("gosa_opsi_del_product_from_client",$this->target,$data,TRUE); } /*! \brief Returns the clients hardware setup. @param @return */ public function get_client_hardware($hostId) { $data = array("hostId" => $hostId); /* Check parameter */ if(empty($hostId)){ trigger_error("No valid host id given, check parameter 1."); return; } /* Query SI server */ $res = $this->send_data("gosa_opsi_get_client_hardware",$this->target,$data,TRUE); if(isset($res['XML'][0]['ITEM'])){ return($res['XML'][0]['ITEM']); } return(array()); } /*! \brief Returns the clients software setup. @param @return */ public function get_client_software($hostId) { $data = array("hostId" => $hostId); /* Check parameter */ if(empty($hostId)){ trigger_error("No valid host id given, check parameter 1."); return; } /* Query SI server */ $res = $this->send_data("gosa_opsi_get_client_software",$this->target,$data,TRUE); if(isset($res['XML'][0]['ITEM'])){ return($res['XML'][0]['ITEM']); } return(array()); } /*! \brief Deletes the given opsi client. @param @return */ public function del_client($hostId) { $data = array("hostId" => $hostId); /* Check parameter */ if(empty($hostId)){ trigger_error("No valid host id given, check parameter 1."); return; } /* Query SI server */ $res = $this->send_data("gosa_opsi_del_client",$this->target,$data,TRUE); if(isset($res['XML'][0]['ITEM'])){ return($res['XML'][0]['ITEM']); } return(array()); } /*! \brief Triggers install/reinstall of an opsi client. @param @return */ public function job_opsi_install_client($hostId,$mac) { $data = array("hostId" => $hostId,"macaddress"=>$mac); /* Check parameter */ if(empty($hostId)){ trigger_error("No valid host id given, check parameter 1."); return; } /* Query SI server */ $this->send_data("job_opsi_install_client",$this->target,$data,TRUE); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsi/opsi_tabs.inc0000644000175000017500000000016011052547266020442 0ustar cajuscajus gosa-plugin-opsi-2.7.4/admin/opsi/class_opsiware.inc0000644000175000017500000000362511425514361021500 0ustar cajuscajusinitTime = microtime(TRUE); $this->config = $config; $this->opsi = new opsi($config); $this->hostId = preg_replace("/^opsi:=([^,]*),.*$/","\\1",$hostId); $this->init(); // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } private function init() { if($this->type == 0){ $this->info = $this->opsi->get_client_hardware($this->hostId); $err = $this->opsi->is_error(); }else{ $this->info = $this->opsi->get_client_software($this->hostId); $err = $this->opsi->is_error(); } $this->init_failed = $err; } public function execute() { plugin::execute(); if(isset($_POST['reinit']) && $this->init_failed){ $this->init(); } $smarty = get_smarty(); $smarty->assign("init_failed",$this->init_failed); if($this->init_failed){ $smarty->assign("type", $this->type); $smarty->assign("message",$this->opsi->get_error()); return($smarty->fetch(get_template_path("opsiware.tpl",TRUE,dirname(__FILE__)))); } $smarty->assign("type", $this->type); $smarty->assign("info", $this->info); return($smarty->fetch(get_template_path("opsiware.tpl",TRUE,dirname(__FILE__)))); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsi/generic.tpl0000644000175000017500000000536111424574755020137 0ustar cajuscajus

{t}OPSI host{/t}

{if $init_failed} {msgPool type=siError p=$message} {else}
{if $standalone} {else} {/if}
{t}Name{/t}{$must} {render acl=$hostIdACL} {/render}
{t}Name{/t} {render acl=$hostIdACL} {/render}
{t}Net boot product{/t} {render acl=$netbootProductACL} {/render} {if $netboot_configurable} {image path="images/lists/edit.png" action="configure_netboot" title="{t}Configure product{/t}"} {/if}
{t}Description{/t} {render acl=$descriptionACL} {/render}
{t}Notes{/t} {render acl=$descriptionACL} {/render}

{t}Installed products{/t}

{render acl=$localProductACL} {$divSLP} {/render}

{t}Available products{/t}

{render acl=$localProductACL} {$divALP} {/render}
{if $standalone}

{t}Action{/t}

{render acl=$triggerActionACL} {/render} {/if}
{$netconfig} {/if} gosa-plugin-opsi-2.7.4/admin/opsi/class_opsiProperties.inc0000644000175000017500000000660611425514357022705 0ustar cajuscajus 'value')) @param String The host id if necessary */ public function __construct($config,$product,$cfg = array() ,$hostId = "") { $this->initTime = microtime(TRUE); $this->config = $config; $this->product = $product; $this->cfg = $cfg; $this->hostId = $hostId; // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } /*! \brief Display html dialog which allows to configure the properties @return String HTML content */ public function execute() { plugin::execute(); $ui =get_userinfo(); $acl = $ui->get_permissions($this->config->current['BASE'],"opsi/opsiProperties",""); $smarty = get_smarty(); $smarty->assign("ACL",$acl); $smarty->assign("cfg",set_post($this->cfg)); $smarty->assign("cfg_count",count($this->cfg)); return($smarty->fetch(get_template_path("properties.tpl",TRUE,dirname(__FILE__)))); } /*! \brief Save the posted property updates */ public function save_object() { $ui =get_userinfo(); $acl = $ui->get_permissions($this->config->current['BASE'],"opsi/opsiProperties",""); if(preg_match("/w/",$acl)){ foreach($this->cfg as $name => $value){ if(isset($_POST['value_'.$name])){ $this->cfg[$name]['CURRENT'] = get_post('value_'.$name); } } } } /*! \brief Sets the current config array. */ public function set_cfg($cfg) { $this->cfg = $cfg; } /*! \brief Returns the current product config @return Array. */ public function get_cfg() { return($this->cfg); } /*! \brief Returns the ID of the product. @param String Product ID */ public function get_product() { return($this->product); } /*! \brief Sets the current product ID, The name is only used to remember the currently edited product. */ public function set_product($name) { $this->product = $name; } /*! \brief Retuns the hostId. */ public function get_hostId() { return($this->hostId); } /* Return plugin informations for acl handling */ static function plInfo() { return (array( "plShortName" => _("Products"), "plDescription" => _("Product properties"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 10, "plSection" => array("administration"), "plCategory" => array("opsi"), "plProvidedAcls"=> array( ) )); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsi/properties.tpl0000644000175000017500000000166611416524660020712 0ustar cajuscajus

{t}OPSI product properties{/t}

{if $cfg_count == 0}

{t}This OPSI product has no options.{/t}

{else} {foreach from=$cfg item=item key=key} {/foreach}
{$key} {render acl=$ACL} {if isset($item.VALUE_CNT) && $item.VALUE_CNT} {else} {/if} {/render}
{/if}
gosa-plugin-opsi-2.7.4/admin/opsi/tabs_prodconfig.inc0000644000175000017500000000006511055522221021611 0ustar cajuscajus gosa-plugin-opsi-2.7.4/admin/opsiLicenses/0000755000175000017500000000000011752422560017451 5ustar cajuscajusgosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_licenseByProduct.inc0000644000175000017500000001226111425514364024612 0ustar cajuscajusinitTime = microtime(TRUE); $this->config = $config; $this->dn = $this->orig_dn = $dn; $this->si = new opsiLicenceHandler($this->config); // Is this a new object? $this->is_account=TRUE; if($this->dn == "new"){ $this->initially_was_account = FALSE; }else{ $this->initially_was_account = TRUE; // Extract pool name out of the fake dn. $this->cn = $this->orig_cn = preg_replace("/^opsi:cn=([^,]*),.*$/","\\1",$dn); } $this->init(); // Prepare lists $this->usageList = new sortableListing(); $this->usageList->setDeleteable(false); $this->usageList->setEditable(false); $this->usageList->setWidth("100%"); $this->usageList->setHeight("300px"); $this->usageList->setHeader(array(_("Host"),_("Key"),_("Pool"), _("License"))); $this->usageList->setDefaultSortColumn(1); // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } function init() { $this->licenseUses = array(); if(!$this->initially_was_account){ $this->init_successfull = TRUE; }else{ // Get license information for the current product. $res = $this->si->getLicensesForProduct($this->cn); if($this->si->is_error()){ $this->init_successfull = FALSE; msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); return; } $this->licenseUses = $res; $this->init_successfull = TRUE; } } function execute() { plugin::execute(); // Handle initialization failures. if(isset($_POST['retry_init'])) $this->init(); if(!$this->init_successfull){ $smarty = get_smarty(); $smarty->assign("init_successfull", $this->init_successfull); return($smarty->fetch(get_template_path('licenseByProduct.tpl',TRUE,dirname(__FILE__)))); } $ui = get_userinfo(); $readable = $ui->get_permissions($this->config->current['BASE'], "opsi/licenseByProduct",""); $data = array(); $this->usageList->setAcl($readable); foreach($this->licenseUses as $license){ $data[] = array('data'=> array($license['HOSTID'][0]['VALUE'], $license['SOFTWARELICENSEID'][0]['VALUE'], $license['LICENSEPOOLID'][0]['VALUE'])); } $this->usageList->setListData($data,$data); $this->usageList->update(); $smarty = get_smarty(); // Assign ACls $plInfo = $this->plInfo(); $smarty->assign("licenseUses", $this->usageList->render()); $smarty->assign("init_successfull", $this->init_successfull); $smarty->assign("initially_was_account", $this->initially_was_account); return($smarty->fetch(get_template_path('licenseByProduct.tpl',TRUE,dirname(__FILE__)))); } /* Save HTML inputs */ function save_object() { if(isset($_POST['opsiLicenseUsagePosted'])){ plugin::save_object(); } } /* Check user input and return a list of 'invalid input' messages. */ function check() { $message = plugin::check(); return($message); } function save( ){} function remove_from_parent(){ } static function plInfo() { return (array( "plShortName" => _("Usage by product"), "plDescription" => _("License usage by product"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 12, "plSection" => array("administration"), "plCategory" => array("opsi"), "plProvidedAcls"=> array())); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/licenseUsageByHost.tpl0000644000175000017500000000165511352436352023741 0ustar cajuscajus{if !$init_successfull}
{msgPool type=siError}
{t}Check if the GOsa support daemon (gosa-si) is running.{/t} 

{else}

{t}Reserved for{/t}

{render acl=$boundToHostACL} {$licenseReserved} {/render} {render acl=$boundToHostACL} {render acl=$boundToHostACL} {/render}

{t}Licenses used{/t}

{render acl=$boundToHostACL} {$licenseUses} {/render}
{/if} gosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_opsiLicenses.inc0000644000175000017500000000473411422321037023770 0ustar cajuscajusconfig = $config; $this->ui = $ui; $this->storagePoints = array(""); // Build filter if (session::global_is_set(get_class($this)."_filter")){ $filter= session::global_get(get_class($this)."_filter"); } else { $filter = new filter(get_template_path("opsiLicense-filter.xml", true)); $filter->setObjectStorage($this->storagePoints); } $this->setFilter($filter); // Build headpage $headpage = new listing(get_template_path("opsiLicense-list.xml", true)); $headpage->setFilter($filter); // Add copy&paste and snapshot handler. if ($this->config->boolValueIsTrue("core", "copyPaste")){ $this->cpHandler = new CopyPasteHandler($this->config); } if($this->config->get_cfg_value("core","enableSnapshots") == "true"){ $this->snapHandler = new SnapshotHandler($this->config); } parent::__construct($config, $ui, "licenses", $headpage); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/tabs_licenses.inc0000644000175000017500000000016211256143152022755 0ustar cajuscajus gosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_opsiLicenseHandler.inc0000644000175000017500000004234611422321037025104 0ustar cajuscajussend_data("gosa_opsi_getLicensePools_listOfHashes",$this->target,$data,TRUE); $items = array(); if(isset($res['XML'][0]['ANSWER_OPSI_GETLICENSEPOOLS_LISTOFHASHES'])){ if(isset($res['XML'][0]['RESULT'][0]['HIT'])){ $items = $res['XML'][0]['RESULT'][0]['HIT']; $data =array(); foreach($items as $item){ $entry = array(); foreach( array( "DESCRIPTION" => "description", "LICENSEPOOLID" => "cn", "PRODUCTIDS" => "productId", "WINDOWSSOFTWAREIDS"=> "softwareId") as $source => $dest){ if(isset($item[$source])){ $entry[$dest] = array('count' => 0); foreach($item[$source] as $obj){ $entry[$dest][] = $obj['VALUE']; } $entry[$dest]['count'] = (count($entry[$dest]) -1 ); } } $data[] =$entry; } return($data); }else{ // No entries, but got an answer. We probably do not have any pools yet. return(array()); } } return(FALSE); } /* @brief Create a license pool at Opsi server. * @param licensePoolId The name of the pool (optional). * @param description The description of the pool (optional). * @param productIds A list of assigned porducts of the pool (optional). * @param windowsSoftwareIds A list of windows software Ids associated to the pool (optional). */ function createPool($poolId,$desc = "",$products = array(),$softwareIds = array()) { $data= array(); $data['licensePoolId'] = htmlentities($poolId); if(!empty($desc)){ $data['description'] = htmlentities($desc); } if(count($products)){ $data['productIds'] = $products; } if(count($softwareIds)){ $data['windowsSoftwareIds'] = $softwareIds; } $res = $this->send_data("gosa_opsi_createLicensePool",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_CREATELICENSEPOOL'])){ return(TRUE); } return(FALSE); } /* * @brief Return productIds, windowsSoftwareIds and description for a given licensePoolId * @param licensePoolId The name of the pool. */ function getPool($licensePoolId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $res = $this->send_data("gosa_opsi_getPool",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETPOOL'])){ $item = array(); foreach(array("LICENSEPOOLID" => "cn", "DESCRIPTION" => "description", "LICENSES" => "licenses", "LICENSECONTRACTDATA" => "contract", "WINDOWSSOFTWAREIDS" => "softwareId", "PRODUCTIDS" => "productId") as $source => $target){ if(isset($res['XML'][0][$source])){ $item[$target] = array('count' => 0); foreach($res['XML'][0][$source] as $data){ if(isset($data['VALUE'])){ $item[$target][] = $data['VALUE']; }elseif(isset($data['HIT'])){ $item[$target] = array_merge($item[$target],$data['HIT']); } } $item[$target]['count'] = count($item[$target]) -1 ; } } return($item); } return(FALSE); } /* * @brief * Delete licnese pool by license pool Id. * A pool can only be deleted if there are no software licenses bound to the pool. * The fixed parameter deleteLicenses=True specifies that * all software licenses bound to the pool are being deleted. * @param licensePoolId The name of the pool. */ function deletePool($poolId, $force = FALSE) { $data= array(); $data['licensePoolId'] = htmlentities($poolId); if($force){ $data['deleteLicenses'] = 'TRUE'; } $res = $this->send_data("gosa_opsi_deleteLicensePool",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_DELETELICENSEPOOL'])){ return(TRUE); } return(FALSE); } /******************* * LICENSES *******************/ function listLicenses() { $data= array(); $res = $this->send_data("gosa_opsi_getAllSoftwareLicenses",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETALLSOFTWARELICENSES'])){ $licenses = array(); if(isset($res['XML'][0]['LICENSES'][0]['HIT'])){ foreach($res['XML'][0]['LICENSES'][0]['HIT'] as $entry){ $item = array(); // License keys are indexed by the pool id, map it here. if(isset($entry['LICENSEPOOLIDS'][0]['VALUE'])){ $n = strtoupper($entry['LICENSEPOOLIDS'][0]['VALUE']); $entry['LICENSEKEYS'] = $entry['LICENSEKEYS'][0][$n]; } // Now fake an ldap like result foreach(array( "BOUNDTOHOST" => "boundToHost", "LICENSEKEYS" => "licenseKey", "LICENSEPOOLIDS" => "licensePoolId", "LICENSETYPE" => "licenseType", "SOFTWARELICENSEID" => "softwareLicenseId") as $source => $target){ if(isset($entry[$source])){ $item[$target] = array('count' => 0); foreach($entry[$source] as $data){ $item[$target][] = $data['VALUE']; } $item[$target]['count'] = count($item[$target]) -1 ; } } $licenses[] = $item; } } return($licenses); } return(FALSE); } /* * @brief * Create a license contract, create a software * license and add the software license to the license pool * @param licensePoolId The name of the pool the license should be assigned. * @param licenseKey The license key. * @param licenseTyp Typ of a licnese, either "OEM", "VOLUME" or "RETAIL" * @param partner Name of the license partner (optional). * @param conclusionDate Date of conclusion of license contract (optional) * @param notificationDate Date of notification that license is running out soon (optional). * @param notes This is the place for some notes (optional) * @param softwareLicenseId Identificator of a license (optional). * @param maxInstallations The number of clients use this license (optional). * @param boundToHost The name of the client the license is bound to (optional). * @param expirationDate The date when the license is running down (optional). */ function createLicense($poolId, $licenseId, $licenseKey,$licenseType = "", $partner = "", $conclusionDate = "", $notificationDate ="", $notes = "", $softwareLicenseId = "", $maxInstallations = "", $boundToHost = "", $expirationDate = "") { $data= array(); $data['licensePoolId'] = htmlentities($poolId); $data['licenseKey'] = htmlentities($licenseKey); $data['licenseId'] = htmlentities($licenseId); // Append optional attributes foreach(array("partner","conclusionDate","notificationDate","notes","softwareLicenseId", "licenseType","maxInstallations","boundToHost","expirationDate") as $attr){ if(!empty($$attr)){ $data[$attr] = $$attr; } } $res = $this->send_data("gosa_opsi_createLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSE_HASH'])){ return(TRUE); } return(FALSE); } /* @brief Returns expirationDate, boundToHost, maxInstallation, licenseTyp, * licensePoolIds and licenseKeys for a given softwareLicense Id. * @param softwareLicenseId Identificator of a license. */ function getLicense($softwareLicenseId) { $data= array(); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $res = $this->send_data("gosa_opsi_getSoftwareLicense_hash",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSE_HASH'])){ return($res); } return(FALSE); } function getReservedLicensesForHost($hostId) { $data= array(); if(!empty($hostId)){ $data['hostId'] = htmlentities($hostId); } $res = $this->send_data("gosa_opsi_getReservedLicenses",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETRESERVEDLICENSES'])){ $items = array(); if(isset($res['XML'][0]['LICENSES'][0]['HIT'])){ foreach($res['XML'][0]['LICENSES'][0]['HIT'] as $entry){ $item = array(); foreach(array( "LICENSEPOOLIDS" => "licensePoolId", "SOFTWARELICENSEID" => "softwareLicenseId") as $source => $target){ if(isset($entry[$source])){ $item[$target] = array('count' => 0); foreach($entry[$source] as $data){ $item[$target][] = $data['VALUE']; } $item[$target]['count'] = count($item[$target]) -1 ; } } $items[] = $item; } } return($items); } return(FALSE); } /* * @brief Returns softwareLicenseId, notes, licenseKey, hostId and licensePoolId for optional given licensePoolId and hostId * @param hostid Something like client_1.intranet.mydomain.de (optional). * @param licensePoolId The name of the pool (optional). */ function getLicenseUsage($hostId = "", $licensePoolId = "") { $data= array(); if(!empty($hostId)){ $data['hostId'] = htmlentities($hostId); } if(!empty($hostId)){ $data['licensePoolId'] = htmlentities($licensePoolId); } $res = $this->send_data("gosa_opsi_getSoftwareLicenseUsages",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSEUSAGES'])){ $items = array(); if(isset($res['XML'][0]['RESULT'][0]['HIT'])){ foreach($res['XML'][0]['RESULT'][0]['HIT'] as $entry){ $item = array(); foreach(array( "HOSTID" => "hostId", "LICENSEKEY" => "licenseKey", "LICENSEPOOLID" => "licensePoolId", "NOTES" => "notes", "SOFTWARELICENSEID" => "softwareLicenseId") as $source => $target){ if(isset($entry[$source])){ $item[$target] = array('count' => 0); foreach($entry[$source] as $data){ $item[$target][] = $data['VALUE']; } $item[$target]['count'] = count($item[$target]) -1 ; } } $items[] = $item; } } return($items); } return(FALSE); } /* @brief Assigns a software license to a host * @param hostId Something like client_1.intranet.mydomain.de * @param licensePoolId The name of the pool. */ function addLicenseToHost($licensePoolId,$hostId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_assignSoftwareLicenseToHost",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_ASSIGNSOFTWARELICENSETOHOST'])){ return(TRUE); } return(FALSE); } /* @brief Reserve a software license to a host * @param softwareLicenseId * @param hostId Something like client_1.intranet.mydomain.de */ function reserverLicenseForHost($softwareLicenseId,$hostId) { $data= array(); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_boundHostToLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_BOUNDHOSTTOLICENSE'])){ return(TRUE); } return(FALSE); } /* * @brief Remove software licnese reservation for a host. * @param softwareLicenseId * @param hostid Something like client_1.intranet.mydomain.de */ function removeLicenseReservationFromHost($softwareLicenseId,$hostId) { $data= array(); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_unboundHostFromLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_UNBOUNDHOSTFROMLICENSE'])){ return(TRUE); } return(FALSE); } /* * @brief Unassign a software license from a host. * @param hostid Something like client_1.intranet.mydomain.de * @param licensePoolId The name of the pool. */ function removeLicenseFromHost($licensePoolId,$hostId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $data['hostId'] = htmlentities($hostId); $res = $this->send_data("gosa_opsi_unassignSoftwareLicenseFromHost",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_UNASSIGNSOFTWARELICENSEFROMHOST'])){ return(TRUE); } return(FALSE); } /* * @brief Removes a single license from a license pool * Attention, the software license has to exists * otherwise it will lead to an Opsi internal server error. * @param softwareLicenseId * @param licensePoolId */ function removeLicenseFromPool($licensePoolId,$softwareLicenseId) { $data= array(); $data['licensePoolId'] = htmlentities($licensePoolId); $data['softwareLicenseId'] = htmlentities($softwareLicenseId); $res = $this->send_data("gosa_opsi_removeLicense",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_REMOVELICENSE'])){ return(TRUE); } return(FALSE); } /* * @brief Unassign all software licenses from a host * @param hostid Something like client_1.intranet.mydomain.de */ function removeAllLicensesFromHost($hostId) { $data= array(); $data['hostId'] = htmlentities($hostid); $res = $this->send_data("gosa_opsi_unassignAllSoftwareLicensesFromHost",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_UNASSIGNALLSOFTWARELICENSESFROMHOST'])){ return(TRUE); } return(FALSE); } /* @brief * Returns the assigned licensePoolId and licenses, * how often the product is installed and at which host * and the number of max and remaining installations for a given OPSI product. * @param productId Identificator of an OPSI product. */ function getLicensesForProduct($productId) { $data= array(); $data['productId'] = htmlentities($productId); $res = $this->send_data("gosa_opsi_getSoftwareLicenseUsagesForProductId",$this->target,$data,TRUE); if(isset($res['XML'][0]['ANSWER_OPSI_GETSOFTWARELICENSEUSAGESFORPRODUCTID'])){ if(isset($res['XML'][0]['RESULT'][0]['HIT'])){ return($res['XML'][0]['RESULT'][0]['HIT']); } return(array()); } return(FALSE); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/opsiLicense-list.tpl0000644000175000017500000000073611352410464023422 0ustar cajuscajus

{$HEADLINE} {$SIZELIMIT}

{$ROOT} {$BACK} {$HOME} {$RELOAD} {$ACTIONS} {$FILTER}
{$LIST}
gosa-plugin-opsi-2.7.4/admin/opsiLicenses/licensePoolGeneric.tpl0000644000175000017500000000463411350376213023747 0ustar cajuscajus{if !$init_successfull}
{msgPool type=siError}
{t}Check if the GOsa support daemon (gosa-si) is running.{/t} 

{else}

{t}Generic{/t}

{t}Name{/t} {if $initially_was_account} {else} {render acl=$cnACL} {/render} {/if}
{t}Description{/t} {render acl=$descriptionACL} {/render}

{t}Licenses{/t}

{$licenses} {render acl=$licensesACL} {/render}

{t}Applications{/t}

{render acl=$productIdsACL}
{/render} {render acl=$productIdsACL} {/render} {render acl=$productIdsACL} {/render} {render acl=$productIdsACL} {/render}

{t}Windows software IDs{/t}

{render acl=$windowsSoftwareIdsACL} {/render}
{/if} gosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_filterOpsiLicense.inc0000644000175000017500000000464211422321037024751 0ustar cajuscajusget_ldap_link(TRUE); $flag= ($scope == "sub")?GL_SUBSEARCH:0; $result= filterOpsiLicense::get_list($base, $filter, $attributes, $category, $objectStorage, $flag); // Prepare filter and split it into attribute and value to search for $filter=preg_replace("/\*/","",$filter); $attr = $value = ""; if(!empty($filter) && preg_match("/=/", $filter)){ list($attr,$value) = preg_split("/=/", $filter); } // Simple filtering if(!empty($attr)){ foreach($result as $key => $entry){ if(!preg_match("/".$value."/i", $entry[$attr][0])){ unset($result[$key]); } } } return(filterACL::unifyResult($result)); } static function get_list($base, $filter, $attributes, $category, $objectStorage, $flags= GL_SUBSEARCH) { $config= session::global_get('config'); $si = new opsiLicenceHandler($config); if(!$si->enabled()) return(array()); $res = $si->listPools(); $result = array(); if($si->is_error() || !is_array($res)){ $this->init_successfull = FALSE; msg_dialog::display(_("Error"),msgPool::siError($si->get_error()),ERROR_DIALOG); return; }else{ // Reset the list of licenses foreach($res as $item){ $item['objectClass'] = array('fake_opsiLicense'); // Fake an ldap entry, this enables ACL checks. $entry = array(); $entry['dn'] = "opsi:cn=".$item['cn'][0].",".$config->current['BASE']; foreach($item as $name => $value){ $entry[] = $name; $entry[$name] = $value; } $entry['count'] = count($item); $result[] = $entry; } } return($result); } static function unifyResult($result) { $res=array(); foreach($result as $entry){ if(!isset($res[$entry['dn']])){ $res[$entry['dn']]=$entry; } } return(array_values($res)); } } ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/licenseGeneric.tpl0000644000175000017500000001430011352363367023114 0ustar cajuscajus{if !$init_successfull}
{msgPool type=siError}
{t}Check if the GOsa support daemon (gosa-si) is running.{/t} 

{else}

{t}License{/t}

{t}Name{/t}{$must} {if $initially_was_account} {else} {render acl=$cnACL} {/render} {/if}
{t}Partner{/t} {render acl=$partnerACL} {/render}
{t}Description{/t} {render acl=$descriptionACL} {/render}
{t}License model{/t} {render acl=$licenseModelACL} {if $initially_was_account} {else} {/if} {/render}
{t}Conclusion date{/t} {render acl=$conclusionDateACL} {if $conclusionDateWriteable} {literal} {/literal} {/if} {/render}
{t}Expiration date{/t} {render acl=$expirationDateACL} {if $expirationDateWriteable} {literal} {/literal} {/if} {/render}
{t}Notification date{/t} {render acl=$notificationDateACL} {if $notificationDateWriteable} {literal} {/literal} {/if} {/render}

{t}License key settings{/t}

{if $licenseModel == "VOLUME"} {/if} {if $licenseModel == "OEM"} {/if}
{t}License key{/t}{$must} {render acl=$licenseKeyACL} {/render}
{t}Maximum installations{/t} {render acl=$maximumInstallationsACL} {/render}
{t}Reserved for{/t} {render acl=$boundToHostACL} {/render}
{t}Used by{/t}
{render acl=$usedByHostACL}
{/render}
{/if} gosa-plugin-opsi-2.7.4/admin/opsiLicenses/opsiLicense-filter.xml0000644000175000017500000000203411347451377023742 0ustar cajuscajus opsi true default one dn objectClass cn description productId default OpsiLicense cn=$ auto cn 0.5 3 byProduct OpsiLicense productId=$ auto cn 0.5 3 gosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_licenseGeneric.inc0000644000175000017500000002456711613742614024267 0ustar cajuscajusinitTime = microtime(TRUE); $this->config = $config; $this->data = $license; $this->dn = $dn; $this->si = new opsiLicenceHandler($this->config); $this->opsiHosts = $hosts; // Detect account state. if(count($this->data) == 0){ $this->initially_was_account = FALSE; }else{ $this->initially_was_account = TRUE; } $this->is_account = TRUE; // Extract pool name out of the fake dn. $this->init(); // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } function init() { // Extract license information out of the license object ($this->data) $this->boundToHost = array('0'=>""); $this->usedByHost = array('0'=>""); $this->licenseKey = array('0'=>""); if($this->initially_was_account){ foreach($this->attributes as $attr){ $this->$attr = $this->data[$attr]; } // Fix dates foreach(array("notificationDate","expirationDate","conclusionDate") as $date) { if(!empty($this->$date)){ $this->$date = date("d.m.Y",strtotime($this->$date)); } } } $this->orig_cn = $this->cn; $this->orig_licenseModel = $this->licenseModel; $this->init_successfull = TRUE; return; } function execute() { plugin::execute(); // Handle initialization failures. if(isset($_POST['retry_init'])) $this->init(); if(!$this->init_successfull){ $smarty = get_smarty(); $smarty->assign("init_successfull", $this->init_successfull); return($smarty->fetch(get_template_path('licenseGeneric.tpl',TRUE,dirname(__FILE__)))); } $smarty = get_smarty(); // Assign attributes and its ACls $plInfo = $this->plInfo(); foreach($plInfo['plProvidedAcls'] as $name => $desc){ $smarty->assign("{$name}ACL",$this->getacl($name)); } foreach($this->attributes as $attr){ $smarty->assign($attr,set_post($this->$attr)); } // Assign list of available license models $smarty->assign("licenseModels",array( "RETAIL" => _("Retail"), "OEM"=>_("OEM"), "VOLUME" => _("Volume"))); $smarty->assign("init_successfull", $this->init_successfull); $smarty->assign("initially_was_account", $this->initially_was_account); $smarty->assign("hosts", $this->getHosts()); $ui = get_userinfo(); $acl_base = $this->dn; if($acl_base == "new"){ $acl_base = $this->config->current['BASE']; } $smarty->assign("licenseACL", $ui->get_permissions($acl_base,"opsi/licensePoolGeneric","licenses")); $smarty->assign("writeable", preg_match("/w/",$ui->get_permissions($acl_base,"opsi/licensePoolGeneric","licenses"))); $smarty->assign("notUsedHosts", array_diff($this->getHosts(), $this->usedByHost)); $smarty->assign("boundToHost", set_post($this->boundToHost[0])); $smarty->assign("licenseKey", set_post($this->licenseKey[0])); // w3c fix, do not show empty options. $tmp = $this->usedByHost; if(isset($tmp[0]) && empty($tmp[0])) unset($tmp[0]); $smarty->assign('usedByHost', $tmp); foreach(array("notificationDate","expirationDate","conclusionDate") as $date) { $smarty->assign($date."Writeable", $this->acl_is_writeable($date)); } return($smarty->fetch(get_template_path('licenseGeneric.tpl',TRUE,dirname(__FILE__)))); } function getHosts() { $ret = array(); foreach($this->opsiHosts as $host){ $cn = $host['NAME'][0]['VALUE']; $ret[$cn] = $cn; } return($ret); } /* Save HTML inputs */ function save_object() { if(isset($_POST['opsiLicensesPosted'])){ plugin::save_object(); if(isset($_POST['addLicenseUsage']) && isset($_POST['selectedHostToAdd'])){ $host = get_post('selectedHostToAdd'); if(!empty($host) && in_array_strict($host,$this->getHosts()) && !in_array_strict($host, $this->usedByHost)){ $this->usedByHost[] = $host; } } if(isset($_POST['removeLicenseUsage']) && isset($_POST['selectedUsedHosts'])){ $todel = get_post('selectedUsedHosts'); foreach($todel as $host){ if(isset($this->usedByHost[$host])){ unset($this->usedByHost[$host]); } } } // Force licenseKey to be of type array. if(!is_array($this->licenseKey)){ $this->licenseKey = array($this->licenseKey); } // BoundToHost maybe multiple too, later. if(!is_array($this->boundToHost)){ $this->boundToHost = array($this->boundToHost); } if($this->initially_was_account){ $this->cn = $this->orig_cn; $this->licenseModel = $this->orig_licenseModel; } } } /* Check user input and return a list of 'invalid input' messages. */ function check() { $message = plugin::check(); // Very simple date input checks if(!empty($this->expirationDate) && !preg_match("/^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/",$this->expirationDate)){ $message[] = msgPool::invalid(_("Expiration date"),$this->expirationDate,"","23.02.2009"); } if(!empty($this->conclusionDate) && !preg_match("/^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/",$this->conclusionDate)){ $message[] = msgPool::invalid(_("Expiration date"),$this->conclusionDate,"","23.02.2009"); } if(!empty($this->notificationDate) && !preg_match("/^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/",$this->notificationDate)){ $message[] = msgPool::invalid(_("Expiration date"),$this->notificationDate,"","23.02.2009"); } if(empty($this->cn)){ $message[] = msgPool::required(_("Name")); } if(empty($this->licenseKey[0])){ $message[] = msgPool::required(_("License key")); } return($message); } /* Removes the object from the opsi database */ function remove_from_parent() {} /* Saves object modifications */ function save() { $data = array(); foreach($this->attributes as $target){ $data[$target] = $this->$target; } // Return opsi like dates. foreach(array("notificationDate","expirationDate","conclusionDate") as $date) { if(!empty($this->$date)){ $data[$date] = date("Y-m-d",strtotime($this->$date)); } } return($data); } static function plInfo() { return (array( "plShortName" => _("Generic"), "plDescription" => _("License generic"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 8, "plSection" => array("administration"), "plCategory" => array("opsi"), "plProvidedAcls"=> array( "cn" => _("Name"), "partner" => _("Partner"), "licenseKey" => _("License key"), "licenseModel" => _("License model"), "licensePoolId" => _("License pool id"), "maximumInstallations"=> _("Maximum installations"), "boundToHost" => _("Reserved for host"), "usedByHost" => _("Usage"), "notificationDate" => _("Notification date"), "conclusionDate" => _("Conclusion date"), "expirationDate" => _("Expiration date"), "description" => _("Description")) )); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/licenseUsage.tpl0000644000175000017500000000053011347714031022574 0ustar cajuscajus{if !$init_successfull}
{msgPool type=siError}
{t}Check if the GOsa support daemon (gosa-si) is running.{/t} 

{else}

{t}License usage{/t}

{$licenseUses} {/if} gosa-plugin-opsi-2.7.4/admin/opsiLicenses/opsiLicense-list.xml0000644000175000017500000000531111347641553023426 0ustar cajuscajus false false false true opsi 1 fake_opsiLicense opsi licenseGeneric plugins/opsi/images/select_license.png |20px;c||250px|170px;r| %{filter:objectType(dn,objectClass)} %{filter:departmentLink(row,dn,description)} 2 %{filter:objectType(dn,objectClass)} cn string %{filter:link(row,dn,"%s",cn)} true description string %{filter:link(row,dn,"%s",description)} true %{filter:actions(dn,row,objectClass)}
sub images/lists/element.png[new] new entry plugins/opsi/images/select_license.png[new] separator edit entry images/lists/edit.png remove entry images/lists/trash.png exporter edit entry images/lists/edit.png remove entry images/lists/trash.png opsi/licenseGeneric[d]
gosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_licensePoolGeneric.inc0000644000175000017500000004761011613742614025113 0ustar cajuscajus "boundToHost", "HOSTIDS"=> "usedByHost", "LICENSEPOOLIDS"=> "licensePoolId", "LICENSETYPE"=> "licenseModel", "LICENSEKEYS"=> "licenseKey", "MAXINSTALLATIONS"=> "maximumInstallations", "EXPIRATIONDATE"=> "expirationDate", "SOFTWARELICENSEID"=> "cn" ); var $licenseContractMap = array( "CONCLUSIONDATE"=> "conclusionDate", "NOTIFICATIONDATE"=> "notificationDate", "NOTES"=> "description", "PARTNER"=> "partner" ); function __construct(&$config,$dn) { $this->initTime = microtime(TRUE); $this->config = $config; $this->dn = $this->orig_dn = $dn; // initialize gosa-si handle for opsi licenses $this->si = new opsiLicenceHandler($this->config); // Detect if this is a new or existings license $this->is_account=TRUE; if($this->dn == "new"){ $this->initially_was_account = FALSE; }else{ $this->initially_was_account = TRUE; // Extract pool name out of the fake dn. $this->cn = $this->orig_cn = preg_replace("/^opsi:cn=([^,]*),.*$/","\\1",$dn); } $this->init(); // Prepare lists $this->licenseList = new sortableListing(); $this->licenseList->setDeleteable(true); $this->licenseList->setEditable(true); $this->licenseList->setWidth("100%"); $this->licenseList->setHeight("120px"); $this->licenseList->setColspecs(array('200px','*')); $this->licenseList->setHeader(array(_("Section"),_("Description"))); $this->licenseList->setDefaultSortColumn(1); // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } function init() { // Load local Boot Products $res = $this->si->get_local_products(); $this->availableProductIds=array(); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); $this->init_successfull = FALSE; return(FALSE); } $this->availableProductIds=array_keys($res); // Load opsi hosts $res = $this->si->list_clients(); $this->opsiHosts=array(); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); $this->init_successfull = FALSE; return(FALSE); } $this->opsiHosts=$res; // Load Pool if(!$this->initially_was_account){ $this->init_successfull = TRUE; }else{ $res = $this->si->getPool($this->cn); if($this->si->is_error()){ $this->init_successfull = FALSE; msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); return(FALSE); }else{ $this->data = $this->orig_data = $res; $this->description = $this->data['description'][0]; // Load software IDs $this->softwareIds = array(); if(isset($this->data['softwareId'])){ for($i = 0; $i < $this->data['softwareId']['count']; $i++){ $this->softwareIds[] = $this->data['softwareId'][$i]; } } // Load product IDs $this->productIds = array(); if(isset($this->data['productId'])){ for($i = 0; $i < $this->data['productId']['count']; $i++){ $this->productIds[] = $this->data['productId'][$i]; } } // Load Licences $this->licenses = array(); if(isset($this->data['licenses'])){ for($i =0; $i< $this->data['licenses']['count']; $i++){ $license = $this->data['licenses'][$i]; // Do not parse invalid licenses if(!is_array($license) || !isset($license['LICENSEPOOLIDS'])){ continue; } // Prepare Software License Key(s) $upper = strtoupper($license['LICENSEPOOLIDS'][0]['VALUE']); $license['LICENSEKEYS'] = $license['LICENSEKEYS'][0][$upper]; // Map license attributes to a useable format $entry = array(); foreach($this->licenseMap as $source => $target){ $entry[$target] = ""; if(isset($license[$source])){ if(count($license[$source]) >= 2){ $entry[$target] = array(); foreach($license[$source] as $sub){ $entry[$target][] = $sub['VALUE']; } }elseif(isset($license[$source][0]['VALUE'])){ $entry[$target] = $license[$source][0]['VALUE']; } } } // Extract contract data $lData= $license['LICENSECONTRACTDATA'][0]; foreach($this->licenseContractMap as $source => $target){ if(isset($lData[$source])){ if(count($lData[$source]) >= 2){ $entry[$target] = array(); foreach($lData[$source] as $sub){ $entry[$target][] = $sub['VALUE']; } }elseif(isset($lData[$source][0]['VALUE'])){ $entry[$target] = $lData[$source][0]['VALUE']; } } } // There are some multi value attributes - force them to be of type array. foreach(array("boundToHost","usedByHost","licenseKey") as $attr){ if(!is_array($entry[$attr])){ $entry[$attr] = array($entry[$attr]); } } $entry['MODIFIED'] = FALSE; $this->licenses[$entry['cn']] = $entry; } } $this->orig_licenses = $this->licenses; $this->init_successfull = TRUE; return; } } } function execute() { plugin::execute(); $this->licenseList->setAcl($this->getacl('licenses')); // Handle initialization failures. if(isset($_POST['retry_init'])) $this->init(); if(!$this->init_successfull){ $smarty = get_smarty(); $smarty->assign("init_successfull", $this->init_successfull); return($smarty->fetch(get_template_path('licensePoolGeneric.tpl',TRUE,dirname(__FILE__)))); } // Display dialogs! if($this->dialog instanceOf plugin){ $this->dialog->save_object(); $display = $this->dialog->execute(); $display.= "
"; if($this->acl_is_writeable("licenses")){ $display.=""; } $display.=""; $display.="
"; return($display); } $smarty = get_smarty(); // Assign ACls $plInfo = $this->plInfo(); foreach($plInfo['plProvidedAcls'] as $name => $desc){ $smarty->assign("{$name}ACL",$this->getacl($name)); } foreach($this->attributes as $attr){ $smarty->assign($attr,set_post($this->$attr)); } $smarty->assign("init_successfull", $this->init_successfull); $smarty->assign("availableProductIds", array_diff( $this->availableProductIds, $this->productIds)); $smarty->assign("productIds", $this->productIds); $smarty->assign("softwareIds", $this->softwareIds); $smarty->assign("licenses", $this->getLicenseList()); $smarty->assign("initially_was_account", $this->initially_was_account); return($smarty->fetch(get_template_path('licensePoolGeneric.tpl',TRUE,dirname(__FILE__)))); } function getLicenseList() { $data = $lData = array(); if($this->acl_is_readable("licenses")){ foreach($this->licenses as $i => $license){ $maxInst = ""; if($license['maximumInstallations'] == 0){ $maxInst = _("unlimited"); }else{ $maxInst = $license['maximumInstallations']; } $map = array( "VOLUME" => sprintf(_("Volume license (#%s)"), $maxInst), "OEM"=>_("OEM"), "RETAIL"=>_("Retail"), "CONCURRENT"=>_("Concurrent")); $data[$license['cn']] = $license['cn']; $lData[$license['cn']] = array('data' => array($license['cn'],$map[$license['licenseModel']])); } } $this->licenseList->setListData($data,$lData); return($this->licenseList->render()); } /* Save HTML inputs */ function save_object() { $this->licenseList->save_object(); $tmp = $this->licenseList->getAction(); // Allow license edit via href links if($tmp['action'] == 'edit'){ $id = $this->licenseList->getKey($tmp['targets'][0]); if(isset($this->licenses[$id])){ $this->dialog = new licenseGeneric($this->config,$this->dn,$this->licenses[$id], $this->opsiHosts); $this->dialog->set_acl_category('opsi'); $this->dialog->set_acl_base($this->config->current['BASE']); } } if($tmp['action'] == 'delete'){ $id = $this->licenseList->getKey($tmp['targets'][0]); if(isset($this->licenses[$id])){ unset($this->licenses[$id]); } } // Close license edit dialogs. if($this->dialog instanceOf plugin && isset($_POST['license_cancel'])){ $this->dialog = NULL; return; } // Save license modifications if($this->dialog instanceOf plugin && isset($_POST['license_finish'])){ $this->dialog->save_object(); $msgs = $this->dialog->check(); if(count($msgs)){ msg_dialog::displayChecks($msgs); }else{ $attrs = $this->dialog->save(); $attrs['MODIFIED'] = TRUE; $this->licenses[$attrs['cn']] = $attrs; $this->dialog = NULL; } return; } if(isset($_POST['opsiLicensePoolPosted'])){ plugin::save_object(); // Restore license cn, to avoid creating a copy... if($this->initially_was_account) $this->cn = $this->orig_cn; // We've to add prodcuts here if(preg_match("/w/",$this->getacl("productIds"))){ if(isset($_POST['availableProduct']) && isset($_POST['addProduct'])){ $pro = get_post('availableProduct'); if(isset($this->availableProductIds[$pro]) && !in_array_strict($this->availableProductIds[$pro], $this->productIds)){ $this->productIds[] =$this->availableProductIds[$pro]; } } } // We've to remove products here if(preg_match("/w/",$this->getacl("productIds"))){ if(isset($_POST['productIds']) && isset($_POST['removeProduct'])){ foreach($_POST['productIds'] as $key){ if(isset($this->productIds[$key])){ unset($this->productIds[$key]); } } } } // We've to add software here if(preg_match("/w/",$this->getacl("windowsSoftwareIds"))){ if(isset($_POST['newSoftwareId']) && isset($_POST['addSoftware'])){ $soft = trim(get_post('newSoftwareId')); if(!empty($soft) && !in_array_strict($soft, $this->softwareIds)){ $this->softwareIds[] = $soft; } } } // We've to remove software Ids here if(preg_match("/w/",$this->getacl("windowsSoftwareIds"))){ if(isset($_POST['softwareIds']) && isset($_POST['removeSoftware'])){ foreach($_POST['softwareIds'] as $key){ if(isset($this->softwareIds[$key])){ unset($this->softwareIds[$key]); } } } } // We've to create a new license if(preg_match("/w/",$this->getacl("licenses"))){ if(isset($_POST['addLicense'])){ $this->dialog = new licenseGeneric($this->config,$this->dn,array(), $this->opsiHosts); $this->dialog->set_acl_category('opsi'); $this->dialog->set_acl_base($this->config->current['BASE']); } } } } /* Check user input and return a list of 'invalid input' messages. */ function check() { $message = plugin::check(); return($message); } /* Removes the object from the opsi database */ function remove_from_parent() { $this->si->deletePool($this->orig_cn); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); }else{ // Trigger remove signal $this->handle_post_events("remove"); } new log("remove","users/".get_class($this),$this->dn,array_keys($this->attrs),$this->si->get_error()); } /* Saves object modifications */ function save() { plugin::save(); // Send modify/add events $mode = "modify"; if($this->orig_dn == "new"){ $mode = "add"; } // Create or update the pool $this->si->createPool($this->cn, $this->description,$this->productIds,$this->softwareIds);# if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); }else{ $this->handle_post_events($mode); } // Create, remove or update licenses $add = array_diff_assoc($this->licenses,$this->orig_licenses); $del = array_diff_assoc($this->orig_licenses,$this->licenses); $update = array_intersect($this->licenses,$this->orig_licenses); // Remove licenses foreach($del as $license){ $this->si->removeLicenseFromPool($this->cn, $license['cn']); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); } } // Add licenses foreach($add as $license){ $this->si->createLicense( $this->cn, // Pool id $license['cn'], $license['licenseKey'][0], $license['licenseModel'], $license['partner'], $license['conclusionDate'], $license['notificationDate'], $license['description'], $license['cn'], $license['maximumInstallations'], $license['boundToHost'], $license['expirationDate']); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); } } // Update licenses foreach($update as $license){ // Do not save untouched licenses if(!$license['MODIFIED']){ continue; } $this->si->createLicense( $this->cn, // Pool id $license['cn'], $license['licenseKey'][0], $license['licenseModel'], $license['partner'], $license['conclusionDate'], $license['notificationDate'], $license['description'], $license['cn'], $license['maximumInstallations'], $license['boundToHost'], $license['expirationDate']); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); } } // Log action if($mode == "modify"){ new log("modify","users/".get_class($this),$this->dn,array_keys($this->attrs),$this->si->get_error()); }else{ new log("create","users/".get_class($this),$this->dn,array_keys($this->attrs),$this->si->get_error()); } return 0; } static function plInfo() { return (array( "plShortName" => _("Pool generic"), "plDescription" => _("License pool generic"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 7, "plSection" => array("administration"), "plCategory" => array("opsi"), "plProvidedAcls"=> array( "cn" => _("Name"), "description" => _("Description"), "productIds" => _("Applications"), "windowsSoftwareIds" => _("Windows software IDs"), "licenses" => _("Licenses")) )); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_licenseUsage.inc0000644000175000017500000001270411425514377023751 0ustar cajuscajusinitTime = microtime(TRUE); $this->config = $config; $this->dn = $this->orig_dn = $dn; $this->si = new opsiLicenceHandler($this->config); $this->is_account=TRUE; if($this->dn == "new"){ $this->initially_was_account = FALSE; }else{ $this->initially_was_account = TRUE; $this->cn = $this->orig_cn = preg_replace("/^opsi:cn=([^,]*),.*$/","\\1",$dn); } // Extract pool name out of the fake dn. $this->init(); // Prepare lists $this->usageList = new sortableListing(); $this->usageList->setDeleteable(false); $this->usageList->setEditable(false); $this->usageList->setWidth("100%"); $this->usageList->setHeight("300px"); $this->usageList->setHeader(array(_("Host"),_("Key"),_("Pool"), _("License"))); $this->usageList->setDefaultSortColumn(1); // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } function init() { $this->licenseUses = array(); if(!$this->initially_was_account){ $this->init_successfull = TRUE; }else{ $res = $this->si->getLicenseUsage("", $this->cn); if($this->si->is_error()){ $this->init_successfull = FALSE; msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); return; } $this->licenseUses = $res; $this->init_successfull = TRUE; } } function execute() { plugin::execute(); $ui = get_userinfo(); $readable = $ui->get_permissions($this->config->current['BASE'], "opsi/licenseUsage",""); $this->usageList->setAcl($readable); // Handle initialization failures. if(isset($_POST['retry_init'])) $this->init(); if(!$this->init_successfull){ $smarty = get_smarty(); $smarty->assign("init_successfull", $this->init_successfull); return($smarty->fetch(get_template_path('licenseGeneric.tpl',TRUE,dirname(__FILE__)))); } // Create usage list $data = array(); if($readable) { foreach($this->licenseUses as $license){ $data[] = array('data'=>array( $license['hostId'][0], $license['licenseKey'][0], $license['licensePoolId'][0], $license['softwareLicenseId'][0])); } } $this->usageList->setListData($data,$data); $smarty = get_smarty(); // Assign ACls $plInfo = $this->plInfo(); foreach($plInfo['plProvidedAcls'] as $name => $desc){ $smarty->assign("{$name}ACL",$this->getacl($name)); } foreach($this->attributes as $attr){ $smarty->assign($attr,set_post($this->$attr)); } $smarty->assign("licenseUses", $this->usageList->render()); $smarty->assign("init_successfull", $this->init_successfull); $smarty->assign("initially_was_account", $this->initially_was_account); return($smarty->fetch(get_template_path('licenseUsage.tpl',TRUE,dirname(__FILE__)))); } /* Save HTML inputs */ function save_object() { if(isset($_POST['opsiLicenseUsagePosted'])){ plugin::save_object(); } } /* Check user input and return a list of 'invalid input' messages. */ function check() { $message = plugin::check(); return($message); } /* Saves object modifications */ function save() { } function remove_from_parent(){ return; } static function plInfo() { return (array( "plShortName" => _("License usage"), "plDescription" => _("License usage"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 11, "plSection" => array("administration"), "plCategory" => array("opsi"), "plProvidedAcls"=> array())); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/class_licenseUsageByHost.inc0000644000175000017500000002374011613742614025100 0ustar cajuscajusinitTime = microtime(TRUE); $this->config = $config; $this->dn = $this->orig_dn = $dn; $this->si = new opsiLicenceHandler($this->config); $this->is_account=TRUE; if($this->dn == "new"){ $this->initially_was_account = FALSE; }else{ $this->initially_was_account = TRUE; $this->cn = $this->orig_cn = preg_replace("/^opsi:=([^,]*),.*$/","\\1",$dn); } // Extract pool name out of the fake dn. $this->init(); // Prepare lists $this->reservedList = new sortableListing(); $this->reservedList->setDeleteable(true); $this->reservedList->setEditable(false); $this->reservedList->setWidth("100%"); $this->reservedList->setHeight("220px"); $this->reservedList->setColspecs(array('200px','*')); $this->reservedList->setHeader(array(_("Pool"),_("License ID"))); $this->reservedList->setDefaultSortColumn(1); $this->reservedList->setAcl('rwcdm'); // All ACLs, we filter on our own here. $this->usedList = new sortableListing(); $this->usedList->setDeleteable(false); $this->usedList->setEditable(false); $this->usedList->setWidth("100%"); $this->usedList->setHeight("220px"); $this->usedList->setColspecs(array('200px','*')); $this->usedList->setHeader(array(_("Key"),_("Pool"),_("License ID"))); $this->usedList->setDefaultSortColumn(1); $this->usedList->setAcl('rwcdm'); // All ACLs, we filter on our own here. // Create statistic table entry stats::log('plugin', $class = get_class($this), $category = array($this->acl_category), $action = 'open', $amount = 1, $duration = (microtime(TRUE) - $this->initTime)); } function init() { $this->licenseUses = array(); $this->reservedLicenses = array(); $this->init_reservedLicenses = array(); if(!$this->initially_was_account){ $this->init_successfull = TRUE; }else{ // Get license usage $res = $this->si->getLicenseUsage($this->cn); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); $this->init_successfull = FALSE; return; } $this->licenseUses = $res; // Get reservations $res = $this->si->getReservedLicensesForHost($this->cn); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); $this->init_successfull = FALSE; return; } foreach($res as $pool){ $l = $pool['softwareLicenseId'][0]; $this->reservedLicenses[$l] = $l; } $this->init_reservedLicenses = $this->reservedLicenses; // Get list of license pools $res = $this->si->listLicenses(); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); $this->init_successfull = FALSE; return; } $this->availableLicenses = array(); foreach($res as $license){ if(!isset($license['licensePoolId'])) $license['licensePoolId'][0] = '-'; $this->availableLicenses[$license['softwareLicenseId'][0]] = $license; } $this->init_successfull = TRUE; } } function execute() { plugin::execute(); // Handle initialization failures. if(isset($_POST['retry_init'])) $this->init(); if(!$this->init_successfull){ $smarty = get_smarty(); $smarty->assign("init_successfull", $this->init_successfull); return($smarty->fetch(get_template_path('licenseGeneric.tpl',TRUE,dirname(__FILE__)))); } // Create usage list $data = array(); $this->usedList->setAcl($this->getacl('hostId')); foreach($this->licenseUses as $license){ $data[] = array('data' => array( $license['licenseKey'][0], $license['licensePoolId'][0], $license['softwareLicenseId'][0])); } $this->usedList->setListData($data,$data); $this->usedList->update(); // Create reserved list $data = $lData = array(); $this->reservedList->setAcl($this->getacl('boundToHost')); foreach($this->reservedLicenses as $key => $license){ $l = $this->availableLicenses[$key]; $data[$key] = $key; $lData[$key] = array('data' => array( $l['softwareLicenseId'][0], $l['licensePoolId'][0])); } $this->reservedList->setListData($data,$lData); $this->reservedList->update(); $smarty = get_smarty(); // Assign ACls $plInfo = $this->plInfo(); foreach($plInfo['plProvidedAcls'] as $name => $desc){ $smarty->assign("{$name}ACL",$this->getacl($name)); } foreach($this->attributes as $attr){ $smarty->assign($attr,set_post($this->$attr)); } // build up a available licenses list. $licenses = array(); foreach($this->availableLicenses as $key => $license){ if(!in_array_strict($license['softwareLicenseId'][0], $this->reservedLicenses)){ $licenses[$key] = $license['softwareLicenseId'][0]." [".$license['licensePoolId'][0]."]"; } } $smarty->assign("licenseUses", $this->usedList->render()); $smarty->assign("licenseReserved", $this->reservedList->render()); $smarty->assign("init_successfull", $this->init_successfull); $smarty->assign("availableLicenses", $licenses); $smarty->assign("initially_was_account", $this->initially_was_account); return($smarty->fetch(get_template_path('licenseUsageByHost.tpl',TRUE,dirname(__FILE__)))); } /* Save HTML inputs */ function save_object() { if(isset($_POST['opsiLicenseUsagePosted'])){ plugin::save_object(); if(preg_match("/w/i",$this->getacl('boundToHost'))){ $this->reservedList->save_object(); $action = $this->reservedList->getAction(); if($action['action'] == "delete") { $id = $this->reservedList->getKey($action['targets'][0]); if(isset($this->reservedLicenses[$id])) { unset($this->reservedLicenses[$id]); } } // Check if we've to add reservations if(isset($_POST['availableLicense']) && isset($_POST['addReservation'])){ $id = get_post('availableLicense'); if(isset($this->availableLicenses[$id]) && !in_array_strict($this->availableLicenses[$id],$this->reservedLicenses)){ $this->reservedLicenses[$id] = $this->availableLicenses[$id]['softwareLicenseId'][0]; } } } } } /* Check user input and return a list of 'invalid input' messages. */ function check() { $message = plugin::check(); return($message); } function save() { $del = array_diff($this->init_reservedLicenses, $this->reservedLicenses); $add = array_diff($this->reservedLicenses, $this->init_reservedLicenses); foreach($del as $license){ $this->si->removeLicenseReservationFromHost($license, $this->cn); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); } } foreach($add as $license){ $this->si->reserverLicenseForHost($license, $this->cn); if($this->si->is_error()){ msg_dialog::display(_("Error"),msgPool::siError($this->si->get_error()),ERROR_DIALOG); } } } function remove_from_parent(){ } static function plInfo() { return (array( "plShortName" => _("Usage by host"), "plDescription" => _("License usage by host"), "plSelfModify" => FALSE, "plDepends" => array(), "plPriority" => 13, "plSection" => array("administration"), "plCategory" => array("opsi"), "plProvidedAcls"=> array( "hostId" => _("Used by"), "boundToHost" => _("License reservation")) )); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/main.inc0000644000175000017500000000333711450302235021065 0ustar cajuscajusremove_lock(); } } /* Remove this plugin from session */ if ( $cleanup ){ session::un_set('opsiLicenses'); }else{ /* Create opsiLicenses object on demand */ if (!session::is_set('opsiLicenses')){ $opsiLicenses= new opsiLicenses ($config, $ui); session::set('opsiLicenses',$opsiLicenses); } $opsiLicenses = session::get('opsiLicenses'); $display= $opsiLicenses->execute(); /* Reset requested? */ if (isset($_GET['reset']) && $_GET['reset'] == 1){ session::un_set ('opsiLicenses'); } /* Show and save dialog */ session::set('opsiLicenses',$opsiLicenses); } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> gosa-plugin-opsi-2.7.4/admin/opsiLicenses/licenseByProduct.tpl0000644000175000017500000000112311347714031023442 0ustar cajuscajus{if !$init_successfull}
{msgPool type=siError}
{t}Check if the GOsa support daemon (gosa-si) is running.{/t} 

{else}

{t}License usage{/t}

{$licenseUses} {/if}