@@ -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 {
@@ -1077,14 +1080,10 @@ protected function handleInvalidLink(InvalidLinkException $e)
10771080 */
10781081 public function storeRequest ($ expiration = '+ 10 minutes ' )
10791082 {
1080- $ session = $ this ->getSession ('Nette.Application/requests ' );
1081- do {
1082- $ key = Nette \Utils \Random::generate (5 );
1083- } while (isset ($ session [$ key ]));
1084-
1085- $ session [$ key ] = [$ this ->getUser ()->getId (), $ this ->request ];
1086- $ session ->setExpiration ($ expiration , $ key );
1087- return $ key ;
1083+ if (!$ this ->requestStorage ) {
1084+ throw new Nette \InvalidStateException ('Service IRequestStorage has not been set. ' );
1085+ }
1086+ return $ this ->requestStorage ->store ($ this ->request , $ this ->httpRequest ->getUrl (), $ expiration );
10881087 }
10891088
10901089
@@ -1095,17 +1094,11 @@ public function storeRequest($expiration = '+ 10 minutes')
10951094 */
10961095 public function restoreRequest ($ key )
10971096 {
1098- $ session = $ this ->getSession ('Nette.Application/requests ' );
1099- if (!isset ($ session [$ key ]) || ($ session [$ key ][0 ] !== NULL && $ session [$ key ][0 ] !== $ this ->getUser ()->getId ())) {
1100- return ;
1097+ if (!$ this ->requestStorage ) {
1098+ throw new Nette \InvalidStateException ('Service IRequestStorage has not been set. ' );
1099+ } elseif ($ url = $ this ->requestStorage ->getUrl ($ key )) {
1100+ $ this ->redirectUrl ($ url );
11011101 }
1102- $ request = clone $ session [$ key ][1 ];
1103- unset($ session [$ key ]);
1104- $ request ->setFlag (Application \Request::RESTORED , TRUE );
1105- $ params = $ request ->getParameters ();
1106- $ params [Http \Session::FLASH_KEY ] = $ this ->getSession ()->getFlashId ();
1107- $ request ->setParameters ($ params );
1108- $ this ->sendResponse (new Responses \ForwardResponse ($ request ));
11091102 }
11101103
11111104
@@ -1303,7 +1296,8 @@ public function getFlashSession()
13031296
13041297
13051298 public function injectPrimary (Nette \DI \Container $ context = NULL , Application \IPresenterFactory $ presenterFactory = NULL , Application \IRouter $ router = NULL ,
1306- Http \IRequest $ httpRequest , Http \IResponse $ httpResponse , Http \Session $ session = NULL , Nette \Security \User $ user = NULL , ITemplateFactory $ templateFactory = NULL )
1299+ Http \IRequest $ httpRequest , Http \IResponse $ httpResponse , Http \Session $ session = NULL , Nette \Security \User $ user = NULL , ITemplateFactory $ templateFactory = NULL ,
1300+ Application \IRequestStorage $ requestStorage = NULL )
13071301 {
13081302 if ($ this ->presenterFactory !== NULL ) {
13091303 throw new Nette \InvalidStateException ("Method " . __METHOD__ . " is intended for initialization and should not be called more than once. " );
@@ -1317,6 +1311,7 @@ public function injectPrimary(Nette\DI\Container $context = NULL, Application\IP
13171311 $ this ->session = $ session ;
13181312 $ this ->user = $ user ;
13191313 $ this ->templateFactory = $ templateFactory ;
1314+ $ this ->requestStorage = $ requestStorage ;
13201315 }
13211316
13221317
0 commit comments