@@ -126,6 +126,9 @@ abstract class Presenter extends Control implements Application\IPresenter
126126 /** @var ITemplateFactory */
127127 private $ templateFactory ;
128128
129+ /** @var Application\IRequestStorage */
130+ private $ requestStorage ;
131+
129132
130133 public function __construct ()
131134 {
@@ -1073,14 +1076,10 @@ protected function handleInvalidLink(InvalidLinkException $e)
10731076 */
10741077 public function storeRequest ($ expiration = '+ 10 minutes ' )
10751078 {
1076- $ session = $ this ->getSession ('Nette.Application/requests ' );
1077- do {
1078- $ key = Nette \Utils \Random::generate (5 );
1079- } while (isset ($ session [$ key ]));
1080-
1081- $ session [$ key ] = array ($ this ->getUser ()->getId (), $ this ->request );
1082- $ session ->setExpiration ($ expiration , $ key );
1083- return $ key ;
1079+ if (!$ this ->requestStorage ) {
1080+ throw new Nette \InvalidStateException ('Service IRequestStorage has not been set. ' );
1081+ }
1082+ return $ this ->requestStorage ->store ($ this ->request , $ this ->httpRequest ->getUrl (), $ expiration );
10841083 }
10851084
10861085
@@ -1091,17 +1090,11 @@ public function storeRequest($expiration = '+ 10 minutes')
10911090 */
10921091 public function restoreRequest ($ key )
10931092 {
1094- $ session = $ this ->getSession ('Nette.Application/requests ' );
1095- if (!isset ($ session [$ key ]) || ($ session [$ key ][0 ] !== NULL && $ session [$ key ][0 ] !== $ this ->getUser ()->getId ())) {
1096- return ;
1093+ if (!$ this ->requestStorage ) {
1094+ throw new Nette \InvalidStateException ('Service IRequestStorage has not been set. ' );
1095+ } elseif ($ url = $ this ->requestStorage ->getUrl ($ key )) {
1096+ $ this ->redirectUrl ($ url );
10971097 }
1098- $ request = clone $ session [$ key ][1 ];
1099- unset($ session [$ key ]);
1100- $ request ->setFlag (Application \Request::RESTORED , TRUE );
1101- $ params = $ request ->getParameters ();
1102- $ params [Http \Session::FLASH_KEY ] = $ this ->getSession ()->getFlashId ();
1103- $ request ->setParameters ($ params );
1104- $ this ->sendResponse (new Responses \ForwardResponse ($ request ));
11051098 }
11061099
11071100
@@ -1298,7 +1291,8 @@ public function getFlashSession()
12981291
12991292
13001293 public function injectPrimary (Nette \DI \Container $ context = NULL , Nette \Application \IPresenterFactory $ presenterFactory = NULL , Nette \Application \IRouter $ router = NULL ,
1301- Http \IRequest $ httpRequest , Http \IResponse $ httpResponse , Http \Session $ session = NULL , Nette \Security \User $ user = NULL , ITemplateFactory $ templateFactory = NULL )
1294+ Http \IRequest $ httpRequest , Http \IResponse $ httpResponse , Http \Session $ session = NULL , Nette \Security \User $ user = NULL , ITemplateFactory $ templateFactory = NULL ,
1295+ Application \IRequestStorage $ requestStorage = NULL )
13021296 {
13031297 if ($ this ->presenterFactory !== NULL ) {
13041298 throw new Nette \InvalidStateException ("Method " . __METHOD__ . " is intended for initialization and should not be called more than once. " );
@@ -1312,6 +1306,7 @@ public function injectPrimary(Nette\DI\Container $context = NULL, Nette\Applicat
13121306 $ this ->session = $ session ;
13131307 $ this ->user = $ user ;
13141308 $ this ->templateFactory = $ templateFactory ;
1309+ $ this ->requestStorage = $ requestStorage ;
13151310 }
13161311
13171312
0 commit comments