[TYPO3-core] RFC #11471: Hook for typo3PrintError

Christopher Stelmaszyk christopher at yahoo.de
Sat Aug 1 13:23:39 CEST 2009


Hi!

This is a SVN patch request.

Type: feature

Branches: trunk

BT reference:
http://bugs.typo3.org/view.php?id=11471

Problem:
It is not possible to modify an error message which is output with 
typo3PrintError().

Solution:
Integrate a hook.

Note:
Simply install the attached demo-extension to test the hook (e.g. open 
typo3/backend.php without being logged in and watch the error message).

Kind regards

Christopher


Index: t3lib/class.t3lib_befunc.php
===================================================================
--- t3lib/class.t3lib_befunc.php	(revision 5743)
+++ t3lib/class.t3lib_befunc.php	(working copy)
@@ -3925,20 +3925,30 @@
 	 */
 	public static function typo3PrintError($header, $text, $js = '', $head = 
1) {
 			// This prints out a TYPO3 error message.
-			// If $js is set the message will be output in JavaScript
+			// If $js is set, the message will be output in JavaScript.
 		if ($js) {
-			echo "alert('".t3lib_div::slashJS($header.'\n'.$text)."');";
+			$errorMessage = 'alert(\'' . t3lib_div::slashJS($header . '\n' . $text) 
. '\');';
 		} else {
-			echo $head?'<html>
+			$errorMessage = $head ?
+			'<html>
 				<head>
 					<title>Error!</title>
 				</head>
-				<body bgcolor="white" topmargin="0" leftmargin="0" marginwidth="0" 
marginheight="0">':'';
-			echo '<div align="center">
+				<body bgcolor="white" topmargin="0" leftmargin="0" marginwidth="0" 
marginheight="0">'
+				:
+				'';
+			$errorMessage .= '<div align="center">
 					<table border="0" cellspacing="0" cellpadding="0" width="333">
 						<tr>
 							<td align="center">'.
-								($GLOBALS['TBE_STYLES']['logo_login']?'<img 
src="'.$GLOBALS['BACK_PATH'].$GLOBALS['TBE_STYLES']['logo_login'].'" alt="" 
/>':'<img src="'.$GLOBALS['BACK_PATH'].'gfx/typo3logo.gif" width="123" 
height="34" vspace="10" />').
+								($GLOBALS['TBE_STYLES']['logo_login'] ?
+									'<img src="' .
+									$GLOBALS['BACK_PATH'] . $GLOBALS['TBE_STYLES']['logo_login'] .
+									'" alt="" />'
+									:
+									'<img src="' . $GLOBALS['BACK_PATH'] .
+									'gfx/typo3logo.gif" width="123" height="34" vspace="10" alt="" />'
+								) .
 							'</td>
 						</tr>
 						<tr>
@@ -3946,9 +3956,9 @@
 								<table width="100%" border="0" cellspacing="1" cellpadding="10">
 									<tr>
 										<td bgcolor="#F4F0E8">
-											<font face="verdana,arial,helvetica" size="2">';
-			echo '<b><center><font size="+1">'.$header.'</font></center></b><br 
/>'.$text;
-			echo '							</font>
+											<font face="verdana,arial,helvetica" size="2">' . "\n";
+			$errorMessage .= '<b><center><font size="+1">' . $header . 
'</font></center></b><br />' . $text;
+			$errorMessage .= '										</font>
 										</td>
 									</tr>
 								</table>
@@ -3956,10 +3966,30 @@
 						</tr>
 					</table>
 				</div>';
-			echo $head?'
-				</body>
-			</html>':'';
+			$errorMessage .= $head ?
+					'
+					</body>
+				</html>'
+				:
+				'';
+		}
+
+			// Hook to modify the error message.
+		if 
(is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['typo3PrintError'])) 
{
+			$params = array(
+				'header' => $header,
+				'text' => $text,
+				'js' => $js,
+				'head' => $head,
+				'errorMessage' => &$errorMessage
+			);
+			$null = null;
+			foreach 
($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['typo3PrintError'] 
as $hookMethod) {
+				t3lib_div::callUserFunction($hookMethod, $params, $null);
+			}
 		}
+
+		echo $errorMessage;
 	}

 	/** 


begin 666 11471_hook-error-message.patch
M26YD97 at Z('0S;&EB+V-L87-S+G0S;&EB7V)E9G5N8RYP:' -"CT]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T-"BTM+2!T,VQI8B]C;&%S<RYT,VQI8E]B969U;F,N
M<&AP"2AR979I<VEO;B U-S0S*0T**RLK('0S;&EB+V-L87-S+G0S;&EB7V)E
M9G5N8RYP:' )*'=O<FMI;F<@8V]P>2D-"D! ("TS.3(U+#(P("LS.3(U+#,P
M($! #0H@"2 J+PH@"7!U8FQI8R!S=&%T:6, at 9G5N8W1I;VX@='EP;S-0<FEN
M=$5R<F]R*"1H96%D97(L("1T97AT+" D:G,@/2 G)RP@)&AE860@/2 Q*2![
M"B )"0DO+R!4:&ES('!R:6YT<R!O=70 at 82!465!/,R!E<G)O<B!M97-S86=E
M+ at HM"0D)+R\@268@)&IS(&ES('-E="!T:&4@;65S<V%G92!W:6QL(&)E(&]U
M='!U="!I;B!*879A4V-R:7!T"BL)"0DO+R!)9B D:G,@:7,@<V5T+"!T:&4@
M;65S<V%G92!W:6QL(&)E(&]U='!U="!I;B!*879A4V-R:7!T+ at H@"0EI9B H
M)&IS*2!["BT)"0EE8VAO(")A;&5R="@G(BYT,VQI8E]D:78Z.G-L87-H2E,H
M)&AE861E<BXG7&XG+B1T97AT*2XB)RD[(CL**PD)"21E<G)O<DUE<W-A9V4@
M/2 G86QE<G0H7"<G("X@=#-L:6)?9&EV.CIS;&%S:$I3*"1H96%D97(@+B G
M7&XG("X@)'1E>'0I("X@)UPG*3LG.PH@"0E](&5L<V4@>PHM"0D)96-H;R D
M:&5A9#\G/&AT;6P^"BL)"0DD97)R;W)-97-S86=E(#T@)&AE860@/PHK"0D)
M)SQH=&UL/@H@"0D)"3QH96%D/@H@"0D)"0D\=&ET;&4^17)R;W(A/"]T:71L
M93X*( D)"0D\+VAE860^"BT)"0D)/&)O9'D at 8F=C;VQO<CTB=VAI=&4B('1O
M<&UA<F=I;CTB,"(@;&5F=&UA<F=I;CTB,"(@;6%R9VEN=VED=&@](C B(&UA
M<F=I;FAE:6=H=#TB,"(^)SHG)SL*+0D)"65C:&\@)SQD:78 at 86QI9VX](F-E
M;G1E<B(^"BL)"0D)/&)O9'D at 8F=C;VQO<CTB=VAI=&4B('1O<&UA<F=I;CTB
M,"(@;&5F=&UA<F=I;CTB,"(@;6%R9VEN=VED=&@](C B(&UA<F=I;FAE:6=H
M=#TB,"(^)PHK"0D)"3H**PD)"0DG)SL**PD)"21E<G)O<DUE<W-A9V4 at +CT@
M)SQD:78 at 86QI9VX](F-E;G1E<B(^"B )"0D)"3QT86)L92!B;W)D97(](C B
M(&-E;&QS<&%C:6YG/2(P(B!C96QL<&%D9&EN9STB,"(@=VED=&@](C,S,R(^
M"B )"0D)"0D\='(^"B )"0D)"0D)/'1D(&%L:6=N/2)C96YT97(B/B<N"BT)
M"0D)"0D)"2 at D1TQ/0D%,4ULG5$)%7U-464Q%4R==6R=L;V=O7VQO9VEN)UT_
M)SQI;6<@<W)C/2(G+B1'3$]"04Q36R="04-+7U!!5$@G72XD1TQ/0D%,4ULG
M5$)%7U-464Q%4R==6R=L;V=O7VQO9VEN)UTN)R(@86QT/2(B("\^)SHG/&EM
M9R!S<F,](B<N)$=,3T)!3%-;)T)!0TM?4$%42"==+B=G9G at O='EP;S-L;V=O
M+F=I9B(@=VED=&@](C$R,R(@:&5I9VAT/2(S-"(@=G-P86-E/2(Q,"(@+SXG
M*2X**PD)"0D)"0D)*"1'3$]"04Q36R=40D5?4U193$53)UU;)VQO9V]?;&]G
M:6XG72 _"BL)"0D)"0D)"0DG/&EM9R!S<F,](B<@+ at HK"0D)"0D)"0D))$=,
M3T)!3%-;)T)!0TM?4$%42"==("X@)$=,3T)!3%-;)U1"15]35%E,15,G75LG
M;&]G;U]L;V=I;B==("X**PD)"0D)"0D)"2<B(&%L=#TB(B O/B<@"BL)"0D)
M"0D)"0DZ"BL)"0D)"0D)"0DG/&EM9R!S<F,](B<@+B D1TQ/0D%,4ULG0D%#
M2U]0051()UT at +@HK"0D)"0D)"0D))V=F>"]T>7!O,VQO9V\N9VEF(B!W:61T
M:#TB,3(S(B!H96EG:'0](C,T(B!V<W!A8V4](C$P(B!A;'0](B(@+SXG"BL)
M"0D)"0D)"2D at +@H@"0D)"0D)"2<\+W1D/@H@"0D)"0D)/"]T<CX*( D)"0D)
M"3QT<CX*0$ @+3,Y-#8L.2 K,SDU-BPY($! #0H@"0D)"0D)"0D\=&%B;&4@
M=VED=&@](C$P,"4B(&)O<F1E<CTB,"(@8V5L;'-P86-I;F<](C$B(&-E;&QP
M861D:6YG/2(Q,"(^"B )"0D)"0D)"0D\='(^"B )"0D)"0D)"0D)/'1D(&)G
M8V]L;W(](B-&-$8P13 at B/@HM"0D)"0D)"0D)"0D\9F]N="!F86-E/2)V97)D
M86YA+&%R:6%L+&AE;'9E=&EC82(@<VEZ93TB,B(^)SL*+0D)"65C:&\@)SQB
M/CQC96YT97(^/&9O;G0@<VEZ93TB*S$B/B<N)&AE861E<BXG/"]F;VYT/CPO
M8V5N=&5R/CPO8CX\8G(@+SXG+B1T97AT.PHM"0D)96-H;R G"0D)"0D)"3PO
M9F]N=#X**PD)"0D)"0D)"0D)/&9O;G0 at 9F%C93TB=F5R9&%N82QA<FEA;"QH
M96QV971I8V$B('-I>F4](C(B/B<@+B B7&XB.PHK"0D))&5R<F]R365S<V%G
M92 N/2 G/&(^/&-E;G1E<CX\9F]N="!S:7IE/2(K,2(^)R N("1H96%D97(@
M+B G/"]F;VYT/CPO8V5N=&5R/CPO8CX\8G(@+SXG("X@)'1E>'0["BL)"0DD
M97)R;W)-97-S86=E("X]("<)"0D)"0D)"0D)/"]F;VYT/@H@"0D)"0D)"0D)
M"3PO=&0^"B )"0D)"0D)"0D\+W1R/@H@"0D)"0D)"0D\+W1A8FQE/@I 0" M
M,SDU-BPQ," K,SDV-BPS,"! 0 T*( D)"0D)"3PO='(^"B )"0D)"3PO=&%B
M;&4^"B )"0D)/"]D:78^)SL*+0D)"65C:&\@)&AE860_)PHM"0D)"3PO8F]D
M>3X*+0D)"3PO:'1M;#XG.B<G.PHK"0D))&5R<F]R365S<V%G92 N/2 D:&5A
M9" _"BL)"0D)"2<**PD)"0D)/"]B;V1Y/@HK"0D)"3PO:'1M;#XG"BL)"0D)
M. at HK"0D)"2<G.PHK"0E]"BL)"0HK"0D)+R\@2&]O:R!T;R!M;V1I9GD@=&AE
M(&5R<F]R(&UE<W-A9V4N"BL)"6EF("AI<U]A<G)A>2 at D1TQ/0D%,4ULG5%E0
M3S-?0T].1E]605)3)UU;)U-#7T]05$E/3E,G75LG=#-L:6(O8VQA<W,N=#-L
M:6)?8F5F=6YC+G!H<"==6R=T>7!O,U!R:6YT17)R;W(G72DI('L**PD)"21P
M87)A;7,@/2!A<G)A>2@**PD)"0DG:&5A9&5R)R ]/B D:&5A9&5R+ HK"0D)
M"2=T97AT)R ]/B D=&5X="P**PD)"0DG:G,G(#T^("1J<RP**PD)"0DG:&5A
M9"<@/3X@)&AE860L"BL)"0D))V5R<F]R365S<V%G92<@/3X@)B1E<G)O<DUE
M<W-A9V4**PD)"2D["BL)"0DD;G5L;" ](&YU;&P["BL)"0EF;W)E86-H("@D
M1TQ/0D%,4ULG5%E03S-?0T].1E]605)3)UU;)U-#7T]05$E/3E,G75LG=#-L
M:6(O8VQA<W,N=#-L:6)?8F5F=6YC+G!H<"==6R=T>7!O,U!R:6YT17)R;W(G
M72!A<R D:&]O:TUE=&AO9"D@>PHK"0D)"70S;&EB7V1I=CHZ8V%L;%5S97)&
M=6YC=&EO;B at D:&]O:TUE=&AO9"P@)'!A<F%M<RP@)&YU;&PI.PHK"0D)?0H@
I"0E]"BL**PD)96-H;R D97)R;W)-97-S86=E.PH@"7T*( H@"2\J*@H`
`
end

begin 666 11471-demo.t3x
M,C4X-#4Q-CAE.#-E-S%E9F-D9#@V-C$P-F(P83-C9F4Z9WIC;VUP<F5S<SIX
MG(U636@;1Q16:2AX at T/HJ=#+9#&1G2:R]T\KK1P%U[&#J6V9RBT)(2RSL[/2
MX-7N=F<56S7*J?206R\]]91[SKVT4&@H%'IH[J6WTENA]%!Z2M_,[CJ2_V+9
M2+/OS;SWS7O?]R3L6,XA=^J.2@^RC^A(;7&PJ)IFVII8VXZZMN6N=K;7U19V
M=%UL!G_&LI *O[[DJ%NQSX(1HFD:IVA .<<]Z=,T1_4I)RE+,A9'P at 2[Q4?#
M40G.:"].1T42>H '21X2L.!AUH_3,L9J/V4\BY,^S4UZN<&E`\S"B;B&H_+^
M:,(@]OHTH9%/(\(HGW U`4,<!2$C&9^&EJ0L3EDV&0<P#6)_F ,L;% &GL$M
M"C^LO=P/(5B4T33"X3$HPR2,L1_$H2^NPIPE80<_22D$NLO2222:(9-":5T9
M>LH'"4E(<;J*29]VHDT(6P:$]&%,]G9'R21:S3RJ&HD'"8XFKP<->$Q37C0)
M+K94@[^R_E FGJ48[L0%"0S!`;NLJS0M.8?CXQ4MK0"'#WL]RE\;3[<"F2""
M._ M]S$.AY2[^WT:N2'FF;L/_<AHE"."W 4*W1)EP)S7L at -7<M;U:#",2"WI
M)V(S7%JK!T99?^"XRP!CK<>"TNWY1+KMW VEPZ&XQD0(7Z.ZVAK#OWP<,$ZD
M&@0$>6F?ABP2#6*.;K2.C-XHRXV6V6SEE\XHZ6]$02S.FZ7RA'!D&33G,.]A
M'<S;,;J_NKG2[2(6D7 HNH-$5!3$P\@'(PI82-$Y!2@!;W?CO2G XD2$!W0J
MIR9T/1U%!A \E"=$NA.GWM""<<X+6=401SVUM9WS39ZA_ ((QI*1ZQN;:]TC
M^KTA*X8,A_+J.=Z+,86SSZELH6GD*AAD;" MFFXV-=VPFW:A2\9=>D#)L-!\
M#M^6_ >:9C*C"?N6[T#X6656D;G1L=SH<%:9$0LQ'E$V2F)C)P69K0E"S%^?
M2W"*!_PFNCZ7TH"F,,+H at C@#IV8*Y\.J9,]6/G6KC]!M5%TF5(R?]G(`:)"X
MU6WU`UUM+WLI6FSO]BGJQ_$>8ASMQ^D>BWK7<D_Q+DZURQA55!/9SDK7`I?$
M,YY5QF)QIZVV3HI"TU^/$E$?(7(YK_5<GX9%#>P;5D/W"*R"P+;\NF]CZN%&
MSL$3XL6 at G.D6GR'PLJO0PY-=K5OVDM4T+]Y5...H]S;6&TW\;N5JY5E%O%Z]
M>O7-L^?__O,G+"KEZ]I_E]ZJ5"Y5;HH'L;?R]LJ\\MN5IU=??OG]MQM/6^^\
M_^LG;B/]8^Y)/WCRRWMM[;N%W=G+^W]97_WLO?CA[R]N77YQ\.+EUS_]?N/'
M\,J#S87G-S8JE99Z3B5AE!$;!UI0U[!E&B8U"2;U0">>42>ZGU?R]#EW4C'G
M#<2RIL92_72E6(WFQ6L*40JE*"Q \]=\&@!Q?#2O[C[8Z1CN5N?NFKH`S%=F
M?$;!O$(($!#!=SJC?DU=:"EC14GI9T.64C<&E<QG1L@\2)QM]0:.`Y\[..O/
M5Z7XJ at NHAJIG#H,JA%,6%U$AT40(LOAM(V2CS-W;['RXLME%#ZLY//'CR/UT
MY>-N]='#:G?5[>SL;G2VY9.$L5BDDI F\@C_M.3!) 5\#-6M]O%]+="9<JK0
DM+/I(;[%;+]N$&):G at T$UAJ-IN%IV/"H%YBF&+7C_P%H<R/\
`
end



More information about the TYPO3-team-core mailing list