Index: branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php =================================================================== diff -u -r6873 -r6878 --- branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 6873) +++ branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 6878) @@ -180,7 +180,7 @@ if($ret) return $ret; // recall selected ids array and use the first one - $ids=$this->Application->GetVar($event->getPrefixSpecial().'_selected_ids'); + $ids = $this->Application->GetVar($event->getPrefixSpecial().'_selected_ids'); if ($ids != '') { $ids=explode(',',$ids); if($ids) $ret=array_shift($ids); @@ -199,10 +199,21 @@ * id passed in get/post as prefix_id * * @param kEvent $event + * @param Array $ids + * * @return Array ids stored */ - function StoreSelectedIDs(&$event) + 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: ? @@ -228,8 +239,8 @@ $ret = array_unique(array_merge($ret, $ids)); - $this->Application->SetVar($event->getPrefixSpecial().'_selected_ids',implode(',',$ret)); - $this->Application->LinkVar($event->getPrefixSpecial().'_selected_ids'); + $this->Application->SetVar($event->getPrefixSpecial().'_selected_ids', implode(',',$ret)); + $this->Application->LinkVar($event->getPrefixSpecial().'_selected_ids', $session_name); // This is critical - otherwise getPassedID will return last ID stored in session! (not exactly true) // this smells... needs to be refactored @@ -248,11 +259,21 @@ * Returns stored selected ids as an array * * @param kEvent $event + * @param bool $from_session return ids from session (written, when editing was started) * @return array */ - function getSelectedIDs(&$event) + function getSelectedIDs(&$event, $from_session = false) { - return explode(',', $this->Application->GetVar($event->getPrefixSpecial().'_selected_ids')); + if ($from_session) { + $wid = $this->Application->GetTopmostWid($event->Prefix); + $var_name = rtrim($event->getPrefixSpecial().'_selected_ids_'.$wid, '_'); + $ret = $this->Application->RecallVar($var_name); + } + else { + $ret = $this->Application->GetVar($event->getPrefixSpecial().'_selected_ids'); + } + + return explode(',', $ret); } /** @@ -278,10 +299,14 @@ function clearSelectedIDs(&$event) { $prefix_special = $event->getPrefixSpecial(); - $ids = $this->Application->RecallVar($prefix_special.'_selected_ids'); + + $ids = implode(',', $this->getSelectedIDs($event, true)); $event->setEventParam('ids', $ids); - - $this->Application->RemoveVar($prefix_special.'_selected_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', ''); $this->Application->SetVar($prefix_special.'_id', ''); // $event->getPrefixSpecial(true).'_id' too may be @@ -1015,9 +1040,9 @@ $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); - $this->StoreSelectedIDs($event); + $ids = $this->StoreSelectedIDs($event); - $event->setEventParam('ids', $this->getSelectedIDs($event) ); + $event->setEventParam('ids', $ids); $this->customProcessing($event, 'before'); $ids = $event->getEventParam('ids'); @@ -1050,8 +1075,8 @@ */ function OnEdit(&$event) { - $this->StoreSelectedIDs($event); $this->setTempWindowID($event); + $this->StoreSelectedIDs($event); $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); /* @var $temp kTempTablesHandler */ @@ -1079,7 +1104,7 @@ if ($live_ids) { // ensure, that newly created item ids are avalable as if they were selected from grid // NOTE: only works if main item has subitems !!! - $this->Application->StoreVar($event->getPrefixSpecial().'_selected_ids', implode(',', $live_ids)); + $this->StoreSelectedIDs($event, $live_ids); } } $this->clearSelectedIDs($event); @@ -1220,8 +1245,8 @@ */ function OnPreCreate(&$event) { - $this->clearSelectedIDs($event); $this->setTempWindowID($event); + $this->clearSelectedIDs($event); $object =& $event->getObject( Array('skip_autoload' => true) ); Index: branches/unlabeled/unlabeled-1.2.2/core/units/images/image_event_handler.php =================================================================== diff -u -r6786 -r6878 --- branches/unlabeled/unlabeled-1.2.2/core/units/images/image_event_handler.php (.../image_event_handler.php) (revision 6786) +++ branches/unlabeled/unlabeled-1.2.2/core/units/images/image_event_handler.php (.../image_event_handler.php) (revision 6878) @@ -206,9 +206,7 @@ $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); - $this->StoreSelectedIDs($event); - - $event->setEventParam('ids', $this->getSelectedIDs($event) ); + $event->setEventParam('ids', $this->StoreSelectedIDs($event) ); $this->customProcessing($event, 'before'); $ids = $event->getEventParam('ids'); Index: branches/unlabeled/unlabeled-1.2.2/kernel/units/images/image_event_handler.php =================================================================== diff -u -r6786 -r6878 --- branches/unlabeled/unlabeled-1.2.2/kernel/units/images/image_event_handler.php (.../image_event_handler.php) (revision 6786) +++ branches/unlabeled/unlabeled-1.2.2/kernel/units/images/image_event_handler.php (.../image_event_handler.php) (revision 6878) @@ -206,9 +206,7 @@ $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); - $this->StoreSelectedIDs($event); - - $event->setEventParam('ids', $this->getSelectedIDs($event) ); + $event->setEventParam('ids', $this->StoreSelectedIDs($event) ); $this->customProcessing($event, 'before'); $ids = $event->getEventParam('ids'); Index: branches/unlabeled/unlabeled-1.27.2/core/units/admin/admin_tag_processor.php =================================================================== diff -u -r6867 -r6878 --- branches/unlabeled/unlabeled-1.27.2/core/units/admin/admin_tag_processor.php (.../admin_tag_processor.php) (revision 6867) +++ branches/unlabeled/unlabeled-1.27.2/core/units/admin/admin_tag_processor.php (.../admin_tag_processor.php) (revision 6878) @@ -546,7 +546,7 @@ function UsePopups($params) { - return true; + return false; } } Index: branches/unlabeled/unlabeled-1.68.4/core/kernel/db/db_tag_processor.php =================================================================== diff -u -r6873 -r6878 --- branches/unlabeled/unlabeled-1.68.4/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 6873) +++ branches/unlabeled/unlabeled-1.68.4/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 6878) @@ -1082,7 +1082,10 @@ function NextId($params) { $object =& $this->getObject($params); - $ids = explode(',', $this->Application->RecallVar($this->getPrefixSpecial().'_selected_ids')); + + $wid = $this->Application->GetTopmostWid($this->Prefix); + $session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_'); + $ids = explode(',', $this->Application->RecallVar($session_name)); $cur_id = $object->GetID(); @@ -1096,7 +1099,10 @@ function PrevId($params) { $object =& $this->getObject($params); - $ids = explode(',', $this->Application->RecallVar($this->getPrefixSpecial().'_selected_ids')); + + $wid = $this->Application->GetTopmostWid($this->Prefix); + $session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_'); + $ids = explode(',', $this->Application->RecallVar($session_name)); $cur_id = $object->GetID(); @@ -1586,7 +1592,10 @@ function MultipleEditing($params) { - $selected_ids = $this->Application->RecallVar($this->getPrefixSpecial().'_selected_ids'); + $wid = $this->Application->GetTopmostWid($this->Prefix); + $session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_'); + $selected_ids = explode(',', $this->Application->RecallVar($session_name)); + $ret = ''; if ($selected_ids) { $selected_ids = explode(',', $selected_ids); Index: branches/unlabeled/unlabeled-1.28.2/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -r6793 -r6878 --- branches/unlabeled/unlabeled-1.28.2/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 6793) +++ branches/unlabeled/unlabeled-1.28.2/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 6878) @@ -82,7 +82,9 @@ $items_info = $this->Application->GetVar('u'); if ($items_info) { $user_id = array_shift( array_keys($items_info) ); - + + $selected_ids = $this->getSelectedIDs($event, true); + $ids = $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids'); $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); Index: branches/unlabeled/unlabeled-1.9.2/core/units/category_items/category_items_event_handler.php =================================================================== diff -u -r6628 -r6878 --- branches/unlabeled/unlabeled-1.9.2/core/units/category_items/category_items_event_handler.php (.../category_items_event_handler.php) (revision 6628) +++ branches/unlabeled/unlabeled-1.9.2/core/units/category_items/category_items_event_handler.php (.../category_items_event_handler.php) (revision 6878) @@ -24,8 +24,8 @@ function OnSetPrimary(&$event) { $object =& $event->getObject( Array('skip_autoload' => true) ); - $this->StoreSelectedIDs($event); - $ids=$this->getSelectedIDs($event); + $ids = $this->StoreSelectedIDs($event); + if($ids) { $id = array_shift($ids); Index: branches/unlabeled/unlabeled-1.25.2/core/units/categories/categories_event_handler.php =================================================================== diff -u -r6862 -r6878 --- branches/unlabeled/unlabeled-1.25.2/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 6862) +++ branches/unlabeled/unlabeled-1.25.2/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 6878) @@ -36,7 +36,7 @@ $selected_ids = implode(',', $this->StoreSelectedIDs($event)); } else { - $selected_ids = $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids'); + $selected_ids = implode(',', $this->getSelectedIDs($event, true)); } $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); Index: branches/unlabeled/unlabeled-1.68.2/core/units/general/cat_event_handler.php =================================================================== diff -u -r6842 -r6878 --- branches/unlabeled/unlabeled-1.68.2/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 6842) +++ branches/unlabeled/unlabeled-1.68.2/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 6878) @@ -55,7 +55,7 @@ $selected_ids = implode(',', $this->StoreSelectedIDs($event)); } else { - $selected_ids = $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids'); + $selected_ids = implode(',', $this->getSelectedIDs($event, true)); } $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); @@ -1341,8 +1341,7 @@ $selected_ids = $this->Application->GetVar($selector_name); } else { - $this->StoreSelectedIDs($event); - $selected_ids = $this->getSelectedIDs($event); + $selected_ids = $this->StoreSelectedIDs($event); if (implode(',', $selected_ids) == '') { // K4 fix when no ids found bad selected ids array is formed @@ -1605,9 +1604,10 @@ // 5. substitute id of item being cloned with clone id $this->Application->SetVar($event->getPrefixSpecial().'_id', $cloned_ids[0]); - $selected_ids = explode(',', $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids')); + + $selected_ids = $this->getSelectedIDs($event, true); $selected_ids[ array_search($object->GetID(), $selected_ids) ] = $cloned_ids[0]; - $this->Application->StoreVar($event->getPrefixSpecial().'_selected_ids', implode(',', $selected_ids)); + $this->StoreSelectedIDs($event, $selected_ids); // 6. delete original item from temp table $temp_handler->DeleteItems($event->Prefix, $event->Special, Array($object->GetID()));