From 080a7acdeeebd34f63d75d0792bc4de24cc6d5a6 Mon Sep 17 00:00:00 2001 From: Paolo Date: Fri, 29 Oct 2021 16:59:31 +0200 Subject: [PATCH] Removed the directories cis/private/lehre/ects and include/safehtml --- .../lehre/ects/Beispiel_Change_Management.pdf | Bin 83734 -> 0 bytes .../ects/Beispiel_Computerarchitektur.pdf | Bin 15016 -> 0 bytes .../ects/Beispiel_ITProjektarbeit_at.pdf | Bin 45298 -> 0 bytes .../ects/Beispiel_ITProjektarbeit_en.pdf | Bin 21122 -> 0 bytes .../lehre/ects/Beispiel_Projektmarketing.pdf | Bin 13576 -> 0 bytes cis/private/lehre/ects/beispiele.php | 78 -- cis/private/lehre/ects/freigabe.php | 363 ------- cis/private/lehre/ects/index.php | 914 ----------------- cis/private/lehre/ects/preview.php | 746 -------------- cis/private/lehre/ects/terminologie.php | 921 ------------------ include/safehtml/HTMLSax3.php | 687 ------------- include/safehtml/HTMLSax3/Decorators.php | 363 ------- include/safehtml/HTMLSax3/States.php | 287 ------ include/safehtml/safehtml.class.php | 671 ------------- 14 files changed, 5030 deletions(-) delete mode 100644 cis/private/lehre/ects/Beispiel_Change_Management.pdf delete mode 100644 cis/private/lehre/ects/Beispiel_Computerarchitektur.pdf delete mode 100644 cis/private/lehre/ects/Beispiel_ITProjektarbeit_at.pdf delete mode 100644 cis/private/lehre/ects/Beispiel_ITProjektarbeit_en.pdf delete mode 100644 cis/private/lehre/ects/Beispiel_Projektmarketing.pdf delete mode 100644 cis/private/lehre/ects/beispiele.php delete mode 100644 cis/private/lehre/ects/freigabe.php delete mode 100644 cis/private/lehre/ects/index.php delete mode 100644 cis/private/lehre/ects/preview.php delete mode 100644 cis/private/lehre/ects/terminologie.php delete mode 100644 include/safehtml/HTMLSax3.php delete mode 100644 include/safehtml/HTMLSax3/Decorators.php delete mode 100644 include/safehtml/HTMLSax3/States.php delete mode 100644 include/safehtml/safehtml.class.php diff --git a/cis/private/lehre/ects/Beispiel_Change_Management.pdf b/cis/private/lehre/ects/Beispiel_Change_Management.pdf deleted file mode 100644 index 31520b52c95a95e322b2c861d968029061651c66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83734 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%0D@k%A1+s^)7~}fb-v!sz-)8%g9O~zIW8x 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 NLQO3qCyI{pzW|>eA7B6g diff --git a/cis/private/lehre/ects/Beispiel_Computerarchitektur.pdf b/cis/private/lehre/ects/Beispiel_Computerarchitektur.pdf deleted file mode 100644 index 291500516f559bd8f5f1d13b17a7317bd2a68600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15016 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 diff --git a/cis/private/lehre/ects/Beispiel_ITProjektarbeit_at.pdf b/cis/private/lehre/ects/Beispiel_ITProjektarbeit_at.pdf deleted file mode 100644 index 2f817ea9565e93591aa44bdc211fdd392e316e5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45298 zcmeFa2|QI@_c%@}5~2_hH&bM|^EGFlr_3@Wu8YfcFLy9il15}IL*|rZE=r<7vkaw- z2^Ez>lY|DgG`5^;7m9s0k{RxhvtS~8pMg|V{FlCq#gGvb|c#&a%aVm`fGoTWDh;*0()r(B?B~W4Z5i~j> zhz4_K7I0Tk_`y0P5LTs)iBuXLhG9u)P6C!*Khl`em}`w67@%fgVX$X-(;>;41%Wn! zTN22AbbpvC28Do|8N!&NgBue`bOIG_Xy9N-z*Bq(aD5`3wuwMBpaca|$OIsDHMjwV zM4{RTd*KOiLqaGKPp~u5hdUE}05YU10&Yqm`uWpgSTw77Tx`4p2zdI&jWjxteGo7A z_Xppfu<@H4n;EmQv$M0Af`4q^``8SixBut|A^DFGK!v|wVH4nD!?KlfuuHKm5@6>L zVE=xDZ7mx+8wd0sJKNlklWQ6G;w4KtpllU>Ha1RnHulAf*f}_sKoIPUI6x*R7uzy{ zm4d5;)^Q6N0lYYXT>^;B;bIk7vXpBvC&)z$ut9h@7A;w{WC;_7iA{iQ z<+`P-kepJ2LMT03F0{T^$gUJ=S&SX^{`ZG$Jb=AL0vrNtI&5#B-Yz5bQ?0ihzy0!y z(YM-MdpyU`*_#QU*6cnhWiP7sGF@hgkMHw-!J^Mq{I4a=G(Kj(!*1gCT9MVu7#a0H zTlkzl*m3Rx8Y}Lka4QNid0ymgX5X5LVpn!fqvCr{`%|0Znre1ZgRB zcNW@gY&Cr+l-I>IZbt@nr5lcgh9 zH-DRc5Ul=T+k~jm$bAjv+&zKbr7$@XmUO6AV3SLU;5Gf2LrIHouCL0;@8{E&xH={( z*77j?PUKq~dws9`oBktyw$(~zTm7<48@?(Tm8c0C#@AM=CBsb4hB}x&p4h%pe)Th5 zkwJ;(=O!v2hLtrq6(gUn)~&>D^&-b_Pgo{xDeH+WPs~y}XUjv;wasHE2)cS18L~$vLZ5yP4*i7CEQvaE>|)BMYXqLrBudH> z9Tq4EXgFx4$1l&OsFI?4{mq6{j>mUv%iX%scH2S|&k!BuReS3up1rN`AtaM)Og~>N zzB+s(XWfk@v6UTc$eJh4eN%i_Y)$&FzJBq7@RG+kt8G)txzW_f79NLpv4Jc6NXYRZ z|K*##UGDa{ZFY{VR%ooxjXRtW!PjN5JXT7_Hye|_xmh8%K_xnRF?Gc)(YD<4PoC}Q z5s#3TFg{bW^F+Q;sr1%!*=gbzhfDd6*JJfhKe8CEE-F>Njz3&4wY2f})VcFf)z3Gc z66azR9gI5MR%Xl1-ko3AN5ClEShc>cxjZWv<&<@Zr**NwN0+Crg1U=KrEDdWG9)v1 z7KeqMs7u;2(k!#|jtfUoeA!;?QilYAW9!D(^_Pk7($Da=MXX3hn$iN^7ckXq?RTtqq9mbI(dt(J^;>x@S-LH_{ih!*IqDi| zJU>={%aMNk*^4fpTg264a+yUQqMqBVY4(|HmV`Muc-+cDVJ&GWQ(4Mk}*geWNIpxE7 zsp1WX#y*ynXLk;F*gT}Wn8pt)e$8LuAY0nzlX{%Oa$D5q|iHk&v! zIQg|2-?&lPVXg4=v_hsyQK^-{T;|-c8R=a9SeIdS(fG%7zT;m2)kP$phI1 z!Jh-t3oBgHaO~zr!VM?gn%1KRO3LacE3Nf~YlG7`4(u>hC~+x~|2W;eO=hrT{WAV2 zv!p!7{o%JpDM91i9&#tRzC}OP3}g_cl?Li3_iOZ@zv63ZDHrky?KFJ^ANuvSXr&|_WJrp>A~@=Q4_sBaO>{fyJIlpPa9)T5}!6E@vaFU ze|p_GPb>W0{Zsid)0*SGzqf48YTytJ#Ec%w(hJVD$CZg&p;sD0k?r1Q3vaGyOW%F5d#0btVAs=gM54^N2+IL6Qo~DOa)XhG$+w8{cT@xcMYZ6s9s3_Dgt6wMx0TidFm=y@_~+#~Iw5?yn}=ZnuXJgEC^d~GkWpEPrktND0Q6`fG-S{x~K zZ?bW;Cqt<@Dd(Q2=Dysdc!p=$dHOD~V+66!QPso4ceM>77VWzpHP$>}P})Dq$gr<; z_?)z*LLWAv)ds7;;!?wJXRq>24L>px!Rd!_=ML&sdeBrOXnsiV?TVHogdOJfH0AU4 zldyZGn_c?}OER&;1L#f88w(D(DaLEf6x~ZT8eW!?-Rt90m6LVo5J9G}U0JyrwRkfj zcSmej?tVUGAK#TCHC{oNjc?WUZc86b)>9Lr%5c4^uxxJG{O-WDlQ2xOL-!jt{TuS; zMGv{_9yz)_+?%y6b7;%abeTq@l^Kb(y|Nds#XcCLj%L(0`&KHRb+@%tud$uVGIv3_ z*+&g{PGT*B?Gm==KWkTSxEUO<^7wkPctqXg(&JmYl~t6)znu>upGs|Z3b}Nr#pL#A zXx|6%XS^DbcO*B(nm^9Hus?Bg|NHN3rHQ(-aRX9ls-gLy>E{Cby3cziO-NPu>N$_1 zT6d>oO}A`sMU`{dXEpK+2c3|TXrpwzwXe~s(D6-8KYUs!*D?M@Lt%XU)`F6CG}{VS9J|6%RBwyLxEKLu2d79ZrQ$vqCx1>qXDbAM3;*%CZ3dCH)MAp zh3Q3lyir51=YxcnH*7+0HjvpkUfad#FLLAD-2_WE=`@MOb#V3Osqar?W;^)`LLnf^3T>`Ddk4F}8QLHtdvVFai%o?%yXd z+>5^5!bj;yiSX0CH8LhGUEGUvGdgzDMQ)cq!`Rxq3PZ1GIZmrq3^Eva@?5A&4_NeOxXrTp<}RYl+UD>GfE++NjO&Uhg)nDZj6A(+^HkB_tc%!$mJW~dCtsv?IkXK?LBvQiTVpli=&NoU+0>(UbNOW zSoN;#?T09*F^{<19u1$nAvt!FJ1!60pp=L_jBF}LRt(mun#5kPs;eR%Xn*?j$c4IZ z5uH+Nsw;1&Bg;gdOKvEuZNUZF;({J~pQ6HxD{kgxlqss_M>Zf&IJ)b)DVaZ%I@5hY zLa^8UQ5L=MKJ_lQG0NCUG}kOXJw>HO<@v7U4e$&O^QwB|ikf#eQIYZHueu*>+p=p9 z`JPLWf!Spj>8+ovk7pV6y4<{KcB4@<$>@}cvZ~mZ*AktBhwOvxxY4J2`q2jhbV4|3 z+&5FB$BWfS={J;)vn9b4@K>kA`CSNo#Vr>V1fR?(b@9c^cp1WajNdQ1ZT$>&yZC5M z)?SrD!_7fiNA}yhXx1V|%}6to8*;kEGX1g$TQb_8Clc)PN_Y*=Rx&koOtwVyK#?j8M<-#+Tg{WkbO_QlDhrOt1vtDHnbQK26d z9hTPwAOHVGsnP}bJVq$MY%?_N4q&AtA?H76k<{?#e1;l`y2+2{KN*mPeOw5_wuT(W7& z+BF|1*uRR0X}>k>jl7?v*B3-XY4UpVy*gM_;**)0;+IFb(4MtnT<~)zJwEOJ?$`sd ziDj_xmuDZIvAS{~lg+(R{WAK5YQlw{9{6_)J~vt8Xyd_BpJ(%g05He)^qF^V3Xp zNXe3Rw1to-@tXNW*Qg7JDTGYpsGhZrikDgyf+$HHk>ow$s zv4;nf*nClkH6)F#E>uM}JgRO%)$zW0@;IpadHy8FSv`d;+ammW{7FGa7x^hfTKHmF zF_fNhN|2aPeNgg@#k&`w?bl_a-)$ET=2M$EovgE%cT%i+@wd#Olt(Y{oMtWEOvf$O)rM!vIE9zIkyZ7~$e*M7Bn z>C8c|eOHrBn?y+bT6GBUsbpgrruiKU~sl+oX7> z455^BihAt9NjKOVrE0EAn#<(kqgyTt3R&JD$@}*tNvz$!dqy)@SDO6#<5kX&mwMl? z*nLVX^|Yy(k2)%LTIP`Pzq?3mOmkvh0)RH_goww;8 z_7*=W)CVP7Y}d6Gc{4!G8%C<0R9=}K6qi_c>qgR;{TaiQvNSQlBF9zgwjKM?do|Nw zr8~siirhWP-PzZ~8y$z&H*MzSsz)bxZHuebyJV^9C3v-YTD{IF?Q2~&hbcj4LmW1q zgcn>Ma4}p|JbKwX+(*&AXoQ<6jE!yayQNE)CfnJUt#)~5nfr>eBgXxVsIc}xjjyk- zcj@vfrCzNuO_gssnKxf(j2;}E+8s#{>$)W1__D=)Hzx4f=PG=uPOIeEQ$5@l?GoA+ zk66|#CECazZsM0oO&X#b2o)cHUGvtu)z9@+tK@m7v}#9exe+$&Jkf(I#`!~$zlo)B zPsat=8||>T3+1(^Esw93m3Uot-*+6xC+K(_7kgso_V8nyIrmBLlceyJ7KXobbl4fR z?$`-Rsi0bTj$g>S!F02st+Zsj%|2U=(U(%6TVr#ac3PD`Y&$~POsnAg*bUz?)~y|@ zBiFm;?W?VoJSwRc)eN;wPV%o4Tr@{lE%kGJuR^$b{6&oOmD8|ej8l#}Cn=h5bKTfW zJ}kaV;OPF~hwPh1-Epk&_rnFsCawz?^+-Q9eqxtJ%s^YnmXL75w>2X(3Mv0MSv?J-)-9BXA#O18ma`lb#0MF~1Z>P>qwx$gxO-;Cw zmW=j)LN)7ME%|&HX?^Kysmh2Cr&UI>h;xgmvkBdy6RtDBczLHo>&>w7{j@V-_ta^Q zg5i&x@+GMLT~o!e8SBb1p~H?(JI-#{iA*n6P>Q|GHWDhpw$(5n+j{x*+Fh;Jx^w;0 zYyt}Pb5ce-7`t!ptz0Jj=yv8Fj|V5jFw}$tx_WYXRC9B-79;;IJC?-8tzEm=J(Z08oT0Ake`*vmN#Rl?MgZ_H! zF}T&|!FyP3WlXh(y+`>wXGb@}t~9Aoq(ir}nVZ#`q9u%?r@?Fj+_txD2kP&aQ9bw$ zcleCNm6zYZq(q#nX+2qhHOJI&bP~HKgBTGO@ze`giv++Z+ie&krsM6|+- z>#uV}Q^}X`cP=rAN2OE4NeQ|w?}6fzn|*dC z<(@RFa0{|&6^S%fzLoIj!UUc?b7}B!=`QoJ>38w{8)8d0UeR%Fv^JXAb)SRlJKH5$ z*H|`rwj%{IU;NY7*VL^t(vuw-P>5@ZyQy%X^P#LS%4X&}+oZyf>@yK_nVla6yL^qf zb*{#7%tYMn`Oapw!)S!)0l&1iGxTfptpL{^N9|QB3J+9bs@eD!t^h;)(o?nwg_TqH-jo}^vQ4qN`OuedgYOl;yZtdqu7b87`J>i} zJh+4^UFrUvjeW1vx!2}#!za4Y1G^kMV503g{V+^K_VX4!Qd9QktXByk{s%T^A3kKV z`@wz{>pk1x=gW3yUMbsY*Ga>+FS&nTz6|C)6Ibo@a>+`huJ(;91u~0cJSi{wd0)T& z&bHBHssT&YmK`18GYMcZCA z*KDhLH6`0A+#2`^YwSueNwU;gEGCP@}<#=w6 zLWxzIOR%x{NAnGjKgjtH)bm{zEHQZeW#eJF`+L?phM9`pYm3QCZxp0blrKqb+$Mv%g)@<546JvPEfHK>p*{54Nc6dd))9lko;&*rj578W z7gtXyuep~M=SYj}wM(hJb2Rp<>dKS&Pxj_~RT4DL*A?ADLu0m4&&^toXl*WYmKYcO zz&K>)m}~D+Ug~4(WaNc}IR%IxC9FyN&h`rbZQSjM5iH_^=#J#|!=Do_@7$B}ZS~!V z2A!K`$8Gh!slC3N*Y^zQPpAy{p7cM|B&aJ>xq8_;^z?VO1C~1r1p7vGuNM{E+aI?z zHqpRF0atxi%>&IqhXuhiU|_1u$qDt@Xgs3uJiYx_d9*VanLu2@Z! z{fgQP$7xNg(rGiS!@^2jIlbxrMmOLp*bUAYHo%ypJ2f7_bJUiar=`f*B zV|y4mWBsKYOh>5BZ^z}g>)x927wS`6R$!?U4e!mN9%b8kXurVp#BvSi-C|Gd$;XzR z%zBv35MJjLVrC7ywfJB$TkLY;VfkeZBHO;KIL-AXdZ)xAt%wJYc15;~27M{PS3jyh zS3g2=*uyne^12J1Q)hp<-dwJdsw)b&YkZqCQHlPl`&nnC*80QXMVETJxUMa46;PWx z-M2>Lz1aQjPH#H8BvD8qb%n?kk#7@8i_ni=h!~U=?R8WQ6hJE_h>Gq`<~d}3Aa(!Q zTd9UR@WxM)-=aJxUWsL9?zG9k>aQ)_mr@Z>&ov|9GJfy2)5OOUd(7?Q0>2vDPk0_Q z+_8Vm8t2^ic&Nm1$4vNm-o?*tqdWE&TjjNMb#>P-lk&cQufvUal9S4Fg5+S~APfN!jZ`JrM z8zMUopElY~1GC2Alyzob9}LF6T5Y5qKaNZwS1BrPwG{kjc})2kKS@ewC{~wkQOC#e z7ZUDodfW!wGnU_JzWmw){-(RXY=dHHVPnFike!7h`_z)#l0l)4mG=Xx?Mx_V+?1!X zL>kD6eI_;r<~eNU9UUfu=GIG1-E*kcz)||X!AawLFE2M(%br~bon6&dV=d3h`_t*c zGz~Z$Po$~P33z`pF_00Y97ZINRlMkMS|E`OCqnDCG`NGaCB={88Au`!$tnTCehPC7 zSm~8N7Nqyy-XneSmGgyD{lWpI^8iT1{93Ss{levMun3G)Q~0qAY~#jUy!U|H zxnWp~>2Q0vy%}`DkWd_e-H-KU<~wVF`Hx8T9AQu$7nb<3l5b{c4?{xB^LAh@nMMbJ z0<1^@M>|W9!6dza(vNj~W(0y82C9!848!DzwSo;}*3oXk;y)7$i$7K=G%HGAwiJ`M zKa~2h@NNN?wV51l@}hzja41*-hGJ5N|46YWgwrhu5pzKaKgTt|4M<)znw3{D42kqxKSBpm6FS1IolOGavvoj`cowhYI|aYYq>DWA4I&xFn`*aB6^n8bGA3 z22)i<0)!|SRuv1L!G%S_z=sAffd%XJY7Tlp{W~tdbq$$ulls<>xmma}PX6gU{{pGF>y#u{~ zbYkJf)Cov0W-q3$%<2TB4+}4dU*BPbd2O=Axc4z7Yq!$Y=h(7Zj%3p9ndco2+l*f+|%ZWhs@gjSHusRUC#~e@)|Fe?V_{XpcHv^%ZM7$o^k3@hW77WZkW)HK`h-efJBKxtX&MUoSiz z2EOombh;PbpWp*?gF8@yVIE9EFfi@#Ba)dhoiI358yNImQ3K;R76-H&tqKF5A$>yw z7&r9ILcpkg;DHF^)_35BGrwO*n1e4!a=?R3hcNI5<^V!lL1%zDL_$ea=DZRC{z7=s z2o*3jatPx7w?jJ}0=SJFxQ(m;M+>HT`X(^_Uy_Wip;}u49%d^L0@wsRfcX(j4S|DE z3Ea*bVC0{L1bx$Ba7(WU3WGi;50t8ksu~!kaOy}E&~L#|ql#9W7mF=7LIr5q>;=Tb z1cy2*6B?_kf&#-Z1_uBDMPC-@|0yd#&s4x5294u59C(^*BilLZvjDTy!L0MYM;nb& zo289ra`7AOS%Ciy+DJ5JmNpWL{!_hY0sc2=;}El?Rn`AQnU(z~!c1LdDeSB@04XNR zfcO`>8Nv-Bf`JBuuN?TSg6|WU&cg6P+{_ugA%z<#A2S!I9kWA%Nj$SZB2g;PED^jx z55S}YQwJ5aI_S+%*Mlj5PJ{yTgG^5qP{3z44Gd%8&2aXOY4`yYU~tD^R4@n}_;MhD zg#o?{5Ee5B7_bcj2!V7jsy6|IV`Cw-KU1FXI%=SUU>1@Gba8;13a~RE^7eFw4=~mJ zyvTkUOf+Z}lqxj3L7Dny#!#9vl9dQbfo~|Y6ah?VLA>?vMVP$&UVvHiSu`x%%#_~& zEeZahQeF&SI@QaMPH>l}x+`e>UfR@)>P7N_IeYn&lwf)!Lbw+h1n9%8i9taGYAA&S zQs+R3?qy@Djl|o0Y+?4;0J^iflMR( zSsD<}zTo@y2Rt%v5oRN@x{L*g@FxJv zJd!{SBT&5|ewevnsyE-G7J!3^0G&wiWsv<~kj5BMeZBmt&>NA=OrV2Ue+m_J2>?X} zXkktisvp50w0;B|AHA2{Rrex0@yA= z52H}Qb`zjgG#HIQ@}|*&M~qHjKs0DDOM*Ku73@-g(SYj0LMdb>8HWwr@;)Gu)klE~ z2YLyndIi#nG`v5I5d=^W=#g|7s5i(`fjNMR0c@a(G`c%57RWwiA`Ry2j#kA0{4mhb z=kZ!o=wSdM(Jv4hK^9UZ5xhZVNnk)A1OdjFY=sf2J}^)X=6FM(tNf6{f?*3{7wQT` zvcDJDj4>~$f6x#PK+v-T*gPmprphoA0#F$;Xw_e(&lESsmmUT@TJv(Auaq)Ok3oYO z6Z}blZ5Z?i2n<3Fv8D_vGhZ`E%zgdlBaduV@{9Mp#yK$_Y<1h7L3 z$y8>Py8;TS0%j8s1n`P#U{D&sgAV%0oEZM#>Swym{+b^O&2&0~iTv+=C{p-}m%FQzmXv{q`Y0e4+1@QnbhzIDdwy?}B3==ynD^T=5DZkw-_jwWK{z1~&AeM&k4l7G zKL4hRi8<2D4oXZHlbRaS;lp$>&7%G{9872wc7cNl2U<}XB!P7^PzBINxP=}j+(Hi% zljKkSB_!^Le+jAnKk+XC|KObCf7ZVQ1}N;`{w3x{=Ks2XNfo&BncgMPjTd~s|L9#} z!v4wG@Sl2?ApbIx3E-yt!Nj~z3+i_)kJf+Hr-TEB7DN??UFcYwqY7pIiRypgSowKY z^k=upoby5rfmOl%?7V=iLe{L#%+hIo{yG0(2~0F-u1fPJFo0o2gzT~T+2B90LuM!3 z3rZ-#tcY{I6<`&D0Se4V=V#D?z)t{X$$r4b2Eh)5dF#uacb<*;2TRC;_5!=_|1}do zSpo#$i7@sek$|~F3nmgs1SOay@MDlb?G_jY^JMhM!0QpnoTL9MLMBv3a4>;9Yss-@ z((`3l<`=MX{-V(eSx_vKo@HPe0t53WV>JjeJ%LR?h7tX#^LB3-R9AmsBGTq&{V*?J zxA_2j(=o^wn8Lub1KH*fUl3yZU_vDLQV?mtWB`=}md`vY+5EP(}pvk0M`j{3;??T*kMeJzZyGWwH`U|=u<~AKS4}iAM+Ww`>;ri z3JUsO%)9#_6h9mh5G(V%{$Kg9u*ysZ=j?)iw5IX@6Y~i5ADBn80TBQ8(#l-?1(+(% zefAAtV5tL&E^>kaZzcHj&%^wP?*Xw!|04S8ubYnl$Z%AE+k^FXh?4~@{0Mk30rTWv zGJnJ@80dqr87mNfpn^~Xb0_F83OG0cJ}5%Q9*W|zf&SRLsbP>RYTy$GB4|*mV1{K1 zlJ&p}65QSqhJ@>Zh$^_A159AWZ)oAha!Fa=|Lm~xXmx;!a$*Ho9y8Zz~*48h67ZP^$5b- zz~}9!R${*Y6RIG*jVY`J4a-CZRVC}HZMO>&abS%MvEN-@UjzQ5F0(2ML(bR#heFPt z^ukn^xv(l`^MF7e=-?Y9(=Pz*Q5O5mlV<)HHn`v%8745R8nZz|VDTU77*N>V&ml)3 z^okX51h+Su3p4v~9cRNl6o|#fTqurO_mR@s$gLHw5grsA1kNOa zg$I$yG>vd=DKBuE5J3YxL&$BQYQV^l}-zK;(bNrKtkS1wB&O~jgaAhBY zuNQ+vm)iJ0JR*wuaa3T5ibVXG6f5;-4wyCgiP`^}n1M!FSY9 zuNfIQ*~xgq99~s*5C!Ce_Etu#VGzm~JizPii^eNs@i;V6-3PA@y2~8i1!e!+>In4c z&r$*zKo`+JiwGoY09%TA{@BKUaQ>JUq?1G4}Xj6uSjVg=5KM$i{h_5{4K7(BBgnlzr{5#iof#kx48a_l;&an znYg%r*i#@zLt82gSWACcvJR&be0f125JnCBo%?|$QY;oY44|CZAGEIt`oYNaX&{*R zw=@(2Sl7S6K?~@tv>*7;U=i(iIN;6)7y?J@f`4Kj&; zNn^Sqe@z1+_P@fRA$QF$aA>gh{c9QqGO~Yx!-B~6-_pQth+orikmuo-vZ|1mkc)3CJu01i506I0Cb?P$H5yU!{ne}MsriB9=JurF*Ba9(Z-%u4}q^^%f z8zWVXu?RIIV)*% zGAf-ljG#dGNAPmX${N`iFFZ~fI>8w@F$i!+8i5t%&$82*+cp2yG1DNh7;C?V=&*(cu36C-|GQ3lPY@(cQUT_x0^GAT6A#8V+NuiZfIh0TzM=vgHPk%Ad zaZ+79TcB0BYcfBHK3!b4QdjG?-Iap!&(=4@2m86i$A^lgfRWMufSv(Ea!NROio)> zmF@m;QeCCS`2Ne%o;P;u4b@&UV()iS(WHubbu1E>IV2pV86~A0CAF8IWB7f9HIE32 zdW?TO++tClDU2i~V3uw9&d@;X(LE89RquPHgk><*e#<^tF6CLOYk4naU9^!t*I87f z*i)^KufE&py|^}*EYOwmW_i{whm>S^w20Owvb)H#UDVYi6`uCJJX?I^Wft!^F6AXJ zwX****8?(XrbFY?euiHqV&zgZ;rL}cY_8;vpQ$}^Yr5xS)7Ht|SDkO{SsmIh^(p=zEl z6}O&-<*bq!u7*jj=5%MvP+l+XG8j_HpRsD`Zl8F{zD1XgTv#Ve!mnD^awch$bM8*9 z?>zS&480oWf$?))as0+U!4dsbf3o)OqNc~sbz5uM{Dq=%cV!NNhv*8KL~s=9p_joG-2mMmTw>v}{=F!_B!HTUVomlmC&c13n|)n`Rc z1@dqia(>$AbU9vsW<{?Q+lj(s#Y*|EM|UleC|qRDzE^){s{w~%w_=5i{Ft|s!0Stn zO5!37lCA9>>pyY5ZJXu@pn|h6WY(NsB4gYAkp^QnNjB&2l0xB+e$PxcprH3Qds7;`x^dUx{2fqp|e6< zBFn5~zIdEU+u--%Ju&}ARnJ&tO-Ye9`!>Dq0-QB^|kM|=n%BRI?1M3F;i-vfwPwc(9yCtfl4p&ffu59Py+?Qr>Pfp|U zgwr93VF@K}Tqm#8e2Q17>0k3S)yb2%V==u%sKX=Qy0H?`E?(n?F7Nns?dEph)`Q1L zE47aioz3{X-nDyoWW1~!dn@JO^DKMIJ7;R5_lni&v4>^?S6WtW-sixL9ghl{5bEIk z@?l4VORbBvWPbG<>+`R>ci3URMoI)vycg|@a6D%h_oZE;ef^|=ZPS{zH=gG2`4S(z zJ6+~!ae+33@$t*gF5Btts`cI$_AUCcyF^&QGpg`wjlwC7!})vd@U1J~G)E?xE_c(B zG*?igUnAVZOUQS7WNS`1l}qkwuUo%7EK2%5_UQ2C9VU@OVX}{!oSrw=4PTd-T4Nj? z8UpE({-D|DZ>OZuvarcrF=bbV_-BZBkpn}KchNOZ_W z+V1vTU7yWanAmbd8Bpiv_8)JK2hiUY1U&Blkedv-1TxNJCNQ1juf zix=}edlLLs)K9N?74>+eNg)E|k*9(j_m?CE>GY;idI*{BUpqV763ruQ+dJQI=C9e& z+d_U3U@h`2jd9Uy8!;`%3O9k!E-3d%dQN}oLhVLAJxOS}U6O_tUJ>@q%i>6H$Avna z72$cNvQ&Utrp$X``Tl#FLOdZs5$6ov-mWo5TRx?Fz ziNwk9$?Ll+iFi5BxQvcT*@16Ht#R#-S8~}^6c%cJTl?TqV$60^=|QdDsOTr-dIXX1 z`V-A?!w;uX0mUy`J=^Oq?%~|@QJ1)DSbNvWSly-j2pJ#VmpydX^muvaTTb8IprADE zyj#*;w<1&sD_5K?XEdkkwtI5C!Wu83o^{2gt{~hA@T#(RbUuzBl3RLc&36SiH($fp zJgQ0K=8bWs%U_;)wrB6kNY}7WrLOHyHUu_&vKk*{w zjIw}Raand7X$&F5mu4YGNXz3Z8(Y$Q+u(~wLJLPr!mzI<9>+5+qH_NLtwn1j`+V`g z&lmsueDS}}7ytWw@xRX(|NDIL|L4vZXIswoVfybw#{WKK{O?1?|2|~=??cA_K4kpw zL&pD~K4d)A2`oSaisgT%n#(><#$M7WDG2vNrXM;{g}LtHTg6K}n33t_i)o1!lo!5JhZOfbP?tGdhlv0v%=*~?? zxzFMUGVSc~e6TxXeDb1dh;F`hP6qq#mN#o z6v8T0Pxf4wu9TbpaJ3(e4U%bmP#*It>%>)t(GWgLWOr?Z8{-s}Qe6CYQ@rVzFXiU_ zo$CFrK^7EEv2s$6hFK-=CDQ8#O@@nZ%R%M1rbqox1Z>>TqXtgAP05@Nj?n56(HQl~ z%8AomdNM!k$Pj^1!I!Ocxo7Et&NAVLKI1k{O0mJCBli=N4?FJck`T2lFTH60_big7q10n=l%E=zo2c z*YYEu_o_;-Z`xjJYjBc1sKREb$@}hI`}I_MoLN$T3<)E5pdN0FJFQXX+`mcbR>Mb9 zdi`L?vo#O%)~-?H3eC=ax~8OoAbjX+dFZPKk#uBaWVZQa@u8Rl^j3}S{jXv?KlSdD z2@}rPex~NDH+_%O^NHw~os9cYJ3`X4+z>Hmd>s>b9wcm$?A)AD9=0QQ^UKKAAOp9c zkQc`Fp;bd!w7z=Ia>vIHGJS`ZyGj~9ck?q85^_8^QiAnuyuW8#-|eOh$!9me5eqln zo-tfkDc>WgBB9oEtn=$5^;f)uQAH)&O3H?lhYqOi)z#Ds(R3Rcd*yvcmqSH7LCaM6 ztJtypPmBY3MBY6Ii{IEhe1I19TqTh?8jfT2{T@-%LKeK1 z@taK%7Q5cbs08NM7zfZM2EN#=dA2(zd+Fpp4U6q^i8G>USBz8oB8(KsMpgpc+jQgv zE*7ude0iCLI$6lowscA+?EO8@$&mo(?9o-&E}pHL8y;c8Uv?>&Saobor%ybsyBe6f z4=a{Fk{0GUv-|VgMIWxEOE+{!;1W2@Y#(-YttO_x59?=C-{nZVu<5{gPkwxJZ1yB- z(cQI*eUWNk5>&s;q*U3F9qXm;);ZVQ$vm6q?o(cW^zQi#+~qU}l=Z#z5n}C(whmrg z-Bc(6mv56Au{q~Sdc+6H(AZa`a_7dkMJrZhk&K?6cM7@tC2{4z+8v8}Rv6sgAzXXX z#r*ZH>Q7U{oLA0?>q$sy$wqd4d{?bpxxdrXE_^*<`I&sl)u+0ty;i|&WVnXwo&z4Y ztc{wxOZP;jH=KSpu`BqFN=LGv2j?{I;?pPo_$`Sex2|DE_`@+N5)#?EgrNoxkl}QPkNkBJ73j}u^q08HoE*Ib^YO^g@@%% z*`0jPPzzaiuFQFfXXG&Aj{H`kP};@P(SpL~3OA0NeHmZdQQms>vrS;bzK9jmWqyRc zn!ZoYol-bpzOk`n3#z6$sCYcF<=u@DQz==MC-J<52VaW2zP+60+gJG-ULRjEWwT_( z^DWuiKah9Q1r%xrM>^62dKnv&#Ij$$x^^?>`ALqF&@H70#M8p!Vs%dqxP7ws=sh04 z_GG<|wi#{mNO-Quku4{bzEG)c&Auk8PFIiFaHlSBFgi+c{?rmW;l549VQUuH$Lu?4QR)z|F)_x#R7OGVlYw)zSzR^*PpW!-o-W{=dm=uAG& z_S;kMc3ssH4;6lK<%z!jXL|J&x}y(Uppr+C>ZReMJi`U2jcMX1>h1)$8V&l|hO$Mj zVb?$|=C?5v(&dlVyVDmE9b*)_i7T4DWSt(rslc)uts@+$eE6dAT|5QJH@Ftv+c#m3 z%HcIw_Fl+^+wk;ru6q5A;l|0PO3|&Y!)ju8?lie%u_JO7MBgL{ui0<$W#dh0XHXyN=`wTWpu2v66DO>Ea?wUjx&d zY=yjgdQb3Xrszk??=cwqq;>ynY|7m=%ia^v=O%WK$nS7*_;@w*$&=bDc4NsUD_}Cu z;+I&Oa&ZRJJ`Czw#_BIt;YJ*iTlDbC_CvkLkFg!Z5H~y&JLi|WG#bK5 zOXjX!W_*2`YlW(t>)BN^lgDALNt#2jVeS#cDpw6Dwxy~RQv~|BjY*s3{SQOfZ3i<| zBW~BfNF3dTO?s3hlrxSC`c$@JXk_c@3A3ulW+y(MuiJK|EM=Xr@ZR-&JTrQfceM87 zJ57^}z7~GaQGWm3ZuPWe+}C2lU2Xm^2V``Yt>Gp6aji28PHx^O)G0kt$0Ol?2mgLY zuh!0cX?M;%Th@E#afg8H8=BObuc{L|ubeF?(q?NL+}2!X%Q%$c)U>_&TG%LZpgSHrirpLMF$D_{bl*OaoVFw*-v9}<(#>^6(0^ex@HF8kT)`Xb`9Z8Lrk zmoCaOQtFfTc-f6yD}J6YWL?8xxZ3F(PdLS|(4U2=Pkh~faOH|dTfV+(+11vo57e`L zsK3ErxFZg{e&~XKpi%X1t5V;sIx|w=-s71!YS{W1vBxv1Q>0kVg8MgjT%M|z@O?FQ z?udn)x$%aj*n2m=R3&&%i5G}o4z*lWxqO%M@-O>bwpI3rVVtjRb=f4+&{osbrdH0s z@{CBZSL4~`CwkKssqNTEBUl(kv|J2{=ekvYDCCIAVbyg4`7M3z?$p#HCnBrfxi?8P zK4CB-?kATjSvDLYbkG8G{kBLq)vcM06z=yytS z`!V%BHkf_y(ypy{;`FmB4>_g2$J1Yg>(MpNZl1Ptdxy^3U^u6D4+qnaPsOIKd)3ra zREIh5X}S|#IeK6+&i6WOS?5!E#YJ&bkBurdwyhA!y)2ct4i>Ibl7i>(%Bv1Ow$b7Y zkw3nIwkBcyL6@u|iN>oU0*{|8ak_oRu<@Qd``I>wosHc$_)3*qgnTdBP0PT(^G7#c z#l%rmxwEo21RP#v#x`iQ!=v152gAz6F~1s?c#V_7ibY50E{i!^8cbY7}o|x=Cye;lE z*{YX5fK6SV+*m|<;AGVse24W?emtj4VXS*i^OD=g?QywT)#Sc0c?$sb3Mby`_QLZG zXMfo@#cdLHlV;Nwuhl9KqzT+IX5ZzrCm?rENBT>9KKpOY%^#)plROP21~!pGV8So; zY-JRR{F-3~;pd+WL@#>cHJ-3F;nem2)84tjLz%S!T+5^>BHM*hz0H=0VXkI`Xezj}& z_kF)_{4($Hp4&6ed7gKs=XcKkd2Idar!zZl`52}ow6{L{t|h&T8kbKqaj$mM@Ure% z5Gk&P6C)8KwJz3{lfmEn5tvfEnv>l!kh zLQ}GNb)8+)HV&aemHJ!Iy*W0o6u4NkPWm>NM&WLTDf>#>L5+_`(!Ql3v zxAyMLg6u+US}aqX&#z+7h)sQdx-24NM=f{0Ti*UMzS>uMZ58G&U-qlngq&M_5JOz9 zm6KOq8t!y)x5Y8cbP9b(x|+{@V~aZ4s;#Jp^LQw=987(o$p}g9rGFg#_H(`cwVumv zP8rn9Sdei4njE^GG^>}p&sRwxc%Id0f7?iz`ORRIRlJVLQMxkWGS}*uca`&`2lF;t zwcRT-h~HZ|-#tdqq2RbM!i6|^B1DCisZhUV(XlzV=E=@XRi5ALlCrYfW~xPJRA&vpYtqwh%zZ9s&AL*TltC3ZF(!T)J1#B4FqN?Ar0Rm) zl4&lBj{ETACMsSW99m4ZEe{Nz<*eb_+S+X^%}y=L4@dc_XSp5H z;i+W%u(P7SNt+Sz8{?Ug7peRH!fUn}+$r^s_JmBYS~h;A8|&Pap$zx4e9wz3%42rh zoPpX)mxpBjaK1NUf*LkRxdk@<1Ri~F}9;;LC z@0ewEwazeG+31<8Y1b*%6n<};8)P>^D`d44vJRS9ND6md_ zWfF!*Oz28#4W!Bah^2Bv&YKn&q&n>^TCMRYHLv!>ExfV7015d$jg`Ns?~nUDg2Is1dJFGu+v0S)Jw-UM-(^#9+U`gs`tXKHT$Ol_IZHw(9DW zBjfr5CT{&Yy}o$+z9-~{o;+0i^lu&OcI<8RH$3v3^LpgPo$$IHXIHN}xZW<{e*JcI zyT$iTb60+A)#!esVA4(5DHFPCW)5%3GD%z>ms^x64^3H{wzQY6e2tZRxX-29Th}d5 z-AgVf`Qk+_O-$HonoA{5`>g!#s!0T;6|xVvD#hat@+w?B>50w>6_Kt^>W4hTqAH7~ z4wdcRHj?h?yJ?%}kt)xD%5=Ud%faqt%mG%zGLIYpmk1EZ6^Vncy7K4j*??|cO zt9I==7asS*Snlhvo{aWq%`qc`R~lxr)Ggag+Yd#rdQp;qEejPmOf5kPmJB@^RBBnW zX(%;%sO|KU2g7ZJ(S`F$triS>wiI2n>&TAXzD6xrcN*RS>NqApJpK@6Ij@LadX#pd zcJKxbzh&G3LRgR2fj8zcFK$iVpw5qnvK~&4gU}yzwz$G?QxzS#(4(XQ}fD(J8E#@ml%XpZ_Q^(@@d%>`Lv(M&pPF%)E1;_%6s#s z^Q6w|BYm%<19$qJsi&Q;Iaz#n9M61V zH*s;q$j?d-JhnC$4GA~_Z;yl%c{Z`%-do->zx#gYN!ei2jm~{*Pua*#C~0Qrq%^N1 zA3EQJ*%G*>+^#S>f^o0>_KKV(<4Y3+UVNS93vOI3=-RNaK&^num8q)?vLij(0&v%k5o>;J9ntZ_ze*Ou2zq;nztuuS+ zp(eA;fs%U$hUb34b1x{ITk^~HeMi)fHWQJJsJC~%2hql_?2^g%!~2GF6s%G?t6zDHVMAN4)#Ih8^orA%U?7+W1XHg1*kur6Ow$vbNA1u=nB=e@U>x@&vh-Ue!%udRao0ZH2VKKqW*w?>^ll-uH77# zkwSh={Wq`Lmu&cU{#TXD2pQYqORq;dqtm`LJF0ZBvgzjhhu7-M!WwUH4htiq9sFir z*zcjwO&VX`hLW8zu>Vn)T73Sl&=~e%)YWa5(Hkq*7@b$ik5tfotn(OG-N%d_r<&}- zzZ)Q{(x*by$WpDO1{|iHTsb%6*3;uX*RMH-C@)G*@7b3*-F2DZ@|rKOz3Fy^o~|Lz zs$K_jlVtUM+vhsVnt90BUFCoIMzx%Y9p|lA6IquZBWI?hT3j9(W3Sn3u)u$^j%{mb zBl^aQ`l2}xx3}8|JEA?*S3heC9~|I!XKK+8mTKi~-dp@ACR(?}cAiC@EGl9ZI}mqT6J6U4_j@Jo!Is*TEihUX z;r?vk+RFojn5#P<4y^Cj%8`qfQfam5#N3p=crm=2UgBJX86YhK!hjb$ zkj>p7qXl4yVE;RORstNv0=*TH8^U4i^+xyW>si@rt_LY;)8X7vl#q)FsDuas%GemfECusTr0FN*qa1&sni!m>glg9Y}4n333YB~~9;Brsp$ zq9ZoJP!w8q@H2+{ z0A2#bf5K}3|A?-_3-XG*AS;8owS?+_&mTqe{wH_*GyVu%2jK36FnIvb29Rms@EpjL zp~wzo1p;pcTz!D?d(Sa_0dXBXDMArvW-$RG-rEl#&cRVPb3pP3$8scnQ0RZ6hs1}@ zH0n)%i#v&)RYK>NcvgKV2D}>J7yOezIUy(BM4u0$L}^lnlIYO$*fW%fi;;tRqvWDd z+S2Ix>VJfx^pPY0Uj=`b!=EGXcrIfG_mMJ`Bvu!uK>eRGl=MkHBm$A?gZ1^M=wnG_ ziUF32BeAe7ZvqqKjKu)}8eYm!5+fJJzA$QrV?VZdMCl}AReVZ8s;*DblDLgjU1C*y zNCN&t8+LL&jl5KLQshj{_HTErCuknL7n z0cakhH6)OuR$K!jkNV<1WRR9dT!Rz{M17FC`2BkzTMx)3{NX(~gYAd+D7cUMf)uY3 zteTHFGGx+U;>eK9$rLaH*^ExnClg5kG($Dh$1Me^jB$7qI^6(HNDs0!frK>x9|ICj zzQ>dy;V2ZKi$7$_tO(-x=zSVY2E6tEMVJgomnvqJj1{VRG%hX?nud`vNa#W09;`EI zIN~2dI+GS7OZ{IEj`&CtX*fcPbbg0k{=1OQ047Hw`{D^$7S#uYBPe(ZmP%k6U`Yfo zFEW$NqJaGK(r|?M+soJ&{^=knrG}*JusW1l*GZAOlG6yWj;0PX@V6 z#p8S&J|O?4@Bzh)NHsAxqf_Z-Ci*xM&eVXulmzm7P)T$ul|rV!3m+hnf{(%nWROi* H96tCL!_oNb diff --git a/cis/private/lehre/ects/Beispiel_ITProjektarbeit_en.pdf b/cis/private/lehre/ects/Beispiel_ITProjektarbeit_en.pdf deleted file mode 100644 index d1e7e8ef2422b7d7be95d125dba54a8a92c42f7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21122 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%0A*2VG{6VuBw7|GhXN1)1<1@q9SF1 zMg!9ejYTrkSlM+t1`b*P3IPEH^ctuD>{750C=AvD#>{{OtdLo^0*pZ(v;9mHm?^N+ z!T$VpL^k>t!88tN6=*#$Oh2I!Y}dM$zcs869XNczoCSIr)WBqd39Rh8m7o@^9Po|A zglf<lZxq0Fe!2+g9lr+9WM&>v0(#0u zV0sB0XciK9A7DU__#Xlm@I!DQ(13^h8bA;EH9#@ITn4=Wbdf&;XaSQ3@_z}Sm#n)V z@JjoC0#k&{AImW&;onH|Kf~!iu(1xLz>*7uoj-sSa5y<6(`C{B0#aalZU8A3D7_A( zVCp{tDKO$dkqsn8!vXmHiKOeCU!W8K;0-86B7j1FLn$yNz+xL%iiXSmf~DZsJlFwd zFlpfT3NUGXyeA1J&Adae3Vz4`{D|M!f&iD!n)cSfx)R)g06zHF_Yr_mP$iH7NC(>T z&&rwz7=gF8w_1PGfWLhJeL)WJ>fiPUep&#kRt0|R0KWB(sjI2015F2Joh-08!C--) z2Bd-Y$3_|>3+zcSr(L0PaY2IT#elLhlYdV|L_6)f}9Owe4A z2iC{r{nW)QhgmNR(wQ=VE?J zoGcr21KeC9ZtN5AGVBjIxSR~|P54_`I9vt=IOXp&3>N!m zSwH~sZ<-8%f4`RnJPrWeKWIn<;PSuI0N?tzJ~<=?m}B7cciZ4t4EX){J53G+EM)(n zVZmwjH;v?GW$%c0V}9l8*?Z%`@sQRf5J<3f^pn, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/phrasen.class.php'); - -$sprache = getSprache(); -$p= new phrasen($sprache); - -?> - - - - - -<?php echo $p->t('courseInformation/ectsLvInfo');?> - - - -

t('courseInformation/lvInfoBeispiele');?>

- - - - - -
-   - - -
- - - - - - -
- -
- - - \ No newline at end of file diff --git a/cis/private/lehre/ects/freigabe.php b/cis/private/lehre/ects/freigabe.php deleted file mode 100644 index 3e0a242f3..000000000 --- a/cis/private/lehre/ects/freigabe.php +++ /dev/null @@ -1,363 +0,0 @@ -, - * Andreas Oesterreicher - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ - -/* - @author Andres Oesterreicher - @date 20.10.2005 - @brief Formular zum Freigeben der LV Informationen aus der tabelle tbl_lvinfo - - @edit 08-11-2006 Versionierung entfernt. Studiensemester = WS2007 - 03-01-2006 Anpassung an neue DB -*/ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../include/basis_db.class.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/studiensemester.class.php'); -require_once('../../../../include/lvinfo.class.php'); -require_once('../../../../include/phrasen.class.php'); -require_once('../../../../include/benutzerberechtigung.class.php'); - -$sprache = getSprache(); -$p = new phrasen($sprache); - -if (!$db = new basis_db()) - die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); -$user = get_uid(); - -$rechte = new benutzerberechtigung(); -$rechte->getBerechtigungen($user); - -//if(!check_lektor($user)) -// die('
'.$p->t('global/keineBerechtigungFuerDieseSeite').'
'); - - /* WriteLog($qry,$uid) - * @brief Schreib die Querys im format: uid - datum - qry ins LogFile - * @param $qry Query anweisung - * $uid Username - * @return true wenn ok false wenn fehler beim oeffnen - */ - function WriteLog($qry,$uid) - { - if($fp=fopen(LOG_PATH.'lvinfo.log',"a")) - { - fwrite($fp,"\n"); - fwrite($fp,$uid." ". date("d.m.Y - H:i:s") . " ". $qry); - fclose($fp); - return true; - } - else - return false; - } - - - $lv=trim((isset($_REQUEST['lv']) ? $_REQUEST['lv']:'')); - - //Studiengang der Angezeigt werden soll - $stg=trim((isset($_REQUEST['stg']) ? $_REQUEST['stg']:'')); - //Semester das angezeigt werden soll - $sem=trim((isset($_REQUEST['sem']) ? $_REQUEST['sem']:'')); - - if (!$rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg)) - die ($rechte->errormsg); - - if(isset($_GET["lv"])) //Id des DS der freigegeben/nicht freigegeben werden soll - $id=$_GET["lv"]; - - if(isset($_GET["del"])) //Wenn diese Variable gesetzt ist dann wird DS mit $idde und $iden geloescht - $del=$_GET["del"]; - - if(isset($_GET["changestat"])) //Wenn diese Variable gesetzt ist dann wird DS mit $id freigegeben/nicht freigegeben - $changestat=$_GET["changestat"]; - - if(isset($_POST["status"]) && $_POST["status"] =='changestg') - unset($sem); - - if(isset($del) && isset($lv)) - { - //Loeschen der beiden Datensaetze - - $lvinfo_obj = new lvinfo(); - $db->db_query('BEGIN'); - if($lvinfo_obj->delete($lv)) - { - if(!WriteLog($lvinfo_obj->lastqry,$user)) - { - echo "
".$p->t('courseInformation/fehlerBeimSchreibenDesLog')."
"; - } - $db->db_query('COMMIT'); - } - else - { - $db->db_query('ROLLBACK'); - echo "
".$p->t('global/fehleraufgetreten')."
"; - } - } - - if(isset($changestat) && isset($lv) && isset($_GET['lang'])) - { - //Setzt die Spalte genehmigt auf den entsprechenden Wert - //=Wenn Hackerl angeklickt wird - - $qry="SELECT genehmigt FROM campus.tbl_lvinfo WHERE lehrveranstaltung_id=".$db->db_add_param($lv)." AND sprache="; - if($_GET['lang']=='de') - $qry.= $db->db_add_param(ATTR_SPRACHE_DE); - else - $qry.= $db->db_add_param(ATTR_SPRACHE_EN); - - if($result=$db->db_query($qry)) - { - if($row=$db->db_fetch_object($result)) - { - $wert = $row->genehmigt=='t'?'false':'true'; - $qry="UPDATE campus.tbl_lvinfo SET genehmigt=$wert - WHERE lehrveranstaltung_id=".$db->db_add_param($lv)." AND sprache="; - if($_GET['lang']=='de') - $qry .= $db->db_add_param(ATTR_SPRACHE_DE); - else - $qry .= $db->db_add_param(ATTR_SPRACHE_EN); - - if($db->db_query($qry)) - WriteLog($qry,$user); - else - echo $p->t('global/fehlerBeimLesenAusDatenbank'); - } - else - echo $p->t('global/fehlerBeimLesenAusDatenbank'); - } - else - echo $p->t('global/fehlerBeimLesenAusDatenbank'); - } - -?> - - - - - - - - - - - - - -<?php echo $p->t('courseInformation/ectsLvInfo');?> - - - -

t('courseInformation/lvInfoFreigabe');?>

- - - - - - -
-   - - -
- - - "; - echo ""; - echo ""; - //stg Drop Down - $qry = "SELECT distinct tbl_studiengang.studiengang_kz, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kurzbzlang FROM campus.tbl_lvinfo, lehre.tbl_lehrveranstaltung, public.tbl_studiengang - WHERE tbl_lvinfo.aktiv=true - AND tbl_lvinfo.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id - AND tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz - ORDER by kurzbzlang"; - if(!$result=$db->db_query($qry)) - die ('
'.$p->t('global/fehlerBeimLesenAusDatenbank').'
'); - - echo $p->t('global/studiengang')." "; - - if(!$vorhanden) //Wenn $stg einen Wert enthaelt der nicht in der Liste vorkommt wird der erste Eintrag der Liste ausgewaehlt - $stg=$firststg; - - //Semester Drop Down - $qry = "SELECT distinct semester FROM campus.tbl_lvinfo, lehre.tbl_lehrveranstaltung - WHERE tbl_lvinfo.aktiv=true - AND tbl_lvinfo.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id - AND tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($stg)." - ORDER by semester"; - if(!$result=$db->db_query($qry)) - die ("
".$p->t('global/fehleraufgetreten')."
"); - - echo " ".$p->t('global/semester')." "; - if(!$vorhanden) //Wenn $sem einen Wert enthaelt der nicht in der Liste vorkommt wird der erste Eintrag der Liste ausgewaehlt - $sem=$firstsem; - - //Anzeigen der Liste mit den LV - Informationen - ?> -

- - - - -
- - - - - - - - - - - - - - db_add_param($stg)." - AND semester=".$db->db_add_param($sem)." AND tbl_lvinfo.aktiv=true - AND tbl_lvinfo.sprache=".$db->db_add_param(ATTR_SPRACHE_DE)." - ORDER BY tbl_lehrveranstaltung.bezeichnung ASC"; - - if(!$result=$db->db_query($qry)) - die("
Fehler bei einer Datenbankabfrage
"); - - $i=-1; - while($row=$db->db_fetch_object($result)) - { - $i++; - $qry1="SELECT *, - tbl_lehrveranstaltung.bezeichnung as bezeichnung, - tbl_lvinfo.updatevon as updatevon - FROM - campus.tbl_lvinfo - JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) - WHERE - tbl_lvinfo.sprache=".$db->db_add_param(ATTR_SPRACHE_EN)." - AND lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id); - - if(!$result1=$db->db_query($qry1)) - die("
Fehler bei einer Datenbankabfrage
"); - - if(!$row1=$db->db_fetch_object($result1)) - die("
Fehler bei einer Datenbankabfrage
"); - - $qry2="SELECT vorname, nachname FROM campus.vw_mitarbeiter WHERE uid=".$db->db_add_param($row->updatevon); - - $style=''; - if ($lv==$row->lehrveranstaltung_id) - $style='style="background-color: #AAA; border-top: 1px solid black; border-bottom: 1px solid black"'; - - $bearbeitet=$row->updatevon; - if($result2=$db->db_query($qry2)) - if($row2=$db->db_fetch_object($result2)) - $bearbeitet=$row2->vorname.' '.$row2->nachname; - echo "\n"; - echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - //echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - echo ""."\n"; - echo ""; - } - ?> - -
t('global/lehrveranstaltung');?>t('courseInformation/bearbeitetVon');?>t('courseInformation/updateAm');?>t('global/anzeigen');?>t('courseInformation/freigeben');?>
lehrveranstaltung_id' onClick='return ask();'>Delete$row->bezeichnung$row->studiensemester_kurzbz$bearbeitet".$row->amum."German "; - echo "EnglishDE lehrveranstaltung_id&lang=de\";' ".($row->genehmigt=='t'?'checked':'').">"."\n"; - echo "lehrveranstaltung_id&lang=en\";' ".($row1->genehmigt=='t'?'checked':'')."> EN
-
- - - diff --git a/cis/private/lehre/ects/index.php b/cis/private/lehre/ects/index.php deleted file mode 100644 index 3253aa074..000000000 --- a/cis/private/lehre/ects/index.php +++ /dev/null @@ -1,914 +0,0 @@ -, - * Andreas Oesterreicher - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ - -/* @author Andres Oesterreicher - @date 20.10.2005 - @brief Formular zum eintragen der ECTS Information auf Deutsch und Englisch - Die Informationen werden in der Tabelle tbl_lvinfo gespeichert. - - @edit 08-11-2006 Versionierung entfernt: Studiensemester=WS2007 - 02-01-2007 Umstellung auf die neue DB -*/ -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../config/global.config.inc.php'); -require_once('../../../../include/basis_db.class.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/studiengang.class.php'); -require_once('../../../../include/lehrveranstaltung.class.php'); -require_once('../../../../include/lvinfo.class.php'); -require_once('../../../../include/studiensemester.class.php'); -require_once('../../../../include/phrasen.class.php'); -require_once('../../../../include/safehtml/safehtml.class.php'); -require_once('../../../../include/benutzerberechtigung.class.php'); -require_once('../../../../include/lehreinheitmitarbeiter.class.php'); -require_once('../../../../include/mail.class.php'); -require_once('../../../../include/benutzer.class.php'); - -$user = get_uid(); - -$rechte = new benutzerberechtigung(); -$rechte->getBerechtigungen($user); - -$sprache1 = getSprache(); -$p=new phrasen($sprache1); - -if (!$db = new basis_db()) - die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); - - $output = ''; - $errormsg = ''; - $okmsg=''; - -$lv = ''; - -?> - - - - - -<?php echo $p->t('courseInformation/ectsInformation')?> - - - - -50) - return substr($string,0,47)."..."; - else - return $string; - } - - if(isset($_GET['lvid'])) - $lv=$_GET['lvid']; - - //Variablenuebernahme - if(isset($_POST['lv'])) //LehrveranstaltungsID - { - $lv = $_POST['lv']; - $lv_obj = new lehrveranstaltung(); - $lv_obj->load($lv); - $oe_kurzbz = $lv_obj->oe_kurzbz; - } - - if(isset($_GET['lvid'])) - { - $lv_obj = new lehrveranstaltung(); - $lv_obj->load($lv); - - if(!isset($stg)) - { - $stg = $lv_obj->studiengang_kz; - $oe_kurzbz = $lv_obj->oe_kurzbz; - } - if(!isset($sem)) - $sem = $lv_obj->semester; - } - else - { - $stg = ''; - } - - if(isset($_POST['stg'])) - { - $stg = $_POST['stg']; - if(!isset($oe_kurzbz)) - { - $oe = new studiengang(); - $oe->load($stg); - $oe_kurzbz = $oe->oe_kurzbz; - } - } - - if(!isset($sem) && isset($_POST['sem'])) - $sem = $_POST['sem']; - - - if(isset($_POST['changed'])) //Gibt an welches der Auswahlfelder geaendert wurde - $changed = $_POST['changed']; - - if(isset($_POST['status'])) - $status = $_POST['status']; - -// if(isset($_POST["freigeben"])) //Wird auf 'ja' gesetzt wenn gleich freigegebenwerden soll nach dem Speichern -// $freigeben = $_POST["freigeben"]; - - if(isset($_POST['sprache'])) //Sprache fuer dieses Lehrfach - $sprache = $_POST['sprache']; - - // Berechtigungen ueberpruefen - $lektor_der_lv = false; - $lektor = new lehreinheitmitarbeiter(); - $lektor_der_lv = $lektor->existsLV($lv, null, $user); - - // Bearbeiten nur moeglich, wenn Lektor der LV und bearbeiten fuer Lektoren aktiviert ist - // Oder Berechtigung zum Bearbeiten eingetragen ist - $berechtigt = true; - if(!( - (!defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && $lektor_der_lv) - || (defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT==true && $lektor_der_lv) - || $rechte->isBerechtigt('lehre/lvinfo',$oe_kurzbz) - || $rechte->isBerechtigt('lehre/lvinfo',$stg) - ) - ) - { - $berechtigt = false; - } - - //Variablen fuer das Formular - $lehrziele_de = (isset($_POST['lehrziele_de'])?$_POST['lehrziele_de']:''); - $lehrinhalte_de = (isset($_POST['lehrinhalte_de'])?$_POST['lehrinhalte_de']:''); - $voraussetzungen_de = (isset($_POST['voraussetzungen_de'])?$_POST['voraussetzungen_de']:''); - $unterlagen_de = (isset($_POST['unterlagen_de'])?$_POST['unterlagen_de']:''); - $pruefungsordnung_de = (isset($_POST['pruefungsordnung_de'])?$_POST['pruefungsordnung_de']:''); - $anmerkungen_de = (isset($_POST['anmerkungen_de'])?$_POST['anmerkungen_de']:''); - $kurzbeschreibung_de = (isset($_POST['kurzbeschreibung_de'])?$_POST['kurzbeschreibung_de']:''); - $anwesenheit_de = (isset($_POST['anwesenheit_de'])?$_POST['anwesenheit_de']:''); - $freig_de = (isset($_POST['freig_de'])?($_POST['freig_de']=='on' && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false):''); - $methodik_de = (isset($_POST['methodik_de'])?$_POST['methodik_de']:''); - //$titel_de = (isset($_POST['titel_de'])?$_POST['titel_de']:''); - - $parser = new SafeHTML(); - $lehrziele_de = $parser->parse($lehrziele_de); - $parser = new SafeHTML(); - $lehrinhalte_de = $parser->parse($lehrinhalte_de); - $parser = new SafeHTML(); - $voraussetzungen_de = $parser->parse($voraussetzungen_de); - $parser = new SafeHTML(); - $unterlagen_de = $parser->parse($unterlagen_de); - $parser = new SafeHTML(); - $pruefungsordnung_de = $parser->parse($pruefungsordnung_de); - $parser = new SafeHTML(); - $anmerkungen_de = $parser->parse($anmerkungen_de); - $parser = new SafeHTML(); - $kurzbeschreibung_de = $parser->parse($kurzbeschreibung_de); - $parser = new SafeHTML(); - $anwesenheit_de = $parser->parse($anwesenheit_de); - $parser = new SafeHTML(); - $freig_de = $parser->parse($freig_de); - $parser = new SafeHTML(); - $methodik_de = $parser->parse($methodik_de); - - $lehrziele_en = (isset($_POST['lehrziele_en'])?$_POST['lehrziele_en']:''); - $lehrinhalte_en = (isset($_POST['lehrinhalte_en'])?$_POST['lehrinhalte_en']:''); - $voraussetzungen_en = (isset($_POST['voraussetzungen_en'])?$_POST['voraussetzungen_en']:''); - $unterlagen_en = (isset($_POST['unterlagen_en'])?$_POST['unterlagen_en']:''); - $pruefungsordnung_en = (isset($_POST['pruefungsordnung_en'])?$_POST['pruefungsordnung_en']:''); - $anmerkungen_en = (isset($_POST['anmerkungen_en'])?$_POST['anmerkungen_en']:''); - $kurzbeschreibung_en = (isset($_POST['kurzbeschreibung_en'])?$_POST['kurzbeschreibung_en']:''); - $anwesenheit_en = (isset($_POST['anwesenheit_en'])?$_POST['anwesenheit_en']:''); - $freig_en = (isset($_POST['freig_en'])?($_POST['freig_en']=='on' && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false):''); - $methodik_en = (isset($_POST['methodik_en'])?$_POST['methodik_en']:''); - //$titel_en = (isset($_POST['titel_en'])?$_POST['titel_en']:''); - - $parser = new SafeHTML(); - $lehrziele_en = $parser->parse($lehrziele_en); - $parser = new SafeHTML(); - $lehrinhalte_en = $parser->parse($lehrinhalte_en); - $parser = new SafeHTML(); - $voraussetzungen_en = $parser->parse($voraussetzungen_en); - $parser = new SafeHTML(); - $unterlagen_en = $parser->parse($unterlagen_en); - $parser = new SafeHTML(); - $pruefungsordnung_en = $parser->parse($pruefungsordnung_en); - $parser = new SafeHTML(); - $anmerkungen_en = $parser->parse($anmerkungen_en); - $parser = new SafeHTML(); - $kurzbeschreibung_en = $parser->parse($kurzbeschreibung_en); - $parser = new SafeHTML(); - $anwesenheit_en = $parser->parse($anwesenheit_en); - $parser = new SafeHTML(); - $freig_en = $parser->parse($freig_en); - $parser = new SafeHTML(); - $methodik_en = $parser->parse($methodik_en); - - /* WriteLog($qry,$uid) - * @brief Schreib die Querys im format: uid - datum - qry ins LogFile - * @param $qry Query anweisung - * $uid Username - * @return true wenn ok false wenn fehler beim oeffnen - */ - function WriteLog($qry,$uid) - { - - if($fp=fopen(LOG_PATH.'lvinfo.log',"a")) - { - fwrite($fp,"\n"); - fwrite($fp,$uid." ". date("d.m.Y - H:i:s") . " ". $qry); - fclose($fp); - return true; - } - else - return false; - } - - if(isset($status)) - { - - if($status=='save') // Beim druecken auf "Speichern" - { - if ($berechtigt==false) - die($p->t('global/keineBerechtigungFuerDieseSeite')); - //Speichert die aenderungen in der Datenbank (de und en) - $lv_obj_sav= new lvinfo(); - $save_error=false; - $save_log_error=false; - //Deutsch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_de); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_de); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_de); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_de); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_de); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_de); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_de); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_de); - - $lv_obj_sav->genehmigt = ($freig_de==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->aktiv=true; - $lv_obj_sav->sprache=ATTR_SPRACHE_DE; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_de); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_de); - - $lv_obj1 = new lvinfo(); - $vorhanden=$lv_obj1->exists($lv, ATTR_SPRACHE_DE); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - //Englisch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_en); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_en); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_en); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_en); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_en); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_en); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_en); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_en); - $lv_obj_sav->genehmigt = ($freig_en==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->aktiv=true; - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->sprache=ATTR_SPRACHE_EN; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_en); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_en); - - $lv_obj1 = new lvinfo(); - $vorhanden = $lv_obj1->exists($lv, ATTR_SPRACHE_EN); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - if($save_error) - $errormsg.= $p->t('courseInformation/achtungFehlerBeimSpeichern'); - else - $okmsg.= $p->t('global/erfolgreichgespeichert'); - - if($save_log_error) - $errormsg.= $p->t('courseInformation/fehlerLogFile'); - } - if($status=='freigeben') // Beim druecken auf "Zur Freigabe abschicken" - { - if ($berechtigt==false) - die($p->t('global/keineBerechtigungFuerDieseSeite')); - - //Speichert die aenderungen in der Datenbank (de und en) - $lv_obj_sav= new lvinfo(); - $save_error=false; - $save_log_error=false; - //Deutsch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_de); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_de); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_de); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_de); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_de); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_de); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_de); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_de); - - $lv_obj_sav->genehmigt = ($freig_de==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->aktiv=true; - $lv_obj_sav->sprache=ATTR_SPRACHE_DE; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_de); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_de); - - $lv_obj1 = new lvinfo(); - $vorhanden=$lv_obj1->exists($lv, ATTR_SPRACHE_DE); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - //Englisch - $lv_obj_sav->lehrziele=mb_eregi_replace("\r\n", "
", $lehrziele_en); - $lv_obj_sav->lehrinhalte=mb_eregi_replace("\r\n", "
", $lehrinhalte_en); - $lv_obj_sav->voraussetzungen=mb_eregi_replace("\r\n", "
", $voraussetzungen_en); - $lv_obj_sav->unterlagen=mb_eregi_replace("\r\n", "
", $unterlagen_en); - $lv_obj_sav->pruefungsordnung=mb_eregi_replace("\r\n", "
", $pruefungsordnung_en); - $lv_obj_sav->anmerkungen=mb_eregi_replace("\r\n", "
", $anmerkungen_en); - $lv_obj_sav->kurzbeschreibung=mb_eregi_replace("\r\n", "
", $kurzbeschreibung_en); - $lv_obj_sav->anwesenheit=mb_eregi_replace("\r\n", "
", $anwesenheit_en); - $lv_obj_sav->genehmigt = ($freig_en==true && ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg))?true:false); - $lv_obj_sav->aktiv=true; - $lv_obj_sav->updateamum=date('Y-m-d H:i:s'); - $lv_obj_sav->updatevon=$user; - $lv_obj_sav->sprache=ATTR_SPRACHE_EN; - $lv_obj_sav->lehrveranstaltung_id=$lv; - $lv_obj_sav->methodik = mb_eregi_replace("\r\n", "
", $methodik_en); - //$lv_obj_sav->titel = mb_eregi_replace("\r\n", "
", $titel_en); - - $lv_obj1 = new lvinfo(); - $vorhanden = $lv_obj1->exists($lv, ATTR_SPRACHE_EN); - - if(!$vorhanden) - $lv_obj_sav->new=true; - else - $lv_obj_sav->new=false; - - if(!$lv_obj_sav->save()) - $save_error=true; - else - if(!WriteLog($lv_obj_sav->lastqry,$user)) - $save_log_error=true; - - if($save_error) - $errormsg.= $p->t('courseInformation/achtungFehlerBeimSpeichern'); - else - $okmsg.= $p->t('global/erfolgreichgespeichert'); - - if($save_log_error) - $errormsg.= $p->t('courseInformation/fehlerLogFile'); - - //Mail an Studiengangsleiter - $studiengangsleiter = new studiengang(); - $stgleiter = $studiengangsleiter->getLeitung($stg); - - if($stgleiter) - { - $to=''; - foreach($stgleiter as $leiter) - { - if($to!='') - { - $to.=', '.$leiter.'@'.DOMAIN; - } - else - { - $to.=$leiter.'@'.DOMAIN; - } - } - - $benutzer = new benutzer(); - $benutzer->load($user); - - $bezeichnung = new lehrveranstaltung(); - $bezeichnung->load($lv); - - $message = $p->t('courseInformation/diesIstEineAutomatischeMail').".\n". - $p->t('courseInformation/lvinfoWurdeUeberarbeitet',array($benutzer->nachname.' '.$benutzer->vorname,$bezeichnung->bezeichnung)).":\n"; - - $message.="\n".$p->t('courseInformation/sieKoennenDieseUnterFolgenderAdresseFreigeben').":\n". - APP_ROOT."cis/private/lehre/ects/freigabe.php?stg=".$stg."&sem=".$sem."&lv=".$lv; - - $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('courseInformation/freigabeLvinfo'), $message); - if($mail->send()) - { - $okmsg.="
".$p->t('courseInformation/freigabemailWurdeVersandt',array($to)).""; - } - else - { - $okmsg.="
".$p->t('courseInformation/fehlerBeimSendenAufgetreten',array($to))."!"; - } - } - else - { - $okmsg.="
".$p->t('courseInformation/konnteKeinFreigabemailVersendetWerden').""; - } - - } - } - - $output .= "\n"; - $output .= ""; - $output .= ""; - - $output .= "
"; - $output .= "
"; - $stg_obj = new studiengang(); - - //Anzeigen des DropDown Menues mit Stg - if($stg_obj->getAll('typ, kurzbz')) - { - $output .= $p->t('global/studiengang')." "; - if(!$stgselected) - $stg=$firststg; - } - else - { - $errormsg .= "$stg_obj->errormsg"; - } - - - - //Anzeigen des DropDown Menues mit Semester - if(isset($changed) && $changed=='stg') - { - unset($sem); - unset($lvid); - } - - if($stg_obj->load($stg)) - { - $output .= $p->t('global/semester')." "; - - if(!$semselected) - $sem=$firstsem; - } - else - $errormsg .= "$stg_obj->errormsg"; - - //Anzeigen des DropDown Menues mit Lehrveranstaltungen - $lv_obj = new lehrveranstaltung(); - if($lv_obj->load_lva($stg,$sem,null,true,null,'orgform_kurzbz,semester, bezeichnung')) - { - $output .= $p->t('global/lehrveranstaltung')." "; - if(!$vorhanden) - $lv=$firstlv; - } - else - { - $errormsg .= "$lv_obj->errormsg"; - } - - $output .= ""; - $output .= ""; - $output .= "
"; - $output .= "
"; - //Menue ausgeben - $output .= "\n"; - $output .= ""; - $output .= "
"; - - $stg_obj->load($stg); - - //Kopfzeile hinausschreiben und $output ausgeben - echo "

 ".$p->t('courseInformation/lvInfoSemester',array($stg_obj->kuerzel, $sem))."

"; - echo $output; - - if ($berechtigt==false) - die($p->t('global/keineBerechtigungFuerDieseSeite')); - - if(isset($lv) && isset($stg) && isset($sem)) // Wenn oben alles Ausgewaehlt wurde - { - //Anzeige des Formulares - $stg_obj1 = new studiengang(); - $stg_obj1->load($stg); - - if(isset($errormsg) && $okmsg!='') - echo ''.$errormsg.'
'; - if(isset($okmsg) && $okmsg!='') - echo ''.$okmsg.'
'; - - $lv_obj_en = new lvinfo(); - $lv_obj_de = new lvinfo(); - - if($lv_obj_en->load($lv, ATTR_SPRACHE_EN)) - $lv_en=$lv_obj_en; - - if($lv_obj_de->load($lv, ATTR_SPRACHE_DE)) - $lv_de=$lv_obj_de; - - if(!isset($_POST['lehrziele_de']) && isset($lv_de)) - { - $lehrziele_de = $lv_de->lehrziele; - $lehrinhalte_de = $lv_de->lehrinhalte; - $voraussetzungen_de = $lv_de->voraussetzungen; - $unterlagen_de = $lv_de->unterlagen; - $pruefungsordnung_de = $lv_de->pruefungsordnung; - $anmerkungen_de = $lv_de->anmerkungen; - $kurzbeschreibung_de = $lv_de->kurzbeschreibung; - $anwesenheit_de = $lv_de->anwesenheit; - $freig_de = $lv_de->genehmigt; - $titel_de = $lv_de->titel; - $methodik_de = $lv_de->methodik; - - //Fuegt den Satz "Nach erfolgreichem Abschluss sind die Studierenden in der Lage, " vor den Lehrzielen ein, falls noch nicht vorhanden - if (substr_count($lehrziele_de, 'Nach erfolgreichem Abschluss sind die Studierenden in der Lage')==0) - $lehrziele_de = 'Nach erfolgreichem Abschluss sind die Studierenden in der Lage, '.$lehrziele_de; - } - - if(!isset($_POST['lehrziele_en']) && isset($lv_en)) - { - $lehrziele_en = $lv_en->lehrziele; - $lehrinhalte_en = $lv_en->lehrinhalte; - $voraussetzungen_en = $lv_en->voraussetzungen; - $unterlagen_en = $lv_en->unterlagen; - $pruefungsordnung_en = $lv_en->pruefungsordnung; - $anmerkungen_en = $lv_en->anmerkungen; - $kurzbeschreibung_en = $lv_en->kurzbeschreibung; - $anwesenheit_en = $lv_en->anwesenheit; - $freig_en = $lv_en->genehmigt; - $titel_en = $lv_en->titel; - $methodik_en = $lv_en->methodik; - - //Fuegt den Satz "Nach erfolgreichem Abschluss sind die Studierenden in der Lage, " vor den Lehrzielen ein, falls noch nicht vorhanden - if (substr_count($lehrziele_en, 'After passing this course successfully students are able to')==0) - $lehrziele_en = 'After passing this course successfully students are able to '.$lehrziele_en; - } - - $lv_obj = new lehrveranstaltung(); - $lv_obj->load($lv); - echo "
"; - - echo ""; - echo ""; - - $stsem_obj = new studiensemester(); - $stsem = $stsem_obj->getaktorNext(); - //Namen der Lehrenden Auslesen - $qry = "SELECT - * - FROM - campus.vw_mitarbeiter, lehre.tbl_lehreinheitmitarbeiter, lehre.tbl_lehreinheit - WHERE - lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." - AND tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id - AND studiensemester_kurzbz=(SELECT studiensemester_kurzbz FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE lehrveranstaltung_id=".$db->db_add_param($lv)." ORDER BY ende DESC LIMIT 1) - AND mitarbeiter_uid=uid"; - - echo ""; - - //FB Leiter auslesen - $qry = " SELECT - distinct titelpre, titelpost, vorname, nachname - FROM - public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) - WHERE - funktion_kurzbz='Leitung' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) AND - oe_kurzbz in (SELECT distinct lehrfach.oe_kurzbz - FROM - lehre.tbl_lehreinheit - JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - WHERE - tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND - studiensemester_kurzbz=(SELECT studiensemester_kurzbz - FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." - ORDER BY ende DESC LIMIT 1 - ) - )"; - - echo ""; - - //FB Koordinator auslesen - //$qry = "SELECT distinct vorname, nachname FROM public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) WHERE funktion_kurzbz='fbk' AND studiengang_kz='$stg' AND fachbereich_kurzbz in (SELECT fachbereich_kurzbz FROM lehre.tbl_lehrfach, lehre.tbl_lehreinheit WHERE lehrveranstaltung_id='$lv' AND tbl_lehrfach.lehrfach_id=tbl_lehreinheit.lehrfach_id AND tbl_lehreinheit.studiensemester_kurzbz=(SELECT studiensemester_kurzbz FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) WHERE tbl_lehreinheit.lehrveranstaltung_id='$lv' ORDER BY ende DESC LIMIT 1))"; - $qry = "SELECT - distinct titelpre, titelpost, vorname, nachname, tbl_fachbereich.fachbereich_kurzbz - FROM - lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach, public.tbl_benutzerfunktion, campus.vw_mitarbeiter, public.tbl_fachbereich - WHERE - tbl_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND - tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND - tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND - tbl_fachbereich.fachbereich_kurzbz=tbl_benutzerfunktion.fachbereich_kurzbz AND - tbl_benutzerfunktion.funktion_kurzbz='fbk' AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) AND - vw_mitarbeiter.uid=COALESCE(tbl_lehrveranstaltung.koordinator, tbl_benutzerfunktion.uid) AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1)"; - - echo ""; - - //echo "
".$p->t('courseInformation/ectsCredits')."".($lv_obj->ects!=''?number_format($lv_obj->ects,1,'.',''):'')."
".$p->t('courseInformation/lehrendeLautLehrauftrag').""; - $helparray = array(); - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - { - if(!in_array("$row->titelpre $row->vorname $row->nachname $row->titelpost",$helparray))//damit ein Name nicht doppelt vorkommt - $helparray[] = "$row->titelpre $row->vorname $row->nachname $row->titelpost"; - } - } - - foreach($helparray as $elem) - echo $elem."
"; - echo "
".$p->t('courseInformation/institutsleiter').""; - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - { - echo "$row->titelpre $row->vorname $row->nachname $row->titelpost
"; - } - } - - echo "
".$p->t('courseInformation/institutskoordinator').""; - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - { - echo "$row->titelpre $row->vorname $row->nachname $row->titelpost
"; - } - } - - echo "
"; - echo ""; - - - echo ""; - echo ""; - echo ""; - echo ""; - - echo ""; - //Sprache ausgeben - echo "".$p->t('courseInformation/unterrichtssprache')."$lv_obj->sprache"; - echo ""; - - //Anz. Incoming ausgeben - - if ($lv_obj->incoming > -1) - { - echo "".$p->t('courseInformation/incomingplaetze')."$lv_obj->incoming"; - } - else echo "".$p->t('courseInformation/incomingplaetze')."0"; - echo "".$p->t('courseInformation/beiFehlernInDenFixfeldern',array($stg_obj1->email)).""; - echo "

".$p->t('courseInformation/pflichtfelderWerdenAufDerExternenSeiteAngezeigt',array($stg_obj1->email))."."; - //echo "".$p->t('courseInformation/fallsSieAufzaehlungslistenVerwenden',array($stg_obj1->email)).""; --> Es sollten keine HTML-Tags gespeichert werden koennen. Hier muss eine andere Loesung gefunde werden. - echo "

"; - - //Eingabefelder anzeigen - echo ""; - - - echo ' - - - - '; - echo ' - - - '; - echo ' - - '; - - echo ' - - - - - - - - - - - - '; - echo ' - - - - - - - - - - - - - - - - - '; - echo ' - - - - - - - - - - - - - - - - - - - - - - - '; - if ($rechte->isBerechtigt('lehre/lvinfo_freigabe',$oe_kurzbz) || $rechte->isBerechtigt('lehre/lvinfo_freigabe',$stg)) - echo ' - - - - '; - - echo "

DEUTSCH

 

ENGLISH

'.($lv_de->genehmigt==false?''.$p->t('courseInformation/nochNichtFreigegeben').'':$p->t('courseInformation/freigegeben')).''.($lv_en->genehmigt==false?''.$p->t('courseInformation/nochNichtFreigegeben').'':$p->t('courseInformation/freigegeben')).'
 
'.$p->t('lvinfo/kurzbeschreibung').' (Pflichtfeld) '.$p->t('lvinfo/kurzbeschreibungEN').' (Required)
'.$p->t('lvinfo/methodik').' (Pflichtfeld) '.$p->t('lvinfo/methodikEN').' (Required)
'.$p->t('lvinfo/lernergebnisse').' (Pflichtfeld)'.$p->t('lvinfo/lernergebnisseEN').' (Required)
'.$p->t('lvinfo/lehrinhalte').' (Pflichtfeld)'.$p->t('lvinfo/lehrinhalteEN').' (Required)
'.$p->t('lvinfo/vorkenntnisse').' (Pflichtfeld) '.$p->t('lvinfo/vorkenntnisseEN').' (Required)
'.$p->t('lvinfo/literatur').' '.$p->t('lvinfo/literaturEN').'
'.$p->t('lvinfo/leistungsbeurteilung').''.$p->t('lvinfo/leistungsbeurteilungEN').'
'.$p->t('lvinfo/anwesenheit').''.$p->t('lvinfo/anwesenheitEN').'
'.$p->t('lvinfo/anmerkungen').''.$p->t('lvinfo/anmerkungenEN').'

'.$p->t('courseInformation/deutschFreigeben').'

'.$p->t('courseInformation/englischFreigeben').'

"; - echo "
"; - echo ""; - echo ""; - echo "

"; - if (!$berechtigt) - echo ""; - echo "
"; - echo "
"; - echo "











"; - if(isset($error) && $error!='') - echo $error; - } -?> - - - diff --git a/cis/private/lehre/ects/preview.php b/cis/private/lehre/ects/preview.php deleted file mode 100644 index ca2d696d8..000000000 --- a/cis/private/lehre/ects/preview.php +++ /dev/null @@ -1,746 +0,0 @@ -, - * Andreas Oesterreicher - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ -/* @date 27.10.2005 - @brief Zeigt die Daten aus der tbl_lvinfo an - - @edit 08-11-2006 Versionierung wurde entfernt. Alle eintraege werden jetzt im WS2007 - abgespeichert - 03-02-2006 Anpassung an die neue Datenbank -*/ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../config/global.config.inc.php'); -require_once('../../../../include/studiensemester.class.php'); -require_once('../../../../include/lehrveranstaltung.class.php'); -require_once('../../../../include/lvinfo.class.php'); -require_once('../../../../include/studiengang.class.php'); -require_once('../../../../include/safehtml/safehtml.class.php'); -require_once '../../../../include/phrasen.class.php'; -require_once '../../../../include/lehreinheit.class.php'; -require_once '../../../../include/lehrstunde.class.php'; -require_once '../../../../include/datum.class.php'; -require_once '../../../../include/stunde.class.php'; - -if (!$db = new basis_db()) - die('Fehler beim Herstellen der Datenbankverbindung'); - -$phrasen = new phrasen(); - -function cmp($a, $b) -{ - if($a->datum == $b->datum && $a->stunde == $b->stunde) - { - return 0; - } - if($a->datum == $b->datum && $a->stunde < $b->stunde) - { - return -1; - } - else if($a->datum == $b->datum && $a->stunde >= $b->stunde) - { - return 1; - } - return ($a->datum < $b->datum) ? -1 : 1; - -} - -function getLastStundeByDatum(Array $array, $filterDatum) -{ - $callback = function($item) use ($filterDatum) - { - return ($filterDatum == $item->datum); - }; - return array_filter($array,$callback); -} - -$titel_de = ''; -$methodik_de = ''; -$kurzbeschreibung_de = ''; -$anwesenheit_de = ''; -$lehrziele_de = ''; -$lehrinhalte_de = ''; -$voraussetzungen_de = ''; -$unterlagen_de = ''; -$pruefungsordnung_de = ''; -$anmerkungen_de = ''; - -$titel_en = ''; -$methodik_en = ''; -$kurzbeschreibung_en = ''; -$anwesenheit_en = ''; -$lehrziele_en = ''; -$lehrinhalte_en = ''; -$voraussetzungen_en = ''; -$unterlagen_en = ''; -$pruefungsordnung_en = ''; -$anmerkungen_en = ''; - -?> - - - -ECTS - European Course Credit Transfer Systems (ECTS) - - - - - - - - -
- -
-





- - - - - - -
- -Deutsche Version
"; - echo "
  • Englische Version

  • "; - } - - if(isset($_POST['methodik_de'])) //Alle Variablen werden per POST Methode uebergeben (zB bei Voransicht) - { - //$sprache = stripslashes($_POST['sprache']); - //$semstunden = stripslashes($_POST["semstunden"]); - $lehrveranstaltung_id = $_POST['lv']; - - // german content variables - //$titel_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['titel_de'])); - $methodik_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['methodik_de'])); - $kurzbeschreibung_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['kurzbeschreibung_de'])); - $anwesenheit_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anwesenheit_de'])); - $lehrziele_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrziele_de'])); - $lehrinhalte_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrinhalte_de'])); - $voraussetzungen_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['voraussetzungen_de'])); - $unterlagen_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['unterlagen_de'])); - $pruefungsordnung_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['pruefungsordnung_de'])); - $anmerkungen_de = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anmerkungen_de'])); - - $parser = new SafeHTML(); - $lehrziele_de = $parser->parse($lehrziele_de); - $parser = new SafeHTML(); - $lehrinhalte_de = $parser->parse($lehrinhalte_de); - $parser = new SafeHTML(); - $voraussetzungen_de = $parser->parse($voraussetzungen_de); - $parser = new SafeHTML(); - $unterlagen_de = $parser->parse($unterlagen_de); - $parser = new SafeHTML(); - $pruefungsordnung_de = $parser->parse($pruefungsordnung_de); - $parser = new SafeHTML(); - $anmerkungen_de = $parser->parse($anmerkungen_de); - $parser = new SafeHTML(); - $kurzbeschreibung_de = $parser->parse($kurzbeschreibung_de); - $parser = new SafeHTML(); - $anwesenheit_de = $parser->parse($anwesenheit_de); - $parser = new SafeHTML(); - $methodik_de = $parser->parse($methodik_de); - - // Englisch content variables - //$titel_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['titel_en'])); - $methodik_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['methodik_en'])); - $kurzbeschreibung_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['kurzbeschreibung_en'])); - $anwesenheit_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anwesenheit_en'])); - $lehrziele_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrziele_en'])); - $lehrinhalte_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['lehrinhalte_en'])); - $voraussetzungen_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['voraussetzungen_en'])); - $unterlagen_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['unterlagen_en'])); - $pruefungsordnung_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['pruefungsordnung_en'])); - $anmerkungen_en = mb_eregi_replace("\r\n","
    ",stripslashes($_POST['anmerkungen_en'])); - - $parser = new SafeHTML(); - $lehrziele_en = $parser->parse($lehrziele_en); - $parser = new SafeHTML(); - $lehrinhalte_en = $parser->parse($lehrinhalte_en); - $parser = new SafeHTML(); - $voraussetzungen_en = $parser->parse($voraussetzungen_en); - $parser = new SafeHTML(); - $unterlagen_en = $parser->parse($unterlagen_en); - $parser = new SafeHTML(); - $pruefungsordnung_en = $parser->parse($pruefungsordnung_en); - $parser = new SafeHTML(); - $anmerkungen_en = $parser->parse($anmerkungen_en); - $parser = new SafeHTML(); - $kurzbeschreibung_en = $parser->parse($kurzbeschreibung_en); - $parser = new SafeHTML(); - $anwesenheit_en = $parser->parse($anwesenheit_en); - $parser = new SafeHTML(); - $methodik_en = $parser->parse($methodik_en); - } - elseif(isset($_GET['lv'])) //LV Id wird uebergeben (zB bei Ansicht fuer alle von lesson.php) - { - $lehrveranstaltung_id=$_GET['lv']; - - $stsemobj = new studiensemester(); - $stsem = $stsemobj->getaktorNext(); - - $lvinfo_obj = new lvinfo(); - if($lvinfo_obj->load($lehrveranstaltung_id, ATTR_SPRACHE_DE)) - { - // german content variables - //$titel_de = $lvinfo_obj->titel; - $methodik_de = $lvinfo_obj->methodik; - $kurzbeschreibung_de = $lvinfo_obj->kurzbeschreibung; - $anwesenheit_de = $lvinfo_obj->anwesenheit; - $lehrziele_de = $lvinfo_obj->lehrziele; - $lehrinhalte_de = $lvinfo_obj->lehrinhalte; - $voraussetzungen_de = $lvinfo_obj->voraussetzungen; - $unterlagen_de = $lvinfo_obj->unterlagen; - $pruefungsordnung_de = $lvinfo_obj->pruefungsordnung; - $anmerkungen_de = $lvinfo_obj->anmerkungen; - } - - if($lvinfo_obj->load($lehrveranstaltung_id, ATTR_SPRACHE_EN)) - { - // Englisch content variables - //$titel_en = $lvinfo_obj->titel; - $methodik_en = $lvinfo_obj->methodik; - $kurzbeschreibung_en = $lvinfo_obj->kurzbeschreibung; - $anwesenheit_en = $lvinfo_obj->anwesenheit; - $lehrziele_en = $lvinfo_obj->lehrziele; - $lehrinhalte_en = $lvinfo_obj->lehrinhalte; - $voraussetzungen_en = $lvinfo_obj->voraussetzungen; - $unterlagen_en = $lvinfo_obj->unterlagen; - $pruefungsordnung_en = $lvinfo_obj->pruefungsordnung; - $anmerkungen_en = $lvinfo_obj->anmerkungen; - } - } - else - die('Fehler bei der Parameteruebergabe'); - - $stsemobj = new studiensemester(); - $stsem = $stsemobj->getaktorNext(); - - $lv_obj = new lehrveranstaltung(); - if(!$lv_obj->load($lehrveranstaltung_id)) - die($lv_obj->errormsg); - - $ects_points = $lv_obj->ects; - $stg = $lv_obj->studiengang_kz; - $sem = $lv_obj->semester; - $lang = $lv_obj->sprache; - $titel_de = $lv_obj->bezeichnung; - $titel_en = $lv_obj->bezeichnung_english; - $anz_incoming = $lv_obj->incoming; - - if (!isset($lv)) - $lv=0; - - - //Zugeteilte Fachbereiche auslesen - $qry = "SELECT distinct tbl_fachbereich.bezeichnung as bezeichnung, tbl_fachbereich.fachbereich_kurzbz as fachbereich_kurzbz - FROM public.tbl_fachbereich, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach - WHERE tbl_lehreinheit.studiensemester_kurzbz=( - SELECT studiensemester_kurzbz FROM lehre.tbl_lehreinheit JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." ORDER BY ende DESC LIMIT 1) - AND tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND - tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz"; - - if(!$result=$db->db_query($qry)) - die('Fehler beim Lesen aus der Datenbank'); - - $fachbereiche="'1'"; - $fachbereich['kurzbz']=array(); - $fachbereich['bezeichnung']=array(); - - while($row=$db->db_fetch_object($result)) - { - $fachbereiche .= ", ".$db->db_add_param($row->fachbereich_kurzbz); - $fachbereich['kurzbz'][]=$row->fachbereich_kurzbz; - $fachbereich['bezeichnung'][]=$row->bezeichnung; - } - - //Studiengangsbezeichnung auslesen - $stg_hlp_obj = new studiengang(); - $stg_hlp_obj->load($stg); - - $stg_kurzbz = $stg_hlp_obj->kuerzel; - $stg_kurzbzlang = $stg_hlp_obj->kurzbzlang; - - //Lehrform auslesen - $qry = "Select distinct lehrform_kurzbz FROM lehre.tbl_lehreinheit WHERE lehrveranstaltung_id=".$db->db_add_param($lv, FHC_INTEGER)." AND studiensemester_kurzbz=".$db->db_add_param($stsem); - if(!$res = $db->db_query($qry)) - die('Fehler beim Lesen aus der Datenbank'); - //echo $fachbereiche; - while($row = $db->db_fetch_object($res)) - $lehrform_kurzbz[] = $row->lehrform_kurzbz; - //Fachbereichsleiter fuer alle FB ermitteln - $qry=" - SELECT - vorname, nachname, tbl_fachbereich.fachbereich_kurzbz - FROM - public.tbl_benutzerfunktion - JOIN public.tbl_fachbereich USING(oe_kurzbz) - JOIN campus.vw_mitarbeiter USING(uid) - WHERE - vw_mitarbeiter.aktiv AND - funktion_kurzbz='Leitung' AND tbl_fachbereich.fachbereich_kurzbz in($fachbereiche) AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now())"; - - if(!$res=$db->db_query($qry)) - die('Fehler '.$db->errormsg); - - $fachbereichsleiter=array(); - while($row=$db->db_fetch_object($res)) - $fachbereichsleiter[$row->fachbereich_kurzbz] = $row->vorname." ".$row->nachname; - - //Fachbereichskoordinatoren fuer alle FB ermitteln - //$qry="SELECT * FROM public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) WHERE funktion_kurzbz='fbk' AND studiengang_kz='$stg' AND fachbereich_kurzbz in($fachbereiche)"; - $qry = "SELECT - distinct vorname, nachname, tbl_fachbereich.fachbereich_kurzbz - FROM - lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach, public.tbl_benutzerfunktion, campus.vw_mitarbeiter, public.tbl_fachbereich - WHERE - vw_mitarbeiter.aktiv AND - tbl_lehrveranstaltung.lehrveranstaltung_id='$lv' AND - tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND - lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz AND - tbl_fachbereich.fachbereich_kurzbz=tbl_benutzerfunktion.fachbereich_kurzbz AND - tbl_benutzerfunktion.funktion_kurzbz='fbk' AND - vw_mitarbeiter.uid=COALESCE(tbl_lehrveranstaltung.koordinator, tbl_benutzerfunktion.uid) AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) AND - tbl_lehrveranstaltung.studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1) "; - - if(!$res=$db->db_query($qry)) - die('Fehler ! '.$db->errormsg); - - $fachbereichskoordinator=array(); - while($row=$db->db_fetch_object($res)) - { - $name = $row->vorname." ".$row->nachname; - - if(!isset($fachbereichskoordinator[$row->fachbereich_kurzbz]) || - !in_array($name, $fachbereichskoordinator[$row->fachbereich_kurzbz])) - { - $fachbereichskoordinator[$row->fachbereich_kurzbz][] = $name; - } - } - - //Namen der Lehrenden Auslesen - $qry = "SELECT distinct vorname, nachname FROM lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter - WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." - AND studiensemester_kurzbz=(SELECT studiensemester_kurzbz FROM public.tbl_studiensemester JOIN lehre.tbl_lehreinheit USING(studiensemester_kurzbz) WHERE tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." ORDER BY ende DESC LIMIT 1) - AND tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id - AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid=uid"; - - $lehrendearray = array(); - if($result=$db->db_query($qry)) - { - while($row=$db->db_fetch_object($result)) - $lehrendearray[] = "$row->vorname $row->nachname"; - } - - //Ausgabe der LV-Information - - //Deutsch Version - if(!(isset($language) && $language=='en')) - { - echo "

    - - - - - - "; - - if ($kurzbeschreibung_de) - { - echo ""; - echo ""; - } - - if ($lehrziele_de) - { - echo ""; - echo ""; - } - - if ($lehrinhalte_de) - { - echo ""; - echo ""; - } - - if ($voraussetzungen_de) - { - echo ""; - echo ""; - } - - if ($methodik_de) - { - echo ""; - echo ""; - } - - if ($pruefungsordnung_de) - { - echo ""; - echo ""; - } - - if ($unterlagen_de) - { - echo ""; - echo ""; - } - - if ($anwesenheit_de) - { - echo ""; - echo ""; - } - - if ($anmerkungen_de) - { - echo ""; - echo ""; - } - - echo "
    - -

    - ".stripslashes($titel_de)."

    - -

    "; - echo ''; - echo ""; - echo ""; - echo ''; - if(($anz=count($lehrendearray))>0) - { - echo "'; - } - - if(isset($lehrform_kurzbz) && count($lehrform_kurzbz)>0) - { - echo "'; - } - - if ($lang > -1) - echo ''; - - if ($ects_points) - echo ''; - - if ($anz_incoming > -1) - { - echo ''; - } - else echo ''; - - echo ''; - //Fachbereiche und Leiter/Koordinatoren anzeigen - if (count($fachbereich['bezeichnung'])>0) - { - echo ''; - } - echo "
    Studiengang:$stg_kurzbz
    Semester:$sem
      
    ".$phrasen->t('lehre/lehrbeauftragter').": "; - - foreach($lehrendearray as $elem) - { - $anz--; - echo " $elem"; - if($anz!=0) - echo ','; - } - echo '
    Lehrform: "; - foreach ($lehrform_kurzbz as $lehrform_kurz) - echo "$lehrform_kurz
    "; - echo '
    Sprache: '.stripslashes($lang).'
    ECTS: '.number_format(stripslashes($ects_points),1,'.','').'
    Incomingplätze: '.stripslashes($anz_incoming).'
    Incomingplätze: 0
      
    Institut: '; - //Fachbereiche durchlaufen - for($i=0;$i
    "; - echo "

    ".$phrasen->t('lvinfo/kurzbeschreibung')."

    ".stripslashes($kurzbeschreibung_de)."

    ".$phrasen->t('lvinfo/lernergebnisse')."

    ".stripslashes($lehrziele_de)."

    ".$phrasen->t('lvinfo/lehrinhalte')."

    ".stripslashes($lehrinhalte_de)."

    ".$phrasen->t('lvinfo/vorkenntnisse')."

    ".stripslashes($voraussetzungen_de)."

    ".$phrasen->t('lvinfo/methodik')."

    ".stripslashes($methodik_de)."

    ".$phrasen->t('lvinfo/leistungsbeurteilung')."

    ".stripslashes($pruefungsordnung_de)."

    ".$phrasen->t('lvinfo/literatur')."

    ".stripslashes($unterlagen_de)."

    ".$phrasen->t('lvinfo/anwesenheit')."

    ".stripslashes($anwesenheit_de)."

    ".$phrasen->t('lvinfo/anmerkungen')."

    ".stripslashes($anmerkungen_de)." 

    "; - } - - //Englische Version - if(!(isset($language) && $language=='de')) - { - echo "

    "; - echo " - - - - '; - - if ($kurzbeschreibung_en) - { - echo ""; - echo ""; - } - - if ($lehrziele_en) - { - echo ""; - echo ""; - } - - if ($lehrinhalte_en) - { - echo ""; - echo ""; - } - - if ($voraussetzungen_en) - { - echo ""; - echo ""; - } - - if ($methodik_en) - { - echo ""; - echo ""; - } - - if ($pruefungsordnung_en) - { - echo ""; - echo ""; - } - - if ($unterlagen_en) - { - echo ""; - echo ""; - } - - if ($anwesenheit_en) - { - echo ""; - echo ""; - } - - if ($anmerkungen_en) - { - echo ""; - echo ""; - } - } - - echo "
    -

    - ".stripslashes($titel_en)." -

    -

    "; - - echo ''; - echo ""; - echo ""; - echo ""; - - if(($anz=count($lehrendearray))>0) - { - echo ""; - } - - if(isset($lehrform_kurzbz) && count($lehrform_kurzbz)>0) - { - echo ""; - } - - if ($lang > -1) - echo ""; - - if ($ects_points) - echo ""; - - if ($anz_incoming > -1) - { - echo ''; - } - else echo ''; - - echo ""; - - //Fachbereiche und Leiter/Koordinatoren anzeigen - if (count($fachbereich['bezeichnung'])>0) - { - echo ''; - } - - echo '
    Degree programme:$stg_kurzbz
    Semester:$sem
      
    Lecturer:"; - - foreach($lehrendearray as $elem) - { - $anz--; - echo " $elem"; - if($anz!=0) - echo ","; - } - echo "
    Course methods: "; - foreach ($lehrform_kurzbz as $lehrform_kurz) - echo "$lehrform_kurz
    "; - echo "
    Language: ".stripslashes($lang)."
    ECTS Credits: ".number_format(stripslashes($ects_points),1,'.','')."
    Places Available for Incoming Students: '.stripslashes($anz_incoming).'
    Places Available for Incoming Students: 0
      
    Department: '; - //Fachbereiche durchlaufen - for($i=0;$i
    '; - echo '

    ".$phrasen->t('lvinfo/kurzbeschreibungEN')."

    ".stripslashes($kurzbeschreibung_en)."

    ".$phrasen->t('lvinfo/lernergebnisseEN')."

    ".stripslashes($lehrziele_en)."

    ".$phrasen->t('lvinfo/lehrinhalteEN')."

    ".stripslashes($lehrinhalte_en)."

    ".$phrasen->t('lvinfo/vorkenntnisseEN')."

    ".stripslashes($voraussetzungen_en)."

    ".$phrasen->t('lvinfo/methodikEN')."

    ".stripslashes($methodik_en)."

    ".$phrasen->t('lvinfo/leistungsbeurteilungEN')."

    ".stripslashes($pruefungsordnung_en)."

    ".$phrasen->t('lvinfo/literaturEN')."

    ".stripslashes($unterlagen_en)."

    ".$phrasen->t('lvinfo/anwesenheitEN')."

    ".stripslashes($anwesenheit_en)."

    ".$phrasen->t('lvinfo/anmerkungenEN')."

    ".stripslashes($anmerkungen_en)." 
    "; - - $lehreinheit = new lehreinheit(); - $studiensemester = new studiensemester(); - $lehreinheit->load_lehreinheiten($lv, $studiensemester->getaktorNext()); - - if (CIS_LVINFO_TERMINE_ANZEIGEN == true) - { - if(!empty($lehreinheit->lehreinheiten)) - { - echo "

    Termine

    "; - foreach($lehreinheit->lehreinheiten as $lehreinheit_temp) - { - $lehrstunde = new lehrstunde(); - $lehrstunde->load_lehrstunden_le($lehreinheit_temp->lehreinheit_id); - $i = 1; - echo ""; - } - echo "
      "; - - $result = $lehrstunde->lehrstunden; - $last = ""; - $bis = ""; - usort($result, "cmp"); - $datum = new datum(); - $std_von = new stunde(); - $std_bis = new stunde(); - foreach($result as $key=>$stunde) - { - if($last !== $stunde->datum) - { - $temp = array_values(getLastStundeByDatum($result, $stunde->datum)); - $size = count($temp); - if($size != 0) - { - $std_von->load($temp[0]->stunde); - $std_bis->load($temp[$size-1]->stunde); - echo "
    • ".$datum->formatDatum($temp[0]->datum,"d.m.Y")." von ".mb_substr($std_von->beginn,0,5)." bis ".mb_substr($std_bis->ende,0,5)."
    • "; - } - $i++; - } - elseif($last == "") - { - $temp = getLastStundeByDatum($result, $stunde->datum); - var_dump($temp); - } - else - { - $bis = $stunde->stunde; - } - - if($i % 5 === 0) - { - // echo "
      "; - // $i++; - } - $last = $stunde->datum; - } - echo "
    "; - } - } - - //Ein paar Zeilenumbrueche damit er beim Sprung zum Anker weit genug nach unten springt - echo "



















    "; - -?> -
     
    - diff --git a/cis/private/lehre/ects/terminologie.php b/cis/private/lehre/ects/terminologie.php deleted file mode 100644 index 68cf250c1..000000000 --- a/cis/private/lehre/ects/terminologie.php +++ /dev/null @@ -1,921 +0,0 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ - -require_once('../../../../config/cis.config.inc.php'); -require_once('../../../../include/functions.inc.php'); -require_once('../../../../include/phrasen.class.php'); - -$sprache = getSprache(); -$p= new phrasen($sprache); - -?> - - - - - -<?php echo $p->t('courseInformation/terminologie');?> - - - -

    t('courseInformatoin/lvInfoTerminologie')?>

    - - - - - - -
    -   - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - t('courseInformation/terminologieDeutschEnglisch');?> -
    -
    - Deutsch - - Englisch -
    - Abschluss (einer Lehrveranstaltung) - - completion -
    - AnfängerIn - - beginner -
    - angerechnet - - recognized -
    - Anrechnung - - recognition -
    - Aufgaben - - tasks / responsibilities / assignment -
    - Bachelor-Studiengang - - bachelor's degree program -
    - Bachelor - - Bachelor -
    - Bachelor-Arbeiten - - bachelor's paper -
    - berufsbegleitend - - part-time study -
    - Berufspraktikum - - intership -
    - bestanden - - pass -
    - bestanden, mit gutem Erfolg - - pass with merit -
    - bestanden, mit ausgezeichnetem - Erfolg - - pass with distinction -
    - BetreuerIn - - supervisor -
    - Diplomarbeit - - master's thesis -
    - DI (FH) - - DI (FH) -
    - Diplom-Studiengang - - diploma degree program -
    - Erhalter - - operator -
    - Experte/in - - expert -
    - Fachbereich - - special field -
    - FachbereichskoordinatorIn - - special field coordinator -
    - FachbereichsleiterIn - - head of special field -
    - Fachhochschul-Beirat - - University of Applied Sciences Advisory Board (UAS Advisory Board) -
    - Fachhochschul-Kollegium - - University of Applied Sciences Council (UAS Council) -
    - Fachhochschul-KollegiumsleiterIn - - Head of University of Applied Sciences Council -
    - Fachhochschulrat - - FH Council -
    - Fachhochschulkonferenz - - Association of Universities of - Applied Sciences Austria -
    - Fernlehre - - distance learning -
    - Fernlehrelemente - - distance learning elements -
    - Fortgeschrittene/r - - advanced -
    - Gesamtnote, Gesamtbeurteilung - - final grade -
    - Grundlagen - - fundamentals -
    - hauptberuflich Lehrende/r - - full-time instructor -
    - Immanente Leistungsbeurteilung - - continuous assessment -
    - integrierte Lehrveranstaltung - - integrated course -
    - JahrgangssprecherIn - - class representative -
    - kommissionelle Prüfung - - panel exam -
    - Labor - - laboratory -
    - Lehrender - - instructor -
    - Lehrgang universitären - Charakters - - university - level course -
    - Lehrinhalte - - course contents -
    - Lehrkörper - - teaching staff -
    - Lehrmethode - - teaching method -
    - Lehrveranstaltung - - course -
    - Lehrziele - - course objectives -
    - Lernmethode - - study technique -
    - Magisterarbeit - - master's thesis -
    - Mag. (FH) - - Mag. (FH) -
    - Master-Studiengang - - master's degree program -
    - Matrikelnummer - - registration number -
    - Mündliche Prüfung - - oral examination -
    - nebenberuflich Lehrende/r - - part-time instructor -
    - Niveaustufe - - level -
    - Niveaustufen: - - levels -
    - Note - - grade -
    - Organisation der LV - - course organization -
    - Personenkennzeichen - - personal identification number -
    - Pflichtveranstaltung - - required course -
    - Präsentation - - presentation -
    - Programmverantwortlicher - - Program Director -
    - Projektarbeit - - project work -
    - Prüfung - - examination -
    - Prüfungsmodalitäten - - exam procedure -
    - Prüfungsordnung - - examination regulation -
    - Rektor - - rector -
    - Schriftliche Prüfung - - written examination -
    - Semester - - semester -
    - Seminar - - seminar -
    - Stellv. Studiengangsleiter - - Deputy Program Director -
    - AssistentIn - - Administrative Assistant -
    - ECTS-Leistungspunkte - - ECTS credits -
    - Semesterwochenstunden - - Semester periods per week (SP/W) -
    - Sommersemester - - summer semester / spring semester -
    - Spezialisten - - specialists -
    - Studiengang - - degree program -
    - StudiengangssprecherIn - - program representative -
    - StudiengangsleiterIn - - program director -
    - Studienjahr - - academic year -
    - Studienplan - - curriculum -
    - Studienplatz - - study place -
    - Studierendenvertretung - - student council -
    - Teilgebiet - - segment -
    - Test - - test -
    - Titel der Lehrveranstaltung - - course title -
    - Übung (einfache, mit Anleitung) - - exercise -
    - Übung (im Sinne einer LV) - - practice - session
    - Übung (im Sinne üben) - - practice -
    - Unterricht - - instruction -
    - Vollzeit - - full-time -
    - Voraussetzungen (für LVs) - - requirements -
    - Vorlesung - - lecture -
    - Vortragender - - lecturer -
    - Wintersemester - - autumn semester / winter semester -
    - Zeugnis - - certificate -
    - Unterrichtssprache - - Language of instruction -
    - Bewerbung - - application -
    - Zugangsvorraussetzungen - - admission requirements -
    - Matura - - Secondary School diploma -
    - Auslandssemester - - exchange semester -
    - Fachhochschule Technikum Wien - - University of Applied Sciences Technikum Wien (UAS Technikum Wien) -
    - Institut für - - department of -
    - Senat - - Senate -
    - - \ No newline at end of file diff --git a/include/safehtml/HTMLSax3.php b/include/safehtml/HTMLSax3.php deleted file mode 100644 index deaa8832f..000000000 --- a/include/safehtml/HTMLSax3.php +++ /dev/null @@ -1,687 +0,0 @@ - Original port from Python | -// | Authors: Harry Fuecks Port to PEAR + more | -// | Authors: Many @ Sitepointforums Advanced PHP Forums | -// +----------------------------------------------------------------------+ -// -// $Id: HTMLSax3.php,v 1.1 2007/07/20 17:16:35 claudiucristea Exp $ -// -/** -* Main parser components -* @package XML_HTMLSax3 -* @version $Id: HTMLSax3.php,v 1.1 2007/07/20 17:16:35 claudiucristea Exp $ -*/ -/** -* Required classes -*/ -if (!defined('XML_HTMLSAX3')) { - define('XML_HTMLSAX3', 'XML/'); -} -require_once(XML_HTMLSAX3 . 'HTMLSax3/States.php'); -require_once(XML_HTMLSAX3 . 'HTMLSax3/Decorators.php'); - -/** -* Base State Parser -* @package XML_HTMLSax3 -* @access protected -* @abstract -*/ -class XML_HTMLSax3_StateParser { - /** - * Instance of user front end class to be passed to callbacks - * @var XML_HTMLSax3 - * @access private - */ - var $htmlsax; - /** - * User defined object for handling elements - * @var object - * @access private - */ - var $handler_object_element; - /** - * User defined open tag handler method - * @var string - * @access private - */ - var $handler_method_opening; - /** - * User defined close tag handler method - * @var string - * @access private - */ - var $handler_method_closing; - /** - * User defined object for handling data in elements - * @var object - * @access private - */ - var $handler_object_data; - /** - * User defined data handler method - * @var string - * @access private - */ - var $handler_method_data; - /** - * User defined object for handling processing instructions - * @var object - * @access private - */ - var $handler_object_pi; - /** - * User defined processing instruction handler method - * @var string - * @access private - */ - var $handler_method_pi; - /** - * User defined object for handling JSP/ASP tags - * @var object - * @access private - */ - var $handler_object_jasp; - /** - * User defined JSP/ASP handler method - * @var string - * @access private - */ - var $handler_method_jasp; - /** - * User defined object for handling XML escapes - * @var object - * @access private - */ - var $handler_object_escape; - /** - * User defined XML escape handler method - * @var string - * @access private - */ - var $handler_method_escape; - /** - * User defined handler object or NullHandler - * @var object - * @access private - */ - var $handler_default; - /** - * Parser options determining parsing behavior - * @var array - * @access private - */ - var $parser_options = array(); - /** - * XML document being parsed - * @var string - * @access private - */ - var $rawtext; - /** - * Position in XML document relative to start (0) - * @var int - * @access private - */ - var $position; - /** - * Length of the XML document in characters - * @var int - * @access private - */ - var $length; - /** - * Array of state objects - * @var array - * @access private - */ - var $State = array(); - - /** - * Constructs XML_HTMLSax3_StateParser setting up states - * @var XML_HTMLSax3 instance of user front end class - * @access protected - */ - function XML_HTMLSax3_StateParser (& $htmlsax) { - $this->htmlsax = & $htmlsax; - $this->State[XML_HTMLSAX3_STATE_START] = new XML_HTMLSax3_StartingState(); - - $this->State[XML_HTMLSAX3_STATE_CLOSING_TAG] = new XML_HTMLSax3_ClosingTagState(); - $this->State[XML_HTMLSAX3_STATE_TAG] = new XML_HTMLSax3_TagState(); - $this->State[XML_HTMLSAX3_STATE_OPENING_TAG] = new XML_HTMLSax3_OpeningTagState(); - - $this->State[XML_HTMLSAX3_STATE_PI] = new XML_HTMLSax3_PiState(); - $this->State[XML_HTMLSAX3_STATE_JASP] = new XML_HTMLSax3_JaspState(); - $this->State[XML_HTMLSAX3_STATE_ESCAPE] = new XML_HTMLSax3_EscapeState(); - } - - /** - * Moves the position back one character - * @access protected - * @return void - */ - function unscanCharacter() { - $this->position -= 1; - } - - /** - * Moves the position forward one character - * @access protected - * @return void - */ - function ignoreCharacter() { - $this->position += 1; - } - - /** - * Returns the next character from the XML document or void if at end - * @access protected - * @return mixed - */ - function scanCharacter() { - if ($this->position < $this->length) { - return $this->rawtext{$this->position++}; - } - } - - /** - * Returns a string from the current position to the next occurance - * of the supplied string - * @param string string to search until - * @access protected - * @return string - */ - function scanUntilString($string) { - $start = $this->position; - $this->position = strpos($this->rawtext, $string, $start); - if ($this->position === FALSE) { - $this->position = $this->length; - } - return substr($this->rawtext, $start, $this->position - $start); - } - - /** - * Returns a string from the current position until the first instance of - * one of the characters in the supplied string argument - * @param string string to search until - * @access protected - * @return string - * @abstract - */ - function scanUntilCharacters($string) {} - - /** - * Moves the position forward past any whitespace characters - * @access protected - * @return void - * @abstract - */ - function ignoreWhitespace() {} - - /** - * Begins the parsing operation, setting up any decorators, depending on - * parse options invoking _parse() to execute parsing - * @param string XML document to parse - * @access protected - * @return void - */ - function parse($data) { - if ($this->parser_options['XML_OPTION_TRIM_DATA_NODES']==1) { - $decorator = new XML_HTMLSax3_Trim( - $this->handler_object_data, - $this->handler_method_data); - $this->handler_object_data =& $decorator; - $this->handler_method_data = 'trimData'; - } - if ($this->parser_options['XML_OPTION_CASE_FOLDING']==1) { - $open_decor = new XML_HTMLSax3_CaseFolding( - $this->handler_object_element, - $this->handler_method_opening, - $this->handler_method_closing); - $this->handler_object_element =& $open_decor; - $this->handler_method_opening ='foldOpen'; - $this->handler_method_closing ='foldClose'; - } - if ($this->parser_options['XML_OPTION_LINEFEED_BREAK']==1) { - $decorator = new XML_HTMLSax3_Linefeed( - $this->handler_object_data, - $this->handler_method_data); - $this->handler_object_data =& $decorator; - $this->handler_method_data = 'breakData'; - } - if ($this->parser_options['XML_OPTION_TAB_BREAK']==1) { - $decorator = new XML_HTMLSax3_Tab( - $this->handler_object_data, - $this->handler_method_data); - $this->handler_object_data =& $decorator; - $this->handler_method_data = 'breakData'; - } - if ($this->parser_options['XML_OPTION_ENTITIES_UNPARSED']==1) { - $decorator = new XML_HTMLSax3_Entities_Unparsed( - $this->handler_object_data, - $this->handler_method_data); - $this->handler_object_data =& $decorator; - $this->handler_method_data = 'breakData'; - } - if ($this->parser_options['XML_OPTION_ENTITIES_PARSED']==1) { - $decorator = new XML_HTMLSax3_Entities_Parsed( - $this->handler_object_data, - $this->handler_method_data); - $this->handler_object_data =& $decorator; - $this->handler_method_data = 'breakData'; - } - // Note switched on by default - if ($this->parser_options['XML_OPTION_STRIP_ESCAPES']==1) { - $decorator = new XML_HTMLSax3_Escape_Stripper( - $this->handler_object_escape, - $this->handler_method_escape); - $this->handler_object_escape =& $decorator; - $this->handler_method_escape = 'strip'; - } - $this->rawtext = $data; - $this->length = strlen($data); - $this->position = 0; - $this->_parse(); - } - - /** - * Performs the parsing itself, delegating calls to a specific parser - * state - * @param constant state object to parse with - * @access protected - * @return void - */ - function _parse($state = XML_HTMLSAX3_STATE_START) { - do { - $state = $this->State[$state]->parse($this); - } while ($state != XML_HTMLSAX3_STATE_STOP && - $this->position < $this->length); - } -} - -/** -* Parser for PHP Versions below 4.3.0. Uses a slower parsing mechanism than -* the equivalent PHP 4.3.0+ subclass of StateParser -* @package XML_HTMLSax3 -* @access protected -* @see XML_HTMLSax3_StateParser_Gtet430 -*/ -class XML_HTMLSax3_StateParser_Lt430 extends XML_HTMLSax3_StateParser { - /** - * Constructs XML_HTMLSax3_StateParser_Lt430 defining available - * parser options - * @var XML_HTMLSax3 instance of user front end class - * @access protected - */ - function XML_HTMLSax3_StateParser_Lt430(& $htmlsax) { - parent::XML_HTMLSax3_StateParser($htmlsax); - $this->parser_options['XML_OPTION_TRIM_DATA_NODES'] = 0; - $this->parser_options['XML_OPTION_CASE_FOLDING'] = 0; - $this->parser_options['XML_OPTION_LINEFEED_BREAK'] = 0; - $this->parser_options['XML_OPTION_TAB_BREAK'] = 0; - $this->parser_options['XML_OPTION_ENTITIES_PARSED'] = 0; - $this->parser_options['XML_OPTION_ENTITIES_UNPARSED'] = 0; - $this->parser_options['XML_OPTION_STRIP_ESCAPES'] = 0; - } - - /** - * Returns a string from the current position until the first instance of - * one of the characters in the supplied string argument - * @param string string to search until - * @access protected - * @return string - */ - function scanUntilCharacters($string) { - $startpos = $this->position; - while ($this->position < $this->length && strpos($string, $this->rawtext{$this->position}) === FALSE) { - $this->position++; - } - return substr($this->rawtext, $startpos, $this->position - $startpos); - } - - /** - * Moves the position forward past any whitespace characters - * @access protected - * @return void - */ - function ignoreWhitespace() { - while ($this->position < $this->length && - strpos(" \n\r\t", $this->rawtext{$this->position}) !== FALSE) { - $this->position++; - } - } - - /** - * Begins the parsing operation, setting up the unparsed XML entities - * decorator if necessary then delegating further work to parent - * @param string XML document to parse - * @access protected - * @return void - */ - function parse($data) { - parent::parse($data); - } -} - -/** -* Parser for PHP Versions equal to or greater than 4.3.0. Uses a faster -* parsing mechanism than the equivalent PHP < 4.3.0 subclass of StateParser -* @package XML_HTMLSax3 -* @access protected -* @see XML_HTMLSax3_StateParser_Lt430 -*/ -class XML_HTMLSax3_StateParser_Gtet430 extends XML_HTMLSax3_StateParser { - /** - * Constructs XML_HTMLSax3_StateParser_Gtet430 defining available - * parser options - * @var XML_HTMLSax3 instance of user front end class - * @access protected - */ - function XML_HTMLSax3_StateParser_Gtet430(& $htmlsax) { - parent::XML_HTMLSax3_StateParser($htmlsax); - $this->parser_options['XML_OPTION_TRIM_DATA_NODES'] = 0; - $this->parser_options['XML_OPTION_CASE_FOLDING'] = 0; - $this->parser_options['XML_OPTION_LINEFEED_BREAK'] = 0; - $this->parser_options['XML_OPTION_TAB_BREAK'] = 0; - $this->parser_options['XML_OPTION_ENTITIES_PARSED'] = 0; - $this->parser_options['XML_OPTION_ENTITIES_UNPARSED'] = 0; - $this->parser_options['XML_OPTION_STRIP_ESCAPES'] = 0; - } - /** - * Returns a string from the current position until the first instance of - * one of the characters in the supplied string argument. - * @param string string to search until - * @access protected - * @return string - */ - function scanUntilCharacters($string) { - $startpos = $this->position; - $length = strcspn($this->rawtext, $string, $startpos); - $this->position += $length; - return substr($this->rawtext, $startpos, $length); - } - - /** - * Moves the position forward past any whitespace characters - * @access protected - * @return void - */ - function ignoreWhitespace() { - $this->position += strspn($this->rawtext, " \n\r\t", $this->position); - } - - /** - * Begins the parsing operation, setting up the parsed and unparsed - * XML entity decorators if necessary then delegating further work - * to parent - * @param string XML document to parse - * @access protected - * @return void - */ - function parse($data) { - parent::parse($data); - } -} - -/** -* Default NullHandler for methods which were not set by user -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_NullHandler { - /** - * Generic handler method which does nothing - * @access protected - * @return void - */ - function DoNothing() { - } -} - -/** -* User interface class. All user calls should only be made to this class -* @package XML_HTMLSax3 -* @access public -*/ -class XML_HTMLSax3 { - /** - * Instance of concrete subclass of XML_HTMLSax3_StateParser - * @var XML_HTMLSax3_StateParser - * @access private - */ - var $state_parser; - - /** - * Constructs XML_HTMLSax3 selecting concrete StateParser subclass - * depending on PHP version being used as well as setting the default - * NullHandler for all callbacks
    - * Example: - *
    -    * $myHandler = & new MyHandler();
    -    * $parser = new XML_HTMLSax3();
    -    * $parser->set_object($myHandler);
    -    * $parser->set_option('XML_OPTION_CASE_FOLDING');
    -    * $parser->set_element_handler('myOpenHandler','myCloseHandler');
    -    * $parser->set_data_handler('myDataHandler');
    -    * $parser->parser($xml);
    -    * 
    - * @access public - */ - function XML_HTMLSax3() { - if (version_compare(phpversion(), '4.3', 'ge')) { - $this->state_parser = new XML_HTMLSax3_StateParser_Gtet430($this); - } else { - $this->state_parser = new XML_HTMLSax3_StateParser_Lt430($this); - } - $nullhandler = new XML_HTMLSax3_NullHandler(); - $this->set_object($nullhandler); - $this->set_element_handler('DoNothing', 'DoNothing'); - $this->set_data_handler('DoNothing'); - $this->set_pi_handler('DoNothing'); - $this->set_jasp_handler('DoNothing'); - $this->set_escape_handler('DoNothing'); - } - - /** - * Sets the user defined handler object. Returns a PEAR Error - * if supplied argument is not an object. - * @param object handler object containing SAX callback methods - * @access public - * @return mixed - */ - function set_object(&$object) { - if ( is_object($object) ) { - $this->state_parser->handler_default =& $object; - return true; - } else { - require_once('PEAR.php'); - PEAR::raiseError('XML_HTMLSax3::set_object requires '. - 'an object instance'); - } - } - - /** - * Sets a parser option. By default all options are switched off. - * Returns a PEAR Error if option is invalid
    - * Available options: - *
      - *
    • XML_OPTION_TRIM_DATA_NODES: trim whitespace off the beginning - * and end of data passed to the data handler
    • - *
    • XML_OPTION_LINEFEED_BREAK: linefeeds result in additional data - * handler calls
    • - *
    • XML_OPTION_TAB_BREAK: tabs result in additional data handler - * calls
    • - *
    • XML_OPTION_ENTITIES_UNPARSED: XML entities are returned as - * seperate data handler calls in unparsed form
    • - *
    • XML_OPTION_ENTITIES_PARSED: (PHP 4.3.0+ only) XML entities are - * returned as seperate data handler calls and are parsed with - * PHP's html_entity_decode() function
    • - *
    • XML_OPTION_STRIP_ESCAPES: strips out the -- -- comment markers - * or CDATA markup inside an XML escape, if found.
    • - *
    - * To get HTMLSax to behave in the same way as the native PHP SAX parser, - * using it's default state, you need to switch on XML_OPTION_LINEFEED_BREAK, - * XML_OPTION_ENTITIES_PARSED and XML_OPTION_CASE_FOLDING - * @param string name of parser option - * @param int (optional) 1 to switch on, 0 for off - * @access public - * @return boolean - */ - function set_option($name, $value=1) { - if ( array_key_exists($name,$this->state_parser->parser_options) ) { - $this->state_parser->parser_options[$name] = $value; - return true; - } else { - require_once('PEAR.php'); - PEAR::raiseError('XML_HTMLSax3::set_option('.$name.') illegal'); - } - } - - /** - * Sets the data handler method which deals with the contents of XML - * elements.
    - * The handler method must accept two arguments, the first being an - * instance of XML_HTMLSax3 and the second being the contents of an - * XML element e.g. - *
    -    * function myDataHander(& $parser,$data){}
    -    * 
    - * @param string name of method - * @access public - * @return void - * @see set_object - */ - function set_data_handler($data_method) { - $this->state_parser->handler_object_data =& $this->state_parser->handler_default; - $this->state_parser->handler_method_data = $data_method; - } - - /** - * Sets the open and close tag handlers - *
    The open handler method must accept three arguments; the parser, - * the tag name and an array of attributes e.g. - *
    -    * function myOpenHander(& $parser,$tagname,$attrs=array()){}
    -    * 
    - * The close handler method must accept two arguments; the parser and - * the tag name e.g. - *
    -    * function myCloseHander(& $parser,$tagname){}
    -    * 
    - * @param string name of open method - * @param string name of close method - * @access public - * @return void - * @see set_object - */ - function set_element_handler($opening_method, $closing_method) { - $this->state_parser->handler_object_element =& $this->state_parser->handler_default; - $this->state_parser->handler_method_opening = $opening_method; - $this->state_parser->handler_method_closing = $closing_method; - } - - /** - * Sets the processing instruction handler method e.g. for PHP open - * and close tags
    - * The handler method must accept three arguments; the parser, the - * PI target and data inside the PI - *
    -    * function myPIHander(& $parser,$target, $data){}
    -    * 
    - * @param string name of method - * @access public - * @return void - * @see set_object - */ - function set_pi_handler($pi_method) { - $this->state_parser->handler_object_pi =& $this->state_parser->handler_default; - $this->state_parser->handler_method_pi = $pi_method; - } - - /** - * Sets the XML escape handler method e.g. for comments and doctype - * declarations
    - * The handler method must accept two arguments; the parser and the - * contents of the escaped section - *
    -    * function myEscapeHander(& $parser, $data){}
    -    * 
    - * @param string name of method - * @access public - * @return void - * @see set_object - */ - function set_escape_handler($escape_method) { - $this->state_parser->handler_object_escape =& $this->state_parser->handler_default; - $this->state_parser->handler_method_escape = $escape_method; - } - - /** - * Sets the JSP/ASP markup handler
    - * The handler method must accept two arguments; the parser and - * body of the JASP tag - *
    -    * function myJaspHander(& $parser, $data){}
    -    * 
    - * @param string name of method - * @access public - * @return void - * @see set_object - */ - function set_jasp_handler ($jasp_method) { - $this->state_parser->handler_object_jasp =& $this->state_parser->handler_default; - $this->state_parser->handler_method_jasp = $jasp_method; - } - - /** - * Returns the current string position of the "cursor" inside the XML - * document - *
    Intended for use from within a user defined handler called - * via the $parser reference e.g. - *
    -    * function myDataHandler(& $parser,$data) {
    -    *     echo( 'Current position: '.$parser->get_current_position() );
    -    * }
    -    * 
    - * @access public - * @return int - * @see get_length - */ - function get_current_position() { - return $this->state_parser->position; - } - - /** - * Returns the string length of the XML document being parsed - * @access public - * @return int - */ - function get_length() { - return $this->state_parser->length; - } - - /** - * Start parsing some XML - * @param string XML document - * @access public - * @return void - */ - function parse($data) { - $this->state_parser->parse($data); - } -} -?> \ No newline at end of file diff --git a/include/safehtml/HTMLSax3/Decorators.php b/include/safehtml/HTMLSax3/Decorators.php deleted file mode 100644 index edef1d207..000000000 --- a/include/safehtml/HTMLSax3/Decorators.php +++ /dev/null @@ -1,363 +0,0 @@ - Original port from Python | -// | Authors: Harry Fuecks Port to PEAR + more | -// | Authors: Many @ Sitepointforums Advanced PHP Forums | -// +----------------------------------------------------------------------+ -// -// $Id: Decorators.php,v 1.1 2007/07/20 17:16:35 claudiucristea Exp $ -// -/** -* Decorators for dealing with parser options -* @package XML_HTMLSax3 -* @version $Id: Decorators.php,v 1.1 2007/07/20 17:16:35 claudiucristea Exp $ -* @see XML_HTMLSax3::set_option -*/ -/** -* Trims the contents of element data from whitespace at start and end -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_Trim { - /** - * Original handler object - * @var object - * @access private - */ - var $orig_obj; - /** - * Original handler method - * @var string - * @access private - */ - var $orig_method; - /** - * Constructs XML_HTMLSax3_Trim - * @param object handler object being decorated - * @param string original handler method - * @access protected - */ - function XML_HTMLSax3_Trim(&$orig_obj, $orig_method) { - $this->orig_obj =& $orig_obj; - $this->orig_method = $orig_method; - } - /** - * Trims the data - * @param XML_HTMLSax3 - * @param string element data - * @access protected - */ - function trimData(&$parser, $data) { - $data = trim($data); - if ($data != '') { - $this->orig_obj->{$this->orig_method}($parser, $data); - } - } -} -/** -* Coverts tag names to upper case -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_CaseFolding { - /** - * Original handler object - * @var object - * @access private - */ - var $orig_obj; - /** - * Original open handler method - * @var string - * @access private - */ - var $orig_open_method; - /** - * Original close handler method - * @var string - * @access private - */ - var $orig_close_method; - /** - * Constructs XML_HTMLSax3_CaseFolding - * @param object handler object being decorated - * @param string original open handler method - * @param string original close handler method - * @access protected - */ - function XML_HTMLSax3_CaseFolding(&$orig_obj, $orig_open_method, $orig_close_method) { - $this->orig_obj =& $orig_obj; - $this->orig_open_method = $orig_open_method; - $this->orig_close_method = $orig_close_method; - } - /** - * Folds up open tag callbacks - * @param XML_HTMLSax3 - * @param string tag name - * @param array tag attributes - * @access protected - */ - function foldOpen(&$parser, $tag, $attrs=array(), $empty = FALSE) { - $this->orig_obj->{$this->orig_open_method}($parser, strtoupper($tag), $attrs, $empty); - } - /** - * Folds up close tag callbacks - * @param XML_HTMLSax3 - * @param string tag name - * @access protected - */ - function foldClose(&$parser, $tag, $empty = FALSE) { - $this->orig_obj->{$this->orig_close_method}($parser, strtoupper($tag), $empty); - } -} -/** -* Breaks up data by linefeed characters, resulting in additional -* calls to the data handler -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_Linefeed { - /** - * Original handler object - * @var object - * @access private - */ - var $orig_obj; - /** - * Original handler method - * @var string - * @access private - */ - var $orig_method; - /** - * Constructs XML_HTMLSax3_LineFeed - * @param object handler object being decorated - * @param string original handler method - * @access protected - */ - function XML_HTMLSax3_LineFeed(&$orig_obj, $orig_method) { - $this->orig_obj =& $orig_obj; - $this->orig_method = $orig_method; - } - /** - * Breaks the data up by linefeeds - * @param XML_HTMLSax3 - * @param string element data - * @access protected - */ - function breakData(&$parser, $data) { - $data = explode("\n",$data); - foreach ( $data as $chunk ) { - $this->orig_obj->{$this->orig_method}($parser, $chunk); - } - } -} -/** -* Breaks up data by tab characters, resulting in additional -* calls to the data handler -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_Tab { - /** - * Original handler object - * @var object - * @access private - */ - var $orig_obj; - /** - * Original handler method - * @var string - * @access private - */ - var $orig_method; - /** - * Constructs XML_HTMLSax3_Tab - * @param object handler object being decorated - * @param string original handler method - * @access protected - */ - function XML_HTMLSax3_Tab(&$orig_obj, $orig_method) { - $this->orig_obj =& $orig_obj; - $this->orig_method = $orig_method; - } - /** - * Breaks the data up by linefeeds - * @param XML_HTMLSax3 - * @param string element data - * @access protected - */ - function breakData(&$parser, $data) { - $data = explode("\t",$data); - foreach ( $data as $chunk ) { - $this->orig_obj->{$this->orig_method}($this, $chunk); - } - } -} -/** -* Breaks up data by XML entities and parses them with html_entity_decode(), -* resulting in additional calls to the data handler
    -* Requires PHP 4.3.0+ -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_Entities_Parsed { - /** - * Original handler object - * @var object - * @access private - */ - var $orig_obj; - /** - * Original handler method - * @var string - * @access private - */ - var $orig_method; - /** - * Constructs XML_HTMLSax3_Entities_Parsed - * @param object handler object being decorated - * @param string original handler method - * @access protected - */ - function XML_HTMLSax3_Entities_Parsed(&$orig_obj, $orig_method) { - $this->orig_obj =& $orig_obj; - $this->orig_method = $orig_method; - } - /** - * Breaks the data up by XML entities - * @param XML_HTMLSax3 - * @param string element data - * @access protected - */ - function breakData(&$parser, $data) { - $data = preg_split('/(&.+?;)/',$data,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - foreach ( $data as $chunk ) { - $chunk = html_entity_decode($chunk,ENT_NOQUOTES); - $this->orig_obj->{$this->orig_method}($this, $chunk); - } - } -} -/** -* Compatibility with older PHP versions -*/ -if (version_compare(phpversion(), '4.3', '<') && !function_exists('html_entity_decode') ) { - function html_entity_decode($str, $style=ENT_NOQUOTES) { - return strtr($str, - array_flip(get_html_translation_table(HTML_ENTITIES,$style))); - } -} -/** -* Breaks up data by XML entities but leaves them unparsed, -* resulting in additional calls to the data handler
    -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_Entities_Unparsed { - /** - * Original handler object - * @var object - * @access private - */ - var $orig_obj; - /** - * Original handler method - * @var string - * @access private - */ - var $orig_method; - /** - * Constructs XML_HTMLSax3_Entities_Unparsed - * @param object handler object being decorated - * @param string original handler method - * @access protected - */ - function XML_HTMLSax3_Entities_Unparsed(&$orig_obj, $orig_method) { - $this->orig_obj =& $orig_obj; - $this->orig_method = $orig_method; - } - /** - * Breaks the data up by XML entities - * @param XML_HTMLSax3 - * @param string element data - * @access protected - */ - function breakData(&$parser, $data) { - $data = preg_split('/(&.+?;)/',$data,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - foreach ( $data as $chunk ) { - $this->orig_obj->{$this->orig_method}($this, $chunk); - } - } -} - -/** -* Strips the HTML comment markers or CDATA sections from an escape. -* If XML_OPTIONS_FULL_ESCAPES is on, this decorator is not used.
    -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_Escape_Stripper { - /** - * Original handler object - * @var object - * @access private - */ - var $orig_obj; - /** - * Original handler method - * @var string - * @access private - */ - var $orig_method; - /** - * Constructs XML_HTMLSax3_Entities_Unparsed - * @param object handler object being decorated - * @param string original handler method - * @access protected - */ - function XML_HTMLSax3_Escape_Stripper(&$orig_obj, $orig_method) { - $this->orig_obj =& $orig_obj; - $this->orig_method = $orig_method; - } - /** - * Breaks the data up by XML entities - * @param XML_HTMLSax3 - * @param string element data - * @access protected - */ - function strip(&$parser, $data) { - // Check for HTML comments first - if ( substr($data,0,2) == '--' ) { - $patterns = array( - '/^\-\-/', // Opening comment: -- - '/\-\-$/', // Closing comment: -- - ); - $data = preg_replace($patterns,'',$data); - - // Check for XML CDATA sections (note: don't do both!) - } else if ( substr($data,0,1) == '[' ) { - $patterns = array( - '/^\[.*CDATA.*\[/s', // Opening CDATA - '/\].*\]$/s', // Closing CDATA - ); - $data = preg_replace($patterns,'',$data); - } - - $this->orig_obj->{$this->orig_method}($this, $data); - } -} -?> \ No newline at end of file diff --git a/include/safehtml/HTMLSax3/States.php b/include/safehtml/HTMLSax3/States.php deleted file mode 100644 index 1da50b42a..000000000 --- a/include/safehtml/HTMLSax3/States.php +++ /dev/null @@ -1,287 +0,0 @@ - Original port from Python | -// | Authors: Harry Fuecks Port to PEAR + more | -// | Authors: Many @ Sitepointforums Advanced PHP Forums | -// +----------------------------------------------------------------------+ -// -// $Id: States.php,v 1.1 2007/07/20 17:16:35 claudiucristea Exp $ -// -/** -* Parsing states. -* @package XML_HTMLSax3 -* @version $Id: States.php,v 1.1 2007/07/20 17:16:35 claudiucristea Exp $ -*/ -/** -* Define parser states -*/ -define('XML_HTMLSAX3_STATE_STOP', 0); -define('XML_HTMLSAX3_STATE_START', 1); -define('XML_HTMLSAX3_STATE_TAG', 2); -define('XML_HTMLSAX3_STATE_OPENING_TAG', 3); -define('XML_HTMLSAX3_STATE_CLOSING_TAG', 4); -define('XML_HTMLSAX3_STATE_ESCAPE', 6); -define('XML_HTMLSAX3_STATE_JASP', 7); -define('XML_HTMLSAX3_STATE_PI', 8); -/** -* StartingState searches for the start of any XML tag -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_StartingState { - /** - * @param XML_HTMLSax3_StateParser subclass - * @return constant XML_HTMLSAX3_STATE_TAG - * @access protected - */ - function parse(&$context) { - $data = $context->scanUntilString('<'); - if ($data != '') { - $context->handler_object_data-> - {$context->handler_method_data}($context->htmlsax, $data); - } - $context->IgnoreCharacter(); - return XML_HTMLSAX3_STATE_TAG; - } -} -/** -* Decides which state to move one from after StartingState -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_TagState { - /** - * @param XML_HTMLSax3_StateParser subclass - * @return constant the next state to move into - * @access protected - */ - function parse(&$context) { - switch($context->ScanCharacter()) { - case '/': - return XML_HTMLSAX3_STATE_CLOSING_TAG; - break; - case '?': - return XML_HTMLSAX3_STATE_PI; - break; - case '%': - return XML_HTMLSAX3_STATE_JASP; - break; - case '!': - return XML_HTMLSAX3_STATE_ESCAPE; - break; - default: - $context->unscanCharacter(); - return XML_HTMLSAX3_STATE_OPENING_TAG; - } - } -} -/** -* Dealing with closing XML tags -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_ClosingTagState { - /** - * @param XML_HTMLSax3_StateParser subclass - * @return constant XML_HTMLSAX3_STATE_START - * @access protected - */ - function parse(&$context) { - $tag = $context->scanUntilCharacters('/>'); - if ($tag != '') { - $char = $context->scanCharacter(); - if ($char == '/') { - $char = $context->scanCharacter(); - if ($char != '>') { - $context->unscanCharacter(); - } - } - $context->handler_object_element-> - {$context->handler_method_closing}($context->htmlsax, $tag, FALSE); - } - return XML_HTMLSAX3_STATE_START; - } -} -/** -* Dealing with opening XML tags -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_OpeningTagState { - /** - * Handles attributes - * @param string attribute name - * @param string attribute value - * @return void - * @access protected - * @see XML_HTMLSax3_AttributeStartState - */ - function parseAttributes(&$context) { - $Attributes = array(); - - $context->ignoreWhitespace(); - $attributename = $context->scanUntilCharacters("=/> \n\r\t"); - while ($attributename != '') { - $attributevalue = NULL; - $context->ignoreWhitespace(); - $char = $context->scanCharacter(); - if ($char == '=') { - $context->ignoreWhitespace(); - $char = $context->ScanCharacter(); - if ($char == '"') { - $attributevalue= $context->scanUntilString('"'); - $context->IgnoreCharacter(); - } else if ($char == "'") { - $attributevalue = $context->scanUntilString("'"); - $context->IgnoreCharacter(); - } else { - $context->unscanCharacter(); - $attributevalue = - $context->scanUntilCharacters("> \n\r\t"); - } - } else if ($char !== NULL) { - $attributevalue = NULL; - $context->unscanCharacter(); - } - $Attributes[$attributename] = $attributevalue; - - $context->ignoreWhitespace(); - $attributename = $context->scanUntilCharacters("=/> \n\r\t"); - } - return $Attributes; - } - - /** - * @param XML_HTMLSax3_StateParser subclass - * @return constant XML_HTMLSAX3_STATE_START - * @access protected - */ - function parse(&$context) { - $tag = $context->scanUntilCharacters("/> \n\r\t"); - if ($tag != '') { - $this->attrs = array(); - $Attributes = $this->parseAttributes($context); - $char = $context->scanCharacter(); - if ($char == '/') { - $char = $context->scanCharacter(); - if ($char != '>') { - $context->unscanCharacter(); - } - $context->handler_object_element-> - {$context->handler_method_opening}($context->htmlsax, $tag, - $Attributes, TRUE); - $context->handler_object_element-> - {$context->handler_method_closing}($context->htmlsax, $tag, - TRUE); - } else { - $context->handler_object_element-> - {$context->handler_method_opening}($context->htmlsax, $tag, - $Attributes, FALSE); - } - } - return XML_HTMLSAX3_STATE_START; - } -} - -/** -* Deals with XML escapes handling comments and CDATA correctly -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_EscapeState { - /** - * @param XML_HTMLSax3_StateParser subclass - * @return constant XML_HTMLSAX3_STATE_START - * @access protected - */ - function parse(&$context) { - $char = $context->ScanCharacter(); - if ($char == '-') { - $char = $context->ScanCharacter(); - if ($char == '-') { - $context->unscanCharacter(); - $context->unscanCharacter(); - $text = $context->scanUntilString('-->'); - $text .= $context->scanCharacter(); - $text .= $context->scanCharacter(); - } else { - $context->unscanCharacter(); - $text = $context->scanUntilString('>'); - } - } else if ( $char == '[') { - $context->unscanCharacter(); - $text = $context->scanUntilString(']>'); - $text.= $context->scanCharacter(); - } else { - $context->unscanCharacter(); - $text = $context->scanUntilString('>'); - } - - $context->IgnoreCharacter(); - if ($text != '') { - $context->handler_object_escape-> - {$context->handler_method_escape}($context->htmlsax, $text); - } - return XML_HTMLSAX3_STATE_START; - } -} -/** -* Deals with JASP/ASP markup -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_JaspState { - /** - * @param XML_HTMLSax3_StateParser subclass - * @return constant XML_HTMLSAX3_STATE_START - * @access protected - */ - function parse(&$context) { - $text = $context->scanUntilString('%>'); - if ($text != '') { - $context->handler_object_jasp-> - {$context->handler_method_jasp}($context->htmlsax, $text); - } - $context->IgnoreCharacter(); - $context->IgnoreCharacter(); - return XML_HTMLSAX3_STATE_START; - } -} -/** -* Deals with XML processing instructions -* @package XML_HTMLSax3 -* @access protected -*/ -class XML_HTMLSax3_PiState { - /** - * @param XML_HTMLSax3_StateParser subclass - * @return constant XML_HTMLSAX3_STATE_START - * @access protected - */ - function parse(&$context) { - $target = $context->scanUntilCharacters(" \n\r\t"); - $data = $context->scanUntilString('?>'); - if ($data != '') { - $context->handler_object_pi-> - {$context->handler_method_pi}($context->htmlsax, $target, $data); - } - $context->IgnoreCharacter(); - $context->IgnoreCharacter(); - return XML_HTMLSAX3_STATE_START; - } -} -?> \ No newline at end of file diff --git a/include/safehtml/safehtml.class.php b/include/safehtml/safehtml.class.php deleted file mode 100644 index 2cca6cef7..000000000 --- a/include/safehtml/safehtml.class.php +++ /dev/null @@ -1,671 +0,0 @@ - - * @copyright 2004-2005 Roman Ivanov - * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) - * @version 1.3.7 - * @link http://pixel-apes.com/safehtml/ - */ - - -/** - * This package requires HTMLSax3 package - */ - define("XML_HTMLSAX3", ''); -require_once(XML_HTMLSAX3 . 'HTMLSax3.php'); - - -/** - * - * SafeHTML Parser - * - * This parser strips down all potentially dangerous content within HTML: - *
      - *
    • opening tag without its closing tag
    • - *
    • closing tag without its opening tag
    • - *
    • any of these tags: "base", "basefont", "head", "html", "body", "applet", - * "object", "iframe", "frame", "frameset", "script", "layer", "ilayer", "embed", - * "bgsound", "link", "meta", "style", "title", "blink", "xml" etc.
    • - *
    • any of these attributes: on*, data*, dynsrc
    • - *
    • javascript:/vbscript:/about: etc. protocols
    • - *
    • expression/behavior etc. in styles
    • - *
    • any other active content
    • - *
    - * It also tries to convert code to XHTML valid, but htmltidy is far better - * solution for this task. - * - * Example: - *
    - * $parser =& new SafeHTML();
    - * $result = $parser->parse($doc);
    - * 
    - * - * @category HTML - * @package SafeHTML - * @author Roman Ivanov - * @copyright 1997-2005 Roman Ivanov - * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) - * @version Release: @package_version@ - * @link http://pear.php.net/package/SafeHTML - */ -class SafeHTML -{ - /** - * Storage for resulting HTML output - * - * @var string - * @access private - */ - var $_xhtml = ''; - - /** - * Array of counters for each tag - * - * @var array - * @access private - */ - var $_counter = array(); - - /** - * Stack of unclosed tags - * - * @var array - * @access private - */ - var $_stack = array(); - - /** - * Array of counters for tags that must be deleted with all content - * - * @var array - * @access private - */ - var $_dcCounter = array(); - - /** - * Stack of unclosed tags that must be deleted with all content - * - * @var array - * @access private - */ - var $_dcStack = array(); - - /** - * Stores level of list (ol/ul) nesting - * - * @var int - * @access private - */ - var $_listScope = 0; - - /** - * Stack of unclosed list tags - * - * @var array - * @access private - */ - var $_liStack = array(); - - /** - * Array of prepared regular expressions for protocols (schemas) matching - * - * @var array - * @access private - */ - var $_protoRegexps = array(); - - /** - * Array of prepared regular expressions for CSS matching - * - * @var array - * @access private - */ - var $_cssRegexps = array(); - - /** - * List of single tags ("") - * - * @var array - * @access public - */ - var $singleTags = array('area', 'br', 'img', 'input', 'hr', 'wbr', ); - - /** - * List of dangerous tags (such tags will be deleted) - * - * @var array - * @access public - */ - var $deleteTags = array( - 'applet', 'base', 'basefont', 'bgsound', 'blink', 'body', - 'embed', 'frame', 'frameset', 'head', 'html', 'ilayer', - 'iframe', 'layer', 'link', 'meta', 'object', 'style', - 'title', 'script', - ); - - /** - * List of dangerous tags (such tags will be deleted, and all content - * inside this tags will be also removed) - * - * @var array - * @access public - */ - var $deleteTagsContent = array('script', 'style', 'title', 'xml', ); - - /** - * Type of protocols filtering ('white' or 'black') - * - * @var string - * @access public - */ - var $protocolFiltering = 'white'; - - /** - * List of "dangerous" protocols (used for blacklist-filtering) - * - * @var array - * @access public - */ - var $blackProtocols = array( - 'about', 'chrome', 'data', 'disk', 'hcp', - 'help', 'javascript', 'livescript', 'lynxcgi', 'lynxexec', - 'ms-help', 'ms-its', 'mhtml', 'mocha', 'opera', - 'res', 'resource', 'shell', 'vbscript', 'view-source', - 'vnd.ms.radio', 'wysiwyg', - ); - - /** - * List of "safe" protocols (used for whitelist-filtering) - * - * @var array - * @access public - */ - var $whiteProtocols = array( - 'ed2k', 'file', 'ftp', 'gopher', 'http', 'https', - 'irc', 'mailto', 'news', 'nntp', 'telnet', 'webcal', - 'xmpp', 'callto', - ); - - /** - * List of attributes that can contain protocols - * - * @var array - * @access public - */ - var $protocolAttributes = array( - 'action', 'background', 'codebase', 'dynsrc', 'href', 'lowsrc', 'src', - ); - - /** - * List of dangerous CSS keywords - * - * Whole style="" attribute will be removed, if parser will find one of - * these keywords - * - * @var array - * @access public - */ - var $cssKeywords = array( - 'absolute', 'behavior', 'behaviour', 'content', 'expression', - 'fixed', 'include-source', 'moz-binding', - ); - - /** - * List of tags that can have no "closing tag" - * - * @var array - * @access public - * @deprecated XHTML does not allow such tags - */ - var $noClose = array(); - - /** - * List of block-level tags that terminates paragraph - * - * Paragraph will be closed when this tags opened - * - * @var array - * @access public - */ - var $closeParagraph = array( - 'address', 'blockquote', 'center', 'dd', 'dir', 'div', - 'dl', 'dt', 'h1', 'h2', 'h3', 'h4', - 'h5', 'h6', 'hr', 'isindex', 'listing', 'marquee', - 'menu', 'multicol', 'ol', 'p', 'plaintext', 'pre', - 'table', 'ul', 'xmp', - ); - - /** - * List of table tags, all table tags outside a table will be removed - * - * @var array - * @access public - */ - var $tableTags = array( - 'caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', - 'thead', 'tr', - ); - - /** - * List of list tags - * - * @var array - * @access public - */ - var $listTags = array('dir', 'menu', 'ol', 'ul', 'dl', ); - - /** - * List of dangerous attributes - * - * @var array - * @access public - */ - var $attributes = array('dynsrc', 'id', 'name', ); - - /** - * List of allowed "namespaced" attributes - * - * @var array - * @access public - */ - var $attributesNS = array('xml:lang', ); - - /** - * Constructs class - * - * @access public - */ - function SafeHTML() - { - //making regular expressions based on Proto & CSS arrays - foreach ($this->blackProtocols as $proto) { - $preg = "/[\s\x01-\x1F]*"; - for ($i=0; $i_protoRegexps[] = $preg; - } - - foreach ($this->cssKeywords as $css) { - $this->_cssRegexps[] = '/' . $css . '/i'; - } - return true; - } - - /** - * Handles the writing of attributes - called from $this->_openHandler() - * - * @param array $attrs array of attributes $name => $value - * @return boolean - * @access private - */ - function _writeAttrs ($attrs) - { - if (is_array($attrs)) { - foreach ($attrs as $name => $value) { - - $name = strtolower($name); - - if (strpos($name, 'on') === 0) { - continue; - } - if (strpos($name, 'data') === 0) { - continue; - } - if (in_array($name, $this->attributes)) { - continue; - } - if (!preg_match("/^[a-z0-9]+$/i", $name)) { - if (!in_array($name, $this->attributesNS)) - { - continue; - } - } - - if (($value === TRUE) || (is_null($value))) { - $value = $name; - } - - if ($name == 'style') { - - // removes insignificant backslahes - $value = str_replace("\\", '', $value); - - // removes CSS comments - while (1) - { - $_value = preg_replace("!/\*.*?\*/!s", '', $value); - if ($_value == $value) break; - $value = $_value; - } - - // replace all & to & - $value = str_replace('&', '&', $value); - $value = str_replace('&', '&', $value); - - foreach ($this->_cssRegexps as $css) { - if (preg_match($css, $value)) { - continue 2; - } - } - foreach ($this->_protoRegexps as $proto) { - if (preg_match($proto, $value)) { - continue 2; - } - } - } - - $tempval = preg_replace('/&#(\d+);?/me', "chr('\\1')", $value); //"' - $tempval = preg_replace('/&#x([0-9a-f]+);?/mei', "chr(hexdec('\\1'))", $tempval); - - if ((in_array($name, $this->protocolAttributes)) && - (strpos($tempval, ':') !== false)) - { - if ($this->protocolFiltering == 'black') { - foreach ($this->_protoRegexps as $proto) { - if (preg_match($proto, $tempval)) continue 2; - } - } else { - $_tempval = explode(':', $tempval); - $proto = $_tempval[0]; - if (!in_array($proto, $this->whiteProtocols)) { - continue; - } - } - } - - $value = str_replace("\"", """, $value); - $this->_xhtml .= ' ' . $name . '="' . $value . '"'; - } - } - return true; - } - - /** - * Opening tag handler - called from HTMLSax - * - * @param object $parser HTML Parser - * @param string $name tag name - * @param array $attrs tag attributes - * @return boolean - * @access private - */ - function _openHandler(&$parser, $name, $attrs) - { - $name = strtolower($name); - - if (in_array($name, $this->deleteTagsContent)) { - array_push($this->_dcStack, $name); - $this->_dcCounter[$name] = isset($this->_dcCounter[$name]) ? $this->_dcCounter[$name]+1 : 1; - } - if (count($this->_dcStack) != 0) { - return true; - } - - if (in_array($name, $this->deleteTags)) { - return true; - } - - if (!preg_match("/^[a-z0-9]+$/i", $name)) { - if (preg_match("!(?:\@|://)!i", $name)) { - $this->_xhtml .= '<' . $name . '>'; - } - return true; - } - - if (in_array($name, $this->singleTags)) { - $this->_xhtml .= '<' . $name; - $this->_writeAttrs($attrs); - $this->_xhtml .= ' />'; - return true; - } - - // TABLES: cannot open table elements when we are not inside table - if ((isset($this->_counter['table'])) && ($this->_counter['table'] <= 0) - && (in_array($name, $this->tableTags))) - { - return true; - } - - // PARAGRAPHS: close paragraph when closeParagraph tags opening - if ((in_array($name, $this->closeParagraph)) && (in_array('p', $this->_stack))) { - $this->_closeHandler($parser, 'p'); - } - - // LISTS: we should close
  • if
  • of the same level opening - if ($name == 'li' && count($this->_liStack) && - $this->_listScope == $this->_liStack[count($this->_liStack)-1]) - { - $this->_closeHandler($parser, 'li'); - } - - // LISTS: we want to know on what nesting level of lists we are - if (in_array($name, $this->listTags)) { - $this->_listScope++; - } - if ($name == 'li') { - array_push($this->_liStack, $this->_listScope); - } - - $this->_xhtml .= '<' . $name; - $this->_writeAttrs($attrs); - $this->_xhtml .= '>'; - array_push($this->_stack,$name); - $this->_counter[$name] = isset($this->_counter[$name]) ? $this->_counter[$name]+1 : 1; - return true; - } - - /** - * Closing tag handler - called from HTMLSax - * - * @param object $parsers HTML parser - * @param string $name tag name - * @return boolean - * @access private - */ - function _closeHandler(&$parser, $name) - { - - $name = strtolower($name); - - if (isset($this->_dcCounter[$name]) && ($this->_dcCounter[$name] > 0) && - (in_array($name, $this->deleteTagsContent))) - { - while ($name != ($tag = array_pop($this->_dcStack))) { - $this->_dcCounter[$tag]--; - } - - $this->_dcCounter[$name]--; - } - - if (count($this->_dcStack) != 0) { - return true; - } - - if ((isset($this->_counter[$name])) && ($this->_counter[$name] > 0)) { - while ($name != ($tag = array_pop($this->_stack))) { - $this->_closeTag($tag); - } - - $this->_closeTag($name); - } - return true; - } - - /** - * Closes tag - * - * @param string $tag tag name - * @return boolean - * @access private - */ - function _closeTag($tag) - { - if (!in_array($tag, $this->noClose)) { - $this->_xhtml .= ''; - } - - $this->_counter[$tag]--; - - if (in_array($tag, $this->listTags)) { - $this->_listScope--; - } - - if ($tag == 'li') { - array_pop($this->_liStack); - } - return true; - } - - /** - * Character data handler - called from HTMLSax - * - * @param object $parser HTML parser - * @param string $data textual data - * @return boolean - * @access private - */ - function _dataHandler(&$parser, $data) - { - if (count($this->_dcStack) == 0) { - $this->_xhtml .= $data; - } - return true; - } - - /** - * Escape handler - called from HTMLSax - * - * @param object $parser HTML parser - * @param string $data comments or other type of data - * @return boolean - * @access private - */ - function _escapeHandler(&$parser, $data) - { - return true; - } - - /** - * Returns the XHTML document - * - * @return string Processed (X)HTML document - * @access public - */ - function getXHTML () - { - while ($tag = array_pop($this->_stack)) { - $this->_closeTag($tag); - } - - return $this->_xhtml; - } - - /** - * Clears current document data - * - * @return boolean - * @access public - */ - function clear() - { - $this->_xhtml = ''; - return true; - } - - /** - * Main parsing fuction - * - * @param string $doc HTML document for processing - * @return string Processed (X)HTML document - * @access public - */ - function parse($doc) - { - - // Save all '<' symbols - $doc = preg_replace("/<(?=[^a-zA-Z\/\!\?\%])/", '<', $doc); - - // Web documents shouldn't contains \x00 symbol - $doc = str_replace("\x00", '', $doc); - - // Opera6 bug workaround - $doc = str_replace("\xC0\xBC", '<', $doc); - - // UTF-7 encoding ASCII decode - $doc = $this->repackUTF7($doc); - - // Instantiate the parser - $parser= new XML_HTMLSax3(); - - // Set up the parser - $parser->set_object($this); - - $parser->set_element_handler('_openHandler','_closeHandler'); - $parser->set_data_handler('_dataHandler'); - $parser->set_escape_handler('_escapeHandler'); - - $parser->parse($doc); - - return $this->getXHTML(); - - } - - - /** - * UTF-7 decoding fuction - * - * @param string $str HTML document for recode ASCII part of UTF-7 back to ASCII - * @return string Decoded document - * @access private - */ - function repackUTF7($str) - { - return preg_replace_callback('!\+([0-9a-zA-Z/]+)\-!', array($this, 'repackUTF7Callback'), $str); - } - - /** - * Additional UTF-7 decoding fuction - * - * @param string $str String for recode ASCII part of UTF-7 back to ASCII - * @return string Recoded string - * @access private - */ - function repackUTF7Callback($str) - { - $str = base64_decode($str[1]); - $str = preg_replace_callback('/^((?:\x00.)*)((?:[^\x00].)+)/', array($this, 'repackUTF7Back'), $str); - return preg_replace('/\x00(.)/', '$1', $str); - } - - /** - * Additional UTF-7 encoding fuction - * - * @param string $str String for recode ASCII part of UTF-7 back to ASCII - * @return string Recoded string - * @access private - */ - function repackUTF7Back($str) - { - return $str[1].'+'.rtrim(base64_encode($str[2]), '=').'-'; - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * c-hanging-comment-ender-p: nil - * End: - */ - -?>