Index: branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php =================================================================== diff -u -r7034 -r7040 --- branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 7034) +++ branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 7040) @@ -200,20 +200,20 @@ * * @param kEvent $event * @param Array $ids - * + * * @return Array ids stored */ function StoreSelectedIDs(&$event, $ids = null) { $wid = $this->Application->GetTopmostWid($event->Prefix); $session_name = rtrim($event->getPrefixSpecial().'_selected_ids_'.$wid, '_'); - + if (isset($ids)) { // save ids directly if they given $this->Application->StoreVar($session_name, implode(',', $ids)); return $ids; } - + $ret = Array(); // May be we don't need this part: ? @@ -272,7 +272,7 @@ else { $ret = $this->Application->GetVar($event->getPrefixSpecial().'_selected_ids'); } - + return explode(',', $ret); } @@ -299,13 +299,13 @@ function clearSelectedIDs(&$event) { $prefix_special = $event->getPrefixSpecial(); - + $ids = implode(',', $this->getSelectedIDs($event, true)); $event->setEventParam('ids', $ids); - + $wid = $this->Application->GetTopmostWid($event->Prefix); $session_name = rtrim($prefix_special.'_selected_ids_'.$wid, '_'); - + $this->Application->RemoveVar($session_name); $this->Application->SetVar($prefix_special.'_selected_ids', ''); @@ -344,7 +344,9 @@ // $this->Application->setEvent($event->Prefix_Special, $current_event); $this->Application->setEvent($event->Prefix_Special, ''); - $save_event = $this->UseTempTables($event) && $this->Application->GetTopmostPrefix($event->Prefix) == $event->Prefix ? 'OnSave' : 'OnUpdate'; + $mode_var = $this->GetMode($event); + $mode_processed = $this->Application->processPrefix($mode_var); + $save_event = $mode_var && $mode_processed['prefix'] == $event->Prefix ? 'OnSave' : 'OnUpdate'; $this->Application->SetVar($event->Prefix_Special.'_SaveEvent',$save_event); } @@ -384,7 +386,7 @@ { $object =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); /* @var $object kTempTablesHandler */ - + $object->BuildTables( $event->Prefix, $this->getSelectedIDs($event) ); } @@ -396,26 +398,33 @@ */ function UseTempTables(&$event) { + return $this->GetMode($event) !== false; + } + + function GetMode(&$event) + { $object = &$event->getObject(); $top_prefix = $this->Application->GetTopmostPrefix($event->Prefix); $var_names = Array ( $top_prefix, rtrim($top_prefix.'_'.$event->Special, '_'), rtrim($top_prefix.'.'.$event->Special, '.'), + $event->Prefix, + rtrim($event->Prefix.'_'.$event->Special, '_'), + rtrim($event->Prefix.'.'.$event->Special, '.'), ); $var_names = array_unique($var_names); - + $temp_mode = false; foreach ($var_names as $var_name) { $value = $this->Application->GetVar($var_name.'_mode'); if (substr($value, 0, 1) == 't') { - $temp_mode = true; - break; + return $var_name; } } - - return $temp_mode; + + return false; } /** @@ -523,7 +532,7 @@ { $per_page = $this->Application->GetVar($event->getPrefixSpecial(true).'_PerPage'); $this->Application->StoreVar($event->getPrefixSpecial().'_PerPage', $per_page); - + $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view'); $this->Application->StorePersistentVar($event->getPrefixSpecial().'_PerPage.'.$view_name, $per_page); } @@ -616,12 +625,12 @@ // per-page is stored to persistent session $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view'); $per_page = $this->Application->RecallPersistentVar($event->getPrefixSpecial().'_PerPage.'.$view_name); - + if (!$per_page) { // per-page is stored to current session $per_page = $this->Application->RecallVar($event->getPrefixSpecial().'_PerPage'); } - + if (!$per_page) { if ($config_mapping) { if (!isset($config_mapping['PerPage'])) { @@ -721,7 +730,7 @@ $object =& $event->getObject(); $edit_mark = rtrim($this->Application->GetSID().'_'.$this->Application->GetTopmostWid($event->Prefix), '_'); - + // add search filter $filter_data = $this->Application->RecallVar($event->getPrefixSpecial().'_search_filter'); if ($filter_data) { @@ -1063,11 +1072,11 @@ { $mode = $this->Application->GetVar($event->Prefix.'_mode'); if ($mode == 't') { - $wid = $this->Application->GetVar('m_wid'); + $wid = $this->Application->GetVar('m_wid'); $this->Application->SetVar($event->Prefix.'_mode', 't'.$wid); } } - + /** * Prepare temp tables and populate it * with items selected in the grid @@ -1078,10 +1087,10 @@ { $this->setTempWindowID($event); $this->StoreSelectedIDs($event); - + $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); /* @var $temp kTempTablesHandler */ - + $temp->PrepareEdit(); $event->redirect=false; @@ -1248,7 +1257,7 @@ { $this->setTempWindowID($event); $this->clearSelectedIDs($event); - + $object =& $event->getObject( Array('skip_autoload' => true) ); $temp =& $this->Application->recallObject($event->Prefix.'_TempHandler', 'kTempTablesHandler'); @@ -1571,9 +1580,9 @@ function finalizePopup(&$event) { $event->SetRedirectParam('opener', 'u'); - + /*return ; - + // 2. substitute opener $opener_stack = $this->Application->RecallVar('opener_stack'); $opener_stack = $opener_stack ? unserialize($opener_stack) : Array(); @@ -1987,7 +1996,7 @@ } } } - + /** * Saves changes & changes language * @@ -1996,7 +2005,7 @@ function OnPreSaveAndChangeLanguage(&$event) { $event->CallSubEvent('OnPreSave'); - + if ($event->status == erSUCCESS) { $this->Application->SetVar('m_lang', $this->Application->GetVar('language')); }