Index: trunk/core/kernel/session/session.php =================================================================== diff -u -N -r4528 -r4626 --- trunk/core/kernel/session/session.php (.../session.php) (revision 4528) +++ trunk/core/kernel/session/session.php (.../session.php) (revision 4626) @@ -190,6 +190,11 @@ unset($this->OriginalData[$var]); } + function GetFromData(&$session, $var) + { + return getArrayValue($this->OriginalData, $var); + } + function GetExpiredSIDs() { $query = ' SELECT '.$this->IDField.' FROM '.$this->TableName.' WHERE '.$this->TimestampField.' > '.adodb_mktime(); @@ -683,6 +688,16 @@ $this->Data->Remove($name); } + /** + * Ignores session varible value set before + * + * @param string $name + */ + function RestoreVar($name) + { + return $this->StoreVar($name, $this->Storage->GetFromData($this, $name)); + } + function GetField($var_name) { return $this->Storage->GetField($this, $var_name); Index: trunk/core/kernel/application.php =================================================================== diff -u -N -r4625 -r4626 --- trunk/core/kernel/application.php (.../application.php) (revision 4625) +++ trunk/core/kernel/application.php (.../application.php) (revision 4626) @@ -695,6 +695,17 @@ } /** + * Restores Session variable to it's db version + * + * @param string $var + */ + function RestoreVar($var) + { + $session =& $this->recallObject('Session'); + return $session->RestoreVar($var); + } + + /** * Deletes kHTTPQuery variable * * @param string $var Index: trunk/core/kernel/event_manager.php =================================================================== diff -u -N -r4625 -r4626 --- trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 4625) +++ trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 4626) @@ -217,8 +217,10 @@ function ProcessRequest() { + $skip_last_template = $this->Application->GetVar('skip_last_template'); + $this->processOpener(); - + // 1. get events from $_POST $events = $this->Application->GetVar('events'); if ($events === false) $events = Array(); @@ -270,10 +272,13 @@ } else { $event->redirect = $event->getEventParam('no_permissions_template'); + // restore stuff, that processOpener() changed + $this->Application->RestoreVar('opener_stack'); + $this->Application->SetVar('skip_last_template', $skip_last_template); + $this->Application->SetVar('m_opener', 's'); // stay, because "no_permission" template is not edit template } - if($event->status==erSUCCESS && ($event->redirect === true || strlen($event->redirect) > 0) ) - { + if ($event->status == erSUCCESS && ($event->redirect === true || strlen($event->redirect) > 0)) { $this->Application->Redirect($event->redirect, $event->redirect_params, null, $event->redirect_script); } } @@ -284,13 +289,12 @@ function processOpener() { - $opener_action=$this->Application->GetVar('m_opener'); - $opener_stack=$this->Application->RecallVar('opener_stack'); - $opener_stack=$opener_stack?unserialize($opener_stack):Array(); - switch($opener_action) - { + $opener_action = $this->Application->GetVar('m_opener'); + $opener_stack = $this->Application->RecallVar('opener_stack'); + $opener_stack = $opener_stack ? unserialize($opener_stack) : Array(); + switch ($opener_action) { case 'r': // "reset" opener stack - $opener_stack=Array(); + $opener_stack = Array(); break; case 'd': // "down/push" new template to opener stack, deeplevel++ @@ -313,10 +317,11 @@ default: // "s/0," stay on same deep level break; } - if ( !$this->Application->GetVar('skip_last_template') ) { - $this->Application->SetVar('m_opener','s'); + + if (!$this->Application->GetVar('skip_last_template')) { + $this->Application->SetVar('m_opener', 's'); } - $this->Application->StoreVar('opener_stack',serialize($opener_stack)); + $this->Application->StoreVar('opener_stack', serialize($opener_stack)); } function registerHook($hookto_prefix, $hookto_special, $hookto_event, $mode, $do_prefix, $do_special, $do_event, $conditional)